blob: ca3d407d75b5d649cba28f2288e6715e5aeb97e1 [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=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000360xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100361linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500362cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100363attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200364libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200366tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100367membarrier=""
Bradd41a75a2011-07-26 23:11:26 -0400368vhost_net="no"
Gonglei042cea22018-03-01 21:46:28 +0800369vhost_crypto="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000370vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100371vhost_vsock="no"
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200372vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400373kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100374hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500375hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800376whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400377rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300378pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100379gprof="no"
380debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100381debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100382sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500383fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100384strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200385tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100386bigendian="no"
387mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000388gcov="no"
389gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100390EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800391DSOSUF=".so"
392LDFLAGS_SHARED="-shared"
393modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100394prefix="/usr/local"
395mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300396datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200397firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300398qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100399bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300400libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400401libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200402includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100403sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300404local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100405confsuffix="/qemu"
406slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100407oss_lib=""
408bsd="no"
409linux="no"
410solaris="no"
411profiler="no"
412cocoa="no"
413softmmu="yes"
414linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100415bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100416blobs="yes"
417pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200418pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200419qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300420trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100421trace_file="trace"
422spice=""
423rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200424smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100425libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200426usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100427opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100428opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000429cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100430avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300431zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700432capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200433lzo=""
434snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100435bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200436lzfse=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400437guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400438guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500439guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300440guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400441vss_win32_sdk=""
442win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100443want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100444libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100445libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100446coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200447coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200448debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400449crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300450seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530451glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400452glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530453glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530454glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530455glusterfs_zerofill="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600456gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200457gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100458tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100459gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100460nettle=""
461gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800462gcrypt_hmac="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100463vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200464virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400465tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100466libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100467live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800468numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800469tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200470jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800471replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700472vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100473bochs="yes"
474cloop="yes"
475dmg="yes"
476qcow1="yes"
477vdi="yes"
478vvfat="yes"
479qed="yes"
480parallels="yes"
481sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300482libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100483docker="no"
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200484debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800485libpmem=""
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200486libudev="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100487
Alex Bennéed75402b2018-04-04 20:27:05 +0100488# cross compilers defaults, can be overridden with --cross-cc-ARCH
489cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100490cross_cc_aarch64_be="$cross_cc_aarch64"
491cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100492cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100493cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100494cross_cc_i386="i386-pc-linux-gnu-gcc"
495cross_cc_cflags_i386=""
Alex Bennéed75402b2018-04-04 20:27:05 +0100496cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100497cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100498
499enabled_cross_compilers=""
500
Peter Maydell898be3e2017-03-21 14:31:57 +0000501supported_cpu="no"
502supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100503bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800504malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000505
aliguoriac0df512008-12-29 17:14:15 +0000506# parse CC options first
507for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200508 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000509 case "$opt" in
510 --cross-prefix=*) cross_prefix="$optarg"
511 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100512 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000513 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400514 --cxx=*) CXX="$optarg"
515 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100516 --source-path=*) source_path="$optarg"
517 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200518 --cpu=*) cpu="$optarg"
519 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100520 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200521 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100522 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100523 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100524 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100525 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200526 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100527 --enable-debug-info) debug_info="yes"
528 ;;
529 --disable-debug-info) debug_info="no"
530 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100531 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
532 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100533 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
534 eval "cross_cc_cflags_${cc_arch}=\$optarg"
535 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100536 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
537 eval "cross_cc_${cc_arch}=\$optarg"
538 ;;
aliguoriac0df512008-12-29 17:14:15 +0000539 esac
540done
aliguoriac0df512008-12-29 17:14:15 +0000541# OS specific
542# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100543# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000544
Peter Maydelle49d0212012-12-07 15:39:13 +0000545# Preferred compiler:
546# ${CC} (if set)
547# ${cross_prefix}gcc (if cross-prefix specified)
548# system compiler
549if test -z "${CC}${cross_prefix}"; then
550 cc="$host_cc"
551else
552 cc="${CC-${cross_prefix}gcc}"
553fi
554
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400555if test -z "${CXX}${cross_prefix}"; then
556 cxx="c++"
557else
558 cxx="${CXX-${cross_prefix}g++}"
559fi
560
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500561ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700562as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700563ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000564cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500565objcopy="${OBJCOPY-${cross_prefix}objcopy}"
566ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800567ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200568nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500569strip="${STRIP-${cross_prefix}strip}"
570windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300571pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
572query_pkg_config() {
573 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
574}
575pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500576sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000577sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000578
Peter Maydell45d285a2013-10-21 21:03:06 +0100579# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
580ARFLAGS="${ARFLAGS-rv}"
581
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200582# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100583# We use -fwrapv to tell the compiler that we require a C dialect where
584# left shift of signed integers is well defined and has the expected
585# 2s-complement style results. (Both clang and gcc agree that it
586# provides these semantics.)
587QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400588QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100589QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200590QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200591QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100592if test "$debug_info" = "yes"; then
593 CFLAGS="-g $CFLAGS"
594 LDFLAGS="-g $LDFLAGS"
595fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200596
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100597# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200598source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100599
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300600# running configure in the source tree?
601# we know that's the case if configure is there.
602if test -f "./configure"; then
603 pwd_is_source_path="y"
604else
605 pwd_is_source_path="n"
606fi
607
aliguoriac0df512008-12-29 17:14:15 +0000608check_define() {
609cat > $TMPC <<EOF
610#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000611#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000612#endif
613int main(void) { return 0; }
614EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200615 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000616}
617
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200618check_include() {
619cat > $TMPC <<EOF
620#include <$1>
621int main(void) { return 0; }
622EOF
623 compile_object
624}
625
John Snow93b25862015-03-25 18:57:37 -0400626write_c_skeleton() {
627 cat > $TMPC <<EOF
628int main(void) { return 0; }
629EOF
630}
631
Peter Maydellbbea4052012-08-14 15:35:34 +0100632if check_define __linux__ ; then
633 targetos="Linux"
634elif check_define _WIN32 ; then
635 targetos='MINGW32'
636elif check_define __OpenBSD__ ; then
637 targetos='OpenBSD'
638elif check_define __sun__ ; then
639 targetos='SunOS'
640elif check_define __HAIKU__ ; then
641 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100642elif check_define __FreeBSD__ ; then
643 targetos='FreeBSD'
644elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
645 targetos='GNU/kFreeBSD'
646elif check_define __DragonFly__ ; then
647 targetos='DragonFly'
648elif check_define __NetBSD__; then
649 targetos='NetBSD'
650elif check_define __APPLE__; then
651 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100652else
Peter Maydell951fedf2017-07-13 16:15:32 +0100653 # This is a fatal error, but don't report it yet, because we
654 # might be going to just print the --help text, or it might
655 # be the result of a missing compiler.
656 targetos='bogus'
657 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100658fi
659
660# Some host OSes need non-standard checks for which CPU to use.
661# Note that these checks are broken for cross-compilation: if you're
662# cross-compiling to one of these OSes then you'll need to specify
663# the correct CPU with the --cpu option.
664case $targetos in
665Darwin)
666 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
667 # run 64-bit userspace code.
668 # If the user didn't specify a CPU explicitly and the kernel says this is
669 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
670 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
671 cpu="x86_64"
672 fi
673 ;;
674SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200675 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100676 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
677 cpu="x86_64"
678 fi
679esac
680
Juan Quintela2ff6b912009-08-03 14:45:55 +0200681if test ! -z "$cpu" ; then
682 # command line argument
683 :
684elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000685 cpu="i386"
686elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700687 if check_define __ILP32__ ; then
688 cpu="x32"
689 else
690 cpu="x86_64"
691 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000692elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000693 if check_define __arch64__ ; then
694 cpu="sparc64"
695 else
696 cpu="sparc"
697 fi
malcfdf7ed92009-01-14 18:39:52 +0000698elif check_define _ARCH_PPC ; then
699 if check_define _ARCH_PPC64 ; then
700 cpu="ppc64"
701 else
702 cpu="ppc"
703 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200704elif check_define __mips__ ; then
705 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200706elif check_define __s390__ ; then
707 if check_define __s390x__ ; then
708 cpu="s390x"
709 else
710 cpu="s390"
711 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000712elif check_define __riscv ; then
713 if check_define _LP64 ; then
714 cpu="riscv64"
715 else
716 cpu="riscv32"
717 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100718elif check_define __arm__ ; then
719 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100720elif check_define __aarch64__ ; then
721 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000722else
Stefan Weil89138852016-05-16 15:10:20 +0200723 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000724fi
725
Peter Maydell359bc952011-12-24 13:07:25 +0000726ARCH=
727# Normalise host CPU name and set ARCH.
728# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000729case "$cpu" in
Alistair Francisc4f80542018-12-19 19:20:19 +0000730 ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000731 cpu="$cpu"
732 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100733 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000734 ;;
bellard7d132992003-03-06 23:23:54 +0000735 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000736 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000737 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100738 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000739 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000740 x86_64|amd64)
741 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000742 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100743 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000744 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100745 armv*b|armv*l|arm)
746 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000747 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100748 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000749 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100750 aarch64)
751 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000752 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100753 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100754 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200755 mips*)
756 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000757 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100758 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200759 ;;
blueswir131422552007-04-16 18:27:06 +0000760 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000761 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100762 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100763 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000764 ;;
bellard7d132992003-03-06 23:23:54 +0000765 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000766 # This will result in either an error or falling back to TCI later
767 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000768 ;;
769esac
Peter Maydell359bc952011-12-24 13:07:25 +0000770if test -z "$ARCH"; then
771 ARCH="$cpu"
772fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200773
bellard7d132992003-03-06 23:23:54 +0000774# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200775
Stacey Sonadfc3e92014-06-08 09:57:22 -0700776# host *BSD for user mode
777HOST_VARIANT_DIR=""
778
bellard7d132992003-03-06 23:23:54 +0000779case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000780MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200781 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100782 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200783 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200784 if check_include dsound.h; then
785 audio_drv_list="dsound"
786 else
787 audio_drv_list=""
788 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000789 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000790;;
ths5c40d2b2007-06-23 16:03:36 +0000791GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100792 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200793 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200794 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000795;;
bellard7d3505c2004-05-12 19:32:15 +0000796FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200797 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100798 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200799 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200800 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100801 # needed for kinfo_getvmmap(3) in libutil.h
802 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500803 # needed for kinfo_getproc
804 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100805 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700806 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000807 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000808;;
blueswir1c5e97232009-03-07 20:06:23 +0000809DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200810 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100811 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200812 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200813 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700814 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000815;;
bellard7d3505c2004-05-12 19:32:15 +0000816NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200817 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100818 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200819 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200820 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200821 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700822 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200823 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000824;;
825OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200826 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100827 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400828 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200829 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700830 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500831 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000832;;
bellard83fb7ad2004-07-05 21:25:26 +0000833Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200834 bsd="yes"
835 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100836 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500837 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800838 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200839 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200840 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200841 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200842 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200843 cocoa="yes"
844 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200845 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200846 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200847 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100848 # Disable attempts to use ObjectiveC features in os/object.h since they
849 # won't work when we're compiling with gcc as a C compiler.
850 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700851 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000852 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000853;;
bellardec530c82006-04-25 22:36:06 +0000854SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200855 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100856 make="${MAKE-gmake}"
857 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400858 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200859 if test -f /usr/include/sys/soundcard.h ; then
860 audio_drv_list="oss"
861 fi
862 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000863# needed for CMSG_ macros in sys/socket.h
864 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
865# needed for TIOCWIN* defines in termios.h
866 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200867 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200868 solarisnetlibs="-lsocket -lnsl -lresolv"
869 LIBS="$solarisnetlibs $LIBS"
870 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000871;;
Andreas Färber179cf402010-09-20 00:50:43 +0200872Haiku)
873 haiku="yes"
874 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
875 LIBS="-lposix_error_mapper -lnetwork $LIBS"
876;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000877Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200878 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200879 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200880 linux="yes"
881 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200882 kvm="yes"
883 vhost_net="yes"
Gonglei042cea22018-03-01 21:46:28 +0800884 vhost_crypto="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000885 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100886 vhost_vsock="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600887 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000888 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200889 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000890;;
bellard7d132992003-03-06 23:23:54 +0000891esac
892
bellard7d3505c2004-05-12 19:32:15 +0000893if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000894 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200895 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000896 fi
bellard7d3505c2004-05-12 19:32:15 +0000897fi
898
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100899: ${make=${MAKE-make}}
900: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100901: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400902: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100903
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100904# Default objcc to clang if available, otherwise use CC
905if has clang; then
906 objcc=clang
907else
908 objcc="$cc"
909fi
910
Juan Quintela3457a3f2009-08-03 14:46:07 +0200911if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200912 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800913 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100914 # MinGW needs -mthreads for TLS and macro _MT.
915 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100916 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400917 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100918 if compile_prog "" "-liberty" ; then
919 LIBS="-liberty $LIBS"
920 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200921 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200922 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300923 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300924 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200925 bindir="\${prefix}"
926 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200927 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200928 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300929 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200930fi
931
Anthony Liguori487fefd2009-06-11 13:28:25 -0500932werror=""
bellard85aa5182007-11-11 20:17:03 +0000933
bellard7d132992003-03-06 23:23:54 +0000934for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200935 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000936 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000937 --help|-h) show_help=yes
938 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400939 --version|-V) exec cat $source_path/VERSION
940 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000941 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000942 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000943 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000944 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100945 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000946 ;;
aliguoriac0df512008-12-29 17:14:15 +0000947 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000948 ;;
aliguoriac0df512008-12-29 17:14:15 +0000949 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000950 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000951 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000952 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400953 --cxx=*)
954 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200955 --iasl=*) iasl="$optarg"
956 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100957 --objcc=*) objcc="$optarg"
958 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000959 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000960 ;;
pbrook6a882642006-04-17 13:57:12 +0000961 --install=*) install="$optarg"
962 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000963 --python=*) python="$optarg"
964 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000965 --gcov=*) gcov_tool="$optarg"
966 ;;
Brade2d88302011-09-02 16:53:28 -0400967 --smbd=*) smbd="$optarg"
968 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200969 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000970 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100971 --extra-cxxflags=*)
972 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200973 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000974 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100975 --enable-debug-info)
976 ;;
977 --disable-debug-info)
978 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100979 --cross-cc-*)
980 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800981 --enable-modules)
982 modules="yes"
983 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000984 --disable-modules)
985 modules="no"
986 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200987 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000988 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000989 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000990 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200991 --enable-trace-backends=*) trace_backends="$optarg"
992 ;;
993 # XXX: backwards compatibility
994 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100995 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100996 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100997 ;;
bellard7d132992003-03-06 23:23:54 +0000998 --enable-gprof) gprof="yes"
999 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001000 --enable-gcov) gcov="yes"
1001 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +01001002 --static)
1003 static="yes"
1004 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001005 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001006 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001007 --mandir=*) mandir="$optarg"
1008 ;;
1009 --bindir=*) bindir="$optarg"
1010 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001011 --libdir=*) libdir="$optarg"
1012 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001013 --libexecdir=*) libexecdir="$optarg"
1014 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001015 --includedir=*) includedir="$optarg"
1016 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001017 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001018 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001019 --with-confsuffix=*) confsuffix="$optarg"
1020 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001021 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001022 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001023 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001024 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001025 --localstatedir=*) local_statedir="$optarg"
1026 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001027 --firmwarepath=*) firmwarepath="$optarg"
1028 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001029 --host=*|--build=*|\
1030 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001031 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001032 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1033 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1034 # These switches are silently ignored, for compatibility with
1035 # autoconf-generated configure scripts. This allows QEMU's
1036 # configure to be used by RPM and similar macros that set
1037 # lots of directory switches by default.
1038 ;;
bellard97a847b2003-08-10 21:36:04 +00001039 --disable-sdl) sdl="no"
1040 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001041 --enable-sdl) sdl="yes"
1042 ;;
Dave Airlie47c03742013-12-10 14:05:51 +10001043 --with-sdlabi=*) sdlabi="$optarg"
1044 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001045 --disable-qom-cast-debug) qom_cast_debug="no"
1046 ;;
1047 --enable-qom-cast-debug) qom_cast_debug="yes"
1048 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301049 --disable-virtfs) virtfs="no"
1050 ;;
1051 --enable-virtfs) virtfs="yes"
1052 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001053 --disable-mpath) mpath="no"
1054 ;;
1055 --enable-mpath) mpath="yes"
1056 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001057 --disable-vnc) vnc="no"
1058 ;;
1059 --enable-vnc) vnc="yes"
1060 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001061 --oss-lib=*) oss_lib="$optarg"
1062 ;;
malc0c58ac12008-06-25 21:04:05 +00001063 --audio-drv-list=*) audio_drv_list="$optarg"
1064 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001065 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001066 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001067 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001068 ;;
aurel32f8393942009-04-13 18:45:38 +00001069 --enable-debug-tcg) debug_tcg="yes"
1070 ;;
1071 --disable-debug-tcg) debug_tcg="no"
1072 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001073 --enable-debug)
1074 # Enable debugging options that aren't excessively noisy
1075 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001076 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001077 debug="yes"
1078 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001079 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001080 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001081 --enable-sanitizers) sanitizers="yes"
1082 ;;
1083 --disable-sanitizers) sanitizers="no"
1084 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001085 --enable-sparse) sparse="yes"
1086 ;;
1087 --disable-sparse) sparse="no"
1088 ;;
aliguori1625af82009-04-05 17:41:02 +00001089 --disable-strip) strip_opt="no"
1090 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001091 --disable-vnc-sasl) vnc_sasl="no"
1092 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001093 --enable-vnc-sasl) vnc_sasl="yes"
1094 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001095 --disable-vnc-jpeg) vnc_jpeg="no"
1096 ;;
1097 --enable-vnc-jpeg) vnc_jpeg="yes"
1098 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001099 --disable-vnc-png) vnc_png="no"
1100 ;;
1101 --enable-vnc-png) vnc_png="yes"
1102 ;;
bellard443f1372004-06-04 11:13:20 +00001103 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001104 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001105 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001106 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001107 --enable-vde) vde="yes"
1108 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001109 --disable-netmap) netmap="no"
1110 ;;
1111 --enable-netmap) netmap="yes"
1112 ;;
aliguorie37630c2009-04-22 15:19:10 +00001113 --disable-xen) xen="no"
1114 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001115 --enable-xen) xen="yes"
1116 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001117 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1118 ;;
1119 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1120 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001121 --disable-brlapi) brlapi="no"
1122 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001123 --enable-brlapi) brlapi="yes"
1124 ;;
balrogfb599c92008-09-28 23:49:55 +00001125 --disable-bluez) bluez="no"
1126 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001127 --enable-bluez) bluez="yes"
1128 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001129 --disable-kvm) kvm="no"
1130 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001131 --enable-kvm) kvm="yes"
1132 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001133 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001134 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001135 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001136 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001137 --disable-hvf) hvf="no"
1138 ;;
1139 --enable-hvf) hvf="yes"
1140 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001141 --disable-whpx) whpx="no"
1142 ;;
1143 --enable-whpx) whpx="yes"
1144 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001145 --disable-tcg-interpreter) tcg_interpreter="no"
1146 ;;
1147 --enable-tcg-interpreter) tcg_interpreter="yes"
1148 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001149 --disable-cap-ng) cap_ng="no"
1150 ;;
1151 --enable-cap-ng) cap_ng="yes"
1152 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001153 --disable-tcg) tcg="no"
1154 ;;
1155 --enable-tcg) tcg="yes"
1156 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001157 --disable-malloc-trim) malloc_trim="no"
1158 ;;
1159 --enable-malloc-trim) malloc_trim="yes"
1160 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001161 --disable-spice) spice="no"
1162 ;;
1163 --enable-spice) spice="yes"
1164 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001165 --disable-libiscsi) libiscsi="no"
1166 ;;
1167 --enable-libiscsi) libiscsi="yes"
1168 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001169 --disable-libnfs) libnfs="no"
1170 ;;
1171 --enable-libnfs) libnfs="yes"
1172 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001173 --enable-profiler) profiler="yes"
1174 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001175 --disable-cocoa) cocoa="no"
1176 ;;
malcc2de5c92008-06-28 19:13:06 +00001177 --enable-cocoa)
1178 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001179 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001180 ;;
pbrookcad25d62006-03-19 16:31:11 +00001181 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001182 ;;
pbrookcad25d62006-03-19 16:31:11 +00001183 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001184 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001185 --disable-user)
1186 linux_user="no" ;
1187 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001188 ;;
1189 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001190 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001191 ;;
ths831b7822007-01-18 20:06:33 +00001192 --enable-linux-user) linux_user="yes"
1193 ;;
blueswir184778502008-10-26 20:33:16 +00001194 --disable-bsd-user) bsd_user="no"
1195 ;;
1196 --enable-bsd-user) bsd_user="yes"
1197 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001198 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001199 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001200 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001201 ;;
bellard85aa5182007-11-11 20:17:03 +00001202 --enable-werror) werror="yes"
1203 ;;
1204 --disable-werror) werror="no"
1205 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001206 --enable-stack-protector) stack_protector="yes"
1207 ;;
1208 --disable-stack-protector) stack_protector="no"
1209 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001210 --disable-curses) curses="no"
1211 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001212 --enable-curses) curses="yes"
1213 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001214 --disable-curl) curl="no"
1215 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001216 --enable-curl) curl="yes"
1217 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001218 --disable-fdt) fdt="no"
1219 ;;
1220 --enable-fdt) fdt="yes"
1221 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001222 --disable-linux-aio) linux_aio="no"
1223 ;;
1224 --enable-linux-aio) linux_aio="yes"
1225 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001226 --disable-attr) attr="no"
1227 ;;
1228 --enable-attr) attr="yes"
1229 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001230 --disable-membarrier) membarrier="no"
1231 ;;
1232 --enable-membarrier) membarrier="yes"
1233 ;;
ths77755342008-11-27 15:45:16 +00001234 --disable-blobs) blobs="no"
1235 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001236 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001237 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001238 --with-coroutine=*) coroutine="$optarg"
1239 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001240 --disable-coroutine-pool) coroutine_pool="no"
1241 ;;
1242 --enable-coroutine-pool) coroutine_pool="yes"
1243 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001244 --enable-debug-stack-usage) debug_stack_usage="yes"
1245 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001246 --enable-crypto-afalg) crypto_afalg="yes"
1247 ;;
1248 --disable-crypto-afalg) crypto_afalg="no"
1249 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001250 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001251 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001252 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001253 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001254 --disable-vhost-net) vhost_net="no"
1255 ;;
1256 --enable-vhost-net) vhost_net="yes"
1257 ;;
Gonglei042cea22018-03-01 21:46:28 +08001258 --disable-vhost-crypto) vhost_crypto="no"
1259 ;;
1260 --enable-vhost-crypto)
1261 vhost_crypto="yes"
1262 if test "$mingw32" = "yes"; then
1263 error_exit "vhost-crypto isn't available on win32"
1264 fi
1265 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001266 --disable-vhost-scsi) vhost_scsi="no"
1267 ;;
1268 --enable-vhost-scsi) vhost_scsi="yes"
1269 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001270 --disable-vhost-vsock) vhost_vsock="no"
1271 ;;
1272 --enable-vhost-vsock) vhost_vsock="yes"
1273 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001274 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001275 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001276 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001277 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001278 --disable-rbd) rbd="no"
1279 ;;
1280 --enable-rbd) rbd="yes"
1281 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001282 --disable-xfsctl) xfs="no"
1283 ;;
1284 --enable-xfsctl) xfs="yes"
1285 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001286 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001287 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001288 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001289 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001290 --disable-libusb) libusb="no"
1291 ;;
1292 --enable-libusb) libusb="yes"
1293 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001294 --disable-usb-redir) usb_redir="no"
1295 ;;
1296 --enable-usb-redir) usb_redir="yes"
1297 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001298 --disable-zlib-test) zlib="no"
1299 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001300 --disable-lzo) lzo="no"
1301 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001302 --enable-lzo) lzo="yes"
1303 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001304 --disable-snappy) snappy="no"
1305 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001306 --enable-snappy) snappy="yes"
1307 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001308 --disable-bzip2) bzip2="no"
1309 ;;
1310 --enable-bzip2) bzip2="yes"
1311 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001312 --enable-lzfse) lzfse="yes"
1313 ;;
1314 --disable-lzfse) lzfse="no"
1315 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001316 --enable-guest-agent) guest_agent="yes"
1317 ;;
1318 --disable-guest-agent) guest_agent="no"
1319 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001320 --enable-guest-agent-msi) guest_agent_msi="yes"
1321 ;;
1322 --disable-guest-agent-msi) guest_agent_msi="no"
1323 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001324 --with-vss-sdk) vss_win32_sdk=""
1325 ;;
1326 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1327 ;;
1328 --without-vss-sdk) vss_win32_sdk="no"
1329 ;;
1330 --with-win-sdk) win_sdk=""
1331 ;;
1332 --with-win-sdk=*) win_sdk="$optarg"
1333 ;;
1334 --without-win-sdk) win_sdk="no"
1335 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001336 --enable-tools) want_tools="yes"
1337 ;;
1338 --disable-tools) want_tools="no"
1339 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001340 --enable-seccomp) seccomp="yes"
1341 ;;
1342 --disable-seccomp) seccomp="no"
1343 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301344 --disable-glusterfs) glusterfs="no"
1345 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001346 --disable-avx2) avx2_opt="no"
1347 ;;
1348 --enable-avx2) avx2_opt="yes"
1349 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301350 --enable-glusterfs) glusterfs="yes"
1351 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001352 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1353 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001354 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001355 --enable-vhdx|--disable-vhdx)
1356 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1357 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001358 --enable-uuid|--disable-uuid)
1359 echo "$0: $opt is obsolete, UUID support is always built" >&2
1360 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001361 --disable-gtk) gtk="no"
1362 ;;
1363 --enable-gtk) gtk="yes"
1364 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001365 --tls-priority=*) tls_priority="$optarg"
1366 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001367 --disable-gnutls) gnutls="no"
1368 ;;
1369 --enable-gnutls) gnutls="yes"
1370 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001371 --disable-nettle) nettle="no"
1372 ;;
1373 --enable-nettle) nettle="yes"
1374 ;;
1375 --disable-gcrypt) gcrypt="no"
1376 ;;
1377 --enable-gcrypt) gcrypt="yes"
1378 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001379 --enable-rdma) rdma="yes"
1380 ;;
1381 --disable-rdma) rdma="no"
1382 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001383 --enable-pvrdma) pvrdma="yes"
1384 ;;
1385 --disable-pvrdma) pvrdma="no"
1386 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001387 --disable-vte) vte="no"
1388 ;;
1389 --enable-vte) vte="yes"
1390 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001391 --disable-virglrenderer) virglrenderer="no"
1392 ;;
1393 --enable-virglrenderer) virglrenderer="yes"
1394 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001395 --disable-tpm) tpm="no"
1396 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001397 --enable-tpm) tpm="yes"
1398 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001399 --disable-libssh2) libssh2="no"
1400 ;;
1401 --enable-libssh2) libssh2="yes"
1402 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001403 --disable-live-block-migration) live_block_migration="no"
1404 ;;
1405 --enable-live-block-migration) live_block_migration="yes"
1406 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001407 --disable-numa) numa="no"
1408 ;;
1409 --enable-numa) numa="yes"
1410 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001411 --disable-libxml2) libxml2="no"
1412 ;;
1413 --enable-libxml2) libxml2="yes"
1414 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001415 --disable-tcmalloc) tcmalloc="no"
1416 ;;
1417 --enable-tcmalloc) tcmalloc="yes"
1418 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001419 --disable-jemalloc) jemalloc="no"
1420 ;;
1421 --enable-jemalloc) jemalloc="yes"
1422 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001423 --disable-replication) replication="no"
1424 ;;
1425 --enable-replication) replication="yes"
1426 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001427 --disable-vxhs) vxhs="no"
1428 ;;
1429 --enable-vxhs) vxhs="yes"
1430 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001431 --disable-bochs) bochs="no"
1432 ;;
1433 --enable-bochs) bochs="yes"
1434 ;;
1435 --disable-cloop) cloop="no"
1436 ;;
1437 --enable-cloop) cloop="yes"
1438 ;;
1439 --disable-dmg) dmg="no"
1440 ;;
1441 --enable-dmg) dmg="yes"
1442 ;;
1443 --disable-qcow1) qcow1="no"
1444 ;;
1445 --enable-qcow1) qcow1="yes"
1446 ;;
1447 --disable-vdi) vdi="no"
1448 ;;
1449 --enable-vdi) vdi="yes"
1450 ;;
1451 --disable-vvfat) vvfat="no"
1452 ;;
1453 --enable-vvfat) vvfat="yes"
1454 ;;
1455 --disable-qed) qed="no"
1456 ;;
1457 --enable-qed) qed="yes"
1458 ;;
1459 --disable-parallels) parallels="no"
1460 ;;
1461 --enable-parallels) parallels="yes"
1462 ;;
1463 --disable-sheepdog) sheepdog="no"
1464 ;;
1465 --enable-sheepdog) sheepdog="yes"
1466 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001467 --disable-vhost-user) vhost_user="no"
1468 ;;
1469 --enable-vhost-user)
1470 vhost_user="yes"
1471 if test "$mingw32" = "yes"; then
1472 error_exit "vhost-user isn't available on win32"
1473 fi
1474 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001475 --disable-capstone) capstone="no"
1476 ;;
1477 --enable-capstone) capstone="yes"
1478 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001479 --enable-capstone=git) capstone="git"
1480 ;;
1481 --enable-capstone=system) capstone="system"
1482 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001483 --with-git=*) git="$optarg"
1484 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001485 --enable-git-update) git_update=yes
1486 ;;
1487 --disable-git-update) git_update=no
1488 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001489 --enable-debug-mutex) debug_mutex=yes
1490 ;;
1491 --disable-debug-mutex) debug_mutex=no
1492 ;;
Junyan He17824402018-07-18 15:47:59 +08001493 --enable-libpmem) libpmem=yes
1494 ;;
1495 --disable-libpmem) libpmem=no
1496 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001497 *)
1498 echo "ERROR: unknown option $opt"
1499 echo "Try '$0 --help' for more information"
1500 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001501 ;;
bellard7d132992003-03-06 23:23:54 +00001502 esac
1503done
1504
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001505if test "$vhost_user" = ""; then
1506 if test "$mingw32" = "yes"; then
1507 vhost_user="no"
1508 else
1509 vhost_user="yes"
1510 fi
1511fi
1512
bellard40293e52008-01-31 11:32:10 +00001513case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001514 ppc)
1515 CPU_CFLAGS="-m32"
1516 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001517 cross_cc_powerpc=$cc
1518 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001519 ;;
1520 ppc64)
1521 CPU_CFLAGS="-m64"
1522 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001523 cross_cc_ppc64=$cc
1524 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001525 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001526 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001527 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1528 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001529 cross_cc_sparc=$cc
1530 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001531 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001532 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001533 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001534 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001535 cross_cc_sparc64=$cc
1536 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001537 ;;
ths76d83bd2007-11-18 21:22:10 +00001538 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001539 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001540 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001541 cross_cc_s390=$cc
1542 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001543 ;;
1544 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001545 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001546 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001547 cross_cc_s390x=$cc
1548 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001549 ;;
bellard40293e52008-01-31 11:32:10 +00001550 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001551 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001552 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001553 cross_cc_i386=$cc
1554 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001555 ;;
1556 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001557 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1558 # If we truly care, we should simply detect this case at
1559 # runtime and generate the fallback to serial emulation.
1560 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001561 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001562 cross_cc_x86_64=$cc
1563 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001564 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001565 x32)
1566 CPU_CFLAGS="-mx32"
1567 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001568 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001569 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001570 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001571 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001572esac
1573
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001574QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001575
Peter Maydellaffc88c2016-06-13 11:32:24 +01001576# For user-mode emulation the host arch has to be one we explicitly
1577# support, even if we're using TCI.
1578if [ "$ARCH" = "unknown" ]; then
1579 bsd_user="no"
1580 linux_user="no"
1581fi
1582
Peter Maydell60e0df22011-05-03 14:50:13 +01001583default_target_list=""
1584
Peter Maydell6e92f822013-05-20 16:16:15 +01001585mak_wilds=""
1586
1587if [ "$softmmu" = "yes" ]; then
1588 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001589fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001590if [ "$linux_user" = "yes" ]; then
1591 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001592fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001593if [ "$bsd_user" = "yes" ]; then
1594 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001595fi
1596
Peter Maydell6e92f822013-05-20 16:16:15 +01001597for config in $mak_wilds; do
1598 default_target_list="${default_target_list} $(basename "$config" .mak)"
1599done
1600
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001601# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001602trace_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 +01001603
pbrookaf5db582006-04-08 14:26:41 +00001604if test x"$show_help" = x"yes" ; then
1605cat << EOF
1606
1607Usage: configure [options]
1608Options: [defaults in brackets after descriptions]
1609
Stefan Weil08fb77e2013-12-18 22:09:39 +01001610Standard options:
1611 --help print this message
1612 --prefix=PREFIX install in PREFIX [$prefix]
1613 --interp-prefix=PREFIX where to find shared libraries, etc.
1614 use %M for cpu name [$interp_prefix]
1615 --target-list=LIST set target list (default: build everything)
1616$(echo Available targets: $default_target_list | \
1617 fold -s -w 53 | sed -e 's/^/ /')
1618
1619Advanced options (experts only):
1620 --source-path=PATH path of source code [$source_path]
1621 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1622 --cc=CC use C compiler CC [$cc]
1623 --iasl=IASL use ACPI compiler IASL [$iasl]
1624 --host-cc=CC use C compiler CC [$host_cc] for code run at
1625 build time
1626 --cxx=CXX use C++ compiler CXX [$cxx]
1627 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1628 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001629 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001630 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001631 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001632 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001633 --make=MAKE use specified make [$make]
1634 --install=INSTALL use specified install [$install]
1635 --python=PYTHON use specified python [$python]
1636 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001637 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001638 --static enable static build [$static]
1639 --mandir=PATH install man pages in PATH
1640 --datadir=PATH install firmware in PATH$confsuffix
1641 --docdir=PATH install documentation in PATH$confsuffix
1642 --bindir=PATH install binaries in PATH
1643 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001644 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001645 --sysconfdir=PATH install config in PATH$confsuffix
1646 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001647 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001648 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001649 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001650 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001651 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001652 --disable-strip disable stripping binaries
1653 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001654 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001655 --audio-drv-list=LIST set audio drivers list:
1656 Available drivers: $audio_possible_drivers
1657 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1658 --block-drv-rw-whitelist=L
1659 set block driver read-write whitelist
1660 (affects only QEMU, not qemu-img)
1661 --block-drv-ro-whitelist=L
1662 set block driver read-only whitelist
1663 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001664 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001665 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001666 --with-trace-file=NAME Full PATH,NAME of file to store traces
1667 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001668 --disable-slirp disable SLIRP userspace network connectivity
1669 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001670 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001671 --oss-lib path to OSS library
1672 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001673 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001674 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001675 --enable-gcov enable test coverage analysis with gcov
1676 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001677 --disable-blobs disable installing provided firmware blobs
1678 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1679 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001680 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001681 --enable-gprof QEMU profiling with gprof
1682 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001683 --enable-debug-stack-usage
1684 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001685
1686Optional features, enabled with --enable-FEATURE and
1687disabled with --disable-FEATURE, default is enabled if available:
1688
1689 system all system emulation targets
1690 user supported user emulation targets
1691 linux-user all linux usermode emulation targets
1692 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001693 docs build documentation
1694 guest-agent build the QEMU Guest Agent
1695 guest-agent-msi build guest agent Windows MSI installation package
1696 pie Position Independent Executables
1697 modules modules support
1698 debug-tcg TCG debugging (default is disabled)
1699 debug-info debugging information
1700 sparse sparse checker
1701
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001702 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001703 nettle nettle cryptography support
1704 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001705 sdl SDL UI
1706 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1707 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001708 vte vte support for the gtk UI
1709 curses curses UI
1710 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001711 vnc-sasl SASL encryption for VNC server
1712 vnc-jpeg JPEG lossy compression for VNC server
1713 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001714 cocoa Cocoa UI (Mac OS X only)
1715 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001716 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001717 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001718 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001719 brlapi BrlAPI (Braile)
1720 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001721 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001722 fdt fdt device tree
1723 bluez bluez stack connectivity
1724 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001725 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001726 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001727 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001728 rdma Enable RDMA-based migration
1729 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001730 vde support for vde network
1731 netmap support for netmap network
1732 linux-aio Linux AIO support
1733 cap-ng libcap-ng support
1734 attr attr and xattr support
1735 vhost-net vhost-net acceleration support
Gonglei042cea22018-03-01 21:46:28 +08001736 vhost-crypto vhost-crypto acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001737 spice spice
1738 rbd rados block device (rbd)
1739 libiscsi iscsi support
1740 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001741 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001742 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001743 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001744 usb-redir usb network redirection support
1745 lzo support of lzo compression library
1746 snappy support of snappy compression library
1747 bzip2 support of bzip2 compression library
1748 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001749 lzfse support of lzfse compression library
1750 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001751 seccomp seccomp support
1752 coroutine-pool coroutine freelist (better performance)
1753 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001754 tpm TPM support
1755 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001756 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001757 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001758 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001759 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001760 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001761 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001762 vhost-vsock virtio sockets device support
1763 opengl opengl support
1764 virglrenderer virgl rendering support
1765 xfsctl xfsctl support
1766 qom-cast-debug cast debugging support
1767 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001768 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001769 bochs bochs image format support
1770 cloop cloop image format support
1771 dmg dmg image format support
1772 qcow1 qcow v1 image format support
1773 vdi vdi image format support
1774 vvfat vvfat image format support
1775 qed qed image format support
1776 parallels parallels image format support
1777 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001778 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001779 vhost-user vhost-user support
Richard Henderson8ca80762017-09-14 09:41:12 -07001780 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001781 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001782 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001783
1784NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001785EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001786exit 0
pbrookaf5db582006-04-08 14:26:41 +00001787fi
1788
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001789if ! has $python; then
1790 error_exit "Python not found. Use --python=/path/to/python"
1791fi
1792
1793# Note that if the Python conditional here evaluates True we will exit
1794# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001795if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1796 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001797 "Use --python=/path/to/python to specify a supported Python."
1798fi
1799
Cleber Rosa755ee702018-11-09 10:07:07 -05001800# Preserve python version since some functionality is dependent on it
1801python_version=$($python -V 2>&1 | sed -e 's/Python\ //')
1802
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001803# Suppress writing compiled files
1804python="$python -B"
1805
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001806# Check that the C compiler works. Doing this here before testing
1807# the host CPU ensures that we had a valid CC to autodetect the
1808# $cpu var (and we should bail right here if that's not the case).
1809# It also allows the help message to be printed without a CC.
1810write_c_skeleton;
1811if compile_object ; then
1812 : C compiler works ok
1813else
1814 error_exit "\"$cc\" either does not exist or does not work"
1815fi
1816if ! compile_prog ; then
1817 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1818fi
1819
Peter Maydell359bc952011-12-24 13:07:25 +00001820# Now we have handled --enable-tcg-interpreter and know we're not just
1821# printing the help message, bail out if the host CPU isn't supported.
1822if test "$ARCH" = "unknown"; then
1823 if test "$tcg_interpreter" = "yes" ; then
1824 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001825 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001826 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001827 fi
1828fi
1829
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001830# Consult white-list to determine whether to enable werror
1831# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001832if test -z "$werror" ; then
1833 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001834 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001835 werror="yes"
1836 else
1837 werror="no"
1838 fi
1839fi
1840
Peter Maydellfb59dab2017-03-28 14:01:52 +01001841if test "$bogus_os" = "yes"; then
1842 # Now that we know that we're not printing the help and that
1843 # the compiler works (so the results of the check_defines we used
1844 # to identify the OS are reliable), if we didn't recognize the
1845 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001846 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001847fi
1848
Thomas Huthefc6c072018-12-03 10:12:32 +01001849# Check whether the compiler matches our minimum requirements:
1850cat > $TMPC << EOF
1851#if defined(__clang_major__) && defined(__clang_minor__)
1852# ifdef __apple_build_version__
1853# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1854# error You need at least XCode Clang v5.1 to compile QEMU
1855# endif
1856# else
1857# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1858# error You need at least Clang v3.4 to compile QEMU
1859# endif
1860# endif
1861#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1862# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1863# error You need at least GCC v4.8 to compile QEMU
1864# endif
1865#else
1866# error You either need GCC or Clang to compiler QEMU
1867#endif
1868int main (void) { return 0; }
1869EOF
1870if ! compile_prog "" "" ; then
1871 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1872fi
1873
Paolo Bonzini8d050952010-12-23 11:43:52 +01001874gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1875gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001876gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001877gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001878gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001879gcc_flags="-Wno-string-plus-int $gcc_flags"
Gerd Hoffmann0e39c4a2018-03-09 14:59:45 +01001880gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001881# Note that we do not add -Werror to gcc_flags here, because that would
1882# enable it for all configure tests. If a configure test failed due
1883# to -Werror this would just silently disable some features,
1884# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001885
1886cc_has_warning_flag() {
1887 write_c_skeleton;
1888
Peter Maydella1d29d62012-10-27 22:19:07 +01001889 # Use the positive sense of the flag when testing for -Wno-wombat
1890 # support (gcc will happily accept the -Wno- form of unknown
1891 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001892 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1893 compile_prog "-Werror $optflag" ""
1894}
1895
1896for flag in $gcc_flags; do
1897 if cc_has_warning_flag $flag ; then
1898 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001899 fi
1900done
1901
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001902if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001903 cat > $TMPC << EOF
1904int main(int argc, char *argv[])
1905{
1906 char arr[64], *p = arr, *c = argv[0];
1907 while (*c) {
1908 *p++ = *c++;
1909 }
1910 return 0;
1911}
1912EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001913 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001914 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001915 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001916 # We need to check both a compile and a link, since some compiler
1917 # setups fail only on a .c->.o compile and some only at link time
1918 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1919 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001920 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001921 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001922 break
1923 fi
1924 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001925 if test "$stack_protector" = yes; then
1926 if test $sp_on = 0; then
1927 error_exit "Stack protector not supported"
1928 fi
1929 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001930fi
1931
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001932# Disable -Wmissing-braces on older compilers that warn even for
1933# the "universal" C zero initializer {0}.
1934cat > $TMPC << EOF
1935struct {
1936 int a[2];
1937} x = {0};
1938EOF
1939if compile_object "-Werror" "" ; then
1940 :
1941else
1942 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1943fi
1944
Thomas Huthd376e9d2018-12-03 11:41:38 +01001945# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001946if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001947 if test "$modules" = "yes" ; then
1948 error_exit "static and modules are mutually incompatible"
1949 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001950 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001951 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001952 else
1953 pie="no"
1954 fi
1955fi
1956
Emilio G. Cota768b7852015-04-29 13:09:02 +02001957# Unconditional check for compiler __thread support
1958 cat > $TMPC << EOF
1959static __thread int tls_var;
1960int main(void) { return tls_var; }
1961EOF
1962
1963if ! compile_prog "-Werror" "" ; then
1964 error_exit "Your compiler does not support the __thread specifier for " \
1965 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1966fi
1967
Avi Kivity40d64442011-11-15 20:12:17 +02001968if test "$pie" = ""; then
1969 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001970 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001971 ;;
1972 *)
1973 pie="no"
1974 ;;
1975 esac
1976fi
1977
1978if test "$pie" != "no" ; then
1979 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001980
1981#ifdef __linux__
1982# define THREAD __thread
1983#else
1984# define THREAD
1985#endif
1986
1987static THREAD int tls_var;
1988
1989int main(void) { return tls_var; }
1990
Avi Kivity40d64442011-11-15 20:12:17 +02001991EOF
1992 if compile_prog "-fPIE -DPIE" "-pie"; then
1993 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1994 LDFLAGS="-pie $LDFLAGS"
1995 pie="yes"
1996 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1997 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1998 fi
1999 else
2000 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002001 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002002 else
2003 echo "Disabling PIE due to missing toolchain support"
2004 pie="no"
2005 fi
2006 fi
Brad46eef332013-12-10 19:49:08 -05002007
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04002008 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05002009 CFLAGS_NOPIE="-fno-pie"
2010 LDFLAGS_NOPIE="-nopie"
2011 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002012fi
2013
Paolo Bonzini09dada42013-04-17 16:26:47 +02002014##########################################
2015# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2016# use i686 as default anyway, but for those that don't, an explicit
2017# specification is necessary
2018
2019if test "$cpu" = "i386"; then
2020 cat > $TMPC << EOF
2021static int sfaa(int *ptr)
2022{
2023 return __sync_fetch_and_and(ptr, 0);
2024}
2025
2026int main(void)
2027{
2028 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002029 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002030 sfaa(&val);
2031 return val;
2032}
2033EOF
2034 if ! compile_prog "" "" ; then
2035 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2036 fi
2037fi
2038
2039#########################################
bellardec530c82006-04-25 22:36:06 +00002040# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002041
bellardec530c82006-04-25 22:36:06 +00002042if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002043 if has $install; then
2044 :
2045 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002046 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2047 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2048 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002049 fi
Stefan Weil89138852016-05-16 15:10:20 +02002050 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002051 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2052 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2053 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002054 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002055 if has ar; then
2056 :
2057 else
bellardec530c82006-04-25 22:36:06 +00002058 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002059 error_exit "No path includes ar" \
2060 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002061 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002062 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002063 fi
ths5fafdf22007-09-16 21:08:06 +00002064fi
bellardec530c82006-04-25 22:36:06 +00002065
Stefan Weilafb63eb2012-09-26 22:04:38 +02002066if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002067 for target in $default_target_list; do
2068 supported_target $target 2>/dev/null && \
2069 target_list="$target_list $target"
2070 done
2071 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002072else
Stefan Weil89138852016-05-16 15:10:20 +02002073 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002074 for target in $target_list; do
2075 # Check that we recognised the target name; this allows a more
2076 # friendly error message than if we let it fall through.
2077 case " $default_target_list " in
2078 *" $target "*)
2079 ;;
2080 *)
2081 error_exit "Unknown target name '$target'"
2082 ;;
2083 esac
2084 supported_target $target || exit 1
2085 done
bellard5327cf42005-01-10 23:18:50 +00002086fi
Peter Maydell25b48332013-05-20 16:16:16 +01002087
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002088# see if system emulation was really requested
2089case " $target_list " in
2090 *"-softmmu "*) softmmu=yes
2091 ;;
2092 *) softmmu=no
2093 ;;
2094esac
bellard5327cf42005-01-10 23:18:50 +00002095
Juan Quintela249247c2009-08-12 18:20:25 +02002096feature_not_found() {
2097 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002098 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002099
Peter Maydell76ad07a2013-04-08 12:11:26 +01002100 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002101 "configure was not able to find it." \
2102 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002103}
2104
bellard7d132992003-03-06 23:23:54 +00002105# ---
2106# big/little endian test
2107cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002108short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2109short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2110extern int foo(short *, short *);
2111int main(int argc, char *argv[]) {
2112 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002113}
2114EOF
2115
Mike Frysinger61cc9192013-06-30 23:30:18 -04002116if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002117 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002118 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002119 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002120 bigendian="no"
2121 else
2122 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002123 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002124else
2125 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002126fi
2127
Juan Quintelab0a47e72009-08-12 18:29:49 +02002128##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002129# cocoa implies not SDL or GTK
2130# (the cocoa UI code currently assumes it is always the active UI
2131# and doesn't interact well with other UI frontend code)
2132if test "$cocoa" = "yes"; then
2133 if test "$sdl" = "yes"; then
2134 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2135 fi
2136 if test "$gtk" = "yes"; then
2137 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2138 fi
2139 gtk=no
2140 sdl=no
2141fi
2142
Eric Blake6b39b062016-10-11 10:46:23 -05002143# Some versions of Mac OS X incorrectly define SIZE_MAX
2144cat > $TMPC << EOF
2145#include <stdint.h>
2146#include <stdio.h>
2147int main(int argc, char *argv[]) {
2148 return printf("%zu", SIZE_MAX);
2149}
2150EOF
2151have_broken_size_max=no
2152if ! compile_object -Werror ; then
2153 have_broken_size_max=yes
2154fi
2155
Peter Maydella30878e2015-08-14 16:10:52 +01002156##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002157# L2TPV3 probe
2158
2159cat > $TMPC <<EOF
2160#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002161#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002162int main(void) { return sizeof(struct mmsghdr); }
2163EOF
2164if compile_prog "" "" ; then
2165 l2tpv3=yes
2166else
2167 l2tpv3=no
2168fi
2169
2170##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002171# MinGW / Mingw-w64 localtime_r/gmtime_r check
2172
2173if test "$mingw32" = "yes"; then
2174 # Some versions of MinGW / Mingw-w64 lack localtime_r
2175 # and gmtime_r entirely.
2176 #
2177 # Some versions of Mingw-w64 define a macro for
2178 # localtime_r/gmtime_r.
2179 #
2180 # Some versions of Mingw-w64 will define functions
2181 # for localtime_r/gmtime_r, but only if you have
2182 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2183 # though, unistd.h and pthread.h both define
2184 # that for you.
2185 #
2186 # So this #undef localtime_r and #include <unistd.h>
2187 # are not in fact redundant.
2188cat > $TMPC << EOF
2189#include <unistd.h>
2190#include <time.h>
2191#undef localtime_r
2192int main(void) { localtime_r(NULL, NULL); return 0; }
2193EOF
2194 if compile_prog "" "" ; then
2195 localtime_r="yes"
2196 else
2197 localtime_r="no"
2198 fi
2199fi
2200
2201##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002202# pkg-config probe
2203
2204if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002205 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002206fi
2207
2208##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002209# NPTL probe
2210
Peter Maydell24cb36a2013-07-16 18:45:00 +01002211if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002212 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002213#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002214#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002215int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002216#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2217#error bork
2218#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002219 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002220}
2221EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002222 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002223 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002224 fi
pbrookbd0c5662008-05-29 14:34:11 +00002225fi
2226
balrogac629222008-10-11 09:56:04 +00002227##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002228# lzo check
2229
2230if test "$lzo" != "no" ; then
2231 cat > $TMPC << EOF
2232#include <lzo/lzo1x.h>
2233int main(void) { lzo_version(); return 0; }
2234EOF
2235 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002236 libs_softmmu="$libs_softmmu -llzo2"
2237 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002238 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002239 if test "$lzo" = "yes"; then
2240 feature_not_found "liblzo2" "Install liblzo2 devel"
2241 fi
2242 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002243 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002244fi
2245
2246##########################################
2247# snappy check
2248
2249if test "$snappy" != "no" ; then
2250 cat > $TMPC << EOF
2251#include <snappy-c.h>
2252int main(void) { snappy_max_compressed_length(4096); return 0; }
2253EOF
2254 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002255 libs_softmmu="$libs_softmmu -lsnappy"
2256 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002257 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002258 if test "$snappy" = "yes"; then
2259 feature_not_found "libsnappy" "Install libsnappy devel"
2260 fi
2261 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002262 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002263fi
2264
2265##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002266# bzip2 check
2267
2268if test "$bzip2" != "no" ; then
2269 cat > $TMPC << EOF
2270#include <bzlib.h>
2271int main(void) { BZ2_bzlibVersion(); return 0; }
2272EOF
2273 if compile_prog "" "-lbz2" ; then
2274 bzip2="yes"
2275 else
2276 if test "$bzip2" = "yes"; then
2277 feature_not_found "libbzip2" "Install libbzip2 devel"
2278 fi
2279 bzip2="no"
2280 fi
2281fi
2282
2283##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002284# lzfse check
2285
2286if test "$lzfse" != "no" ; then
2287 cat > $TMPC << EOF
2288#include <lzfse.h>
2289int main(void) { lzfse_decode_scratch_size(); return 0; }
2290EOF
2291 if compile_prog "" "-llzfse" ; then
2292 lzfse="yes"
2293 else
2294 if test "$lzfse" = "yes"; then
2295 feature_not_found "lzfse" "Install lzfse devel"
2296 fi
2297 lzfse="no"
2298 fi
2299fi
2300
2301##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002302# libseccomp check
2303
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002304libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002305if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002306 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002307 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002308 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002309 arm|aarch64)
2310 libseccomp_minver="2.2.3"
2311 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002312 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002313 libseccomp_minver="2.3.0"
2314 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002315 *)
2316 libseccomp_minver=""
2317 ;;
2318 esac
2319
2320 if test "$libseccomp_minver" != "" &&
2321 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002322 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2323 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002324 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002325 else
Andrew Jones693e5912015-09-30 11:59:18 -04002326 if test "$seccomp" = "yes" ; then
2327 if test "$libseccomp_minver" != "" ; then
2328 feature_not_found "libseccomp" \
2329 "Install libseccomp devel >= $libseccomp_minver"
2330 else
2331 feature_not_found "libseccomp" \
2332 "libseccomp is not supported for host cpu $cpu"
2333 fi
2334 fi
2335 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002336 fi
2337fi
2338##########################################
aliguorie37630c2009-04-22 15:19:10 +00002339# xen probe
2340
Juan Quintelafc321b42009-08-12 18:29:55 +02002341if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002342 # Check whether Xen library path is specified via --extra-ldflags to avoid
2343 # overriding this setting with pkg-config output. If not, try pkg-config
2344 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002345
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002346 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2347 $pkg_config --exists xencontrol ; then
2348 xen_ctrl_version="$(printf '%d%02d%02d' \
2349 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2350 xen=yes
2351 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2352 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002353 if $pkg_config --exists xentoolcore; then
2354 xen_pc="$xen_pc xentoolcore"
2355 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002356 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2357 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2358 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2359 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002360
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002361 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002362 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002363
2364 # First we test whether Xen headers and libraries are available.
2365 # If no, we are done and there is no Xen support.
2366 # If yes, more tests are run to detect the Xen version.
2367
2368 # Xen (any)
2369 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002370#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002371int main(void) {
2372 return 0;
2373}
2374EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002375 if ! compile_prog "" "$xen_libs" ; then
2376 # Xen not found
2377 if test "$xen" = "yes" ; then
2378 feature_not_found "xen" "Install xen devel"
2379 fi
2380 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002381
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002382 # Xen unstable
2383 elif
2384 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002385#undef XC_WANT_COMPAT_DEVICEMODEL_API
2386#define __XEN_TOOLS__
2387#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002388#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002389int main(void) {
2390 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002391 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002392
2393 xd = xendevicemodel_open(0, 0);
2394 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2395
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002396 xfmem = xenforeignmemory_open(0, 0);
2397 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2398
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002399 return 0;
2400}
2401EOF
2402 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2403 then
2404 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2405 xen_ctrl_version=41100
2406 xen=yes
2407 elif
2408 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002409#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2410#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002411#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002412int main(void) {
2413 xenforeignmemory_handle *xfmem;
2414
2415 xfmem = xenforeignmemory_open(0, 0);
2416 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002417 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002418
2419 return 0;
2420}
2421EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002422 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002423 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002424 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002425 xen_ctrl_version=41000
2426 xen=yes
2427 elif
2428 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002429#undef XC_WANT_COMPAT_DEVICEMODEL_API
2430#define __XEN_TOOLS__
2431#include <xendevicemodel.h>
2432int main(void) {
2433 xendevicemodel_handle *xd;
2434
2435 xd = xendevicemodel_open(0, 0);
2436 xendevicemodel_close(xd);
2437
2438 return 0;
2439}
2440EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002441 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2442 then
2443 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2444 xen_ctrl_version=40900
2445 xen=yes
2446 elif
2447 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002448/*
2449 * If we have stable libs the we don't want the libxc compat
2450 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002451 *
2452 * Also, check if xengnttab_grant_copy_segment_t is defined and
2453 * grant copy operation is implemented.
2454 */
2455#undef XC_WANT_COMPAT_EVTCHN_API
2456#undef XC_WANT_COMPAT_GNTTAB_API
2457#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2458#include <xenctrl.h>
2459#include <xenstore.h>
2460#include <xenevtchn.h>
2461#include <xengnttab.h>
2462#include <xenforeignmemory.h>
2463#include <stdint.h>
2464#include <xen/hvm/hvm_info_table.h>
2465#if !defined(HVM_MAX_VCPUS)
2466# error HVM_MAX_VCPUS not defined
2467#endif
2468int main(void) {
2469 xc_interface *xc = NULL;
2470 xenforeignmemory_handle *xfmem;
2471 xenevtchn_handle *xe;
2472 xengnttab_handle *xg;
2473 xen_domain_handle_t handle;
2474 xengnttab_grant_copy_segment_t* seg = NULL;
2475
2476 xs_daemon_open();
2477
2478 xc = xc_interface_open(0, 0, 0);
2479 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2480 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2481 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2482 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2483 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2484
2485 xfmem = xenforeignmemory_open(0, 0);
2486 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2487
2488 xe = xenevtchn_open(0, 0);
2489 xenevtchn_fd(xe);
2490
2491 xg = xengnttab_open(0, 0);
2492 xengnttab_grant_copy(xg, 0, seg);
2493
2494 return 0;
2495}
2496EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002497 compile_prog "" "$xen_libs $xen_stable_libs"
2498 then
2499 xen_ctrl_version=40800
2500 xen=yes
2501 elif
2502 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002503/*
2504 * If we have stable libs the we don't want the libxc compat
2505 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002506 */
2507#undef XC_WANT_COMPAT_EVTCHN_API
2508#undef XC_WANT_COMPAT_GNTTAB_API
2509#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2510#include <xenctrl.h>
2511#include <xenstore.h>
2512#include <xenevtchn.h>
2513#include <xengnttab.h>
2514#include <xenforeignmemory.h>
2515#include <stdint.h>
2516#include <xen/hvm/hvm_info_table.h>
2517#if !defined(HVM_MAX_VCPUS)
2518# error HVM_MAX_VCPUS not defined
2519#endif
2520int main(void) {
2521 xc_interface *xc = NULL;
2522 xenforeignmemory_handle *xfmem;
2523 xenevtchn_handle *xe;
2524 xengnttab_handle *xg;
2525 xen_domain_handle_t handle;
2526
2527 xs_daemon_open();
2528
2529 xc = xc_interface_open(0, 0, 0);
2530 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2531 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2532 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2533 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2534 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2535
2536 xfmem = xenforeignmemory_open(0, 0);
2537 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2538
2539 xe = xenevtchn_open(0, 0);
2540 xenevtchn_fd(xe);
2541
2542 xg = xengnttab_open(0, 0);
2543 xengnttab_map_grant_ref(xg, 0, 0, 0);
2544
2545 return 0;
2546}
2547EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002548 compile_prog "" "$xen_libs $xen_stable_libs"
2549 then
2550 xen_ctrl_version=40701
2551 xen=yes
2552 elif
2553 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002554#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002555#include <stdint.h>
2556int main(void) {
2557 xc_interface *xc = NULL;
2558 xen_domain_handle_t handle;
2559 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2560 return 0;
2561}
2562EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002563 compile_prog "" "$xen_libs"
2564 then
2565 xen_ctrl_version=40700
2566 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002567
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002568 # Xen 4.6
2569 elif
2570 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002571#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002572#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002573#include <stdint.h>
2574#include <xen/hvm/hvm_info_table.h>
2575#if !defined(HVM_MAX_VCPUS)
2576# error HVM_MAX_VCPUS not defined
2577#endif
2578int main(void) {
2579 xc_interface *xc;
2580 xs_daemon_open();
2581 xc = xc_interface_open(0, 0, 0);
2582 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2583 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002584 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002585 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002586 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002587 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002588 return 0;
2589}
2590EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002591 compile_prog "" "$xen_libs"
2592 then
2593 xen_ctrl_version=40600
2594 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002595
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002596 # Xen 4.5
2597 elif
2598 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002599#include <xenctrl.h>
2600#include <xenstore.h>
2601#include <stdint.h>
2602#include <xen/hvm/hvm_info_table.h>
2603#if !defined(HVM_MAX_VCPUS)
2604# error HVM_MAX_VCPUS not defined
2605#endif
2606int main(void) {
2607 xc_interface *xc;
2608 xs_daemon_open();
2609 xc = xc_interface_open(0, 0, 0);
2610 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2611 xc_gnttab_open(NULL, 0);
2612 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2613 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002614 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2615 return 0;
2616}
2617EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002618 compile_prog "" "$xen_libs"
2619 then
2620 xen_ctrl_version=40500
2621 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002622
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002623 elif
2624 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002625#include <xenctrl.h>
2626#include <xenstore.h>
2627#include <stdint.h>
2628#include <xen/hvm/hvm_info_table.h>
2629#if !defined(HVM_MAX_VCPUS)
2630# error HVM_MAX_VCPUS not defined
2631#endif
2632int main(void) {
2633 xc_interface *xc;
2634 xs_daemon_open();
2635 xc = xc_interface_open(0, 0, 0);
2636 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2637 xc_gnttab_open(NULL, 0);
2638 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2639 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002640 return 0;
2641}
2642EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002643 compile_prog "" "$xen_libs"
2644 then
2645 xen_ctrl_version=40200
2646 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002647
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002648 else
2649 if test "$xen" = "yes" ; then
2650 feature_not_found "xen (unsupported version)" \
2651 "Install a supported xen (xen 4.2 or newer)"
2652 fi
2653 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002654 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002655
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002656 if test "$xen" = yes; then
2657 if test $xen_ctrl_version -ge 40701 ; then
2658 libs_softmmu="$xen_stable_libs $libs_softmmu"
2659 fi
2660 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002661 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002662 fi
aliguorie37630c2009-04-22 15:19:10 +00002663fi
2664
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002665if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002666 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002667 xen_pci_passthrough=yes
2668 else
2669 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002670 error_exit "User requested feature Xen PCI Passthrough" \
2671 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002672 fi
2673 xen_pci_passthrough=no
2674 fi
2675fi
2676
aliguorie37630c2009-04-22 15:19:10 +00002677##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002678# Windows Hypervisor Platform accelerator (WHPX) check
2679if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002680 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002681 whpx="yes"
2682 else
2683 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002684 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002685 fi
2686 whpx="no"
2687 fi
2688fi
2689
2690##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002691# Sparse probe
2692if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002693 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002694 sparse=yes
2695 else
2696 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002697 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002698 fi
2699 sparse=no
2700 fi
2701fi
2702
2703##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002704# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002705if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002706 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002707 x11_cflags=$($pkg_config --cflags x11)
2708 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002709fi
2710
2711##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002712# GTK probe
2713
2714if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002715 gtkpackage="gtk+-3.0"
2716 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002717 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002718 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002719 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2720 gtk_libs=$($pkg_config --libs $gtkpackage)
2721 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002722 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002723 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002724 gtk_cflags="$gtk_cflags $x11_cflags"
2725 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002726 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002727 gtk="yes"
2728 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002729 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002730 else
2731 gtk="no"
2732 fi
2733fi
2734
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002735
2736##########################################
2737# GNUTLS probe
2738
2739if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002740 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002741 gnutls_cflags=$($pkg_config --cflags gnutls)
2742 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002743 libs_softmmu="$gnutls_libs $libs_softmmu"
2744 libs_tools="$gnutls_libs $libs_tools"
2745 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2746 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002747 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002748 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002749 else
2750 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002751 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002752fi
2753
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002754
2755# If user didn't give a --disable/enable-gcrypt flag,
2756# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002757# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002758if test -z "$gcrypt"
2759then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002760 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002761 then
2762 gcrypt="no"
2763 fi
2764fi
2765
2766# If user didn't give a --disable/enable-nettle flag,
2767# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002768# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002769if test -z "$nettle"
2770then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002771 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002772 then
2773 nettle="no"
2774 fi
2775fi
2776
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002777has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002778 if ! has "libgcrypt-config"
2779 then
2780 return 1
2781 fi
2782
2783 if test -n "$cross_prefix"
2784 then
Stefan Weil89138852016-05-16 15:10:20 +02002785 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002786 if test "$host-" != $cross_prefix
2787 then
2788 return 1
2789 fi
2790 fi
2791
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002792 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2793 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2794
2795 if test $maj != 1 || test $min -lt 5
2796 then
2797 return 1
2798 fi
2799
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002800 return 0
2801}
2802
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002803
2804if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002805 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002806 nettle_cflags=$($pkg_config --cflags nettle)
2807 nettle_libs=$($pkg_config --libs nettle)
2808 nettle_version=$($pkg_config --modversion nettle)
2809 libs_softmmu="$nettle_libs $libs_softmmu"
2810 libs_tools="$nettle_libs $libs_tools"
2811 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2812 nettle="yes"
2813
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002814 if test -z "$gcrypt"; then
2815 gcrypt="no"
2816 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002817 else
2818 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002819 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002820 else
2821 nettle="no"
2822 fi
2823 fi
2824fi
2825
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002826if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002827 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002828 gcrypt_cflags=$(libgcrypt-config --cflags)
2829 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002830 # Debian has remove -lgpg-error from libgcrypt-config
2831 # as it "spreads unnecessary dependencies" which in
2832 # turn breaks static builds...
2833 if test "$static" = "yes"
2834 then
2835 gcrypt_libs="$gcrypt_libs -lgpg-error"
2836 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002837 libs_softmmu="$gcrypt_libs $libs_softmmu"
2838 libs_tools="$gcrypt_libs $libs_tools"
2839 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002840 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002841
2842 cat > $TMPC << EOF
2843#include <gcrypt.h>
2844int main(void) {
2845 gcry_mac_hd_t handle;
2846 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2847 GCRY_MAC_FLAG_SECURE, NULL);
2848 return 0;
2849}
2850EOF
2851 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2852 gcrypt_hmac=yes
2853 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002854 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002855 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002856 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002857 else
2858 gcrypt="no"
2859 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002860 fi
2861fi
2862
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002863
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002864if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2865then
2866 error_exit "Only one of gcrypt & nettle can be enabled"
2867fi
2868
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002869##########################################
2870# libtasn1 - only for the TLS creds/session test suite
2871
2872tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002873tasn1_cflags=""
2874tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002875if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002876 tasn1_cflags=$($pkg_config --cflags libtasn1)
2877 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002878else
2879 tasn1=no
2880fi
2881
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002882
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002883##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002884# getifaddrs (for tests/test-io-channel-socket )
2885
2886have_ifaddrs_h=yes
2887if ! check_include "ifaddrs.h" ; then
2888 have_ifaddrs_h=no
2889fi
2890
2891##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002892# VTE probe
2893
2894if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002895 vteminversion="0.32.0"
2896 if $pkg_config --exists "vte-2.91"; then
2897 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002898 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002899 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002900 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002901 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002902 vte_cflags=$($pkg_config --cflags $vtepackage)
2903 vte_libs=$($pkg_config --libs $vtepackage)
2904 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002905 vte="yes"
2906 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002907 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002908 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002909 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002910 fi
2911fi
2912
2913##########################################
bellard11d9f692004-04-02 20:55:59 +00002914# SDL probe
2915
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002916# Look for sdl configuration program (pkg-config or sdl-config). Try
2917# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002918
Peter Xuc6093a02018-04-10 13:40:34 +08002919sdl_probe ()
2920{
2921 sdl_too_old=no
2922 if test "$sdlabi" = ""; then
2923 if $pkg_config --exists "sdl2"; then
2924 sdlabi=2.0
2925 elif $pkg_config --exists "sdl"; then
2926 sdlabi=1.2
2927 else
2928 sdlabi=2.0
2929 fi
LoĂŻc Miniera0dfd8a2010-01-28 21:15:18 +00002930 fi
bellard11d9f692004-04-02 20:55:59 +00002931
Peter Xuc6093a02018-04-10 13:40:34 +08002932 if test $sdlabi = "2.0"; then
2933 sdl_config=$sdl2_config
2934 sdlname=sdl2
2935 sdlconfigname=sdl2_config
2936 elif test $sdlabi = "1.2"; then
2937 sdlname=sdl
2938 sdlconfigname=sdl_config
2939 else
2940 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2941 fi
2942
2943 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2944 sdl_config=$sdlconfigname
2945 fi
2946
2947 if $pkg_config $sdlname --exists; then
2948 sdlconfig="$pkg_config $sdlname"
2949 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2950 elif has ${sdl_config}; then
2951 sdlconfig="$sdl_config"
2952 sdlversion=$($sdlconfig --version)
2953 else
2954 if test "$sdl" = "yes" ; then
2955 feature_not_found "sdl" "Install SDL2-devel"
2956 fi
2957 sdl=no
2958 # no need to do the rest
2959 return
2960 fi
2961 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2962 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2963 fi
2964
Juan Quintelaac119f92009-07-27 16:13:15 +02002965 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002966#include <SDL.h>
2967#undef main /* We don't want SDL to override our main() */
2968int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2969EOF
Stefan Weil89138852016-05-16 15:10:20 +02002970 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002971 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002972 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002973 if $pkg_config $sdlname --exists; then
2974 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2975 else
2976 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2977 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002978 else
Stefan Weil89138852016-05-16 15:10:20 +02002979 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002980 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002981 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002982 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002983 sdl_too_old=yes
2984 else
Peter Maydella30878e2015-08-14 16:10:52 +01002985 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002986 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002987
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002988 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002989 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002990 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002991 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2992 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002993 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002994 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002995 :
2996 else
2997 sdl=no
2998 fi
2999 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003000 else # sdl not found
3001 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003002 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003003 fi
3004 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003005 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003006}
3007
3008if test "$sdl" != "no" ; then
3009 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003010fi
bellard11d9f692004-04-02 20:55:59 +00003011
aliguori5368a422009-03-03 17:37:21 +00003012if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003013 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003014#include <SDL.h>
3015#if defined(SDL_VIDEO_DRIVER_X11)
3016#include <X11/XKBlib.h>
3017#else
3018#error No x11 support
3019#endif
3020int main(void) { return 0; }
3021EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003022 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003023 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003024 sdl_cflags="$sdl_cflags $x11_cflags"
3025 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003026 fi
aliguori5368a422009-03-03 17:37:21 +00003027fi
3028
ths8f28f3f2007-01-05 21:25:54 +00003029##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003030# RDMA needs OpenFabrics libraries
3031if test "$rdma" != "no" ; then
3032 cat > $TMPC <<EOF
3033#include <rdma/rdma_cma.h>
3034int main(void) { return 0; }
3035EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003036 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003037 if compile_prog "" "$rdma_libs" ; then
3038 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003039 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003040 else
3041 if test "$rdma" = "yes" ; then
3042 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003043 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003044 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003045 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003046 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3047 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3048 fi
3049 rdma="no"
3050 fi
3051fi
3052
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003053##########################################
3054# PVRDMA detection
3055
3056cat > $TMPC <<EOF &&
3057#include <sys/mman.h>
3058
3059int
3060main(void)
3061{
3062 char buf = 0;
3063 void *addr = &buf;
3064 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3065
3066 return 0;
3067}
3068EOF
3069
3070if test "$rdma" = "yes" ; then
3071 case "$pvrdma" in
3072 "")
3073 if compile_prog "" ""; then
3074 pvrdma="yes"
3075 else
3076 pvrdma="no"
3077 fi
3078 ;;
3079 "yes")
3080 if ! compile_prog "" ""; then
3081 error_exit "PVRDMA is not supported since mremap is not implemented"
3082 fi
3083 pvrdma="yes"
3084 ;;
3085 "no")
3086 pvrdma="no"
3087 ;;
3088 esac
3089else
3090 if test "$pvrdma" = "yes" ; then
3091 error_exit "PVRDMA requires rdma suppport"
3092 fi
3093 pvrdma="no"
3094fi
ths8d5d2d42007-08-25 01:37:51 +00003095
3096##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003097# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003098if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003099 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003100#include <sasl/sasl.h>
3101#include <stdio.h>
3102int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3103EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003104 # Assuming Cyrus-SASL installed in /usr prefix
3105 vnc_sasl_cflags=""
3106 vnc_sasl_libs="-lsasl2"
3107 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3108 vnc_sasl=yes
3109 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003110 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003111 else
3112 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003113 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003114 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003115 vnc_sasl=no
3116 fi
aliguori2f9606b2009-03-06 20:27:28 +00003117fi
3118
3119##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003120# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003121if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003122cat > $TMPC <<EOF
3123#include <stdio.h>
3124#include <jpeglib.h>
3125int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3126EOF
3127 vnc_jpeg_cflags=""
3128 vnc_jpeg_libs="-ljpeg"
3129 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3130 vnc_jpeg=yes
3131 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003132 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003133 else
3134 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003135 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003136 fi
3137 vnc_jpeg=no
3138 fi
3139fi
3140
3141##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003142# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003143if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003144cat > $TMPC <<EOF
3145//#include <stdio.h>
3146#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003147#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003148int main(void) {
3149 png_structp png_ptr;
3150 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003151 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003152}
3153EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003154 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003155 vnc_png_cflags=$($pkg_config libpng --cflags)
3156 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003157 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003158 vnc_png_cflags=""
3159 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003160 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003161 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3162 vnc_png=yes
3163 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003164 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003165 else
3166 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003167 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003168 fi
3169 vnc_png=no
3170 fi
3171fi
3172
3173##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003174# xkbcommon probe
3175if test "$xkbcommon" != "no" ; then
3176 if $pkg_config xkbcommon --exists; then
3177 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3178 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3179 xkbcommon=yes
3180 else
3181 if test "$xkbcommon" = "yes" ; then
3182 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3183 fi
3184 xkbcommon=no
3185 fi
3186fi
3187
3188##########################################
aliguori76655d62009-03-06 20:27:37 +00003189# fnmatch() probe, used for ACL routines
3190fnmatch="no"
3191cat > $TMPC << EOF
3192#include <fnmatch.h>
3193int main(void)
3194{
3195 fnmatch("foo", "foo", 0);
3196 return 0;
3197}
3198EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003199if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003200 fnmatch="yes"
3201fi
3202
3203##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003204# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003205if test "$xfs" != "no" ; then
3206 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003207#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003208#include <xfs/xfs.h>
3209int main(void)
3210{
3211 xfsctl(NULL, 0, 0, NULL);
3212 return 0;
3213}
3214EOF
3215 if compile_prog "" "" ; then
3216 xfs="yes"
3217 else
3218 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003219 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003220 fi
3221 xfs=no
3222 fi
3223fi
3224
3225##########################################
ths8a16d272008-07-19 09:56:24 +00003226# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003227if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003228 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003229 cat > $TMPC << EOF
3230#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003231int main(void)
3232{
3233 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003234 char s[] = "";
3235 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003236 return 0;
3237}
ths8a16d272008-07-19 09:56:24 +00003238EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003239 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003240 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003241 else
3242 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003243 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003244 fi
3245 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003246 fi
ths8a16d272008-07-19 09:56:24 +00003247fi
3248
3249##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003250# netmap support probe
3251# Apart from looking for netmap headers, we make sure that the host API version
3252# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3253# a minor/major version number. Minor new features will be marked with values up
3254# to 15, and if something happens that requires a change to the backend we will
3255# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003256if test "$netmap" != "no" ; then
3257 cat > $TMPC << EOF
3258#include <inttypes.h>
3259#include <net/if.h>
3260#include <net/netmap.h>
3261#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003262#if (NETMAP_API < 11) || (NETMAP_API > 15)
3263#error
3264#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003265int main(void) { return 0; }
3266EOF
3267 if compile_prog "" "" ; then
3268 netmap=yes
3269 else
3270 if test "$netmap" = "yes" ; then
3271 feature_not_found "netmap"
3272 fi
3273 netmap=no
3274 fi
3275fi
3276
3277##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003278# libcap-ng library probe
3279if test "$cap_ng" != "no" ; then
3280 cap_libs="-lcap-ng"
3281 cat > $TMPC << EOF
3282#include <cap-ng.h>
3283int main(void)
3284{
3285 capng_capability_to_name(CAPNG_EFFECTIVE);
3286 return 0;
3287}
3288EOF
3289 if compile_prog "" "$cap_libs" ; then
3290 cap_ng=yes
3291 libs_tools="$cap_libs $libs_tools"
3292 else
3293 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003294 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003295 fi
3296 cap_ng=no
3297 fi
3298fi
3299
3300##########################################
malcc2de5c92008-06-28 19:13:06 +00003301# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003302
malcc2de5c92008-06-28 19:13:06 +00003303audio_drv_probe()
3304{
3305 drv=$1
3306 hdr=$2
3307 lib=$3
3308 exp=$4
3309 cfl=$5
3310 cat > $TMPC << EOF
3311#include <$hdr>
3312int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003313EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003314 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003315 :
3316 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003317 error_exit "$drv check failed" \
3318 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003319 fi
3320}
3321
Stefan Weil89138852016-05-16 15:10:20 +02003322audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003323for drv in $audio_drv_list; do
3324 case $drv in
3325 alsa)
3326 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003327 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003328 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003329 ;;
3330
malcb8e59f12008-07-02 21:03:08 +00003331 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003332 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3333 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003334 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003335 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003336 ;;
3337
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003338 sdl)
3339 if test "$sdl" = "no"; then
3340 error_exit "sdl not found or disabled, can not use sdl audio driver"
3341 fi
3342 ;;
3343
Juan Quintela997e6902009-08-03 14:46:29 +02003344 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003345 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003346 ;;
3347
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003348 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003349 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003350 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003351 ;;
3352
3353 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003354 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003355 ;;
3356
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003357 wav)
3358 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003359 ;;
3360
malce4c63a62008-07-19 16:15:16 +00003361 *)
malc1c9b2a52008-07-19 16:57:30 +00003362 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003363 error_exit "Unknown driver '$drv' selected" \
3364 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003365 }
3366 ;;
malcc2de5c92008-06-28 19:13:06 +00003367 esac
3368done
ths8f28f3f2007-01-05 21:25:54 +00003369
balrog4d3b6f62008-02-10 16:33:14 +00003370##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003371# BrlAPI probe
3372
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003373if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003374 brlapi_libs="-lbrlapi"
3375 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003376#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003377#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003378int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3379EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003380 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003381 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003382 else
3383 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003384 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003385 fi
3386 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003387 fi
3388fi
aurel322e4d9fb2008-04-08 06:01:02 +00003389
3390##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003391# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003392if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003393 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003394 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3395 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003396 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003397 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003398 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003399 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003400 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003401 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003402#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003403#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003404#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003405int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003406 wchar_t wch = L'w';
3407 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003408 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003409 addwstr(L"wide chars\n");
3410 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003411 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003412 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003413}
balrog4d3b6f62008-02-10 16:33:14 +00003414EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003415 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003416 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003417 # Make sure we get the wide character prototypes
3418 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003419 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003420 for curses_lib in $curses_lib_list; do
3421 unset IFS
3422 if compile_prog "$curses_inc" "$curses_lib" ; then
3423 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003424 break
3425 fi
3426 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003427 if test "$curses_found" = yes ; then
3428 break
3429 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003430 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003431 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003432 if test "$curses_found" = "yes" ; then
3433 curses=yes
3434 else
3435 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003436 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003437 fi
3438 curses=no
3439 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003440fi
balrog4d3b6f62008-02-10 16:33:14 +00003441
blueswir1414f0da2008-08-15 18:20:52 +00003442##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003443# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003444if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003445 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003446 curlconfig="$pkg_config libcurl"
3447 else
3448 curlconfig=curl-config
3449 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003450 cat > $TMPC << EOF
3451#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003452int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003453EOF
Stefan Weil89138852016-05-16 15:10:20 +02003454 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3455 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003456 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003457 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003458 else
3459 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003460 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003461 fi
3462 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003463 fi
3464fi # test "$curl"
3465
3466##########################################
balrogfb599c92008-09-28 23:49:55 +00003467# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003468if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003469 cat > $TMPC << EOF
3470#include <bluetooth/bluetooth.h>
3471int main(void) { return bt_error(0); }
3472EOF
Stefan Weil89138852016-05-16 15:10:20 +02003473 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3474 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003475 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003476 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003477 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003478 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003479 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003480 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003481 fi
balroge820e3f2008-09-30 02:27:44 +00003482 bluez="no"
3483 fi
balrogfb599c92008-09-28 23:49:55 +00003484fi
3485
3486##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003487# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003488
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003489glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003490glib_modules=gthread-2.0
3491if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003492 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003493fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003494
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003495# This workaround is required due to a bug in pkg-config file for glib as it
3496# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3497
3498if test "$static" = yes -a "$mingw32" = yes; then
3499 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3500fi
3501
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003502for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003503 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003504 glib_cflags=$($pkg_config --cflags $i)
3505 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003506 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003507 LIBS="$glib_libs $LIBS"
3508 libs_qga="$glib_libs $libs_qga"
3509 else
3510 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3511 fi
3512done
3513
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003514# Sanity check that the current size_t matches the
3515# size that glib thinks it should be. This catches
3516# problems on multi-arch where people try to build
3517# 32-bit QEMU while pointing at 64-bit glib headers
3518cat > $TMPC <<EOF
3519#include <glib.h>
3520#include <unistd.h>
3521
3522#define QEMU_BUILD_BUG_ON(x) \
3523 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3524
3525int main(void) {
3526 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3527 return 0;
3528}
3529EOF
3530
Stefan Weil5919e032016-04-28 23:33:41 +02003531if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003532 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3533 "You probably need to set PKG_CONFIG_LIBDIR"\
3534 "to point to the right pkg-config files for your"\
3535 "build target"
3536fi
3537
John Snowbbbf2e02015-03-25 18:57:38 -04003538# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3539cat > $TMPC << EOF
3540#include <glib.h>
3541int main(void) { return 0; }
3542EOF
3543if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3544 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3545 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3546 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3547 fi
3548fi
3549
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003550#########################################
3551# zlib check
3552
3553if test "$zlib" != "no" ; then
3554 if $pkg_config --exists zlib; then
3555 zlib_cflags=$($pkg_config --cflags zlib)
3556 zlib_libs=$($pkg_config --libs zlib)
3557 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3558 LIBS="$zlib_libs $LIBS"
3559 else
3560 cat > $TMPC << EOF
3561#include <zlib.h>
3562int main(void) { zlibVersion(); return 0; }
3563EOF
3564 if compile_prog "" "-lz" ; then
3565 LIBS="$LIBS -lz"
3566 else
3567 error_exit "zlib check failed" \
3568 "Make sure to have the zlib libs and headers installed."
3569 fi
3570 fi
3571fi
3572
Fam Zhenge26110c2014-02-10 14:48:57 +08003573##########################################
3574# SHA command probe for modules
3575if test "$modules" = yes; then
3576 shacmd_probe="sha1sum sha1 shasum"
3577 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003578 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003579 shacmd="$c"
3580 break
3581 fi
3582 done
3583 if test "$shacmd" = ""; then
3584 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3585 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003586fi
3587
3588##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003589# pixman support probe
3590
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003591if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003592 pixman_cflags=
3593 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003594elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003595 pixman_cflags=$($pkg_config --cflags pixman-1)
3596 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003597else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003598 error_exit "pixman >= 0.21.8 not present." \
3599 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003600fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003601
3602##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003603# libmpathpersist probe
3604
3605if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003606 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003607 cat > $TMPC <<EOF
3608#include <libudev.h>
3609#include <mpath_persist.h>
3610unsigned mpath_mx_alloc_len = 1024;
3611int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003612static struct config *multipath_conf;
3613extern struct udev *udev;
3614extern struct config *get_multipath_config(void);
3615extern void put_multipath_config(struct config *conf);
3616struct udev *udev;
3617struct config *get_multipath_config(void) { return multipath_conf; }
3618void put_multipath_config(struct config *conf) { }
3619
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003620int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003621 udev = udev_new();
3622 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003623 return 0;
3624}
3625EOF
3626 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3627 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003628 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003629 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003630 # probe for the old API
3631 cat > $TMPC <<EOF
3632#include <libudev.h>
3633#include <mpath_persist.h>
3634unsigned mpath_mx_alloc_len = 1024;
3635int logsink;
3636int main(void) {
3637 struct udev *udev = udev_new();
3638 mpath_lib_init(udev);
3639 return 0;
3640}
3641EOF
3642 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3643 mpathpersist=yes
3644 mpathpersist_new_api=no
3645 else
3646 mpathpersist=no
3647 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003648 fi
3649else
3650 mpathpersist=no
3651fi
3652
3653##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303654# libcap probe
3655
3656if test "$cap" != "no" ; then
3657 cat > $TMPC <<EOF
3658#include <stdio.h>
3659#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003660int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303661EOF
3662 if compile_prog "" "-lcap" ; then
3663 cap=yes
3664 else
3665 cap=no
3666 fi
3667fi
3668
3669##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003670# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003671PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003672
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003673pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003674cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003675#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003676static void *f(void *p) { return NULL; }
3677int main(void) {
3678 pthread_t thread;
3679 pthread_create(&thread, 0, f, 0);
3680 return 0;
3681}
blueswir1414f0da2008-08-15 18:20:52 +00003682EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003683if compile_prog "" "" ; then
3684 pthread=yes
3685else
3686 for pthread_lib in $PTHREADLIBS_LIST; do
3687 if compile_prog "" "$pthread_lib" ; then
3688 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003689 found=no
3690 for lib_entry in $LIBS; do
3691 if test "$lib_entry" = "$pthread_lib"; then
3692 found=yes
3693 break
3694 fi
3695 done
3696 if test "$found" = "no"; then
3697 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003698 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003699 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003700 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003701 break
3702 fi
3703 done
3704fi
blueswir1414f0da2008-08-15 18:20:52 +00003705
Anthony Liguori4617e592009-08-25 17:21:56 -05003706if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003707 error_exit "pthread check failed" \
3708 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003709fi
3710
Roman Bolshakov479a5742018-12-17 23:26:01 +03003711# check for pthread_setname_np with thread id
3712pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003713cat > $TMPC << EOF
3714#include <pthread.h>
3715
3716static void *f(void *p) { return NULL; }
3717int main(void)
3718{
3719 pthread_t thread;
3720 pthread_create(&thread, 0, f, 0);
3721 pthread_setname_np(thread, "QEMU");
3722 return 0;
3723}
3724EOF
3725if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003726 pthread_setname_np_w_tid=yes
3727fi
3728
3729# check for pthread_setname_np without thread id
3730pthread_setname_np_wo_tid=no
3731cat > $TMPC << EOF
3732#include <pthread.h>
3733
3734static void *f(void *p) { pthread_setname_np("QEMU"); }
3735int main(void)
3736{
3737 pthread_t thread;
3738 pthread_create(&thread, 0, f, 0);
3739 return 0;
3740}
3741EOF
3742if compile_prog "" "$pthread_lib" ; then
3743 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003744fi
3745
aliguoribf9298b2008-12-05 20:05:26 +00003746##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003747# rbd probe
3748if test "$rbd" != "no" ; then
3749 cat > $TMPC <<EOF
3750#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003751#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003752int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003753 rados_t cluster;
3754 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003755 return 0;
3756}
3757EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003758 rbd_libs="-lrbd -lrados"
3759 if compile_prog "" "$rbd_libs" ; then
3760 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003761 else
3762 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003763 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003764 fi
3765 rbd=no
3766 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003767fi
3768
3769##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003770# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003771min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003772if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003773 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003774 libssh2_cflags=$($pkg_config libssh2 --cflags)
3775 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003776 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003777 else
3778 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003779 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003780 fi
3781 libssh2=no
3782 fi
3783fi
3784
3785##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003786# libssh2_sftp_fsync probe
3787
3788if test "$libssh2" = "yes"; then
3789 cat > $TMPC <<EOF
3790#include <stdio.h>
3791#include <libssh2.h>
3792#include <libssh2_sftp.h>
3793int main(void) {
3794 LIBSSH2_SESSION *session;
3795 LIBSSH2_SFTP *sftp;
3796 LIBSSH2_SFTP_HANDLE *sftp_handle;
3797 session = libssh2_session_init ();
3798 sftp = libssh2_sftp_init (session);
3799 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3800 libssh2_sftp_fsync (sftp_handle);
3801 return 0;
3802}
3803EOF
3804 # libssh2_cflags/libssh2_libs defined in previous test.
3805 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3806 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3807 fi
3808fi
3809
3810##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003811# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003812
3813if test "$linux_aio" != "no" ; then
3814 cat > $TMPC <<EOF
3815#include <libaio.h>
3816#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003817#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003818int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3819EOF
3820 if compile_prog "" "-laio" ; then
3821 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003822 else
3823 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003824 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003825 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003826 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003827 fi
3828fi
3829
3830##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003831# TPM passthrough is only on x86 Linux
3832
3833if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3834 tpm_passthrough=$tpm
3835else
3836 tpm_passthrough=no
3837fi
3838
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003839# TPM emulator is for all posix systems
3840if test "$mingw32" != "yes"; then
3841 tpm_emulator=$tpm
3842else
3843 tpm_emulator=no
3844fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003845##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003846# attr probe
3847
3848if test "$attr" != "no" ; then
3849 cat > $TMPC <<EOF
3850#include <stdio.h>
3851#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003852#ifdef CONFIG_LIBATTR
3853#include <attr/xattr.h>
3854#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003855#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003856#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003857int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3858EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003859 if compile_prog "" "" ; then
3860 attr=yes
3861 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003862 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003863 attr=yes
3864 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003865 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003866 else
3867 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003868 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003869 fi
3870 attr=no
3871 fi
3872fi
3873
3874##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003875# iovec probe
3876cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003877#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003878#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003879#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003880int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003881EOF
3882iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003883if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003884 iovec=yes
3885fi
3886
aurel32f652e6a2008-12-16 10:43:48 +00003887##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003888# preadv probe
3889cat > $TMPC <<EOF
3890#include <sys/types.h>
3891#include <sys/uio.h>
3892#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003893int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003894EOF
3895preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003896if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003897 preadv=yes
3898fi
3899
3900##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003901# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003902# fdt support is mandatory for at least some target architectures,
3903# so insist on it if we're building those system emulators.
3904fdt_required=no
3905for target in $target_list; do
3906 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003907 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003908 fdt_required=yes
3909 ;;
3910 esac
3911done
3912
3913if test "$fdt_required" = "yes"; then
3914 if test "$fdt" = "no"; then
3915 error_exit "fdt disabled but some requested targets require it." \
3916 "You can turn off fdt only if you also disable all the system emulation" \
3917 "targets which need it (by specifying a cut down --target-list)."
3918 fi
3919 fdt=yes
3920fi
3921
Juan Quintela2df87df2009-08-12 18:29:54 +02003922if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003923 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003924 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003925 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003926 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003927#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003928#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01003929int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003930EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003931 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003932 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003933 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003934 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003935 # have GIT checkout, so activate dtc submodule
3936 if test -e "${source_path}/.git" ; then
3937 git_submodules="${git_submodules} dtc"
3938 fi
3939 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003940 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003941 mkdir -p dtc
3942 if [ "$pwd_is_source_path" != "y" ] ; then
3943 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3944 symlink "$source_path/dtc/scripts" "dtc/scripts"
3945 fi
3946 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003947 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3948 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003949 elif test "$fdt" = "yes" ; then
3950 # Not a git build & no libfdt found, prompt for system install
3951 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3952 "Please install the DTC (libfdt) devel package"
3953 else
3954 # don't have and don't want
3955 fdt_libs=
3956 fdt=no
3957 fi
aurel32f652e6a2008-12-16 10:43:48 +00003958 fi
3959fi
3960
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003961libs_softmmu="$libs_softmmu $fdt_libs"
3962
Michael Walle20ff0752011-03-07 23:32:39 +01003963##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003964# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003965
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003966if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003967 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003968 if $pkg_config $opengl_pkgs; then
3969 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3970 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003971 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003972 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3973 gtk_gl="yes"
3974 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003975 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003976 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003977 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003978 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003979 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003980 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003981 opengl_libs=""
3982 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003983 fi
3984fi
3985
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003986if test "$opengl" = "yes"; then
3987 cat > $TMPC << EOF
3988#include <epoxy/egl.h>
3989#ifndef EGL_MESA_image_dma_buf_export
3990# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3991#endif
3992int main(void) { return 0; }
3993EOF
3994 if compile_prog "" "" ; then
3995 opengl_dmabuf=yes
3996 fi
3997fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003998
Klim Kireeved279a02018-01-12 12:01:19 +03003999##########################################
4000# libxml2 probe
4001if test "$libxml2" != "no" ; then
4002 if $pkg_config --exists libxml-2.0; then
4003 libxml2="yes"
4004 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4005 libxml2_libs=$($pkg_config --libs libxml-2.0)
4006 else
4007 if test "$libxml2" = "yes"; then
4008 feature_not_found "libxml2" "Install libxml2 devel"
4009 fi
4010 libxml2="no"
4011 fi
4012fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004013
Bharata B Raoeb100392012-09-24 14:42:45 +05304014##########################################
4015# glusterfs probe
4016if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004017 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304018 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004019 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4020 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004021 if $pkg_config --atleast-version=4 glusterfs-api; then
4022 glusterfs_xlator_opt="yes"
4023 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004024 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304025 glusterfs_discard="yes"
4026 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304027 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304028 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304029 glusterfs_zerofill="yes"
4030 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304031 else
4032 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004033 feature_not_found "GlusterFS backend support" \
4034 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304035 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304036 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304037 fi
4038fi
4039
aurel3239386ac2009-04-15 19:48:17 +00004040# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004041# emulator. This is done because older glibc versions don't
4042# have syscall stubs for these implemented. In that case we
4043# don't provide them even if kernel supports them.
4044#
4045inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004046cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004047#include <sys/inotify.h>
4048
4049int
4050main(void)
4051{
4052 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004053 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004054}
4055EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004056if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004057 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004058fi
4059
Riku Voipioc05c7a72010-03-26 15:25:11 +00004060inotify1=no
4061cat > $TMPC << EOF
4062#include <sys/inotify.h>
4063
4064int
4065main(void)
4066{
4067 /* try to start inotify */
4068 return inotify_init1(0);
4069}
4070EOF
4071if compile_prog "" "" ; then
4072 inotify1=yes
4073fi
4074
Riku Voipio099d6b02009-05-05 12:10:04 +03004075# check if pipe2 is there
4076pipe2=no
4077cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004078#include <unistd.h>
4079#include <fcntl.h>
4080
4081int main(void)
4082{
4083 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004084 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004085}
4086EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004087if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004088 pipe2=yes
4089fi
4090
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004091# check if accept4 is there
4092accept4=no
4093cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004094#include <sys/socket.h>
4095#include <stddef.h>
4096
4097int main(void)
4098{
4099 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4100 return 0;
4101}
4102EOF
4103if compile_prog "" "" ; then
4104 accept4=yes
4105fi
4106
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304107# check if tee/splice is there. vmsplice was added same time.
4108splice=no
4109cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304110#include <unistd.h>
4111#include <fcntl.h>
4112#include <limits.h>
4113
4114int main(void)
4115{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004116 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304117 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4118 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4119 return 0;
4120}
4121EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004122if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304123 splice=yes
4124fi
4125
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004126##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004127# libnuma probe
4128
4129if test "$numa" != "no" ; then
4130 cat > $TMPC << EOF
4131#include <numa.h>
4132int main(void) { return numa_available(); }
4133EOF
4134
4135 if compile_prog "" "-lnuma" ; then
4136 numa=yes
4137 libs_softmmu="-lnuma $libs_softmmu"
4138 else
4139 if test "$numa" = "yes" ; then
4140 feature_not_found "numa" "install numactl devel"
4141 fi
4142 numa=no
4143 fi
4144fi
4145
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004146if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4147 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4148 exit 1
4149fi
4150
Yang Zhong5a22ab72017-12-20 21:16:46 +08004151# Even if malloc_trim() is available, these non-libc memory allocators
4152# do not support it.
4153if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4154 if test "$malloc_trim" = "yes" ; then
4155 echo "Disabling malloc_trim with non-libc memory allocator"
4156 fi
4157 malloc_trim="no"
4158fi
4159
4160#######################################
4161# malloc_trim
4162
4163if test "$malloc_trim" != "no" ; then
4164 cat > $TMPC << EOF
4165#include <malloc.h>
4166int main(void) { malloc_trim(0); return 0; }
4167EOF
4168 if compile_prog "" "" ; then
4169 malloc_trim="yes"
4170 else
4171 malloc_trim="no"
4172 fi
4173fi
4174
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004175##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004176# tcmalloc probe
4177
4178if test "$tcmalloc" = "yes" ; then
4179 cat > $TMPC << EOF
4180#include <stdlib.h>
4181int main(void) { malloc(1); return 0; }
4182EOF
4183
4184 if compile_prog "" "-ltcmalloc" ; then
4185 LIBS="-ltcmalloc $LIBS"
4186 else
4187 feature_not_found "tcmalloc" "install gperftools devel"
4188 fi
4189fi
4190
4191##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004192# jemalloc probe
4193
4194if test "$jemalloc" = "yes" ; then
4195 cat > $TMPC << EOF
4196#include <stdlib.h>
4197int main(void) { malloc(1); return 0; }
4198EOF
4199
4200 if compile_prog "" "-ljemalloc" ; then
4201 LIBS="-ljemalloc $LIBS"
4202 else
4203 feature_not_found "jemalloc" "install jemalloc devel"
4204 fi
4205fi
4206
4207##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004208# signalfd probe
4209signalfd="no"
4210cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004211#include <unistd.h>
4212#include <sys/syscall.h>
4213#include <signal.h>
4214int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4215EOF
4216
4217if compile_prog "" "" ; then
4218 signalfd=yes
4219fi
4220
Riku Voipioc2882b92009-08-12 15:08:24 +03004221# check if eventfd is supported
4222eventfd=no
4223cat > $TMPC << EOF
4224#include <sys/eventfd.h>
4225
4226int main(void)
4227{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004228 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004229}
4230EOF
4231if compile_prog "" "" ; then
4232 eventfd=yes
4233fi
4234
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004235# check if memfd is supported
4236memfd=no
4237cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004238#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004239
4240int main(void)
4241{
4242 return memfd_create("foo", MFD_ALLOW_SEALING);
4243}
4244EOF
4245if compile_prog "" "" ; then
4246 memfd=yes
4247fi
4248
Cortland Tölva955727d2018-10-08 09:35:19 -07004249# check for usbfs
4250have_usbfs=no
4251if test "$linux_user" = "yes"; then
4252 if check_include linux/usbdevice_fs.h; then
4253 have_usbfs=yes
4254 fi
4255 have_usbfs=yes
4256fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004257
Ulrich Hechtd0927932009-09-17 20:22:14 +03004258# check for fallocate
4259fallocate=no
4260cat > $TMPC << EOF
4261#include <fcntl.h>
4262
4263int main(void)
4264{
4265 fallocate(0, 0, 0, 0);
4266 return 0;
4267}
4268EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004269if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004270 fallocate=yes
4271fi
4272
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004273# check for fallocate hole punching
4274fallocate_punch_hole=no
4275cat > $TMPC << EOF
4276#include <fcntl.h>
4277#include <linux/falloc.h>
4278
4279int main(void)
4280{
4281 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4282 return 0;
4283}
4284EOF
4285if compile_prog "" "" ; then
4286 fallocate_punch_hole=yes
4287fi
4288
Denis V. Lunevb953f072015-01-30 11:42:14 +03004289# check that fallocate supports range zeroing inside the file
4290fallocate_zero_range=no
4291cat > $TMPC << EOF
4292#include <fcntl.h>
4293#include <linux/falloc.h>
4294
4295int main(void)
4296{
4297 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4298 return 0;
4299}
4300EOF
4301if compile_prog "" "" ; then
4302 fallocate_zero_range=yes
4303fi
4304
Kevin Wolfed911432014-09-29 17:12:59 +02004305# check for posix_fallocate
4306posix_fallocate=no
4307cat > $TMPC << EOF
4308#include <fcntl.h>
4309
4310int main(void)
4311{
4312 posix_fallocate(0, 0, 0);
4313 return 0;
4314}
4315EOF
4316if compile_prog "" "" ; then
4317 posix_fallocate=yes
4318fi
4319
Peter Maydellc727f472011-01-06 11:05:10 +00004320# check for sync_file_range
4321sync_file_range=no
4322cat > $TMPC << EOF
4323#include <fcntl.h>
4324
4325int main(void)
4326{
4327 sync_file_range(0, 0, 0, 0);
4328 return 0;
4329}
4330EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004331if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004332 sync_file_range=yes
4333fi
4334
Peter Maydelldace20d2011-01-10 13:11:24 +00004335# check for linux/fiemap.h and FS_IOC_FIEMAP
4336fiemap=no
4337cat > $TMPC << EOF
4338#include <sys/ioctl.h>
4339#include <linux/fs.h>
4340#include <linux/fiemap.h>
4341
4342int main(void)
4343{
4344 ioctl(0, FS_IOC_FIEMAP, 0);
4345 return 0;
4346}
4347EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004348if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004349 fiemap=yes
4350fi
4351
Ulrich Hechtd0927932009-09-17 20:22:14 +03004352# check for dup3
4353dup3=no
4354cat > $TMPC << EOF
4355#include <unistd.h>
4356
4357int main(void)
4358{
4359 dup3(0, 0, 0);
4360 return 0;
4361}
4362EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004363if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004364 dup3=yes
4365fi
4366
Alex Bligh4e0c6522013-08-21 16:02:43 +01004367# check for ppoll support
4368ppoll=no
4369cat > $TMPC << EOF
4370#include <poll.h>
4371
4372int main(void)
4373{
4374 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4375 ppoll(&pfd, 1, 0, 0);
4376 return 0;
4377}
4378EOF
4379if compile_prog "" "" ; then
4380 ppoll=yes
4381fi
4382
Alex Blighcd758dd2013-08-21 16:02:44 +01004383# check for prctl(PR_SET_TIMERSLACK , ... ) support
4384prctl_pr_set_timerslack=no
4385cat > $TMPC << EOF
4386#include <sys/prctl.h>
4387
4388int main(void)
4389{
4390 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4391 return 0;
4392}
4393EOF
4394if compile_prog "" "" ; then
4395 prctl_pr_set_timerslack=yes
4396fi
4397
Peter Maydell3b6edd12011-02-15 18:35:05 +00004398# check for epoll support
4399epoll=no
4400cat > $TMPC << EOF
4401#include <sys/epoll.h>
4402
4403int main(void)
4404{
4405 epoll_create(0);
4406 return 0;
4407}
4408EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004409if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004410 epoll=yes
4411fi
4412
Peter Maydell227f0212016-06-06 19:58:11 +01004413# epoll_create1 is a later addition
4414# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004415epoll_create1=no
4416cat > $TMPC << EOF
4417#include <sys/epoll.h>
4418
4419int main(void)
4420{
Peter Maydell19e83f62011-04-26 16:56:40 +01004421 /* Note that we use epoll_create1 as a value, not as
4422 * a function being called. This is necessary so that on
4423 * old SPARC glibc versions where the function was present in
4424 * the library but not declared in the header file we will
4425 * fail the configure check. (Otherwise we will get a compiler
4426 * warning but not an error, and will proceed to fail the
4427 * qemu compile where we compile with -Werror.)
4428 */
Blue Swirlc075a722012-08-09 20:21:25 +00004429 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004430}
4431EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004432if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004433 epoll_create1=yes
4434fi
4435
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004436# check for sendfile support
4437sendfile=no
4438cat > $TMPC << EOF
4439#include <sys/sendfile.h>
4440
4441int main(void)
4442{
4443 return sendfile(0, 0, 0, 0);
4444}
4445EOF
4446if compile_prog "" "" ; then
4447 sendfile=yes
4448fi
4449
Riku Voipio51834342014-06-22 11:25:42 +01004450# check for timerfd support (glibc 2.8 and newer)
4451timerfd=no
4452cat > $TMPC << EOF
4453#include <sys/timerfd.h>
4454
4455int main(void)
4456{
4457 return(timerfd_create(CLOCK_REALTIME, 0));
4458}
4459EOF
4460if compile_prog "" "" ; then
4461 timerfd=yes
4462fi
4463
Riku Voipio9af5c902014-08-12 15:58:57 +03004464# check for setns and unshare support
4465setns=no
4466cat > $TMPC << EOF
4467#include <sched.h>
4468
4469int main(void)
4470{
4471 int ret;
4472 ret = setns(0, 0);
4473 ret = unshare(0);
4474 return ret;
4475}
4476EOF
4477if compile_prog "" "" ; then
4478 setns=yes
4479fi
4480
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004481# clock_adjtime probe
4482clock_adjtime=no
4483cat > $TMPC <<EOF
4484#include <time.h>
4485
4486int main(void)
4487{
4488 return clock_adjtime(0, 0);
4489}
4490EOF
4491clock_adjtime=no
4492if compile_prog "" "" ; then
4493 clock_adjtime=yes
4494fi
4495
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004496# syncfs probe
4497syncfs=no
4498cat > $TMPC <<EOF
4499#include <unistd.h>
4500
4501int main(void)
4502{
4503 return syncfs(0);
4504}
4505EOF
4506syncfs=no
4507if compile_prog "" "" ; then
4508 syncfs=yes
4509fi
4510
pbrookcc8ae6d2006-04-23 17:57:59 +00004511# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004512if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004513 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004514 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004515 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004516 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004517 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004518 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004519 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004520 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004521fi
4522
Stefan Weilf514f412009-10-11 12:44:07 +02004523# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004524byteswap_h=no
4525cat > $TMPC << EOF
4526#include <byteswap.h>
4527int main(void) { return bswap_32(0); }
4528EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004529if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004530 byteswap_h=yes
4531fi
4532
Stefan Weil75f13592013-01-05 12:17:38 +01004533# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004534bswap_h=no
4535cat > $TMPC << EOF
4536#include <sys/endian.h>
4537#include <sys/types.h>
4538#include <machine/bswap.h>
4539int main(void) { return bswap32(0); }
4540EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004541if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004542 bswap_h=yes
4543fi
4544
aliguorida93a1f2008-12-12 20:02:52 +00004545##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004546# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004547if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004548 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004549 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004550 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4551 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004552 else
4553 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004554 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004555 fi
4556 libiscsi="no"
4557 fi
4558fi
4559
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004560##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004561# Do we need libm
4562cat > $TMPC << EOF
4563#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004564int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004565EOF
4566if compile_prog "" "" ; then
4567 :
4568elif compile_prog "" "-lm" ; then
4569 LIBS="-lm $LIBS"
4570 libs_qga="-lm $libs_qga"
4571else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004572 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004573fi
4574
4575##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004576# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004577# uClibc provides 2 versions of clock_gettime(), one with realtime
4578# support and one without. This means that the clock_gettime() don't
4579# need -lrt. We still need it for timer_create() so we check for this
4580# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004581cat > $TMPC <<EOF
4582#include <signal.h>
4583#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004584int main(void) {
4585 timer_create(CLOCK_REALTIME, NULL, NULL);
4586 return clock_gettime(CLOCK_REALTIME, NULL);
4587}
aliguorida93a1f2008-12-12 20:02:52 +00004588EOF
4589
Juan Quintela52166aa2009-08-03 14:46:03 +02004590if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004591 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004592# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004593elif compile_prog "" "$pthread_lib -lrt" ; then
4594 LIBS="$LIBS -lrt"
4595 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004596fi
4597
Blue Swirl31ff5042009-09-12 12:33:07 +00004598if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004599 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004600 libs_softmmu="-lutil $libs_softmmu"
4601fi
4602
Blue Swirlde5071c2009-09-12 09:58:46 +00004603##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004604# spice probe
4605if test "$spice" != "no" ; then
4606 cat > $TMPC << EOF
4607#include <spice.h>
4608int main(void) { spice_server_new(); return 0; }
4609EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004610 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4611 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004612 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004613 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004614 compile_prog "$spice_cflags" "$spice_libs" ; then
4615 spice="yes"
4616 libs_softmmu="$libs_softmmu $spice_libs"
4617 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004618 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4619 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004620 else
4621 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004622 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004623 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004624 fi
4625 spice="no"
4626 fi
4627fi
4628
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004629# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004630if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004631 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004632 libcacard_cflags=$($pkg_config --cflags libcacard)
4633 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004634 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004635 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004636 if test "$smartcard" = "yes"; then
4637 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004638 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004639 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004640 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004641fi
4642
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004643# check for libusb
4644if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004645 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004646 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004647 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4648 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004649 else
4650 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004651 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004652 fi
4653 libusb="no"
4654 fi
4655fi
4656
Hans de Goede69354a82011-07-19 11:04:10 +02004657# check for usbredirparser for usb network redirection support
4658if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004659 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004660 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004661 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4662 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004663 else
4664 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004665 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004666 fi
4667 usb_redir="no"
4668 fi
4669fi
4670
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004671##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004672# check if we have VSS SDK headers for win
4673
4674if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4675 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004676 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004677 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4678 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004679 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004680 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4681 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004682 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004683 esac
4684 cat > $TMPC << EOF
4685#define __MIDL_user_allocate_free_DEFINED__
4686#include <inc/win2003/vss.h>
4687int main(void) { return VSS_CTX_BACKUP; }
4688EOF
4689 if compile_prog "$vss_win32_include" "" ; then
4690 guest_agent_with_vss="yes"
4691 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004692 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004693 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004694 else
4695 if test "$vss_win32_sdk" != "" ; then
4696 echo "ERROR: Please download and install Microsoft VSS SDK:"
4697 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4698 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4699 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4700 echo "ERROR: The headers are extracted in the directory \`inc'."
4701 feature_not_found "VSS support"
4702 fi
4703 guest_agent_with_vss="no"
4704 fi
4705fi
4706
4707##########################################
4708# lookup Windows platform SDK (if not specified)
4709# The SDK is needed only to build .tlb (type library) file of guest agent
4710# VSS provider from the source. It is usually unnecessary because the
4711# pre-compiled .tlb file is included.
4712
4713if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4714 if test -z "$win_sdk"; then
4715 programfiles="$PROGRAMFILES"
4716 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4717 if test -n "$programfiles"; then
4718 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4719 else
4720 feature_not_found "Windows SDK"
4721 fi
4722 elif test "$win_sdk" = "no"; then
4723 win_sdk=""
4724 fi
4725fi
4726
4727##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004728# check if mingw environment provides a recent ntddscsi.h
4729if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4730 cat > $TMPC << EOF
4731#include <windows.h>
4732#include <ntddscsi.h>
4733int main(void) {
4734#if !defined(IOCTL_SCSI_GET_ADDRESS)
4735#error Missing required ioctl definitions
4736#endif
4737 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4738 return addr.Lun;
4739}
4740EOF
4741 if compile_prog "" "" ; then
4742 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004743 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004744 fi
4745fi
4746
4747##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004748# virgl renderer probe
4749
4750if test "$virglrenderer" != "no" ; then
4751 cat > $TMPC << EOF
4752#include <virglrenderer.h>
4753int main(void) { virgl_renderer_poll(); return 0; }
4754EOF
4755 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4756 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004757 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004758 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4759 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4760 virglrenderer="yes"
4761 else
4762 if test "$virglrenderer" = "yes" ; then
4763 feature_not_found "virglrenderer"
4764 fi
4765 virglrenderer="no"
4766 fi
4767fi
4768
4769##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004770# capstone
4771
Richard Hendersone219c492017-09-28 09:01:23 -07004772case "$capstone" in
4773 "" | yes)
4774 if $pkg_config capstone; then
4775 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004776 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004777 capstone=git
4778 elif test -e "${source_path}/capstone/Makefile" ; then
4779 capstone=internal
4780 elif test -z "$capstone" ; then
4781 capstone=no
4782 else
4783 feature_not_found "capstone" "Install capstone devel or git submodule"
4784 fi
4785 ;;
4786
4787 system)
4788 if ! $pkg_config capstone; then
4789 feature_not_found "capstone" "Install capstone devel"
4790 fi
4791 ;;
4792esac
4793
4794case "$capstone" in
4795 git | internal)
4796 if test "$capstone" = git; then
4797 git_submodules="${git_submodules} capstone"
4798 fi
4799 mkdir -p capstone
4800 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4801 if test "$mingw32" = "yes"; then
4802 LIBCAPSTONE=capstone.lib
4803 else
4804 LIBCAPSTONE=libcapstone.a
4805 fi
4806 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4807 ;;
4808
4809 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004810 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4811 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004812 ;;
4813
4814 no)
4815 ;;
4816 *)
4817 error_exit "Unknown state for capstone: $capstone"
4818 ;;
4819esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004820
4821##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004822# check if we have fdatasync
4823
4824fdatasync=no
4825cat > $TMPC << EOF
4826#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004827int main(void) {
4828#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4829return fdatasync(0);
4830#else
Stefan Weile172fe12012-04-06 21:33:20 +02004831#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004832#endif
4833}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004834EOF
4835if compile_prog "" "" ; then
4836 fdatasync=yes
4837fi
4838
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004839##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004840# check if we have madvise
4841
4842madvise=no
4843cat > $TMPC << EOF
4844#include <sys/types.h>
4845#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004846#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004847int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4848EOF
4849if compile_prog "" "" ; then
4850 madvise=yes
4851fi
4852
4853##########################################
4854# check if we have posix_madvise
4855
4856posix_madvise=no
4857cat > $TMPC << EOF
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 posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4861EOF
4862if compile_prog "" "" ; then
4863 posix_madvise=yes
4864fi
4865
4866##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004867# check if we have posix_memalign()
4868
4869posix_memalign=no
4870cat > $TMPC << EOF
4871#include <stdlib.h>
4872int main(void) {
4873 void *p;
4874 return posix_memalign(&p, 8, 8);
4875}
4876EOF
4877if compile_prog "" "" ; then
4878 posix_memalign=yes
4879fi
4880
4881##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004882# check if we have posix_syslog
4883
4884posix_syslog=no
4885cat > $TMPC << EOF
4886#include <syslog.h>
4887int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4888EOF
4889if compile_prog "" "" ; then
4890 posix_syslog=yes
4891fi
4892
4893##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004894# check if we have sem_timedwait
4895
4896sem_timedwait=no
4897cat > $TMPC << EOF
4898#include <semaphore.h>
4899int main(void) { return sem_timedwait(0, 0); }
4900EOF
4901if compile_prog "" "" ; then
4902 sem_timedwait=yes
4903fi
4904
4905##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004906# check if we have strchrnul
4907
4908strchrnul=no
4909cat > $TMPC << EOF
4910#include <string.h>
4911int main(void);
4912// Use a haystack that the compiler shouldn't be able to constant fold
4913char *haystack = (char*)&main;
4914int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4915EOF
4916if compile_prog "" "" ; then
4917 strchrnul=yes
4918fi
4919
4920##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004921# check if trace backend exists
4922
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004923$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004924if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004925 error_exit "invalid trace backends" \
4926 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004927fi
4928
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004929##########################################
4930# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004931if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004932 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004933#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004934int main(void) { return 0; }
4935EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004936 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004937 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004938 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004939 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004940 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004941 fi
4942 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004943 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004944 else
4945 urcu_bp_libs="-lurcu-bp"
4946 fi
4947
4948 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4949 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004950 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004951 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004952 fi
4953fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004954
4955##########################################
4956# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004957if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004958 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004959 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004960 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004961 trace_backend_stap="no"
4962 if has 'stap' ; then
4963 trace_backend_stap="yes"
4964 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004965fi
4966
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004967##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004968# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304969
Peter Maydell7c2acc72013-04-08 12:11:27 +01004970# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004971# is sigcontext. On Windows the only valid backend is the Windows
4972# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004973
4974ucontext_works=no
4975if test "$darwin" != "yes"; then
4976 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304977#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004978#ifdef __stub_makecontext
4979#error Ignoring glibc stub makecontext which will always fail
4980#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004981int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304982EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004983 if compile_prog "" "" ; then
4984 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304985 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004986fi
4987
4988if test "$coroutine" = ""; then
4989 if test "$mingw32" = "yes"; then
4990 coroutine=win32
4991 elif test "$ucontext_works" = "yes"; then
4992 coroutine=ucontext
4993 else
4994 coroutine=sigaltstack
4995 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004996else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004997 case $coroutine in
4998 windows)
4999 if test "$mingw32" != "yes"; then
5000 error_exit "'windows' coroutine backend only valid for Windows"
5001 fi
5002 # Unfortunately the user visible backend name doesn't match the
5003 # coroutine-*.c filename for this case, so we have to adjust it here.
5004 coroutine=win32
5005 ;;
5006 ucontext)
5007 if test "$ucontext_works" != "yes"; then
5008 feature_not_found "ucontext"
5009 fi
5010 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005011 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005012 if test "$mingw32" = "yes"; then
5013 error_exit "only the 'windows' coroutine backend is valid for Windows"
5014 fi
5015 ;;
5016 *)
5017 error_exit "unknown coroutine backend $coroutine"
5018 ;;
5019 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305020fi
5021
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005022if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005023 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005024fi
5025
Peter Lieven7d992e42016-09-27 11:58:45 +02005026if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005027 if test "$coroutine_pool" = "yes"; then
5028 echo "WARN: disabling coroutine pool for stack usage debugging"
5029 coroutine_pool=no
5030 fi
5031fi
5032
5033
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305034##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305035# check if we have open_by_handle_at
5036
Stefan Weil4e1797f2012-06-18 22:11:06 +02005037open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305038cat > $TMPC << EOF
5039#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005040#if !defined(AT_EMPTY_PATH)
5041# error missing definition
5042#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005043int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005044#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305045EOF
5046if compile_prog "" "" ; then
5047 open_by_handle_at=yes
5048fi
5049
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305050########################################
5051# check if we have linux/magic.h
5052
5053linux_magic_h=no
5054cat > $TMPC << EOF
5055#include <linux/magic.h>
5056int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005057 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305058}
5059EOF
5060if compile_prog "" "" ; then
5061 linux_magic_h=yes
5062fi
5063
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005064########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005065# check whether we can disable warning option with a pragma (this is needed
5066# to silence warnings in the headers of some versions of external libraries).
5067# This test has to be compiled with -Werror as otherwise an unknown pragma is
5068# only a warning.
5069#
5070# If we can't selectively disable warning in the code, disable -Werror so that
5071# the build doesn't fail anyway.
5072
Peter Maydell06d71fa2012-07-30 16:13:07 +01005073pragma_disable_unused_but_set=no
5074cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005075#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005076#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005077#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005078
Peter Maydell06d71fa2012-07-30 16:13:07 +01005079int main(void) {
5080 return 0;
5081}
5082EOF
5083if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005084 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005085else
5086 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005087fi
5088
5089########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005090# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005091
5092valgrind_h=no
5093cat > $TMPC << EOF
5094#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005095int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005096 return 0;
5097}
5098EOF
5099if compile_prog "" "" ; then
5100 valgrind_h=yes
5101fi
5102
5103########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005104# check if environ is declared
5105
5106has_environ=no
5107cat > $TMPC << EOF
5108#include <unistd.h>
5109int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005110 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005111 return 0;
5112}
5113EOF
5114if compile_prog "" "" ; then
5115 has_environ=yes
5116fi
5117
Richard Henderson76a347e2012-12-28 14:17:02 -08005118########################################
5119# check if cpuid.h is usable.
5120
Richard Henderson76a347e2012-12-28 14:17:02 -08005121cat > $TMPC << EOF
5122#include <cpuid.h>
5123int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005124 unsigned a, b, c, d;
5125 int max = __get_cpuid_max(0, 0);
5126
5127 if (max >= 1) {
5128 __cpuid(1, a, b, c, d);
5129 }
5130
5131 if (max >= 7) {
5132 __cpuid_count(7, 0, a, b, c, d);
5133 }
5134
5135 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005136}
5137EOF
5138if compile_prog "" "" ; then
5139 cpuid_h=yes
5140fi
5141
Richard Henderson5dd89902017-07-18 18:40:18 -10005142##########################################
5143# avx2 optimization requirement check
5144#
5145# There is no point enabling this if cpuid.h is not usable,
5146# since we won't be able to select the new routines.
5147
Liam Merwick86583a02018-10-19 21:38:59 +01005148if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005149 cat > $TMPC << EOF
5150#pragma GCC push_options
5151#pragma GCC target("avx2")
5152#include <cpuid.h>
5153#include <immintrin.h>
5154static int bar(void *a) {
5155 __m256i x = *(__m256i *)a;
5156 return _mm256_testz_si256(x, x);
5157}
5158int main(int argc, char *argv[]) { return bar(argv[0]); }
5159EOF
5160 if compile_object "" ; then
5161 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005162 else
5163 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005164 fi
5165fi
5166
Richard Hendersonf5401662013-02-16 12:46:59 -08005167########################################
5168# check if __[u]int128_t is usable.
5169
5170int128=no
5171cat > $TMPC << EOF
5172__int128_t a;
5173__uint128_t b;
5174int main (void) {
5175 a = a + b;
5176 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005177 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005178 return 0;
5179}
5180EOF
5181if compile_prog "" "" ; then
5182 int128=yes
5183fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005184
Richard Henderson7ebee432016-06-29 21:10:59 -07005185#########################################
5186# See if 128-bit atomic operations are supported.
5187
5188atomic128=no
5189if test "$int128" = "yes"; then
5190 cat > $TMPC << EOF
5191int main(void)
5192{
5193 unsigned __int128 x = 0, y = 0;
5194 y = __atomic_load_16(&x, 0);
5195 __atomic_store_16(&x, y, 0);
5196 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5197 return 0;
5198}
5199EOF
5200 if compile_prog "" "" ; then
5201 atomic128=yes
5202 fi
5203fi
5204
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005205cmpxchg128=no
5206if test "$int128" = yes -a "$atomic128" = no; then
5207 cat > $TMPC << EOF
5208int main(void)
5209{
5210 unsigned __int128 x = 0, y = 0;
5211 __sync_val_compare_and_swap_16(&x, y, x);
5212 return 0;
5213}
5214EOF
5215 if compile_prog "" "" ; then
5216 cmpxchg128=yes
5217 fi
5218fi
5219
Richard Hendersondf79b992016-09-02 12:23:57 -07005220#########################################
5221# See if 64-bit atomic operations are supported.
5222# Note that without __atomic builtins, we can only
5223# assume atomic loads/stores max at pointer size.
5224
5225cat > $TMPC << EOF
5226#include <stdint.h>
5227int main(void)
5228{
5229 uint64_t x = 0, y = 0;
5230#ifdef __ATOMIC_RELAXED
5231 y = __atomic_load_8(&x, 0);
5232 __atomic_store_8(&x, y, 0);
5233 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5234 __atomic_exchange_8(&x, y, 0);
5235 __atomic_fetch_add_8(&x, y, 0);
5236#else
5237 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5238 __sync_lock_test_and_set(&x, y);
5239 __sync_val_compare_and_swap(&x, y, 0);
5240 __sync_fetch_and_add(&x, y);
5241#endif
5242 return 0;
5243}
5244EOF
5245if compile_prog "" "" ; then
5246 atomic64=yes
5247fi
5248
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005249########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005250# See if 16-byte vector operations are supported.
5251# Even without a vector unit the compiler may expand these.
5252# There is a bug in old GCC for PPC that crashes here.
5253# Unfortunately it's the system compiler for Centos 7.
5254
5255cat > $TMPC << EOF
5256typedef unsigned char U1 __attribute__((vector_size(16)));
5257typedef unsigned short U2 __attribute__((vector_size(16)));
5258typedef unsigned int U4 __attribute__((vector_size(16)));
5259typedef unsigned long long U8 __attribute__((vector_size(16)));
5260typedef signed char S1 __attribute__((vector_size(16)));
5261typedef signed short S2 __attribute__((vector_size(16)));
5262typedef signed int S4 __attribute__((vector_size(16)));
5263typedef signed long long S8 __attribute__((vector_size(16)));
5264static U1 a1, b1;
5265static U2 a2, b2;
5266static U4 a4, b4;
5267static U8 a8, b8;
5268static S1 c1;
5269static S2 c2;
5270static S4 c4;
5271static S8 c8;
5272static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005273void helper(void *d, void *a, int shift, int i);
5274void helper(void *d, void *a, int shift, int i)
5275{
5276 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5277 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5278 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5279 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5280}
Richard Hendersondb432672017-09-15 14:11:45 -07005281int main(void)
5282{
5283 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5284 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5285 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5286 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5287 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5288 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5289 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5290 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5291 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5292 return 0;
5293}
5294EOF
5295
5296vector16=no
5297if compile_prog "" "" ; then
5298 vector16=yes
5299fi
5300
5301########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005302# check if getauxval is available.
5303
5304getauxval=no
5305cat > $TMPC << EOF
5306#include <sys/auxv.h>
5307int main(void) {
5308 return getauxval(AT_HWCAP) == 0;
5309}
5310EOF
5311if compile_prog "" "" ; then
5312 getauxval=yes
5313fi
5314
John Snowfd0e6052015-03-25 18:57:39 -04005315########################################
5316# check if ccache is interfering with
5317# semantic analysis of macros
5318
John Snow5e4dfd32015-10-28 13:56:40 -04005319unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005320ccache_cpp2=no
5321cat > $TMPC << EOF
5322static const int Z = 1;
5323#define fn() ({ Z; })
5324#define TAUT(X) ((X) == Z)
5325#define PAREN(X, Y) (X == Y)
5326#define ID(X) (X)
5327int main(int argc, char *argv[])
5328{
5329 int x = 0, y = 0;
5330 x = ID(x);
5331 x = fn();
5332 fn();
5333 if (PAREN(x, y)) return 0;
5334 if (TAUT(Z)) return 0;
5335 return 0;
5336}
5337EOF
5338
5339if ! compile_object "-Werror"; then
5340 ccache_cpp2=yes
5341fi
5342
John Snowb553a042015-11-03 15:43:42 -05005343#################################################
5344# clang does not support glibc + FORTIFY_SOURCE.
5345
5346if test "$fortify_source" != "no"; then
5347 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5348 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005349 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005350 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005351 fortify_source="no";
5352 else
5353 fortify_source="yes"
5354 fi
5355fi
5356
Fam Zheng1efad062018-06-01 17:26:43 +08005357###############################################
5358# Check if copy_file_range is provided by glibc
5359have_copy_file_range=no
5360cat > $TMPC << EOF
5361#include <unistd.h>
5362int main(void) {
5363 copy_file_range(0, NULL, 0, NULL, 0, 0);
5364 return 0;
5365}
5366EOF
5367if compile_prog "" "" ; then
5368 have_copy_file_range=yes
5369fi
5370
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305371##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005372# check if struct fsxattr is available via linux/fs.h
5373
5374have_fsxattr=no
5375cat > $TMPC << EOF
5376#include <linux/fs.h>
5377struct fsxattr foo;
5378int main(void) {
5379 return 0;
5380}
5381EOF
5382if compile_prog "" "" ; then
5383 have_fsxattr=yes
5384fi
5385
Peter Maydellb66e10e2016-06-08 18:34:32 +01005386##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005387# check for usable membarrier system call
5388if test "$membarrier" = "yes"; then
5389 have_membarrier=no
5390 if test "$mingw32" = "yes" ; then
5391 have_membarrier=yes
5392 elif test "$linux" = "yes" ; then
5393 cat > $TMPC << EOF
5394 #include <linux/membarrier.h>
5395 #include <sys/syscall.h>
5396 #include <unistd.h>
5397 #include <stdlib.h>
5398 int main(void) {
5399 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5400 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5401 exit(0);
5402 }
5403EOF
5404 if compile_prog "" "" ; then
5405 have_membarrier=yes
5406 fi
5407 fi
5408 if test "$have_membarrier" = "no"; then
5409 feature_not_found "membarrier" "membarrier system call not available"
5410 fi
5411else
5412 # Do not enable it by default even for Mingw32, because it doesn't
5413 # work on Wine.
5414 membarrier=no
5415fi
5416
5417##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005418# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005419have_rtnetlink=no
5420cat > $TMPC << EOF
5421#include <linux/rtnetlink.h>
5422int main(void) {
5423 return IFLA_PROTO_DOWN;
5424}
5425EOF
5426if compile_prog "" "" ; then
5427 have_rtnetlink=yes
5428fi
5429
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005430##########################################
5431# check for usable AF_VSOCK environment
5432have_af_vsock=no
5433cat > $TMPC << EOF
5434#include <errno.h>
5435#include <sys/types.h>
5436#include <sys/socket.h>
5437#if !defined(AF_VSOCK)
5438# error missing AF_VSOCK flag
5439#endif
5440#include <linux/vm_sockets.h>
5441int main(void) {
5442 int sock, ret;
5443 struct sockaddr_vm svm;
5444 socklen_t len = sizeof(svm);
5445 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5446 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5447 if ((ret == -1) && (errno == ENOTCONN)) {
5448 return 0;
5449 }
5450 return -1;
5451}
5452EOF
5453if compile_prog "" "" ; then
5454 have_af_vsock=yes
5455fi
5456
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005457##########################################
5458# check for usable AF_ALG environment
5459hava_afalg=no
5460cat > $TMPC << EOF
5461#include <errno.h>
5462#include <sys/types.h>
5463#include <sys/socket.h>
5464#include <linux/if_alg.h>
5465int main(void) {
5466 int sock;
5467 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5468 return sock;
5469}
5470EOF
5471if compile_prog "" "" ; then
5472 have_afalg=yes
5473fi
5474if test "$crypto_afalg" = "yes"
5475then
5476 if test "$have_afalg" != "yes"
5477 then
5478 error_exit "AF_ALG requested but could not be detected"
5479 fi
5480fi
5481
5482
James Clarke6969ec62016-06-06 12:02:50 +01005483#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005484# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005485if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005486 cat > $TMPC << EOF
5487#include <Hypervisor/hv.h>
5488int main() { return 0;}
5489EOF
5490 if ! compile_object ""; then
5491 hvf='no'
5492 else
5493 hvf='yes'
5494 LDFLAGS="-framework Hypervisor $LDFLAGS"
5495 fi
5496fi
5497
5498#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005499# Sparc implicitly links with --relax, which is
5500# incompatible with -r, so --no-relax should be
5501# given. It does no harm to give it on other
5502# platforms too.
5503
5504# Note: the prototype is needed since QEMU_CFLAGS
5505# contains -Wmissing-prototypes
5506cat > $TMPC << EOF
5507extern int foo(void);
5508int foo(void) { return 0; }
5509EOF
5510if ! compile_object ""; then
5511 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5512fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005513for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5514 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5515 LD_REL_FLAGS=$i
5516 break
5517 fi
5518done
5519if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5520 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005521fi
5522
Jan Vesely277abf12016-04-29 13:15:23 -04005523##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005524# check for sysmacros.h
5525
5526have_sysmacros=no
5527cat > $TMPC << EOF
5528#include <sys/sysmacros.h>
5529int main(void) {
5530 return makedev(0, 0);
5531}
5532EOF
5533if compile_prog "" "" ; then
5534 have_sysmacros=yes
5535fi
5536
5537##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005538# Veritas HyperScale block driver VxHS
5539# Check if libvxhs is installed
5540
5541if test "$vxhs" != "no" ; then
5542 cat > $TMPC <<EOF
5543#include <stdint.h>
5544#include <qnio/qnio_api.h>
5545
5546void *vxhs_callback;
5547
5548int main(void) {
5549 iio_init(QNIO_VERSION, vxhs_callback);
5550 return 0;
5551}
5552EOF
5553 vxhs_libs="-lvxhs -lssl"
5554 if compile_prog "" "$vxhs_libs" ; then
5555 vxhs=yes
5556 else
5557 if test "$vxhs" = "yes" ; then
5558 feature_not_found "vxhs block device" "Install libvxhs See github"
5559 fi
5560 vxhs=no
5561 fi
5562fi
5563
5564##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005565# check for _Static_assert()
5566
5567have_static_assert=no
5568cat > $TMPC << EOF
5569_Static_assert(1, "success");
5570int main(void) {
5571 return 0;
5572}
5573EOF
5574if compile_prog "" "" ; then
5575 have_static_assert=yes
5576fi
5577
5578##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005579# check for utmpx.h, it is missing e.g. on OpenBSD
5580
5581have_utmpx=no
5582cat > $TMPC << EOF
5583#include <utmpx.h>
5584struct utmpx user_info;
5585int main(void) {
5586 return 0;
5587}
5588EOF
5589if compile_prog "" "" ; then
5590 have_utmpx=yes
5591fi
5592
5593##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005594# checks for sanitizers
5595
Marc-André Lureau247724c2018-01-16 16:11:51 +01005596have_asan=no
5597have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005598have_asan_iface_h=no
5599have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005600
5601if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005602 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005603 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5604 have_asan=yes
5605 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005606
5607 # we could use a simple skeleton for flags checks, but this also
5608 # detect the static linking issue of ubsan, see also:
5609 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5610 cat > $TMPC << EOF
5611#include <stdlib.h>
5612int main(void) {
5613 void *tmp = malloc(10);
5614 return *(int *)(tmp + 2);
5615}
5616EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005617 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5618 have_ubsan=yes
5619 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005620
5621 if check_include "sanitizer/asan_interface.h" ; then
5622 have_asan_iface_h=yes
5623 fi
5624
5625 cat > $TMPC << EOF
5626#include <sanitizer/asan_interface.h>
5627int main(void) {
5628 __sanitizer_start_switch_fiber(0, 0, 0);
5629 return 0;
5630}
5631EOF
5632 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5633 have_asan_iface_fiber=yes
5634 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005635fi
5636
5637##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005638# Docker and cross-compiler support
5639#
5640# This is specifically for building test
5641# cases for foreign architectures, not
5642# cross-compiling QEMU itself.
5643
5644if has "docker"; then
5645 docker=$($python $source_path/tests/docker/docker.py probe)
5646fi
5647
5648##########################################
Junyan He17824402018-07-18 15:47:59 +08005649# check for libpmem
5650
5651if test "$libpmem" != "no"; then
5652 if $pkg_config --exists "libpmem"; then
5653 libpmem="yes"
5654 libpmem_libs=$($pkg_config --libs libpmem)
5655 libpmem_cflags=$($pkg_config --cflags libpmem)
5656 libs_softmmu="$libs_softmmu $libpmem_libs"
5657 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5658 else
5659 if test "$libpmem" = "yes" ; then
5660 feature_not_found "libpmem" "Install nvml or pmdk"
5661 fi
5662 libpmem="no"
5663 fi
5664fi
5665
5666##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005667# End of CC checks
5668# After here, no more $cc or $ld runs
5669
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005670write_c_skeleton
5671
Blue Swirl1d728c32012-05-01 18:45:39 +00005672if test "$gcov" = "yes" ; then
5673 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5674 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005675elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005676 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005677elif test "$debug" = "no"; then
5678 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005679fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005680
Marc-André Lureau247724c2018-01-16 16:11:51 +01005681if test "$have_asan" = "yes"; then
5682 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005683 if test "$have_asan_iface_h" = "no" ; then
5684 echo "ASAN build enabled, but ASAN header missing." \
5685 "Without code annotation, the report may be inferior."
5686 elif test "$have_asan_iface_fiber" = "no" ; then
5687 echo "ASAN build enabled, but ASAN header is too old." \
5688 "Without code annotation, the report may be inferior."
5689 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005690fi
5691if test "$have_ubsan" = "yes"; then
5692 CFLAGS="-fsanitize=undefined $CFLAGS"
5693fi
5694
Peter Lieven6542aa92014-02-03 10:26:13 +01005695##########################################
5696# Do we have libnfs
5697if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005698 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005699 libnfs="yes"
5700 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005701 else
5702 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005703 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005704 fi
5705 libnfs="no"
5706 fi
5707fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005708
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005709##########################################
5710# Do we have libudev
5711if test "$libudev" != "no" ; then
5712 if $pkg_config libudev && test "$static" != "yes"; then
5713 libudev="yes"
5714 libudev_libs=$($pkg_config --libs libudev)
5715 else
5716 libudev="no"
5717 fi
5718fi
5719
Peter Maydell6ca026c2012-07-18 15:10:18 +01005720# Now we've finished running tests it's OK to add -Werror to the compiler flags
5721if test "$werror" = "yes"; then
5722 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5723fi
5724
Juan Quintelae86ecd42009-08-03 14:45:59 +02005725if test "$solaris" = "no" ; then
5726 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005727 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005728 fi
5729fi
5730
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005731# test if pod2man has --utf8 option
5732if pod2man --help | grep -q utf8; then
5733 POD2MAN="pod2man --utf8"
5734else
5735 POD2MAN="pod2man"
5736fi
5737
Blue Swirl952afb72010-09-19 08:36:34 +00005738# Use ASLR, no-SEH and DEP if available
5739if test "$mingw32" = "yes" ; then
5740 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005741 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005742 LDFLAGS="-Wl,$flag $LDFLAGS"
5743 fi
5744 done
5745fi
5746
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005747qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005748qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005749qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005750qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005751
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005752# We can only support ivshmem if we have eventfd
5753if [ "$eventfd" = "yes" ]; then
5754 ivshmem=yes
5755fi
5756
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005757tools=""
5758if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005759 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005760 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5761 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005762 fi
5763 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005764 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005765 fi
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005766 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5767 tools="elf2dmp $tools"
5768 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005769fi
5770if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005771 if test "$linux" = yes; then
5772 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005773 virtfs=yes
5774 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5775 else
5776 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005777 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305778 fi
Andreas Färber17500372012-05-01 01:12:03 +02005779 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005780 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005781 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5782 mpath=yes
5783 else
5784 if test "$mpath" = yes; then
5785 error_exit "Multipath requires libmpathpersist devel"
5786 fi
5787 mpath=no
5788 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005789 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5790 else
5791 if test "$virtfs" = yes; then
5792 error_exit "VirtFS is supported only on Linux"
5793 fi
5794 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005795 if test "$mpath" = yes; then
5796 error_exit "Multipath is supported only on Linux"
5797 fi
5798 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305799 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005800 if test "$xkbcommon" = "yes"; then
5801 tools="qemu-keymap\$(EXESUF) $tools"
5802 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005803fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005804
5805# Probe for guest agent support/options
5806
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005807if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005808 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005809 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005810 guest_agent=yes
5811 elif [ "$guest_agent" != yes ]; then
5812 guest_agent=no
5813 else
5814 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005815 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005816fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005817
Michael Roth9d6bc272015-08-26 10:49:13 -05005818# Guest agent Window MSI package
5819
5820if test "$guest_agent" != yes; then
5821 if test "$guest_agent_msi" = yes; then
5822 error_exit "MSI guest agent package requires guest agent enabled"
5823 fi
5824 guest_agent_msi=no
5825elif test "$mingw32" != "yes"; then
5826 if test "$guest_agent_msi" = "yes"; then
5827 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5828 fi
5829 guest_agent_msi=no
5830elif ! has wixl; then
5831 if test "$guest_agent_msi" = "yes"; then
5832 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5833 fi
5834 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005835else
5836 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5837 # disabled explicitly
5838 if test "$guest_agent_msi" != "no"; then
5839 guest_agent_msi=yes
5840 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005841fi
5842
Michael Roth1a349042015-08-26 11:14:31 -05005843if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005844 if test "$guest_agent_with_vss" = "yes"; then
5845 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5846 fi
5847
5848 if test "$QEMU_GA_MANUFACTURER" = ""; then
5849 QEMU_GA_MANUFACTURER=QEMU
5850 fi
5851
5852 if test "$QEMU_GA_DISTRO" = ""; then
5853 QEMU_GA_DISTRO=Linux
5854 fi
5855
5856 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005857 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005858 fi
5859
Stefan Weil89138852016-05-16 15:10:20 +02005860 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005861
5862 case "$cpu" in
5863 x86_64)
5864 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5865 ;;
5866 i386)
5867 QEMU_GA_MSI_ARCH="-D Arch=32"
5868 ;;
5869 *)
5870 error_exit "CPU $cpu not supported for building installation package"
5871 ;;
5872 esac
5873fi
5874
Paolo Bonzinica35f782010-05-26 16:08:29 +02005875# Mac OS X ships with a broken assembler
5876roms=
5877if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5878 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5879 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005880 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005881 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5882 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5883 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005884 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5885 ld_i386_emulation="$emu"
5886 roms="optionrom"
5887 break
5888 fi
5889 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005890fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005891if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005892 roms="$roms spapr-rtas"
5893fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005894
Christian Borntraeger9933c302013-04-23 01:23:03 +00005895if test "$cpu" = "s390x" ; then
5896 roms="$roms s390-ccw"
5897fi
5898
Richard Henderson964c6fa2013-06-21 19:10:16 -07005899# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005900if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005901 textseg_addr=
5902 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005903 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5904 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005905 textseg_addr=0x60000000
5906 ;;
5907 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005908 # A 256M aligned address, high in the address space, with enough
5909 # room for the code_gen_buffer above it before the stack.
5910 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005911 ;;
5912 esac
5913 if [ -n "$textseg_addr" ]; then
5914 cat > $TMPC <<EOF
5915 int main(void) { return 0; }
5916EOF
5917 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5918 if ! compile_prog "" "$textseg_ldflags"; then
5919 # In case ld does not support -Ttext-segment, edit the default linker
5920 # script via sed to set the .text start addr. This is needed on FreeBSD
5921 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005922 if ! $ld --verbose >/dev/null 2>&1; then
5923 error_exit \
5924 "We need to link the QEMU user mode binaries at a" \
5925 "specific text address. Unfortunately your linker" \
5926 "doesn't support either the -Ttext-segment option or" \
5927 "printing the default linker script with --verbose." \
5928 "If you don't want the user mode binaries, pass the" \
5929 "--disable-user option to configure."
5930 fi
5931
Richard Henderson964c6fa2013-06-21 19:10:16 -07005932 $ld --verbose | sed \
5933 -e '1,/==================================================/d' \
5934 -e '/==================================================/,$d' \
5935 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5936 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5937 textseg_ldflags="-Wl,-T../config-host.ld"
5938 fi
5939 fi
5940fi
5941
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005942# Check that the C++ compiler exists and works with the C compiler.
5943# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5944if has $cxx; then
5945 cat > $TMPC <<EOF
5946int c_function(void);
5947int main(void) { return c_function(); }
5948EOF
5949
5950 compile_object
5951
5952 cat > $TMPCXX <<EOF
5953extern "C" {
5954 int c_function(void);
5955}
5956int c_function(void) { return 42; }
5957EOF
5958
5959 update_cxxflags
5960
5961 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5962 # C++ compiler $cxx works ok with C compiler $cc
5963 :
5964 else
5965 echo "C++ compiler $cxx does not work with C compiler $cc"
5966 echo "Disabling C++ specific optional code"
5967 cxx=
5968 fi
5969else
5970 echo "No C++ compiler available; disabling C++ specific optional code"
5971 cxx=
5972fi
5973
Cole Robinson02d34f62016-05-06 14:03:09 -04005974echo_version() {
5975 if test "$1" = "yes" ; then
5976 echo "($2)"
5977 fi
5978}
5979
Jan Kiszka50e12062014-10-02 10:03:55 +02005980# prepend pixman and ftd flags after all config tests are done
5981QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005982QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005983libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005984
bellard43ce4df2003-06-09 19:53:12 +00005985echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005986echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005987echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005988echo "binary directory $(eval echo $bindir)"
5989echo "library directory $(eval echo $libdir)"
5990echo "module directory $(eval echo $qemu_moddir)"
5991echo "libexec directory $(eval echo $libexecdir)"
5992echo "include directory $(eval echo $includedir)"
5993echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005994if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005995echo "local state directory $(eval echo $local_statedir)"
5996echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005997echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005998else
5999echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006000echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006001fi
bellard5a671352003-10-01 00:13:48 +00006002echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006003echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006004echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006005echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006006echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006007echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006008echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006009echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006010echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006011echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006012echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006013echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006014echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006015echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006016echo "python $python ($python_version)"
Brade2d88302011-09-02 16:53:28 -04006017if test "$slirp" = "yes" ; then
6018 echo "smbd $smbd"
6019fi
Fam Zheng17969262014-02-10 14:48:56 +08006020echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006021echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006022echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006023echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006024echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006025echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006026echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006027echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006028echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006029if test "$darwin" = "yes" ; then
6030 echo "Cocoa support $cocoa"
6031fi
Stefan Weil89138852016-05-16 15:10:20 +02006032echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6033echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006034echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006035echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006036echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006037echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006038echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006039echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006040echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00006041echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006042echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006043echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006044echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006045echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006046echo "Block whitelist (rw) $block_drv_rw_whitelist"
6047echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306048echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006049echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006050echo "VNC support $vnc"
6051if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006052 echo "VNC SASL support $vnc_sasl"
6053 echo "VNC JPEG support $vnc_jpeg"
6054 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006055fi
blueswir131422552007-04-16 18:27:06 +00006056if test -n "$sparc_cpu"; then
6057 echo "Target Sparc Arch $sparc_cpu"
6058fi
aliguorie37630c2009-04-22 15:19:10 +00006059echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006060if test "$xen" = "yes" ; then
6061 echo "xen ctrl version $xen_ctrl_version"
6062fi
aurel322e4d9fb2008-04-08 06:01:02 +00006063echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006064echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006065echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006066echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006067echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006068echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006069echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006070echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006071echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006072echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006073echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006074echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006075echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006076echo "TCG support $tcg"
6077if test "$tcg" = "yes" ; then
6078 echo "TCG debug enabled $debug_tcg"
6079 echo "TCG interpreter $tcg_interpreter"
6080fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006081echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006082echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006083echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006084echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006085echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006086echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006087echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006088echo "madvise $madvise"
6089echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006090echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006091echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006092echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006093echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006094echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006095echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006096echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006097echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006098if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006099echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006100fi
Stefan Weil89138852016-05-16 15:10:20 +02006101echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006102echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006103echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006104echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006105echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006106echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006107echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006108echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006109echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006110echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006111echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006112echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006113echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006114echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006115echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006116echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006117echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006118echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006119echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006120echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306121echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006122echo "gcov $gcov_tool"
6123echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006124echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006125echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006126echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006127echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006128echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006129echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006130echo "lzo support $lzo"
6131echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006132echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006133echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006134echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006135echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006136echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006137echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006138echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006139echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006140echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006141echo "bochs support $bochs"
6142echo "cloop support $cloop"
6143echo "dmg support $dmg"
6144echo "qcow v1 support $qcow1"
6145echo "vdi support $vdi"
6146echo "vvfat support $vvfat"
6147echo "qed support $qed"
6148echo "parallels support $parallels"
6149echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006150echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006151echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006152echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006153echo "libudev $libudev"
bellard67b915a2004-03-31 23:37:16 +00006154
Stefan Weil1ba16962011-07-29 22:40:45 +02006155if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006156echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006157fi
bellard97a847b2003-08-10 21:36:04 +00006158
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006159if test "$sdlabi" = "1.2"; then
6160 echo
6161 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6162 echo "WARNING: future releases. Please switch to using SDL 2.0"
6163fi
6164
Peter Maydell898be3e2017-03-21 14:31:57 +00006165if test "$supported_cpu" = "no"; then
6166 echo
6167 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6168 echo
6169 echo "CPU host architecture $cpu support is not currently maintained."
6170 echo "The QEMU project intends to remove support for this host CPU in"
6171 echo "a future release if nobody volunteers to maintain it and to"
6172 echo "provide a build host for our continuous integration setup."
6173 echo "configure has succeeded and you can continue to build, but"
6174 echo "if you care about QEMU on this platform you should contact"
6175 echo "us upstream at qemu-devel@nongnu.org."
6176fi
6177
6178if test "$supported_os" = "no"; then
6179 echo
6180 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6181 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006182 echo "Host OS $targetos support is not currently maintained."
6183 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006184 echo "a future release if nobody volunteers to maintain it and to"
6185 echo "provide a build host for our continuous integration setup."
6186 echo "configure has succeeded and you can continue to build, but"
6187 echo "if you care about QEMU on this platform you should contact"
6188 echo "us upstream at qemu-devel@nongnu.org."
6189fi
6190
Juan Quintela98ec69a2009-07-16 18:34:18 +02006191config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006192
Stefan Weildbd99ae2013-01-01 18:33:44 +01006193echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6194
Juan Quintela98ec69a2009-07-16 18:34:18 +02006195echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006196echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006197
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006198echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006199echo "prefix=$prefix" >> $config_host_mak
6200echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006201echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006202echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006203echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006204echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006205echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006206echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006207echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006208echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006209echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006210echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006211if test "$mingw32" = "no" ; then
6212 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6213fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006214echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006215echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006216echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006217echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006218echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006219echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006220
Juan Quintela98ec69a2009-07-16 18:34:18 +02006221echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006222
aurel32f8393942009-04-13 18:45:38 +00006223if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006224 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006225fi
aliguori1625af82009-04-05 17:41:02 +00006226if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006227 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006228fi
bellard7d132992003-03-06 23:23:54 +00006229if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006230 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006231fi
bellard67b915a2004-03-31 23:37:16 +00006232if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006233 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006234 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006235 version_major=${rc_version%%.*}
6236 rc_version=${rc_version#*.}
6237 version_minor=${rc_version%%.*}
6238 rc_version=${rc_version#*.}
6239 version_subminor=${rc_version%%.*}
6240 version_micro=0
6241 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6242 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006243 if test "$guest_agent_with_vss" = "yes" ; then
6244 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006245 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006246 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6247 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006248 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006249 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006250 fi
Michael Roth1a349042015-08-26 11:14:31 -05006251 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006252 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006253 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6254 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6255 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6256 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6257 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6258 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6259 fi
pbrook210fa552007-02-27 21:04:49 +00006260else
Juan Quintela35f4df22009-07-27 16:13:07 +02006261 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006262fi
blueswir1128ab2f2008-08-15 18:33:42 +00006263
Mark McLoughlindffcb712009-10-22 17:49:11 +01006264if test "$linux" = "yes" ; then
6265 echo "CONFIG_LINUX=y" >> $config_host_mak
6266fi
6267
bellard83fb7ad2004-07-05 21:25:26 +00006268if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006269 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006270fi
malcb29fe3e2008-11-18 01:42:22 +00006271
bellardec530c82006-04-25 22:36:06 +00006272if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006273 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006274fi
Andreas Färber179cf402010-09-20 00:50:43 +02006275if test "$haiku" = "yes" ; then
6276 echo "CONFIG_HAIKU=y" >> $config_host_mak
6277fi
bellard97a847b2003-08-10 21:36:04 +00006278if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006279 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006280fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006281if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006282 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006283fi
bellardc20709a2004-04-21 23:27:19 +00006284if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006285 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006286 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006287fi
ths8a16d272008-07-19 09:56:24 +00006288if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006289 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006290 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006291fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006292if test "$netmap" = "yes" ; then
6293 echo "CONFIG_NETMAP=y" >> $config_host_mak
6294fi
Gonglei015a33b2014-07-01 20:58:08 +08006295if test "$l2tpv3" = "yes" ; then
6296 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6297fi
Corey Bryant47e98652012-01-26 09:42:26 -05006298if test "$cap_ng" = "yes" ; then
6299 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6300fi
Juan Quintela2358a492009-07-27 16:13:25 +02006301echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006302for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006303 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006304 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006305 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006306 echo "$def=m" >> $config_host_mak ;;
6307 *)
6308 echo "$def=y" >> $config_host_mak ;;
6309 esac
malc0c58ac12008-06-25 21:04:05 +00006310done
Fam Zhengb1149912017-09-07 16:29:13 +08006311echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6312echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6313echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6314echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6315echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006316if test "$audio_pt_int" = "yes" ; then
6317 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6318fi
malcd5631632009-10-10 01:13:41 +04006319if test "$audio_win_int" = "yes" ; then
6320 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6321fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006322echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6323echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006324if test "$vnc" = "yes" ; then
6325 echo "CONFIG_VNC=y" >> $config_host_mak
6326fi
aliguori2f9606b2009-03-06 20:27:28 +00006327if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006328 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006329fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006330if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006331 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006332fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006333if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006334 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006335fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006336if test "$xkbcommon" = "yes" ; then
6337 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6338 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6339fi
aliguori76655d62009-03-06 20:27:37 +00006340if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006341 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006342fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006343if test "$xfs" = "yes" ; then
6344 echo "CONFIG_XFS=y" >> $config_host_mak
6345fi
Stefan Weil89138852016-05-16 15:10:20 +02006346qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006347echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006348echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006349echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006350echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006351if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006352 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006353fi
Fam Zheng17969262014-02-10 14:48:56 +08006354if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006355 # $shacmd can generate a hash started with digit, which the compiler doesn't
6356 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006357 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006358 echo "CONFIG_MODULES=y" >> $config_host_mak
6359fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006360if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6361 echo "CONFIG_X11=y" >> $config_host_mak
6362 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6363 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6364fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006365if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006366 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006367 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006368 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006369 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006370fi
6371if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006372 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006373fi
6374if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006375 echo "CONFIG_CURSES=m" >> $config_host_mak
6376 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6377 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006378fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006379if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006380 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006381fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006382if test "$accept4" = "yes" ; then
6383 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6384fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306385if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006386 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306387fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006388if test "$eventfd" = "yes" ; then
6389 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6390fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006391if test "$memfd" = "yes" ; then
6392 echo "CONFIG_MEMFD=y" >> $config_host_mak
6393fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006394if test "$have_usbfs" = "yes" ; then
6395 echo "CONFIG_USBFS=y" >> $config_host_mak
6396fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006397if test "$fallocate" = "yes" ; then
6398 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6399fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006400if test "$fallocate_punch_hole" = "yes" ; then
6401 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6402fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006403if test "$fallocate_zero_range" = "yes" ; then
6404 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6405fi
Kevin Wolfed911432014-09-29 17:12:59 +02006406if test "$posix_fallocate" = "yes" ; then
6407 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6408fi
Peter Maydellc727f472011-01-06 11:05:10 +00006409if test "$sync_file_range" = "yes" ; then
6410 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6411fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006412if test "$fiemap" = "yes" ; then
6413 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6414fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006415if test "$dup3" = "yes" ; then
6416 echo "CONFIG_DUP3=y" >> $config_host_mak
6417fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006418if test "$ppoll" = "yes" ; then
6419 echo "CONFIG_PPOLL=y" >> $config_host_mak
6420fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006421if test "$prctl_pr_set_timerslack" = "yes" ; then
6422 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6423fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006424if test "$epoll" = "yes" ; then
6425 echo "CONFIG_EPOLL=y" >> $config_host_mak
6426fi
6427if test "$epoll_create1" = "yes" ; then
6428 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6429fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006430if test "$sendfile" = "yes" ; then
6431 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6432fi
Riku Voipio51834342014-06-22 11:25:42 +01006433if test "$timerfd" = "yes" ; then
6434 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6435fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006436if test "$setns" = "yes" ; then
6437 echo "CONFIG_SETNS=y" >> $config_host_mak
6438fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006439if test "$clock_adjtime" = "yes" ; then
6440 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6441fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006442if test "$syncfs" = "yes" ; then
6443 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6444fi
aurel323b3f24a2009-04-15 16:12:13 +00006445if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006446 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006447fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006448if test "$inotify1" = "yes" ; then
6449 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6450fi
Peter Maydell401bc052017-09-05 13:19:32 +01006451if test "$sem_timedwait" = "yes" ; then
6452 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6453fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006454if test "$strchrnul" = "yes" ; then
6455 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6456fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006457if test "$byteswap_h" = "yes" ; then
6458 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6459fi
6460if test "$bswap_h" = "yes" ; then
6461 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6462fi
Alexander Graf769ce762009-05-11 17:41:42 +02006463if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006464 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006465 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006466 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006467fi
aurel322e4d9fb2008-04-08 06:01:02 +00006468if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006469 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006470 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006471fi
balrogfb599c92008-09-28 23:49:55 +00006472if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006473 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006474 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006475fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006476if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006477 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006478 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006479 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006480 if test "$gtk_gl" = "yes" ; then
6481 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6482 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006483fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006484echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006485if test "$gnutls" = "yes" ; then
6486 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6487fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006488if test "$gcrypt" = "yes" ; then
6489 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006490 if test "$gcrypt_hmac" = "yes" ; then
6491 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6492 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006493fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006494if test "$nettle" = "yes" ; then
6495 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006496 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006497fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006498if test "$tasn1" = "yes" ; then
6499 echo "CONFIG_TASN1=y" >> $config_host_mak
6500fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006501if test "$have_ifaddrs_h" = "yes" ; then
6502 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6503fi
Eric Blake6b39b062016-10-11 10:46:23 -05006504if test "$have_broken_size_max" = "yes" ; then
6505 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6506fi
Jan Vesely277abf12016-04-29 13:15:23 -04006507
6508# Work around a system header bug with some kernel/XFS header
6509# versions where they both try to define 'struct fsxattr':
6510# xfs headers will not try to redefine structs from linux headers
6511# if this macro is set.
6512if test "$have_fsxattr" = "yes" ; then
6513 echo "HAVE_FSXATTR=y" >> $config_host_mak
6514fi
Fam Zheng1efad062018-06-01 17:26:43 +08006515if test "$have_copy_file_range" = "yes" ; then
6516 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6517fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006518if test "$vte" = "yes" ; then
6519 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006520 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006521 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006522fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006523if test "$virglrenderer" = "yes" ; then
6524 echo "CONFIG_VIRGL=y" >> $config_host_mak
6525 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6526 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6527fi
aliguorie37630c2009-04-22 15:19:10 +00006528if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006529 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006530 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00006531fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006532if test "$linux_aio" = "yes" ; then
6533 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6534fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006535if test "$attr" = "yes" ; then
6536 echo "CONFIG_ATTR=y" >> $config_host_mak
6537fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006538if test "$libattr" = "yes" ; then
6539 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6540fi
Meador Inge983eef52012-02-24 14:00:42 +05306541if test "$virtfs" = "yes" ; then
6542 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006543fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006544if test "$mpath" = "yes" ; then
6545 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006546 if test "$mpathpersist_new_api" = "yes"; then
6547 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6548 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006549fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006550if test "$vhost_scsi" = "yes" ; then
6551 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6552fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006553if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006554 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6555fi
Gonglei042cea22018-03-01 21:46:28 +08006556if test "$vhost_crypto" = "yes" ; then
6557 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6558fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006559if test "$vhost_vsock" = "yes" ; then
6560 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6561fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006562if test "$vhost_user" = "yes" ; then
6563 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6564fi
ths77755342008-11-27 15:45:16 +00006565if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006566 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006567fi
aliguoribf9298b2008-12-05 20:05:26 +00006568if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006569 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006570fi
aliguoriceb42de2009-04-07 18:43:28 +00006571if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006572 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006573fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006574if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006575 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006576fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006577if test "$membarrier" = "yes" ; then
6578 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6579fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006580if test "$signalfd" = "yes" ; then
6581 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6582fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006583if test "$tcg" = "yes"; then
6584 echo "CONFIG_TCG=y" >> $config_host_mak
6585 if test "$tcg_interpreter" = "yes" ; then
6586 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6587 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006588fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006589if test "$fdatasync" = "yes" ; then
6590 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6591fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006592if test "$madvise" = "yes" ; then
6593 echo "CONFIG_MADVISE=y" >> $config_host_mak
6594fi
6595if test "$posix_madvise" = "yes" ; then
6596 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6597fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006598if test "$posix_memalign" = "yes" ; then
6599 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6600fi
bellard97a847b2003-08-10 21:36:04 +00006601
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006602if test "$spice" = "yes" ; then
6603 echo "CONFIG_SPICE=y" >> $config_host_mak
6604fi
6605
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006606if test "$smartcard" = "yes" ; then
6607 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006608 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6609 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006610fi
6611
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006612if test "$libusb" = "yes" ; then
6613 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006614 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6615 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006616fi
6617
Hans de Goede69354a82011-07-19 11:04:10 +02006618if test "$usb_redir" = "yes" ; then
6619 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006620 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6621 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006622fi
6623
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006624if test "$opengl" = "yes" ; then
6625 echo "CONFIG_OPENGL=y" >> $config_host_mak
6626 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006627 if test "$opengl_dmabuf" = "yes" ; then
6628 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6629 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006630fi
6631
Yang Zhong5a22ab72017-12-20 21:16:46 +08006632if test "$malloc_trim" = "yes" ; then
6633 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6634fi
6635
Liang Li99f2dbd2016-03-08 13:53:16 +08006636if test "$avx2_opt" = "yes" ; then
6637 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6638fi
6639
qiaonuohan607dacd2014-02-18 14:11:30 +08006640if test "$lzo" = "yes" ; then
6641 echo "CONFIG_LZO=y" >> $config_host_mak
6642fi
6643
6644if test "$snappy" = "yes" ; then
6645 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6646fi
6647
Peter Wu6b383c02015-01-06 18:48:14 +01006648if test "$bzip2" = "yes" ; then
6649 echo "CONFIG_BZIP2=y" >> $config_host_mak
6650 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6651fi
6652
Julio Faracco83bc1f92018-11-05 13:08:04 -02006653if test "$lzfse" = "yes" ; then
6654 echo "CONFIG_LZFSE=y" >> $config_host_mak
6655 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6656fi
6657
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006658if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006659 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006660 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6661 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006662fi
6663
Peter Lieven6542aa92014-02-03 10:26:13 +01006664if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006665 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6666 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006667fi
6668
Eduardo Otubof7945732012-08-14 18:44:05 -03006669if test "$seccomp" = "yes"; then
6670 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006671 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6672 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006673fi
6674
bellard83fb7ad2004-07-05 21:25:26 +00006675# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006676if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006677 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006678fi
6679
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006680if test "$localtime_r" = "yes" ; then
6681 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6682fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006683if test "$qom_cast_debug" = "yes" ; then
6684 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6685fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006686if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006687 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006688 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6689 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006690fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006691
Peter Maydell7c2acc72013-04-08 12:11:27 +01006692echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006693if test "$coroutine_pool" = "yes" ; then
6694 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6695else
6696 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6697fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306698
Peter Lieven7d992e42016-09-27 11:58:45 +02006699if test "$debug_stack_usage" = "yes" ; then
6700 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6701fi
6702
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006703if test "$crypto_afalg" = "yes" ; then
6704 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6705fi
6706
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306707if test "$open_by_handle_at" = "yes" ; then
6708 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6709fi
6710
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306711if test "$linux_magic_h" = "yes" ; then
6712 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6713fi
6714
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006715if test "$pragma_diagnostic_available" = "yes" ; then
6716 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006717fi
6718
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006719if test "$valgrind_h" = "yes" ; then
6720 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6721fi
6722
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006723if test "$have_asan_iface_fiber" = "yes" ; then
6724 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6725fi
6726
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006727if test "$has_environ" = "yes" ; then
6728 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6729fi
6730
Richard Henderson76a347e2012-12-28 14:17:02 -08006731if test "$cpuid_h" = "yes" ; then
6732 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6733fi
6734
Richard Hendersonf5401662013-02-16 12:46:59 -08006735if test "$int128" = "yes" ; then
6736 echo "CONFIG_INT128=y" >> $config_host_mak
6737fi
6738
Richard Henderson7ebee432016-06-29 21:10:59 -07006739if test "$atomic128" = "yes" ; then
6740 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6741fi
6742
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006743if test "$cmpxchg128" = "yes" ; then
6744 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6745fi
6746
Richard Hendersondf79b992016-09-02 12:23:57 -07006747if test "$atomic64" = "yes" ; then
6748 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6749fi
6750
Richard Hendersondb432672017-09-15 14:11:45 -07006751if test "$vector16" = "yes" ; then
6752 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6753fi
6754
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006755if test "$getauxval" = "yes" ; then
6756 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6757fi
6758
Bharata B Raoeb100392012-09-24 14:42:45 +05306759if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006760 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006761 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6762 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306763fi
6764
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006765if test "$glusterfs_xlator_opt" = "yes" ; then
6766 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6767fi
6768
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306769if test "$glusterfs_discard" = "yes" ; then
6770 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6771fi
6772
Niels de Vosdf3a4292017-05-28 12:01:14 +05306773if test "$glusterfs_fallocate" = "yes" ; then
6774 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6775fi
6776
Bharata B Rao7c815372013-12-21 14:51:25 +05306777if test "$glusterfs_zerofill" = "yes" ; then
6778 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6779fi
6780
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006781if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006782 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006783 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6784 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006785fi
6786
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006787if test "$live_block_migration" = "yes" ; then
6788 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6789fi
6790
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006791if test "$tpm" = "yes"; then
6792 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006793 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006794 if test "$tpm_passthrough" = "yes"; then
6795 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6796 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006797 # TPM emulator support?
6798 if test "$tpm_emulator" = "yes"; then
6799 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6800 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006801fi
6802
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006803echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6804if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006805 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306806fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006807if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006808 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6809 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006810 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006811fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006812if have_backend "log"; then
6813 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02006814fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006815if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006816 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6817fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006818if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006819 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6820 if test "$trace_backend_stap" = "yes" ; then
6821 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6822 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006823fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006824if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006825 if test "$linux" = "yes" ; then
6826 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006827 else
Stewart Smith21684af2014-01-24 12:39:10 +11006828 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006829 fi
6830fi
Paul Durrant0a852412016-08-04 14:44:14 +01006831if have_backend "syslog"; then
6832 if test "$posix_syslog" = "yes" ; then
6833 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6834 else
6835 feature_not_found "syslog(trace backend)" "syslog not available"
6836 fi
6837fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006838echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6839
Michael R. Hines2da776d2013-07-22 10:01:54 -04006840if test "$rdma" = "yes" ; then
6841 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006842 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006843fi
6844
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006845if test "$pvrdma" = "yes" ; then
6846 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6847fi
6848
Laurent Vivier575b22b2016-06-02 22:14:15 +02006849if test "$have_rtnetlink" = "yes" ; then
6850 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6851fi
6852
Klim Kireeved279a02018-01-12 12:01:19 +03006853if test "$libxml2" = "yes" ; then
6854 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6855 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6856 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6857fi
6858
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006859if test "$replication" = "yes" ; then
6860 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6861fi
6862
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006863if test "$have_af_vsock" = "yes" ; then
6864 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6865fi
6866
Christopher Covington4d043512016-12-28 15:04:33 -05006867if test "$have_sysmacros" = "yes" ; then
6868 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6869fi
6870
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006871if test "$have_static_assert" = "yes" ; then
6872 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6873fi
6874
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006875if test "$have_utmpx" = "yes" ; then
6876 echo "HAVE_UTMPX=y" >> $config_host_mak
6877fi
6878
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006879if test "$ivshmem" = "yes" ; then
6880 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6881fi
Richard Hendersone219c492017-09-28 09:01:23 -07006882if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006883 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6884fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006885if test "$debug_mutex" = "yes" ; then
6886 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6887fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006888
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006889# Hold two types of flag:
6890# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6891# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03006892# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006893# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03006894if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006895 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03006896 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6897elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6898 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6899 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006900fi
6901
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006902if test "$vxhs" = "yes" ; then
6903 echo "CONFIG_VXHS=y" >> $config_host_mak
6904 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6905fi
6906
Junyan He17824402018-07-18 15:47:59 +08006907if test "$libpmem" = "yes" ; then
6908 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6909fi
6910
Jeff Cody2f740132018-11-07 07:36:44 +01006911if test "$bochs" = "yes" ; then
6912 echo "CONFIG_BOCHS=y" >> $config_host_mak
6913fi
6914if test "$cloop" = "yes" ; then
6915 echo "CONFIG_CLOOP=y" >> $config_host_mak
6916fi
6917if test "$dmg" = "yes" ; then
6918 echo "CONFIG_DMG=y" >> $config_host_mak
6919fi
6920if test "$qcow1" = "yes" ; then
6921 echo "CONFIG_QCOW1=y" >> $config_host_mak
6922fi
6923if test "$vdi" = "yes" ; then
6924 echo "CONFIG_VDI=y" >> $config_host_mak
6925fi
6926if test "$vvfat" = "yes" ; then
6927 echo "CONFIG_VVFAT=y" >> $config_host_mak
6928fi
6929if test "$qed" = "yes" ; then
6930 echo "CONFIG_QED=y" >> $config_host_mak
6931fi
6932if test "$parallels" = "yes" ; then
6933 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6934fi
6935if test "$sheepdog" = "yes" ; then
6936 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6937fi
6938
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006939if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006940 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006941elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006942 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006943elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006944 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006945elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006946 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006947elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006948 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Alistair Francisc4f80542018-12-19 19:20:19 +00006949elif test "$ARCH" = "riscv32" -o "$ARCH" = "riscv64" ; then
6950 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006951else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006952 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006953fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006954QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006955
Juan Quintela98ec69a2009-07-16 18:34:18 +02006956echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006957echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006958echo "MAKE=$make" >> $config_host_mak
6959echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006960echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6961echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006962echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6963echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006964echo "PYTHON=$python" >> $config_host_mak
Cleber Rosa755ee702018-11-09 10:07:07 -05006965echo "PYTHON_VERSION=$python_version" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006966echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006967if $iasl -h > /dev/null 2>&1; then
6968 echo "IASL=$iasl" >> $config_host_mak
6969fi
Juan Quintela804edf22009-07-27 16:12:49 +02006970echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006971echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006972echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006973echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006974echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006975echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006976echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006977echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006978echo "OBJCOPY=$objcopy" >> $config_host_mak
6979echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006980echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006981echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006982echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006983echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006984echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006985echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006986echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006987echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006988if test "$sparse" = "yes" ; then
6989 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006990 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006991 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006992 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6993 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6994fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006995if test "$cross_prefix" != ""; then
6996 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6997else
6998 echo "AUTOCONF_HOST := " >> $config_host_mak
6999fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007000echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007001echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007002echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007003echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007004echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007005echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007006echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007007echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007008echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007009echo "DSOSUF=$DSOSUF" >> $config_host_mak
7010echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007011echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007012echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7013echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007014echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007015if test "$gcov" = "yes" ; then
7016 echo "CONFIG_GCOV=y" >> $config_host_mak
7017 echo "GCOV=$gcov_tool" >> $config_host_mak
7018fi
Juan Quintela804edf22009-07-27 16:12:49 +02007019
Alex Bennée51a12b52018-04-04 14:24:39 +01007020if test "$docker" != "no"; then
7021 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7022fi
7023
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007024if test "$libudev" != "no"; then
7025 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7026 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7027fi
7028
Peter Maydell6efd7512011-11-30 11:59:04 +00007029# use included Linux headers
7030if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007031 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007032 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007033 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007034 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007035 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02007036 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01007037 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007038 ;;
7039 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007040 linux_arch=s390
7041 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007042 aarch64)
7043 linux_arch=arm64
7044 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007045 mips64)
7046 linux_arch=mips
7047 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007048 *)
7049 # For most CPUs the kernel architecture name and QEMU CPU name match.
7050 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007051 ;;
7052 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007053 # For non-KVM architectures we will not have asm headers
7054 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7055 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7056 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007057fi
7058
bellard1d14ffa2005-10-30 18:58:22 +00007059for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007060target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007061config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007062target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00007063target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02007064
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007065case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007066 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 +02007067 target_bigendian=yes
7068 ;;
7069esac
bellard97a847b2003-08-10 21:36:04 +00007070target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007071target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007072target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007073target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007074case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007075 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007076 target_softmmu="yes"
7077 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007078 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007079 target_user_only="yes"
7080 target_linux_user="yes"
7081 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007082 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007083 target_user_only="yes"
7084 target_bsd_user="yes"
7085 ;;
pbrook9e407a82007-05-26 16:38:53 +00007086 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007087 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007088 exit 1
7089 ;;
7090esac
ths831b7822007-01-18 20:06:33 +00007091
Alex Bennéed75402b2018-04-04 20:27:05 +01007092target_compiler=""
7093target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007094target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007095
bellard97a847b2003-08-10 21:36:04 +00007096mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007097echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007098
pbrooke5fe0c52006-06-11 13:32:59 +00007099bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007100mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007101interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007102gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007103
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007104TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007105TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007106TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007107
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007108case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007109 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007110 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007111 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007112 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007113 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007114 ;;
7115 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007116 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007117 mttcg="yes"
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007118 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007119 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007120 ;;
7121 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007122 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007123 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007124 ;;
7125 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007126 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007127 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007128 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007129 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007130 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007131 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007132 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007133 aarch64|aarch64_be)
7134 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007135 TARGET_BASE_ARCH=arm
7136 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007137 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007138 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 +01007139 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007140 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007141 ;;
aurel322408a522008-04-20 20:19:44 +00007142 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007143 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007144 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007145 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007146 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007147 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007148 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007149 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007150 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007151 ;;
aurel322408a522008-04-20 20:19:44 +00007152 m68k)
aurel322408a522008-04-20 20:19:44 +00007153 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007154 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007155 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007156 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007157 microblaze|microblazeel)
7158 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007159 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007160 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007161 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007162 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007163 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007164 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007165 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007166 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007167 ;;
7168 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08007169 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007170 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007171 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007172 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007173 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007174 ;;
7175 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007176 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007177 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007178 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007179 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007180 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007181 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007182 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007183 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007184 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007185 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007186 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007187 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007188 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007189 TARGET_ARCH=openrisc
7190 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007191 ;;
aurel322408a522008-04-20 20:19:44 +00007192 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007193 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007194 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007195 ;;
aurel322408a522008-04-20 20:19:44 +00007196 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007197 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007198 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307199 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007200 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 +01007201 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007202 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007203 ppc64le)
7204 TARGET_ARCH=ppc64
7205 TARGET_BASE_ARCH=ppc
7206 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307207 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007208 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 +01007209 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007210 ;;
aurel322408a522008-04-20 20:19:44 +00007211 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007212 TARGET_ARCH=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
Juan Quintela25be2102009-10-07 02:41:00 +02007215 echo "TARGET_ABI32=y" >> $config_target_mak
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_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007218 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007219 riscv32)
7220 TARGET_BASE_ARCH=riscv
7221 TARGET_ABI_DIR=riscv
7222 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007223 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007224 ;;
7225 riscv64)
7226 TARGET_BASE_ARCH=riscv
7227 TARGET_ABI_DIR=riscv
7228 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007229 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007230 ;;
aurel322408a522008-04-20 20:19:44 +00007231 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007232 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007233 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007234 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007235 ;;
7236 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007237 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007238 ;;
7239 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007240 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007241 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007242 ;;
7243 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007244 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007245 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007246 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007247 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007248 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007249 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007250 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007251 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007252 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 +01007253 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007254 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007255 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007256 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007257 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007258 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007259 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007260 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007261 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007262 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007263 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007264 xtensa|xtensaeb)
7265 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007266 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007267 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007268 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007269 ;;
aurel322408a522008-04-20 20:19:44 +00007270 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007271 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007272 ;;
7273esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007274# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7275if [ "$TARGET_BASE_ARCH" = "" ]; then
7276 TARGET_BASE_ARCH=$TARGET_ARCH
7277fi
7278
Alex Bennéed75402b2018-04-04 20:27:05 +01007279# Do we have a cross compiler for this target?
7280if has $target_compiler; then
7281
7282 write_c_skeleton
7283
Alex Bennée716a5072018-04-10 12:19:40 +01007284 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007285 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007286 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007287 target_compiler=""
7288 else
7289 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7290 target_compiler_static="n"
7291 fi
7292 else
7293 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7294 target_compiler_static="y"
7295 fi
7296else
7297 target_compiler=""
7298fi
7299
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007300symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7301
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007302upper() {
7303 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7304}
7305
Stefan Weil89138852016-05-16 15:10:20 +02007306target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007307echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007308echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007309echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007310if [ "$TARGET_ABI_DIR" = "" ]; then
7311 TARGET_ABI_DIR=$TARGET_ARCH
7312fi
Juan Quintela25be2102009-10-07 02:41:00 +02007313echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007314if [ "$HOST_VARIANT_DIR" != "" ]; then
7315 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7316fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007317
7318if supported_xen_target $target; then
7319 echo "CONFIG_XEN=y" >> $config_target_mak
7320 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007321 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007322 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007323fi
7324if supported_kvm_target $target; then
7325 echo "CONFIG_KVM=y" >> $config_target_mak
7326 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007327 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007328 if test "$vhost_user" = "yes" ; then
7329 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7330 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007331 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007332fi
7333if supported_hax_target $target; then
7334 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007335fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007336if supported_hvf_target $target; then
7337 echo "CONFIG_HVF=y" >> $config_target_mak
7338fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007339if supported_whpx_target $target; then
7340 echo "CONFIG_WHPX=y" >> $config_target_mak
7341fi
bellardde83cd02003-06-15 20:25:43 +00007342if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007343 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007344fi
7345if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007346 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007347 if test "$mttcg" = "yes" ; then
7348 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7349 fi
bellardde83cd02003-06-15 20:25:43 +00007350fi
bellard997344f2003-10-27 21:10:39 +00007351if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007352 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007353 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007354fi
ths831b7822007-01-18 20:06:33 +00007355if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007356 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007357fi
pbrook56aebc82008-10-11 17:55:29 +00007358list=""
7359if test ! -z "$gdb_xml_files" ; then
7360 for x in $gdb_xml_files; do
7361 list="$list $source_path/gdb-xml/$x"
7362 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007363 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007364fi
bellardde83cd02003-06-15 20:25:43 +00007365
pbrooke5fe0c52006-06-11 13:32:59 +00007366if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007367 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007368fi
blueswir184778502008-10-26 20:33:16 +00007369if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007370 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007371fi
bellard5b0753e2005-03-01 21:37:28 +00007372
Alex Bennéed75402b2018-04-04 20:27:05 +01007373if test -n "$target_compiler"; then
7374 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7375
7376 if test -n "$target_compiler_static"; then
7377 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7378 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007379
7380 if test -n "$target_compiler_cflags"; then
7381 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7382 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007383fi
7384
Alex Bennée716a5072018-04-10 12:19:40 +01007385
Juan Quintela4afddb52009-08-03 14:46:45 +02007386# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007387
Juan Quintela4afddb52009-08-03 14:46:45 +02007388cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007389ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007390
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007391disas_config() {
7392 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7393 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7394}
7395
Juan Quintela64656022009-08-03 14:46:53 +02007396for i in $ARCH $TARGET_BASE_ARCH ; do
7397 case "$i" in
7398 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007399 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007400 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007401 aarch64)
7402 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007403 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007404 fi
7405 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007406 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007407 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007408 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007409 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007410 fi
Juan Quintela64656022009-08-03 14:46:53 +02007411 ;;
7412 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007413 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007414 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007415 hppa)
7416 disas_config "HPPA"
7417 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007418 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007419 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007420 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007421 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007422 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007423 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007424 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007425 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007426 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007427 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007428 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007429 ;;
7430 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007431 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007432 if test -n "${cxx}"; then
7433 disas_config "NANOMIPS"
7434 fi
Juan Quintela64656022009-08-03 14:46:53 +02007435 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007436 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007437 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007438 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007439 nios2)
7440 disas_config "NIOS2"
7441 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007442 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007443 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007444 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007445 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007446 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007447 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007448 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007449 disas_config "RISCV"
7450 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007451 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007452 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007453 ;;
7454 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007455 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007456 ;;
7457 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007458 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007459 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007460 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007461 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007462 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007463 esac
7464done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007465if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007466 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007467fi
Juan Quintela64656022009-08-03 14:46:53 +02007468
Juan Quintela6ee71262009-08-03 14:46:47 +02007469case "$ARCH" in
7470alpha)
7471 # Ensure there's only a single GP
7472 cflags="-msmall-data $cflags"
7473;;
7474esac
7475
Juan Quintelad02c1db2009-08-03 14:46:50 +02007476if test "$gprof" = "yes" ; then
Philippe Mathieu-Daudé0acf7de2019-01-03 16:09:50 +01007477 echo "TARGET_GPROF=y" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007478 if test "$target_linux_user" = "yes" ; then
7479 cflags="-p $cflags"
7480 ldflags="-p $ldflags"
7481 fi
7482 if test "$target_softmmu" = "yes" ; then
7483 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007484 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007485 fi
7486fi
7487
Juan Quintela9b8e1112009-08-03 14:46:46 +02007488if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007489 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007490fi
Juan Quintelafa282482009-07-22 22:37:39 +02007491
Christian Borntraegere9a35912017-08-23 12:16:23 +02007492# Newer kernels on s390 check for an S390_PGSTE program header and
7493# enable the pgste page table extensions in that case. This makes
7494# the vm.allocate_pgste sysctl unnecessary. We enable this program
7495# header if
7496# - we build on s390x
7497# - we build the system emulation for s390x (qemu-system-s390x)
7498# - KVM is enabled
7499# - the linker supports --s390-pgste
7500if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7501 if ld_has --s390-pgste ; then
7502 ldflags="-Wl,--s390-pgste $ldflags"
7503 fi
7504fi
7505
Juan Quintela25be2102009-10-07 02:41:00 +02007506echo "LDFLAGS+=$ldflags" >> $config_target_mak
7507echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007508
bellard97a847b2003-08-10 21:36:04 +00007509done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007510
Alex Bennéed75402b2018-04-04 20:27:05 +01007511if test -n "$enabled_cross_compilers"; then
7512 echo
7513 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7514fi
7515
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007516if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007517 echo "config-host.h: subdir-dtc" >> $config_host_mak
7518fi
Richard Hendersone219c492017-09-28 09:01:23 -07007519if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7520 echo "config-host.h: subdir-capstone" >> $config_host_mak
7521fi
7522if test -n "$LIBCAPSTONE"; then
7523 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7524fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007525
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007526if test "$numa" = "yes"; then
7527 echo "CONFIG_NUMA=y" >> $config_host_mak
7528fi
7529
John Snowfd0e6052015-03-25 18:57:39 -04007530if test "$ccache_cpp2" = "yes"; then
7531 echo "export CCACHE_CPP2=y" >> $config_host_mak
7532fi
7533
Peter Maydelle29e5c62018-11-02 11:52:38 +00007534# If we're using a separate build tree, set it up now.
7535# DIRS are directories which we simply mkdir in the build tree;
7536# LINKS are things to symlink back into the source tree
7537# (these can be both files and directories).
7538# Caution: do not add files or directories here using wildcards. This
7539# will result in problems later if a new file matching the wildcard is
7540# added to the source tree -- nothing will cause configure to be rerun
7541# so the build tree will be missing the link back to the new file, and
7542# tests might fail. Prefer to keep the relevant files in their own
7543# directory and symlink the directory instead.
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007544DIRS="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 -05007545DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007546DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007547DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007548DIRS="$DIRS roms/seabios roms/vgabios"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007549LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt"
7550LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7551LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7552LINKS="$LINKS tests/fp/Makefile"
7553LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7554LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7555LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7556LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7557LINKS="$LINKS pc-bios/qemu-icon.bmp"
7558LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007559LINKS="$LINKS tests/acceptance tests/data"
7560LINKS="$LINKS tests/qemu-iotests/check"
Richard Henderson753d11f2011-06-24 11:58:37 -07007561for bios_file in \
7562 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007563 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007564 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007565 $source_path/pc-bios/*.rom \
7566 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007567 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007568 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007569 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007570 $source_path/pc-bios/palcode-*
7571do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007572 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007573done
7574mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007575for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007576 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007577 symlink "$source_path/$f" "$f"
7578 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007579done
Paul Brook1ad21342009-05-19 16:17:58 +01007580
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007581# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007582for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007583 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007584 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007585 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007586 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007587 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007588 echo "CC=$cc" >> $config_mak
7589 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007590 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007591 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007592 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007593 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007594 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007595done
7596
Max Reitz76c75602014-05-24 23:24:56 +02007597# set up qemu-iotests in this build directory
7598iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007599
7600echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7601echo >> "$iotests_common_env"
7602echo "export PYTHON='$python'" >> "$iotests_common_env"
7603
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007604# Save the configure command line for later reuse.
7605cat <<EOD >config.status
7606#!/bin/sh
7607# Generated by configure.
7608# Run this file to recreate the current configuration.
7609# Compiler output produced by configure, useful for debugging
7610# configure, is in config.log if it exists.
7611EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007612
7613preserve_env() {
7614 envname=$1
7615
7616 eval envval=\$$envname
7617
7618 if test -n "$envval"
7619 then
7620 echo "$envname='$envval'" >> config.status
7621 echo "export $envname" >> config.status
7622 else
7623 echo "unset $envname" >> config.status
7624 fi
7625}
7626
7627# Preserve various env variables that influence what
7628# features/build target configure will detect
7629preserve_env AR
7630preserve_env AS
7631preserve_env CC
7632preserve_env CPP
7633preserve_env CXX
7634preserve_env INSTALL
7635preserve_env LD
7636preserve_env LD_LIBRARY_PATH
7637preserve_env LIBTOOL
7638preserve_env MAKE
7639preserve_env NM
7640preserve_env OBJCOPY
7641preserve_env PATH
7642preserve_env PKG_CONFIG
7643preserve_env PKG_CONFIG_LIBDIR
7644preserve_env PKG_CONFIG_PATH
7645preserve_env PYTHON
7646preserve_env SDL_CONFIG
7647preserve_env SDL2_CONFIG
7648preserve_env SMBD
7649preserve_env STRIP
7650preserve_env WINDRES
7651
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007652printf "exec" >>config.status
7653printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007654echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007655chmod +x config.status
7656
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007657rm -r "$TMPDIR1"