blob: 87273d1c12a91269576cd9c38bfe51791e6c2360 [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
1800# Suppress writing compiled files
1801python="$python -B"
1802
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001803# Check that the C compiler works. Doing this here before testing
1804# the host CPU ensures that we had a valid CC to autodetect the
1805# $cpu var (and we should bail right here if that's not the case).
1806# It also allows the help message to be printed without a CC.
1807write_c_skeleton;
1808if compile_object ; then
1809 : C compiler works ok
1810else
1811 error_exit "\"$cc\" either does not exist or does not work"
1812fi
1813if ! compile_prog ; then
1814 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1815fi
1816
Peter Maydell359bc952011-12-24 13:07:25 +00001817# Now we have handled --enable-tcg-interpreter and know we're not just
1818# printing the help message, bail out if the host CPU isn't supported.
1819if test "$ARCH" = "unknown"; then
1820 if test "$tcg_interpreter" = "yes" ; then
1821 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001822 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001823 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001824 fi
1825fi
1826
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001827# Consult white-list to determine whether to enable werror
1828# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001829if test -z "$werror" ; then
1830 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001831 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001832 werror="yes"
1833 else
1834 werror="no"
1835 fi
1836fi
1837
Peter Maydellfb59dab2017-03-28 14:01:52 +01001838if test "$bogus_os" = "yes"; then
1839 # Now that we know that we're not printing the help and that
1840 # the compiler works (so the results of the check_defines we used
1841 # to identify the OS are reliable), if we didn't recognize the
1842 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001843 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001844fi
1845
Thomas Huthefc6c072018-12-03 10:12:32 +01001846# Check whether the compiler matches our minimum requirements:
1847cat > $TMPC << EOF
1848#if defined(__clang_major__) && defined(__clang_minor__)
1849# ifdef __apple_build_version__
1850# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1851# error You need at least XCode Clang v5.1 to compile QEMU
1852# endif
1853# else
1854# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1855# error You need at least Clang v3.4 to compile QEMU
1856# endif
1857# endif
1858#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1859# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1860# error You need at least GCC v4.8 to compile QEMU
1861# endif
1862#else
1863# error You either need GCC or Clang to compiler QEMU
1864#endif
1865int main (void) { return 0; }
1866EOF
1867if ! compile_prog "" "" ; then
1868 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1869fi
1870
Paolo Bonzini8d050952010-12-23 11:43:52 +01001871gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1872gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001873gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001874gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001875gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001876gcc_flags="-Wno-string-plus-int $gcc_flags"
Gerd Hoffmann0e39c4a2018-03-09 14:59:45 +01001877gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001878# Note that we do not add -Werror to gcc_flags here, because that would
1879# enable it for all configure tests. If a configure test failed due
1880# to -Werror this would just silently disable some features,
1881# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001882
1883cc_has_warning_flag() {
1884 write_c_skeleton;
1885
Peter Maydella1d29d62012-10-27 22:19:07 +01001886 # Use the positive sense of the flag when testing for -Wno-wombat
1887 # support (gcc will happily accept the -Wno- form of unknown
1888 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001889 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1890 compile_prog "-Werror $optflag" ""
1891}
1892
1893for flag in $gcc_flags; do
1894 if cc_has_warning_flag $flag ; then
1895 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001896 fi
1897done
1898
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001899if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001900 cat > $TMPC << EOF
1901int main(int argc, char *argv[])
1902{
1903 char arr[64], *p = arr, *c = argv[0];
1904 while (*c) {
1905 *p++ = *c++;
1906 }
1907 return 0;
1908}
1909EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001910 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001911 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001912 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001913 # We need to check both a compile and a link, since some compiler
1914 # setups fail only on a .c->.o compile and some only at link time
1915 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1916 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001917 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001918 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001919 break
1920 fi
1921 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001922 if test "$stack_protector" = yes; then
1923 if test $sp_on = 0; then
1924 error_exit "Stack protector not supported"
1925 fi
1926 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001927fi
1928
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001929# Disable -Wmissing-braces on older compilers that warn even for
1930# the "universal" C zero initializer {0}.
1931cat > $TMPC << EOF
1932struct {
1933 int a[2];
1934} x = {0};
1935EOF
1936if compile_object "-Werror" "" ; then
1937 :
1938else
1939 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1940fi
1941
Thomas Huthd376e9d2018-12-03 11:41:38 +01001942# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001943if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001944 if test "$modules" = "yes" ; then
1945 error_exit "static and modules are mutually incompatible"
1946 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001947 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001948 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001949 else
1950 pie="no"
1951 fi
1952fi
1953
Emilio G. Cota768b7852015-04-29 13:09:02 +02001954# Unconditional check for compiler __thread support
1955 cat > $TMPC << EOF
1956static __thread int tls_var;
1957int main(void) { return tls_var; }
1958EOF
1959
1960if ! compile_prog "-Werror" "" ; then
1961 error_exit "Your compiler does not support the __thread specifier for " \
1962 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1963fi
1964
Avi Kivity40d64442011-11-15 20:12:17 +02001965if test "$pie" = ""; then
1966 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001967 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001968 ;;
1969 *)
1970 pie="no"
1971 ;;
1972 esac
1973fi
1974
1975if test "$pie" != "no" ; then
1976 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001977
1978#ifdef __linux__
1979# define THREAD __thread
1980#else
1981# define THREAD
1982#endif
1983
1984static THREAD int tls_var;
1985
1986int main(void) { return tls_var; }
1987
Avi Kivity40d64442011-11-15 20:12:17 +02001988EOF
1989 if compile_prog "-fPIE -DPIE" "-pie"; then
1990 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1991 LDFLAGS="-pie $LDFLAGS"
1992 pie="yes"
1993 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1994 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1995 fi
1996 else
1997 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001998 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001999 else
2000 echo "Disabling PIE due to missing toolchain support"
2001 pie="no"
2002 fi
2003 fi
Brad46eef332013-12-10 19:49:08 -05002004
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04002005 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05002006 CFLAGS_NOPIE="-fno-pie"
2007 LDFLAGS_NOPIE="-nopie"
2008 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002009fi
2010
Paolo Bonzini09dada42013-04-17 16:26:47 +02002011##########################################
2012# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2013# use i686 as default anyway, but for those that don't, an explicit
2014# specification is necessary
2015
2016if test "$cpu" = "i386"; then
2017 cat > $TMPC << EOF
2018static int sfaa(int *ptr)
2019{
2020 return __sync_fetch_and_and(ptr, 0);
2021}
2022
2023int main(void)
2024{
2025 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002026 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002027 sfaa(&val);
2028 return val;
2029}
2030EOF
2031 if ! compile_prog "" "" ; then
2032 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2033 fi
2034fi
2035
2036#########################################
bellardec530c82006-04-25 22:36:06 +00002037# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002038
bellardec530c82006-04-25 22:36:06 +00002039if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002040 if has $install; then
2041 :
2042 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002043 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2044 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2045 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002046 fi
Stefan Weil89138852016-05-16 15:10:20 +02002047 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002048 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2049 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2050 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002051 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002052 if has ar; then
2053 :
2054 else
bellardec530c82006-04-25 22:36:06 +00002055 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002056 error_exit "No path includes ar" \
2057 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002058 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002059 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002060 fi
ths5fafdf22007-09-16 21:08:06 +00002061fi
bellardec530c82006-04-25 22:36:06 +00002062
Stefan Weilafb63eb2012-09-26 22:04:38 +02002063if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002064 for target in $default_target_list; do
2065 supported_target $target 2>/dev/null && \
2066 target_list="$target_list $target"
2067 done
2068 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002069else
Stefan Weil89138852016-05-16 15:10:20 +02002070 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002071 for target in $target_list; do
2072 # Check that we recognised the target name; this allows a more
2073 # friendly error message than if we let it fall through.
2074 case " $default_target_list " in
2075 *" $target "*)
2076 ;;
2077 *)
2078 error_exit "Unknown target name '$target'"
2079 ;;
2080 esac
2081 supported_target $target || exit 1
2082 done
bellard5327cf42005-01-10 23:18:50 +00002083fi
Peter Maydell25b48332013-05-20 16:16:16 +01002084
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002085# see if system emulation was really requested
2086case " $target_list " in
2087 *"-softmmu "*) softmmu=yes
2088 ;;
2089 *) softmmu=no
2090 ;;
2091esac
bellard5327cf42005-01-10 23:18:50 +00002092
Juan Quintela249247c2009-08-12 18:20:25 +02002093feature_not_found() {
2094 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002095 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002096
Peter Maydell76ad07a2013-04-08 12:11:26 +01002097 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002098 "configure was not able to find it." \
2099 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002100}
2101
bellard7d132992003-03-06 23:23:54 +00002102# ---
2103# big/little endian test
2104cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002105short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2106short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2107extern int foo(short *, short *);
2108int main(int argc, char *argv[]) {
2109 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002110}
2111EOF
2112
Mike Frysinger61cc9192013-06-30 23:30:18 -04002113if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002114 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002115 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002116 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002117 bigendian="no"
2118 else
2119 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002120 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002121else
2122 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002123fi
2124
Juan Quintelab0a47e72009-08-12 18:29:49 +02002125##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002126# cocoa implies not SDL or GTK
2127# (the cocoa UI code currently assumes it is always the active UI
2128# and doesn't interact well with other UI frontend code)
2129if test "$cocoa" = "yes"; then
2130 if test "$sdl" = "yes"; then
2131 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2132 fi
2133 if test "$gtk" = "yes"; then
2134 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2135 fi
2136 gtk=no
2137 sdl=no
2138fi
2139
Eric Blake6b39b062016-10-11 10:46:23 -05002140# Some versions of Mac OS X incorrectly define SIZE_MAX
2141cat > $TMPC << EOF
2142#include <stdint.h>
2143#include <stdio.h>
2144int main(int argc, char *argv[]) {
2145 return printf("%zu", SIZE_MAX);
2146}
2147EOF
2148have_broken_size_max=no
2149if ! compile_object -Werror ; then
2150 have_broken_size_max=yes
2151fi
2152
Peter Maydella30878e2015-08-14 16:10:52 +01002153##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002154# L2TPV3 probe
2155
2156cat > $TMPC <<EOF
2157#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002158#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002159int main(void) { return sizeof(struct mmsghdr); }
2160EOF
2161if compile_prog "" "" ; then
2162 l2tpv3=yes
2163else
2164 l2tpv3=no
2165fi
2166
2167##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002168# MinGW / Mingw-w64 localtime_r/gmtime_r check
2169
2170if test "$mingw32" = "yes"; then
2171 # Some versions of MinGW / Mingw-w64 lack localtime_r
2172 # and gmtime_r entirely.
2173 #
2174 # Some versions of Mingw-w64 define a macro for
2175 # localtime_r/gmtime_r.
2176 #
2177 # Some versions of Mingw-w64 will define functions
2178 # for localtime_r/gmtime_r, but only if you have
2179 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2180 # though, unistd.h and pthread.h both define
2181 # that for you.
2182 #
2183 # So this #undef localtime_r and #include <unistd.h>
2184 # are not in fact redundant.
2185cat > $TMPC << EOF
2186#include <unistd.h>
2187#include <time.h>
2188#undef localtime_r
2189int main(void) { localtime_r(NULL, NULL); return 0; }
2190EOF
2191 if compile_prog "" "" ; then
2192 localtime_r="yes"
2193 else
2194 localtime_r="no"
2195 fi
2196fi
2197
2198##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002199# pkg-config probe
2200
2201if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002202 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002203fi
2204
2205##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002206# NPTL probe
2207
Peter Maydell24cb36a2013-07-16 18:45:00 +01002208if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002209 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002210#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002211#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002212int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002213#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2214#error bork
2215#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002216 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002217}
2218EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002219 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002220 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002221 fi
pbrookbd0c5662008-05-29 14:34:11 +00002222fi
2223
balrogac629222008-10-11 09:56:04 +00002224##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002225# lzo check
2226
2227if test "$lzo" != "no" ; then
2228 cat > $TMPC << EOF
2229#include <lzo/lzo1x.h>
2230int main(void) { lzo_version(); return 0; }
2231EOF
2232 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002233 libs_softmmu="$libs_softmmu -llzo2"
2234 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002235 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002236 if test "$lzo" = "yes"; then
2237 feature_not_found "liblzo2" "Install liblzo2 devel"
2238 fi
2239 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002240 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002241fi
2242
2243##########################################
2244# snappy check
2245
2246if test "$snappy" != "no" ; then
2247 cat > $TMPC << EOF
2248#include <snappy-c.h>
2249int main(void) { snappy_max_compressed_length(4096); return 0; }
2250EOF
2251 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002252 libs_softmmu="$libs_softmmu -lsnappy"
2253 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002254 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002255 if test "$snappy" = "yes"; then
2256 feature_not_found "libsnappy" "Install libsnappy devel"
2257 fi
2258 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002259 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002260fi
2261
2262##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002263# bzip2 check
2264
2265if test "$bzip2" != "no" ; then
2266 cat > $TMPC << EOF
2267#include <bzlib.h>
2268int main(void) { BZ2_bzlibVersion(); return 0; }
2269EOF
2270 if compile_prog "" "-lbz2" ; then
2271 bzip2="yes"
2272 else
2273 if test "$bzip2" = "yes"; then
2274 feature_not_found "libbzip2" "Install libbzip2 devel"
2275 fi
2276 bzip2="no"
2277 fi
2278fi
2279
2280##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002281# lzfse check
2282
2283if test "$lzfse" != "no" ; then
2284 cat > $TMPC << EOF
2285#include <lzfse.h>
2286int main(void) { lzfse_decode_scratch_size(); return 0; }
2287EOF
2288 if compile_prog "" "-llzfse" ; then
2289 lzfse="yes"
2290 else
2291 if test "$lzfse" = "yes"; then
2292 feature_not_found "lzfse" "Install lzfse devel"
2293 fi
2294 lzfse="no"
2295 fi
2296fi
2297
2298##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002299# libseccomp check
2300
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002301libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002302if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002303 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002304 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002305 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002306 arm|aarch64)
2307 libseccomp_minver="2.2.3"
2308 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002309 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002310 libseccomp_minver="2.3.0"
2311 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002312 *)
2313 libseccomp_minver=""
2314 ;;
2315 esac
2316
2317 if test "$libseccomp_minver" != "" &&
2318 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002319 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2320 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002321 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002322 else
Andrew Jones693e5912015-09-30 11:59:18 -04002323 if test "$seccomp" = "yes" ; then
2324 if test "$libseccomp_minver" != "" ; then
2325 feature_not_found "libseccomp" \
2326 "Install libseccomp devel >= $libseccomp_minver"
2327 else
2328 feature_not_found "libseccomp" \
2329 "libseccomp is not supported for host cpu $cpu"
2330 fi
2331 fi
2332 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002333 fi
2334fi
2335##########################################
aliguorie37630c2009-04-22 15:19:10 +00002336# xen probe
2337
Juan Quintelafc321b42009-08-12 18:29:55 +02002338if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002339 # Check whether Xen library path is specified via --extra-ldflags to avoid
2340 # overriding this setting with pkg-config output. If not, try pkg-config
2341 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002342
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002343 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2344 $pkg_config --exists xencontrol ; then
2345 xen_ctrl_version="$(printf '%d%02d%02d' \
2346 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2347 xen=yes
2348 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2349 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002350 if $pkg_config --exists xentoolcore; then
2351 xen_pc="$xen_pc xentoolcore"
2352 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002353 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2354 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2355 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2356 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002357
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002358 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002359 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002360
2361 # First we test whether Xen headers and libraries are available.
2362 # If no, we are done and there is no Xen support.
2363 # If yes, more tests are run to detect the Xen version.
2364
2365 # Xen (any)
2366 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002367#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002368int main(void) {
2369 return 0;
2370}
2371EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002372 if ! compile_prog "" "$xen_libs" ; then
2373 # Xen not found
2374 if test "$xen" = "yes" ; then
2375 feature_not_found "xen" "Install xen devel"
2376 fi
2377 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002378
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002379 # Xen unstable
2380 elif
2381 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002382#undef XC_WANT_COMPAT_DEVICEMODEL_API
2383#define __XEN_TOOLS__
2384#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002385#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002386int main(void) {
2387 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002388 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002389
2390 xd = xendevicemodel_open(0, 0);
2391 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2392
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002393 xfmem = xenforeignmemory_open(0, 0);
2394 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2395
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002396 return 0;
2397}
2398EOF
2399 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2400 then
2401 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2402 xen_ctrl_version=41100
2403 xen=yes
2404 elif
2405 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002406#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2407#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002408#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002409int main(void) {
2410 xenforeignmemory_handle *xfmem;
2411
2412 xfmem = xenforeignmemory_open(0, 0);
2413 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002414 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002415
2416 return 0;
2417}
2418EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002419 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002420 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002421 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002422 xen_ctrl_version=41000
2423 xen=yes
2424 elif
2425 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002426#undef XC_WANT_COMPAT_DEVICEMODEL_API
2427#define __XEN_TOOLS__
2428#include <xendevicemodel.h>
2429int main(void) {
2430 xendevicemodel_handle *xd;
2431
2432 xd = xendevicemodel_open(0, 0);
2433 xendevicemodel_close(xd);
2434
2435 return 0;
2436}
2437EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002438 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2439 then
2440 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2441 xen_ctrl_version=40900
2442 xen=yes
2443 elif
2444 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002445/*
2446 * If we have stable libs the we don't want the libxc compat
2447 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002448 *
2449 * Also, check if xengnttab_grant_copy_segment_t is defined and
2450 * grant copy operation is implemented.
2451 */
2452#undef XC_WANT_COMPAT_EVTCHN_API
2453#undef XC_WANT_COMPAT_GNTTAB_API
2454#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2455#include <xenctrl.h>
2456#include <xenstore.h>
2457#include <xenevtchn.h>
2458#include <xengnttab.h>
2459#include <xenforeignmemory.h>
2460#include <stdint.h>
2461#include <xen/hvm/hvm_info_table.h>
2462#if !defined(HVM_MAX_VCPUS)
2463# error HVM_MAX_VCPUS not defined
2464#endif
2465int main(void) {
2466 xc_interface *xc = NULL;
2467 xenforeignmemory_handle *xfmem;
2468 xenevtchn_handle *xe;
2469 xengnttab_handle *xg;
2470 xen_domain_handle_t handle;
2471 xengnttab_grant_copy_segment_t* seg = NULL;
2472
2473 xs_daemon_open();
2474
2475 xc = xc_interface_open(0, 0, 0);
2476 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2477 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2478 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2479 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2480 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2481
2482 xfmem = xenforeignmemory_open(0, 0);
2483 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2484
2485 xe = xenevtchn_open(0, 0);
2486 xenevtchn_fd(xe);
2487
2488 xg = xengnttab_open(0, 0);
2489 xengnttab_grant_copy(xg, 0, seg);
2490
2491 return 0;
2492}
2493EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002494 compile_prog "" "$xen_libs $xen_stable_libs"
2495 then
2496 xen_ctrl_version=40800
2497 xen=yes
2498 elif
2499 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002500/*
2501 * If we have stable libs the we don't want the libxc compat
2502 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002503 */
2504#undef XC_WANT_COMPAT_EVTCHN_API
2505#undef XC_WANT_COMPAT_GNTTAB_API
2506#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2507#include <xenctrl.h>
2508#include <xenstore.h>
2509#include <xenevtchn.h>
2510#include <xengnttab.h>
2511#include <xenforeignmemory.h>
2512#include <stdint.h>
2513#include <xen/hvm/hvm_info_table.h>
2514#if !defined(HVM_MAX_VCPUS)
2515# error HVM_MAX_VCPUS not defined
2516#endif
2517int main(void) {
2518 xc_interface *xc = NULL;
2519 xenforeignmemory_handle *xfmem;
2520 xenevtchn_handle *xe;
2521 xengnttab_handle *xg;
2522 xen_domain_handle_t handle;
2523
2524 xs_daemon_open();
2525
2526 xc = xc_interface_open(0, 0, 0);
2527 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2528 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2529 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2530 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2531 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2532
2533 xfmem = xenforeignmemory_open(0, 0);
2534 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2535
2536 xe = xenevtchn_open(0, 0);
2537 xenevtchn_fd(xe);
2538
2539 xg = xengnttab_open(0, 0);
2540 xengnttab_map_grant_ref(xg, 0, 0, 0);
2541
2542 return 0;
2543}
2544EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002545 compile_prog "" "$xen_libs $xen_stable_libs"
2546 then
2547 xen_ctrl_version=40701
2548 xen=yes
2549 elif
2550 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002551#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002552#include <stdint.h>
2553int main(void) {
2554 xc_interface *xc = NULL;
2555 xen_domain_handle_t handle;
2556 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2557 return 0;
2558}
2559EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002560 compile_prog "" "$xen_libs"
2561 then
2562 xen_ctrl_version=40700
2563 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002564
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002565 # Xen 4.6
2566 elif
2567 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002568#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002569#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002570#include <stdint.h>
2571#include <xen/hvm/hvm_info_table.h>
2572#if !defined(HVM_MAX_VCPUS)
2573# error HVM_MAX_VCPUS not defined
2574#endif
2575int main(void) {
2576 xc_interface *xc;
2577 xs_daemon_open();
2578 xc = xc_interface_open(0, 0, 0);
2579 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2580 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002581 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002582 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002583 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002584 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002585 return 0;
2586}
2587EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002588 compile_prog "" "$xen_libs"
2589 then
2590 xen_ctrl_version=40600
2591 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002592
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002593 # Xen 4.5
2594 elif
2595 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002596#include <xenctrl.h>
2597#include <xenstore.h>
2598#include <stdint.h>
2599#include <xen/hvm/hvm_info_table.h>
2600#if !defined(HVM_MAX_VCPUS)
2601# error HVM_MAX_VCPUS not defined
2602#endif
2603int main(void) {
2604 xc_interface *xc;
2605 xs_daemon_open();
2606 xc = xc_interface_open(0, 0, 0);
2607 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2608 xc_gnttab_open(NULL, 0);
2609 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2610 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002611 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2612 return 0;
2613}
2614EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002615 compile_prog "" "$xen_libs"
2616 then
2617 xen_ctrl_version=40500
2618 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002619
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002620 elif
2621 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002622#include <xenctrl.h>
2623#include <xenstore.h>
2624#include <stdint.h>
2625#include <xen/hvm/hvm_info_table.h>
2626#if !defined(HVM_MAX_VCPUS)
2627# error HVM_MAX_VCPUS not defined
2628#endif
2629int main(void) {
2630 xc_interface *xc;
2631 xs_daemon_open();
2632 xc = xc_interface_open(0, 0, 0);
2633 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2634 xc_gnttab_open(NULL, 0);
2635 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2636 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002637 return 0;
2638}
2639EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002640 compile_prog "" "$xen_libs"
2641 then
2642 xen_ctrl_version=40200
2643 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002644
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002645 else
2646 if test "$xen" = "yes" ; then
2647 feature_not_found "xen (unsupported version)" \
2648 "Install a supported xen (xen 4.2 or newer)"
2649 fi
2650 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002651 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002652
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002653 if test "$xen" = yes; then
2654 if test $xen_ctrl_version -ge 40701 ; then
2655 libs_softmmu="$xen_stable_libs $libs_softmmu"
2656 fi
2657 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002658 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002659 fi
aliguorie37630c2009-04-22 15:19:10 +00002660fi
2661
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002662if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002663 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002664 xen_pci_passthrough=yes
2665 else
2666 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002667 error_exit "User requested feature Xen PCI Passthrough" \
2668 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002669 fi
2670 xen_pci_passthrough=no
2671 fi
2672fi
2673
aliguorie37630c2009-04-22 15:19:10 +00002674##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002675# Windows Hypervisor Platform accelerator (WHPX) check
2676if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002677 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002678 whpx="yes"
2679 else
2680 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002681 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002682 fi
2683 whpx="no"
2684 fi
2685fi
2686
2687##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002688# Sparse probe
2689if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002690 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002691 sparse=yes
2692 else
2693 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002694 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002695 fi
2696 sparse=no
2697 fi
2698fi
2699
2700##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002701# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002702if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002703 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002704 x11_cflags=$($pkg_config --cflags x11)
2705 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002706fi
2707
2708##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002709# GTK probe
2710
2711if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002712 gtkpackage="gtk+-3.0"
2713 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002714 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002715 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002716 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2717 gtk_libs=$($pkg_config --libs $gtkpackage)
2718 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002719 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002720 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002721 gtk_cflags="$gtk_cflags $x11_cflags"
2722 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002723 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002724 gtk="yes"
2725 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002726 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002727 else
2728 gtk="no"
2729 fi
2730fi
2731
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002732
2733##########################################
2734# GNUTLS probe
2735
2736if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002737 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002738 gnutls_cflags=$($pkg_config --cflags gnutls)
2739 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002740 libs_softmmu="$gnutls_libs $libs_softmmu"
2741 libs_tools="$gnutls_libs $libs_tools"
2742 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2743 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002744 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002745 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002746 else
2747 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002748 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002749fi
2750
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002751
2752# If user didn't give a --disable/enable-gcrypt flag,
2753# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002754# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002755if test -z "$gcrypt"
2756then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002757 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002758 then
2759 gcrypt="no"
2760 fi
2761fi
2762
2763# If user didn't give a --disable/enable-nettle flag,
2764# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002765# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002766if test -z "$nettle"
2767then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002768 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002769 then
2770 nettle="no"
2771 fi
2772fi
2773
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002774has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002775 if ! has "libgcrypt-config"
2776 then
2777 return 1
2778 fi
2779
2780 if test -n "$cross_prefix"
2781 then
Stefan Weil89138852016-05-16 15:10:20 +02002782 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002783 if test "$host-" != $cross_prefix
2784 then
2785 return 1
2786 fi
2787 fi
2788
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002789 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2790 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2791
2792 if test $maj != 1 || test $min -lt 5
2793 then
2794 return 1
2795 fi
2796
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002797 return 0
2798}
2799
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002800
2801if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002802 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002803 nettle_cflags=$($pkg_config --cflags nettle)
2804 nettle_libs=$($pkg_config --libs nettle)
2805 nettle_version=$($pkg_config --modversion nettle)
2806 libs_softmmu="$nettle_libs $libs_softmmu"
2807 libs_tools="$nettle_libs $libs_tools"
2808 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2809 nettle="yes"
2810
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002811 if test -z "$gcrypt"; then
2812 gcrypt="no"
2813 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002814 else
2815 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002816 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002817 else
2818 nettle="no"
2819 fi
2820 fi
2821fi
2822
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002823if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002824 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002825 gcrypt_cflags=$(libgcrypt-config --cflags)
2826 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002827 # Debian has remove -lgpg-error from libgcrypt-config
2828 # as it "spreads unnecessary dependencies" which in
2829 # turn breaks static builds...
2830 if test "$static" = "yes"
2831 then
2832 gcrypt_libs="$gcrypt_libs -lgpg-error"
2833 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002834 libs_softmmu="$gcrypt_libs $libs_softmmu"
2835 libs_tools="$gcrypt_libs $libs_tools"
2836 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002837 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002838
2839 cat > $TMPC << EOF
2840#include <gcrypt.h>
2841int main(void) {
2842 gcry_mac_hd_t handle;
2843 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2844 GCRY_MAC_FLAG_SECURE, NULL);
2845 return 0;
2846}
2847EOF
2848 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2849 gcrypt_hmac=yes
2850 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002851 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002852 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002853 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002854 else
2855 gcrypt="no"
2856 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002857 fi
2858fi
2859
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002860
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002861if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2862then
2863 error_exit "Only one of gcrypt & nettle can be enabled"
2864fi
2865
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002866##########################################
2867# libtasn1 - only for the TLS creds/session test suite
2868
2869tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002870tasn1_cflags=""
2871tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002872if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002873 tasn1_cflags=$($pkg_config --cflags libtasn1)
2874 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002875else
2876 tasn1=no
2877fi
2878
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002879
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002880##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002881# getifaddrs (for tests/test-io-channel-socket )
2882
2883have_ifaddrs_h=yes
2884if ! check_include "ifaddrs.h" ; then
2885 have_ifaddrs_h=no
2886fi
2887
2888##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002889# VTE probe
2890
2891if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002892 vteminversion="0.32.0"
2893 if $pkg_config --exists "vte-2.91"; then
2894 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002895 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002896 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002897 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002898 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002899 vte_cflags=$($pkg_config --cflags $vtepackage)
2900 vte_libs=$($pkg_config --libs $vtepackage)
2901 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002902 vte="yes"
2903 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002904 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002905 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002906 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002907 fi
2908fi
2909
2910##########################################
bellard11d9f692004-04-02 20:55:59 +00002911# SDL probe
2912
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002913# Look for sdl configuration program (pkg-config or sdl-config). Try
2914# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002915
Peter Xuc6093a02018-04-10 13:40:34 +08002916sdl_probe ()
2917{
2918 sdl_too_old=no
2919 if test "$sdlabi" = ""; then
2920 if $pkg_config --exists "sdl2"; then
2921 sdlabi=2.0
2922 elif $pkg_config --exists "sdl"; then
2923 sdlabi=1.2
2924 else
2925 sdlabi=2.0
2926 fi
LoĂŻc Miniera0dfd8a2010-01-28 21:15:18 +00002927 fi
bellard11d9f692004-04-02 20:55:59 +00002928
Peter Xuc6093a02018-04-10 13:40:34 +08002929 if test $sdlabi = "2.0"; then
2930 sdl_config=$sdl2_config
2931 sdlname=sdl2
2932 sdlconfigname=sdl2_config
2933 elif test $sdlabi = "1.2"; then
2934 sdlname=sdl
2935 sdlconfigname=sdl_config
2936 else
2937 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2938 fi
2939
2940 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2941 sdl_config=$sdlconfigname
2942 fi
2943
2944 if $pkg_config $sdlname --exists; then
2945 sdlconfig="$pkg_config $sdlname"
2946 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2947 elif has ${sdl_config}; then
2948 sdlconfig="$sdl_config"
2949 sdlversion=$($sdlconfig --version)
2950 else
2951 if test "$sdl" = "yes" ; then
2952 feature_not_found "sdl" "Install SDL2-devel"
2953 fi
2954 sdl=no
2955 # no need to do the rest
2956 return
2957 fi
2958 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2959 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2960 fi
2961
Juan Quintelaac119f92009-07-27 16:13:15 +02002962 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002963#include <SDL.h>
2964#undef main /* We don't want SDL to override our main() */
2965int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2966EOF
Stefan Weil89138852016-05-16 15:10:20 +02002967 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002968 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002969 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002970 if $pkg_config $sdlname --exists; then
2971 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2972 else
2973 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2974 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002975 else
Stefan Weil89138852016-05-16 15:10:20 +02002976 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002977 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002978 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002979 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002980 sdl_too_old=yes
2981 else
Peter Maydella30878e2015-08-14 16:10:52 +01002982 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002983 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002984
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002985 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002986 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002987 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002988 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2989 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002990 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002991 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002992 :
2993 else
2994 sdl=no
2995 fi
2996 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002997 else # sdl not found
2998 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002999 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003000 fi
3001 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003002 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003003}
3004
3005if test "$sdl" != "no" ; then
3006 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003007fi
bellard11d9f692004-04-02 20:55:59 +00003008
aliguori5368a422009-03-03 17:37:21 +00003009if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003010 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003011#include <SDL.h>
3012#if defined(SDL_VIDEO_DRIVER_X11)
3013#include <X11/XKBlib.h>
3014#else
3015#error No x11 support
3016#endif
3017int main(void) { return 0; }
3018EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003019 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003020 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003021 sdl_cflags="$sdl_cflags $x11_cflags"
3022 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003023 fi
aliguori5368a422009-03-03 17:37:21 +00003024fi
3025
ths8f28f3f2007-01-05 21:25:54 +00003026##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003027# RDMA needs OpenFabrics libraries
3028if test "$rdma" != "no" ; then
3029 cat > $TMPC <<EOF
3030#include <rdma/rdma_cma.h>
3031int main(void) { return 0; }
3032EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003033 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003034 if compile_prog "" "$rdma_libs" ; then
3035 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003036 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003037 else
3038 if test "$rdma" = "yes" ; then
3039 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003040 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003041 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003042 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003043 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3044 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3045 fi
3046 rdma="no"
3047 fi
3048fi
3049
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003050##########################################
3051# PVRDMA detection
3052
3053cat > $TMPC <<EOF &&
3054#include <sys/mman.h>
3055
3056int
3057main(void)
3058{
3059 char buf = 0;
3060 void *addr = &buf;
3061 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3062
3063 return 0;
3064}
3065EOF
3066
3067if test "$rdma" = "yes" ; then
3068 case "$pvrdma" in
3069 "")
3070 if compile_prog "" ""; then
3071 pvrdma="yes"
3072 else
3073 pvrdma="no"
3074 fi
3075 ;;
3076 "yes")
3077 if ! compile_prog "" ""; then
3078 error_exit "PVRDMA is not supported since mremap is not implemented"
3079 fi
3080 pvrdma="yes"
3081 ;;
3082 "no")
3083 pvrdma="no"
3084 ;;
3085 esac
3086else
3087 if test "$pvrdma" = "yes" ; then
3088 error_exit "PVRDMA requires rdma suppport"
3089 fi
3090 pvrdma="no"
3091fi
ths8d5d2d42007-08-25 01:37:51 +00003092
3093##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003094# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003095if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003096 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003097#include <sasl/sasl.h>
3098#include <stdio.h>
3099int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3100EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003101 # Assuming Cyrus-SASL installed in /usr prefix
3102 vnc_sasl_cflags=""
3103 vnc_sasl_libs="-lsasl2"
3104 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3105 vnc_sasl=yes
3106 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003107 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003108 else
3109 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003110 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003111 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003112 vnc_sasl=no
3113 fi
aliguori2f9606b2009-03-06 20:27:28 +00003114fi
3115
3116##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003117# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003118if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003119cat > $TMPC <<EOF
3120#include <stdio.h>
3121#include <jpeglib.h>
3122int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3123EOF
3124 vnc_jpeg_cflags=""
3125 vnc_jpeg_libs="-ljpeg"
3126 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3127 vnc_jpeg=yes
3128 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003129 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003130 else
3131 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003132 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003133 fi
3134 vnc_jpeg=no
3135 fi
3136fi
3137
3138##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003139# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003140if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003141cat > $TMPC <<EOF
3142//#include <stdio.h>
3143#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003144#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003145int main(void) {
3146 png_structp png_ptr;
3147 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003148 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003149}
3150EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003151 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003152 vnc_png_cflags=$($pkg_config libpng --cflags)
3153 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003154 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003155 vnc_png_cflags=""
3156 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003157 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003158 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3159 vnc_png=yes
3160 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003161 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003162 else
3163 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003164 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003165 fi
3166 vnc_png=no
3167 fi
3168fi
3169
3170##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003171# xkbcommon probe
3172if test "$xkbcommon" != "no" ; then
3173 if $pkg_config xkbcommon --exists; then
3174 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3175 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3176 xkbcommon=yes
3177 else
3178 if test "$xkbcommon" = "yes" ; then
3179 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3180 fi
3181 xkbcommon=no
3182 fi
3183fi
3184
3185##########################################
aliguori76655d62009-03-06 20:27:37 +00003186# fnmatch() probe, used for ACL routines
3187fnmatch="no"
3188cat > $TMPC << EOF
3189#include <fnmatch.h>
3190int main(void)
3191{
3192 fnmatch("foo", "foo", 0);
3193 return 0;
3194}
3195EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003196if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003197 fnmatch="yes"
3198fi
3199
3200##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003201# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003202if test "$xfs" != "no" ; then
3203 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003204#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003205#include <xfs/xfs.h>
3206int main(void)
3207{
3208 xfsctl(NULL, 0, 0, NULL);
3209 return 0;
3210}
3211EOF
3212 if compile_prog "" "" ; then
3213 xfs="yes"
3214 else
3215 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003216 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003217 fi
3218 xfs=no
3219 fi
3220fi
3221
3222##########################################
ths8a16d272008-07-19 09:56:24 +00003223# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003224if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003225 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003226 cat > $TMPC << EOF
3227#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003228int main(void)
3229{
3230 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003231 char s[] = "";
3232 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003233 return 0;
3234}
ths8a16d272008-07-19 09:56:24 +00003235EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003236 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003237 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003238 else
3239 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003240 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003241 fi
3242 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003243 fi
ths8a16d272008-07-19 09:56:24 +00003244fi
3245
3246##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003247# netmap support probe
3248# Apart from looking for netmap headers, we make sure that the host API version
3249# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3250# a minor/major version number. Minor new features will be marked with values up
3251# to 15, and if something happens that requires a change to the backend we will
3252# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003253if test "$netmap" != "no" ; then
3254 cat > $TMPC << EOF
3255#include <inttypes.h>
3256#include <net/if.h>
3257#include <net/netmap.h>
3258#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003259#if (NETMAP_API < 11) || (NETMAP_API > 15)
3260#error
3261#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003262int main(void) { return 0; }
3263EOF
3264 if compile_prog "" "" ; then
3265 netmap=yes
3266 else
3267 if test "$netmap" = "yes" ; then
3268 feature_not_found "netmap"
3269 fi
3270 netmap=no
3271 fi
3272fi
3273
3274##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003275# libcap-ng library probe
3276if test "$cap_ng" != "no" ; then
3277 cap_libs="-lcap-ng"
3278 cat > $TMPC << EOF
3279#include <cap-ng.h>
3280int main(void)
3281{
3282 capng_capability_to_name(CAPNG_EFFECTIVE);
3283 return 0;
3284}
3285EOF
3286 if compile_prog "" "$cap_libs" ; then
3287 cap_ng=yes
3288 libs_tools="$cap_libs $libs_tools"
3289 else
3290 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003291 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003292 fi
3293 cap_ng=no
3294 fi
3295fi
3296
3297##########################################
malcc2de5c92008-06-28 19:13:06 +00003298# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003299
malcc2de5c92008-06-28 19:13:06 +00003300audio_drv_probe()
3301{
3302 drv=$1
3303 hdr=$2
3304 lib=$3
3305 exp=$4
3306 cfl=$5
3307 cat > $TMPC << EOF
3308#include <$hdr>
3309int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003310EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003311 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003312 :
3313 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003314 error_exit "$drv check failed" \
3315 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003316 fi
3317}
3318
Stefan Weil89138852016-05-16 15:10:20 +02003319audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003320for drv in $audio_drv_list; do
3321 case $drv in
3322 alsa)
3323 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003324 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003325 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003326 ;;
3327
malcb8e59f12008-07-02 21:03:08 +00003328 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003329 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3330 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003331 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003332 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003333 ;;
3334
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003335 sdl)
3336 if test "$sdl" = "no"; then
3337 error_exit "sdl not found or disabled, can not use sdl audio driver"
3338 fi
3339 ;;
3340
Juan Quintela997e6902009-08-03 14:46:29 +02003341 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003342 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003343 ;;
3344
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003345 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003346 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003347 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003348 ;;
3349
3350 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003351 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003352 ;;
3353
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003354 wav)
3355 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003356 ;;
3357
malce4c63a62008-07-19 16:15:16 +00003358 *)
malc1c9b2a52008-07-19 16:57:30 +00003359 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003360 error_exit "Unknown driver '$drv' selected" \
3361 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003362 }
3363 ;;
malcc2de5c92008-06-28 19:13:06 +00003364 esac
3365done
ths8f28f3f2007-01-05 21:25:54 +00003366
balrog4d3b6f62008-02-10 16:33:14 +00003367##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003368# BrlAPI probe
3369
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003370if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003371 brlapi_libs="-lbrlapi"
3372 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003373#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003374#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003375int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3376EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003377 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003378 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003379 else
3380 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003381 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003382 fi
3383 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003384 fi
3385fi
aurel322e4d9fb2008-04-08 06:01:02 +00003386
3387##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003388# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003389if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003390 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003391 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3392 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003393 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003394 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003395 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003396 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003397 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003398 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003399#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003400#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003401#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003402int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003403 wchar_t wch = L'w';
3404 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003405 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003406 addwstr(L"wide chars\n");
3407 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003408 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003409 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003410}
balrog4d3b6f62008-02-10 16:33:14 +00003411EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003412 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003413 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003414 # Make sure we get the wide character prototypes
3415 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003416 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003417 for curses_lib in $curses_lib_list; do
3418 unset IFS
3419 if compile_prog "$curses_inc" "$curses_lib" ; then
3420 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003421 break
3422 fi
3423 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003424 if test "$curses_found" = yes ; then
3425 break
3426 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003427 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003428 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003429 if test "$curses_found" = "yes" ; then
3430 curses=yes
3431 else
3432 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003433 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003434 fi
3435 curses=no
3436 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003437fi
balrog4d3b6f62008-02-10 16:33:14 +00003438
blueswir1414f0da2008-08-15 18:20:52 +00003439##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003440# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003441if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003442 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003443 curlconfig="$pkg_config libcurl"
3444 else
3445 curlconfig=curl-config
3446 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003447 cat > $TMPC << EOF
3448#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003449int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003450EOF
Stefan Weil89138852016-05-16 15:10:20 +02003451 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3452 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003453 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003454 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003455 else
3456 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003457 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003458 fi
3459 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003460 fi
3461fi # test "$curl"
3462
3463##########################################
balrogfb599c92008-09-28 23:49:55 +00003464# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003465if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003466 cat > $TMPC << EOF
3467#include <bluetooth/bluetooth.h>
3468int main(void) { return bt_error(0); }
3469EOF
Stefan Weil89138852016-05-16 15:10:20 +02003470 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3471 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003472 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003473 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003474 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003475 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003476 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003477 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003478 fi
balroge820e3f2008-09-30 02:27:44 +00003479 bluez="no"
3480 fi
balrogfb599c92008-09-28 23:49:55 +00003481fi
3482
3483##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003484# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003485
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003486glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003487glib_modules=gthread-2.0
3488if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003489 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003490fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003491
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003492# This workaround is required due to a bug in pkg-config file for glib as it
3493# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3494
3495if test "$static" = yes -a "$mingw32" = yes; then
3496 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3497fi
3498
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003499for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003500 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003501 glib_cflags=$($pkg_config --cflags $i)
3502 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003503 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003504 LIBS="$glib_libs $LIBS"
3505 libs_qga="$glib_libs $libs_qga"
3506 else
3507 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3508 fi
3509done
3510
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003511# Sanity check that the current size_t matches the
3512# size that glib thinks it should be. This catches
3513# problems on multi-arch where people try to build
3514# 32-bit QEMU while pointing at 64-bit glib headers
3515cat > $TMPC <<EOF
3516#include <glib.h>
3517#include <unistd.h>
3518
3519#define QEMU_BUILD_BUG_ON(x) \
3520 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3521
3522int main(void) {
3523 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3524 return 0;
3525}
3526EOF
3527
Stefan Weil5919e032016-04-28 23:33:41 +02003528if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003529 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3530 "You probably need to set PKG_CONFIG_LIBDIR"\
3531 "to point to the right pkg-config files for your"\
3532 "build target"
3533fi
3534
John Snowbbbf2e02015-03-25 18:57:38 -04003535# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3536cat > $TMPC << EOF
3537#include <glib.h>
3538int main(void) { return 0; }
3539EOF
3540if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3541 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3542 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3543 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3544 fi
3545fi
3546
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003547#########################################
3548# zlib check
3549
3550if test "$zlib" != "no" ; then
3551 if $pkg_config --exists zlib; then
3552 zlib_cflags=$($pkg_config --cflags zlib)
3553 zlib_libs=$($pkg_config --libs zlib)
3554 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3555 LIBS="$zlib_libs $LIBS"
3556 else
3557 cat > $TMPC << EOF
3558#include <zlib.h>
3559int main(void) { zlibVersion(); return 0; }
3560EOF
3561 if compile_prog "" "-lz" ; then
3562 LIBS="$LIBS -lz"
3563 else
3564 error_exit "zlib check failed" \
3565 "Make sure to have the zlib libs and headers installed."
3566 fi
3567 fi
3568fi
3569
Fam Zhenge26110c2014-02-10 14:48:57 +08003570##########################################
3571# SHA command probe for modules
3572if test "$modules" = yes; then
3573 shacmd_probe="sha1sum sha1 shasum"
3574 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003575 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003576 shacmd="$c"
3577 break
3578 fi
3579 done
3580 if test "$shacmd" = ""; then
3581 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3582 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003583fi
3584
3585##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003586# pixman support probe
3587
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003588if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003589 pixman_cflags=
3590 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003591elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003592 pixman_cflags=$($pkg_config --cflags pixman-1)
3593 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003594else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003595 error_exit "pixman >= 0.21.8 not present." \
3596 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003597fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003598
3599##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003600# libmpathpersist probe
3601
3602if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003603 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003604 cat > $TMPC <<EOF
3605#include <libudev.h>
3606#include <mpath_persist.h>
3607unsigned mpath_mx_alloc_len = 1024;
3608int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003609static struct config *multipath_conf;
3610extern struct udev *udev;
3611extern struct config *get_multipath_config(void);
3612extern void put_multipath_config(struct config *conf);
3613struct udev *udev;
3614struct config *get_multipath_config(void) { return multipath_conf; }
3615void put_multipath_config(struct config *conf) { }
3616
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003617int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003618 udev = udev_new();
3619 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003620 return 0;
3621}
3622EOF
3623 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3624 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003625 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003626 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003627 # probe for the old API
3628 cat > $TMPC <<EOF
3629#include <libudev.h>
3630#include <mpath_persist.h>
3631unsigned mpath_mx_alloc_len = 1024;
3632int logsink;
3633int main(void) {
3634 struct udev *udev = udev_new();
3635 mpath_lib_init(udev);
3636 return 0;
3637}
3638EOF
3639 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3640 mpathpersist=yes
3641 mpathpersist_new_api=no
3642 else
3643 mpathpersist=no
3644 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003645 fi
3646else
3647 mpathpersist=no
3648fi
3649
3650##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303651# libcap probe
3652
3653if test "$cap" != "no" ; then
3654 cat > $TMPC <<EOF
3655#include <stdio.h>
3656#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003657int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303658EOF
3659 if compile_prog "" "-lcap" ; then
3660 cap=yes
3661 else
3662 cap=no
3663 fi
3664fi
3665
3666##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003667# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003668PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003669
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003670pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003671cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003672#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003673static void *f(void *p) { return NULL; }
3674int main(void) {
3675 pthread_t thread;
3676 pthread_create(&thread, 0, f, 0);
3677 return 0;
3678}
blueswir1414f0da2008-08-15 18:20:52 +00003679EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003680if compile_prog "" "" ; then
3681 pthread=yes
3682else
3683 for pthread_lib in $PTHREADLIBS_LIST; do
3684 if compile_prog "" "$pthread_lib" ; then
3685 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003686 found=no
3687 for lib_entry in $LIBS; do
3688 if test "$lib_entry" = "$pthread_lib"; then
3689 found=yes
3690 break
3691 fi
3692 done
3693 if test "$found" = "no"; then
3694 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003695 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003696 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003697 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003698 break
3699 fi
3700 done
3701fi
blueswir1414f0da2008-08-15 18:20:52 +00003702
Anthony Liguori4617e592009-08-25 17:21:56 -05003703if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003704 error_exit "pthread check failed" \
3705 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003706fi
3707
Roman Bolshakov479a5742018-12-17 23:26:01 +03003708# check for pthread_setname_np with thread id
3709pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003710cat > $TMPC << EOF
3711#include <pthread.h>
3712
3713static void *f(void *p) { return NULL; }
3714int main(void)
3715{
3716 pthread_t thread;
3717 pthread_create(&thread, 0, f, 0);
3718 pthread_setname_np(thread, "QEMU");
3719 return 0;
3720}
3721EOF
3722if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003723 pthread_setname_np_w_tid=yes
3724fi
3725
3726# check for pthread_setname_np without thread id
3727pthread_setname_np_wo_tid=no
3728cat > $TMPC << EOF
3729#include <pthread.h>
3730
3731static void *f(void *p) { pthread_setname_np("QEMU"); }
3732int main(void)
3733{
3734 pthread_t thread;
3735 pthread_create(&thread, 0, f, 0);
3736 return 0;
3737}
3738EOF
3739if compile_prog "" "$pthread_lib" ; then
3740 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003741fi
3742
aliguoribf9298b2008-12-05 20:05:26 +00003743##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003744# rbd probe
3745if test "$rbd" != "no" ; then
3746 cat > $TMPC <<EOF
3747#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003748#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003749int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003750 rados_t cluster;
3751 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003752 return 0;
3753}
3754EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003755 rbd_libs="-lrbd -lrados"
3756 if compile_prog "" "$rbd_libs" ; then
3757 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003758 else
3759 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003760 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003761 fi
3762 rbd=no
3763 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003764fi
3765
3766##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003767# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003768min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003769if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003770 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003771 libssh2_cflags=$($pkg_config libssh2 --cflags)
3772 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003773 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003774 else
3775 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003776 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003777 fi
3778 libssh2=no
3779 fi
3780fi
3781
3782##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003783# libssh2_sftp_fsync probe
3784
3785if test "$libssh2" = "yes"; then
3786 cat > $TMPC <<EOF
3787#include <stdio.h>
3788#include <libssh2.h>
3789#include <libssh2_sftp.h>
3790int main(void) {
3791 LIBSSH2_SESSION *session;
3792 LIBSSH2_SFTP *sftp;
3793 LIBSSH2_SFTP_HANDLE *sftp_handle;
3794 session = libssh2_session_init ();
3795 sftp = libssh2_sftp_init (session);
3796 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3797 libssh2_sftp_fsync (sftp_handle);
3798 return 0;
3799}
3800EOF
3801 # libssh2_cflags/libssh2_libs defined in previous test.
3802 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3803 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3804 fi
3805fi
3806
3807##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003808# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003809
3810if test "$linux_aio" != "no" ; then
3811 cat > $TMPC <<EOF
3812#include <libaio.h>
3813#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003814#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003815int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3816EOF
3817 if compile_prog "" "-laio" ; then
3818 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003819 else
3820 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003821 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003822 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003823 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003824 fi
3825fi
3826
3827##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003828# TPM passthrough is only on x86 Linux
3829
3830if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3831 tpm_passthrough=$tpm
3832else
3833 tpm_passthrough=no
3834fi
3835
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003836# TPM emulator is for all posix systems
3837if test "$mingw32" != "yes"; then
3838 tpm_emulator=$tpm
3839else
3840 tpm_emulator=no
3841fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003842##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003843# attr probe
3844
3845if test "$attr" != "no" ; then
3846 cat > $TMPC <<EOF
3847#include <stdio.h>
3848#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003849#ifdef CONFIG_LIBATTR
3850#include <attr/xattr.h>
3851#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003852#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003853#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003854int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3855EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003856 if compile_prog "" "" ; then
3857 attr=yes
3858 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003859 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003860 attr=yes
3861 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003862 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003863 else
3864 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003865 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003866 fi
3867 attr=no
3868 fi
3869fi
3870
3871##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003872# iovec probe
3873cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003874#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003875#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003876#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003877int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003878EOF
3879iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003880if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003881 iovec=yes
3882fi
3883
aurel32f652e6a2008-12-16 10:43:48 +00003884##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003885# preadv probe
3886cat > $TMPC <<EOF
3887#include <sys/types.h>
3888#include <sys/uio.h>
3889#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003890int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003891EOF
3892preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003893if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003894 preadv=yes
3895fi
3896
3897##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003898# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003899# fdt support is mandatory for at least some target architectures,
3900# so insist on it if we're building those system emulators.
3901fdt_required=no
3902for target in $target_list; do
3903 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003904 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003905 fdt_required=yes
3906 ;;
3907 esac
3908done
3909
3910if test "$fdt_required" = "yes"; then
3911 if test "$fdt" = "no"; then
3912 error_exit "fdt disabled but some requested targets require it." \
3913 "You can turn off fdt only if you also disable all the system emulation" \
3914 "targets which need it (by specifying a cut down --target-list)."
3915 fi
3916 fdt=yes
3917fi
3918
Juan Quintela2df87df2009-08-12 18:29:54 +02003919if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003920 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003921 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003922 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003923 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003924#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003925#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01003926int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003927EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003928 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003929 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003930 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003931 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003932 # have GIT checkout, so activate dtc submodule
3933 if test -e "${source_path}/.git" ; then
3934 git_submodules="${git_submodules} dtc"
3935 fi
3936 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003937 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003938 mkdir -p dtc
3939 if [ "$pwd_is_source_path" != "y" ] ; then
3940 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3941 symlink "$source_path/dtc/scripts" "dtc/scripts"
3942 fi
3943 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003944 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3945 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003946 elif test "$fdt" = "yes" ; then
3947 # Not a git build & no libfdt found, prompt for system install
3948 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3949 "Please install the DTC (libfdt) devel package"
3950 else
3951 # don't have and don't want
3952 fdt_libs=
3953 fdt=no
3954 fi
aurel32f652e6a2008-12-16 10:43:48 +00003955 fi
3956fi
3957
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003958libs_softmmu="$libs_softmmu $fdt_libs"
3959
Michael Walle20ff0752011-03-07 23:32:39 +01003960##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003961# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003962
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003963if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003964 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003965 if $pkg_config $opengl_pkgs; then
3966 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3967 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003968 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003969 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3970 gtk_gl="yes"
3971 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003972 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003973 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003974 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003975 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003976 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003977 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003978 opengl_libs=""
3979 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003980 fi
3981fi
3982
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003983if test "$opengl" = "yes"; then
3984 cat > $TMPC << EOF
3985#include <epoxy/egl.h>
3986#ifndef EGL_MESA_image_dma_buf_export
3987# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3988#endif
3989int main(void) { return 0; }
3990EOF
3991 if compile_prog "" "" ; then
3992 opengl_dmabuf=yes
3993 fi
3994fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003995
Klim Kireeved279a02018-01-12 12:01:19 +03003996##########################################
3997# libxml2 probe
3998if test "$libxml2" != "no" ; then
3999 if $pkg_config --exists libxml-2.0; then
4000 libxml2="yes"
4001 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4002 libxml2_libs=$($pkg_config --libs libxml-2.0)
4003 else
4004 if test "$libxml2" = "yes"; then
4005 feature_not_found "libxml2" "Install libxml2 devel"
4006 fi
4007 libxml2="no"
4008 fi
4009fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004010
Bharata B Raoeb100392012-09-24 14:42:45 +05304011##########################################
4012# glusterfs probe
4013if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004014 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304015 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004016 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4017 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004018 if $pkg_config --atleast-version=4 glusterfs-api; then
4019 glusterfs_xlator_opt="yes"
4020 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004021 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304022 glusterfs_discard="yes"
4023 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304024 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304025 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304026 glusterfs_zerofill="yes"
4027 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304028 else
4029 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004030 feature_not_found "GlusterFS backend support" \
4031 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304032 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304033 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304034 fi
4035fi
4036
aurel3239386ac2009-04-15 19:48:17 +00004037# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004038# emulator. This is done because older glibc versions don't
4039# have syscall stubs for these implemented. In that case we
4040# don't provide them even if kernel supports them.
4041#
4042inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004043cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004044#include <sys/inotify.h>
4045
4046int
4047main(void)
4048{
4049 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004050 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004051}
4052EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004053if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004054 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004055fi
4056
Riku Voipioc05c7a72010-03-26 15:25:11 +00004057inotify1=no
4058cat > $TMPC << EOF
4059#include <sys/inotify.h>
4060
4061int
4062main(void)
4063{
4064 /* try to start inotify */
4065 return inotify_init1(0);
4066}
4067EOF
4068if compile_prog "" "" ; then
4069 inotify1=yes
4070fi
4071
Riku Voipio099d6b02009-05-05 12:10:04 +03004072# check if pipe2 is there
4073pipe2=no
4074cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004075#include <unistd.h>
4076#include <fcntl.h>
4077
4078int main(void)
4079{
4080 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004081 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004082}
4083EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004084if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004085 pipe2=yes
4086fi
4087
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004088# check if accept4 is there
4089accept4=no
4090cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004091#include <sys/socket.h>
4092#include <stddef.h>
4093
4094int main(void)
4095{
4096 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4097 return 0;
4098}
4099EOF
4100if compile_prog "" "" ; then
4101 accept4=yes
4102fi
4103
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304104# check if tee/splice is there. vmsplice was added same time.
4105splice=no
4106cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304107#include <unistd.h>
4108#include <fcntl.h>
4109#include <limits.h>
4110
4111int main(void)
4112{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004113 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304114 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4115 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4116 return 0;
4117}
4118EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004119if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304120 splice=yes
4121fi
4122
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004123##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004124# libnuma probe
4125
4126if test "$numa" != "no" ; then
4127 cat > $TMPC << EOF
4128#include <numa.h>
4129int main(void) { return numa_available(); }
4130EOF
4131
4132 if compile_prog "" "-lnuma" ; then
4133 numa=yes
4134 libs_softmmu="-lnuma $libs_softmmu"
4135 else
4136 if test "$numa" = "yes" ; then
4137 feature_not_found "numa" "install numactl devel"
4138 fi
4139 numa=no
4140 fi
4141fi
4142
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004143if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4144 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4145 exit 1
4146fi
4147
Yang Zhong5a22ab72017-12-20 21:16:46 +08004148# Even if malloc_trim() is available, these non-libc memory allocators
4149# do not support it.
4150if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4151 if test "$malloc_trim" = "yes" ; then
4152 echo "Disabling malloc_trim with non-libc memory allocator"
4153 fi
4154 malloc_trim="no"
4155fi
4156
4157#######################################
4158# malloc_trim
4159
4160if test "$malloc_trim" != "no" ; then
4161 cat > $TMPC << EOF
4162#include <malloc.h>
4163int main(void) { malloc_trim(0); return 0; }
4164EOF
4165 if compile_prog "" "" ; then
4166 malloc_trim="yes"
4167 else
4168 malloc_trim="no"
4169 fi
4170fi
4171
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004172##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004173# tcmalloc probe
4174
4175if test "$tcmalloc" = "yes" ; then
4176 cat > $TMPC << EOF
4177#include <stdlib.h>
4178int main(void) { malloc(1); return 0; }
4179EOF
4180
4181 if compile_prog "" "-ltcmalloc" ; then
4182 LIBS="-ltcmalloc $LIBS"
4183 else
4184 feature_not_found "tcmalloc" "install gperftools devel"
4185 fi
4186fi
4187
4188##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004189# jemalloc probe
4190
4191if test "$jemalloc" = "yes" ; then
4192 cat > $TMPC << EOF
4193#include <stdlib.h>
4194int main(void) { malloc(1); return 0; }
4195EOF
4196
4197 if compile_prog "" "-ljemalloc" ; then
4198 LIBS="-ljemalloc $LIBS"
4199 else
4200 feature_not_found "jemalloc" "install jemalloc devel"
4201 fi
4202fi
4203
4204##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004205# signalfd probe
4206signalfd="no"
4207cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004208#include <unistd.h>
4209#include <sys/syscall.h>
4210#include <signal.h>
4211int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4212EOF
4213
4214if compile_prog "" "" ; then
4215 signalfd=yes
4216fi
4217
Riku Voipioc2882b92009-08-12 15:08:24 +03004218# check if eventfd is supported
4219eventfd=no
4220cat > $TMPC << EOF
4221#include <sys/eventfd.h>
4222
4223int main(void)
4224{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004225 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004226}
4227EOF
4228if compile_prog "" "" ; then
4229 eventfd=yes
4230fi
4231
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004232# check if memfd is supported
4233memfd=no
4234cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004235#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004236
4237int main(void)
4238{
4239 return memfd_create("foo", MFD_ALLOW_SEALING);
4240}
4241EOF
4242if compile_prog "" "" ; then
4243 memfd=yes
4244fi
4245
Cortland Tölva955727d2018-10-08 09:35:19 -07004246# check for usbfs
4247have_usbfs=no
4248if test "$linux_user" = "yes"; then
4249 if check_include linux/usbdevice_fs.h; then
4250 have_usbfs=yes
4251 fi
4252 have_usbfs=yes
4253fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004254
Ulrich Hechtd0927932009-09-17 20:22:14 +03004255# check for fallocate
4256fallocate=no
4257cat > $TMPC << EOF
4258#include <fcntl.h>
4259
4260int main(void)
4261{
4262 fallocate(0, 0, 0, 0);
4263 return 0;
4264}
4265EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004266if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004267 fallocate=yes
4268fi
4269
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004270# check for fallocate hole punching
4271fallocate_punch_hole=no
4272cat > $TMPC << EOF
4273#include <fcntl.h>
4274#include <linux/falloc.h>
4275
4276int main(void)
4277{
4278 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4279 return 0;
4280}
4281EOF
4282if compile_prog "" "" ; then
4283 fallocate_punch_hole=yes
4284fi
4285
Denis V. Lunevb953f072015-01-30 11:42:14 +03004286# check that fallocate supports range zeroing inside the file
4287fallocate_zero_range=no
4288cat > $TMPC << EOF
4289#include <fcntl.h>
4290#include <linux/falloc.h>
4291
4292int main(void)
4293{
4294 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4295 return 0;
4296}
4297EOF
4298if compile_prog "" "" ; then
4299 fallocate_zero_range=yes
4300fi
4301
Kevin Wolfed911432014-09-29 17:12:59 +02004302# check for posix_fallocate
4303posix_fallocate=no
4304cat > $TMPC << EOF
4305#include <fcntl.h>
4306
4307int main(void)
4308{
4309 posix_fallocate(0, 0, 0);
4310 return 0;
4311}
4312EOF
4313if compile_prog "" "" ; then
4314 posix_fallocate=yes
4315fi
4316
Peter Maydellc727f472011-01-06 11:05:10 +00004317# check for sync_file_range
4318sync_file_range=no
4319cat > $TMPC << EOF
4320#include <fcntl.h>
4321
4322int main(void)
4323{
4324 sync_file_range(0, 0, 0, 0);
4325 return 0;
4326}
4327EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004328if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004329 sync_file_range=yes
4330fi
4331
Peter Maydelldace20d2011-01-10 13:11:24 +00004332# check for linux/fiemap.h and FS_IOC_FIEMAP
4333fiemap=no
4334cat > $TMPC << EOF
4335#include <sys/ioctl.h>
4336#include <linux/fs.h>
4337#include <linux/fiemap.h>
4338
4339int main(void)
4340{
4341 ioctl(0, FS_IOC_FIEMAP, 0);
4342 return 0;
4343}
4344EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004345if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004346 fiemap=yes
4347fi
4348
Ulrich Hechtd0927932009-09-17 20:22:14 +03004349# check for dup3
4350dup3=no
4351cat > $TMPC << EOF
4352#include <unistd.h>
4353
4354int main(void)
4355{
4356 dup3(0, 0, 0);
4357 return 0;
4358}
4359EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004360if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004361 dup3=yes
4362fi
4363
Alex Bligh4e0c6522013-08-21 16:02:43 +01004364# check for ppoll support
4365ppoll=no
4366cat > $TMPC << EOF
4367#include <poll.h>
4368
4369int main(void)
4370{
4371 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4372 ppoll(&pfd, 1, 0, 0);
4373 return 0;
4374}
4375EOF
4376if compile_prog "" "" ; then
4377 ppoll=yes
4378fi
4379
Alex Blighcd758dd2013-08-21 16:02:44 +01004380# check for prctl(PR_SET_TIMERSLACK , ... ) support
4381prctl_pr_set_timerslack=no
4382cat > $TMPC << EOF
4383#include <sys/prctl.h>
4384
4385int main(void)
4386{
4387 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4388 return 0;
4389}
4390EOF
4391if compile_prog "" "" ; then
4392 prctl_pr_set_timerslack=yes
4393fi
4394
Peter Maydell3b6edd12011-02-15 18:35:05 +00004395# check for epoll support
4396epoll=no
4397cat > $TMPC << EOF
4398#include <sys/epoll.h>
4399
4400int main(void)
4401{
4402 epoll_create(0);
4403 return 0;
4404}
4405EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004406if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004407 epoll=yes
4408fi
4409
Peter Maydell227f0212016-06-06 19:58:11 +01004410# epoll_create1 is a later addition
4411# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004412epoll_create1=no
4413cat > $TMPC << EOF
4414#include <sys/epoll.h>
4415
4416int main(void)
4417{
Peter Maydell19e83f62011-04-26 16:56:40 +01004418 /* Note that we use epoll_create1 as a value, not as
4419 * a function being called. This is necessary so that on
4420 * old SPARC glibc versions where the function was present in
4421 * the library but not declared in the header file we will
4422 * fail the configure check. (Otherwise we will get a compiler
4423 * warning but not an error, and will proceed to fail the
4424 * qemu compile where we compile with -Werror.)
4425 */
Blue Swirlc075a722012-08-09 20:21:25 +00004426 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004427}
4428EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004429if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004430 epoll_create1=yes
4431fi
4432
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004433# check for sendfile support
4434sendfile=no
4435cat > $TMPC << EOF
4436#include <sys/sendfile.h>
4437
4438int main(void)
4439{
4440 return sendfile(0, 0, 0, 0);
4441}
4442EOF
4443if compile_prog "" "" ; then
4444 sendfile=yes
4445fi
4446
Riku Voipio51834342014-06-22 11:25:42 +01004447# check for timerfd support (glibc 2.8 and newer)
4448timerfd=no
4449cat > $TMPC << EOF
4450#include <sys/timerfd.h>
4451
4452int main(void)
4453{
4454 return(timerfd_create(CLOCK_REALTIME, 0));
4455}
4456EOF
4457if compile_prog "" "" ; then
4458 timerfd=yes
4459fi
4460
Riku Voipio9af5c902014-08-12 15:58:57 +03004461# check for setns and unshare support
4462setns=no
4463cat > $TMPC << EOF
4464#include <sched.h>
4465
4466int main(void)
4467{
4468 int ret;
4469 ret = setns(0, 0);
4470 ret = unshare(0);
4471 return ret;
4472}
4473EOF
4474if compile_prog "" "" ; then
4475 setns=yes
4476fi
4477
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004478# clock_adjtime probe
4479clock_adjtime=no
4480cat > $TMPC <<EOF
4481#include <time.h>
4482
4483int main(void)
4484{
4485 return clock_adjtime(0, 0);
4486}
4487EOF
4488clock_adjtime=no
4489if compile_prog "" "" ; then
4490 clock_adjtime=yes
4491fi
4492
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004493# syncfs probe
4494syncfs=no
4495cat > $TMPC <<EOF
4496#include <unistd.h>
4497
4498int main(void)
4499{
4500 return syncfs(0);
4501}
4502EOF
4503syncfs=no
4504if compile_prog "" "" ; then
4505 syncfs=yes
4506fi
4507
pbrookcc8ae6d2006-04-23 17:57:59 +00004508# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004509if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004510 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004511 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004512 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004513 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004514 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004515 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004516 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004517 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004518fi
4519
Stefan Weilf514f412009-10-11 12:44:07 +02004520# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004521byteswap_h=no
4522cat > $TMPC << EOF
4523#include <byteswap.h>
4524int main(void) { return bswap_32(0); }
4525EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004526if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004527 byteswap_h=yes
4528fi
4529
Stefan Weil75f13592013-01-05 12:17:38 +01004530# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004531bswap_h=no
4532cat > $TMPC << EOF
4533#include <sys/endian.h>
4534#include <sys/types.h>
4535#include <machine/bswap.h>
4536int main(void) { return bswap32(0); }
4537EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004538if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004539 bswap_h=yes
4540fi
4541
aliguorida93a1f2008-12-12 20:02:52 +00004542##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004543# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004544if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004545 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004546 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004547 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4548 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004549 else
4550 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004551 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004552 fi
4553 libiscsi="no"
4554 fi
4555fi
4556
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004557##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004558# Do we need libm
4559cat > $TMPC << EOF
4560#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004561int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004562EOF
4563if compile_prog "" "" ; then
4564 :
4565elif compile_prog "" "-lm" ; then
4566 LIBS="-lm $LIBS"
4567 libs_qga="-lm $libs_qga"
4568else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004569 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004570fi
4571
4572##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004573# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004574# uClibc provides 2 versions of clock_gettime(), one with realtime
4575# support and one without. This means that the clock_gettime() don't
4576# need -lrt. We still need it for timer_create() so we check for this
4577# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004578cat > $TMPC <<EOF
4579#include <signal.h>
4580#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004581int main(void) {
4582 timer_create(CLOCK_REALTIME, NULL, NULL);
4583 return clock_gettime(CLOCK_REALTIME, NULL);
4584}
aliguorida93a1f2008-12-12 20:02:52 +00004585EOF
4586
Juan Quintela52166aa2009-08-03 14:46:03 +02004587if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004588 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004589# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004590elif compile_prog "" "$pthread_lib -lrt" ; then
4591 LIBS="$LIBS -lrt"
4592 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004593fi
4594
Blue Swirl31ff5042009-09-12 12:33:07 +00004595if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004596 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004597 libs_softmmu="-lutil $libs_softmmu"
4598fi
4599
Blue Swirlde5071c2009-09-12 09:58:46 +00004600##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004601# spice probe
4602if test "$spice" != "no" ; then
4603 cat > $TMPC << EOF
4604#include <spice.h>
4605int main(void) { spice_server_new(); return 0; }
4606EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004607 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4608 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004609 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004610 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004611 compile_prog "$spice_cflags" "$spice_libs" ; then
4612 spice="yes"
4613 libs_softmmu="$libs_softmmu $spice_libs"
4614 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004615 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4616 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004617 else
4618 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004619 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004620 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004621 fi
4622 spice="no"
4623 fi
4624fi
4625
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004626# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004627if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004628 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004629 libcacard_cflags=$($pkg_config --cflags libcacard)
4630 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004631 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004632 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004633 if test "$smartcard" = "yes"; then
4634 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004635 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004636 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004637 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004638fi
4639
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004640# check for libusb
4641if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004642 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004643 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004644 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4645 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004646 else
4647 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004648 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004649 fi
4650 libusb="no"
4651 fi
4652fi
4653
Hans de Goede69354a82011-07-19 11:04:10 +02004654# check for usbredirparser for usb network redirection support
4655if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004656 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004657 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004658 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4659 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004660 else
4661 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004662 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004663 fi
4664 usb_redir="no"
4665 fi
4666fi
4667
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004668##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004669# check if we have VSS SDK headers for win
4670
4671if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4672 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004673 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004674 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4675 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004676 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004677 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4678 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004679 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004680 esac
4681 cat > $TMPC << EOF
4682#define __MIDL_user_allocate_free_DEFINED__
4683#include <inc/win2003/vss.h>
4684int main(void) { return VSS_CTX_BACKUP; }
4685EOF
4686 if compile_prog "$vss_win32_include" "" ; then
4687 guest_agent_with_vss="yes"
4688 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004689 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004690 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004691 else
4692 if test "$vss_win32_sdk" != "" ; then
4693 echo "ERROR: Please download and install Microsoft VSS SDK:"
4694 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4695 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4696 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4697 echo "ERROR: The headers are extracted in the directory \`inc'."
4698 feature_not_found "VSS support"
4699 fi
4700 guest_agent_with_vss="no"
4701 fi
4702fi
4703
4704##########################################
4705# lookup Windows platform SDK (if not specified)
4706# The SDK is needed only to build .tlb (type library) file of guest agent
4707# VSS provider from the source. It is usually unnecessary because the
4708# pre-compiled .tlb file is included.
4709
4710if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4711 if test -z "$win_sdk"; then
4712 programfiles="$PROGRAMFILES"
4713 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4714 if test -n "$programfiles"; then
4715 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4716 else
4717 feature_not_found "Windows SDK"
4718 fi
4719 elif test "$win_sdk" = "no"; then
4720 win_sdk=""
4721 fi
4722fi
4723
4724##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004725# check if mingw environment provides a recent ntddscsi.h
4726if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4727 cat > $TMPC << EOF
4728#include <windows.h>
4729#include <ntddscsi.h>
4730int main(void) {
4731#if !defined(IOCTL_SCSI_GET_ADDRESS)
4732#error Missing required ioctl definitions
4733#endif
4734 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4735 return addr.Lun;
4736}
4737EOF
4738 if compile_prog "" "" ; then
4739 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004740 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004741 fi
4742fi
4743
4744##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004745# virgl renderer probe
4746
4747if test "$virglrenderer" != "no" ; then
4748 cat > $TMPC << EOF
4749#include <virglrenderer.h>
4750int main(void) { virgl_renderer_poll(); return 0; }
4751EOF
4752 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4753 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004754 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004755 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4756 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4757 virglrenderer="yes"
4758 else
4759 if test "$virglrenderer" = "yes" ; then
4760 feature_not_found "virglrenderer"
4761 fi
4762 virglrenderer="no"
4763 fi
4764fi
4765
4766##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004767# capstone
4768
Richard Hendersone219c492017-09-28 09:01:23 -07004769case "$capstone" in
4770 "" | yes)
4771 if $pkg_config capstone; then
4772 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004773 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004774 capstone=git
4775 elif test -e "${source_path}/capstone/Makefile" ; then
4776 capstone=internal
4777 elif test -z "$capstone" ; then
4778 capstone=no
4779 else
4780 feature_not_found "capstone" "Install capstone devel or git submodule"
4781 fi
4782 ;;
4783
4784 system)
4785 if ! $pkg_config capstone; then
4786 feature_not_found "capstone" "Install capstone devel"
4787 fi
4788 ;;
4789esac
4790
4791case "$capstone" in
4792 git | internal)
4793 if test "$capstone" = git; then
4794 git_submodules="${git_submodules} capstone"
4795 fi
4796 mkdir -p capstone
4797 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4798 if test "$mingw32" = "yes"; then
4799 LIBCAPSTONE=capstone.lib
4800 else
4801 LIBCAPSTONE=libcapstone.a
4802 fi
4803 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4804 ;;
4805
4806 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004807 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4808 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004809 ;;
4810
4811 no)
4812 ;;
4813 *)
4814 error_exit "Unknown state for capstone: $capstone"
4815 ;;
4816esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004817
4818##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004819# check if we have fdatasync
4820
4821fdatasync=no
4822cat > $TMPC << EOF
4823#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004824int main(void) {
4825#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4826return fdatasync(0);
4827#else
Stefan Weile172fe12012-04-06 21:33:20 +02004828#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004829#endif
4830}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004831EOF
4832if compile_prog "" "" ; then
4833 fdatasync=yes
4834fi
4835
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004836##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004837# check if we have madvise
4838
4839madvise=no
4840cat > $TMPC << EOF
4841#include <sys/types.h>
4842#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004843#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004844int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4845EOF
4846if compile_prog "" "" ; then
4847 madvise=yes
4848fi
4849
4850##########################################
4851# check if we have posix_madvise
4852
4853posix_madvise=no
4854cat > $TMPC << EOF
4855#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004856#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004857int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4858EOF
4859if compile_prog "" "" ; then
4860 posix_madvise=yes
4861fi
4862
4863##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004864# check if we have posix_memalign()
4865
4866posix_memalign=no
4867cat > $TMPC << EOF
4868#include <stdlib.h>
4869int main(void) {
4870 void *p;
4871 return posix_memalign(&p, 8, 8);
4872}
4873EOF
4874if compile_prog "" "" ; then
4875 posix_memalign=yes
4876fi
4877
4878##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004879# check if we have posix_syslog
4880
4881posix_syslog=no
4882cat > $TMPC << EOF
4883#include <syslog.h>
4884int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4885EOF
4886if compile_prog "" "" ; then
4887 posix_syslog=yes
4888fi
4889
4890##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004891# check if we have sem_timedwait
4892
4893sem_timedwait=no
4894cat > $TMPC << EOF
4895#include <semaphore.h>
4896int main(void) { return sem_timedwait(0, 0); }
4897EOF
4898if compile_prog "" "" ; then
4899 sem_timedwait=yes
4900fi
4901
4902##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004903# check if we have strchrnul
4904
4905strchrnul=no
4906cat > $TMPC << EOF
4907#include <string.h>
4908int main(void);
4909// Use a haystack that the compiler shouldn't be able to constant fold
4910char *haystack = (char*)&main;
4911int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4912EOF
4913if compile_prog "" "" ; then
4914 strchrnul=yes
4915fi
4916
4917##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004918# check if trace backend exists
4919
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004920$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004921if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004922 error_exit "invalid trace backends" \
4923 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004924fi
4925
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004926##########################################
4927# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004928if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004929 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004930#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004931int main(void) { return 0; }
4932EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004933 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004934 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004935 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004936 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004937 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004938 fi
4939 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004940 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004941 else
4942 urcu_bp_libs="-lurcu-bp"
4943 fi
4944
4945 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4946 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004947 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004948 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004949 fi
4950fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004951
4952##########################################
4953# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004954if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004955 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004956 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004957 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004958 trace_backend_stap="no"
4959 if has 'stap' ; then
4960 trace_backend_stap="yes"
4961 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004962fi
4963
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004964##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004965# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304966
Peter Maydell7c2acc72013-04-08 12:11:27 +01004967# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004968# is sigcontext. On Windows the only valid backend is the Windows
4969# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004970
4971ucontext_works=no
4972if test "$darwin" != "yes"; then
4973 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304974#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004975#ifdef __stub_makecontext
4976#error Ignoring glibc stub makecontext which will always fail
4977#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004978int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304979EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004980 if compile_prog "" "" ; then
4981 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304982 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004983fi
4984
4985if test "$coroutine" = ""; then
4986 if test "$mingw32" = "yes"; then
4987 coroutine=win32
4988 elif test "$ucontext_works" = "yes"; then
4989 coroutine=ucontext
4990 else
4991 coroutine=sigaltstack
4992 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004993else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004994 case $coroutine in
4995 windows)
4996 if test "$mingw32" != "yes"; then
4997 error_exit "'windows' coroutine backend only valid for Windows"
4998 fi
4999 # Unfortunately the user visible backend name doesn't match the
5000 # coroutine-*.c filename for this case, so we have to adjust it here.
5001 coroutine=win32
5002 ;;
5003 ucontext)
5004 if test "$ucontext_works" != "yes"; then
5005 feature_not_found "ucontext"
5006 fi
5007 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005008 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005009 if test "$mingw32" = "yes"; then
5010 error_exit "only the 'windows' coroutine backend is valid for Windows"
5011 fi
5012 ;;
5013 *)
5014 error_exit "unknown coroutine backend $coroutine"
5015 ;;
5016 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305017fi
5018
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005019if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005020 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005021fi
5022
Peter Lieven7d992e42016-09-27 11:58:45 +02005023if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005024 if test "$coroutine_pool" = "yes"; then
5025 echo "WARN: disabling coroutine pool for stack usage debugging"
5026 coroutine_pool=no
5027 fi
5028fi
5029
5030
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305031##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305032# check if we have open_by_handle_at
5033
Stefan Weil4e1797f2012-06-18 22:11:06 +02005034open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305035cat > $TMPC << EOF
5036#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005037#if !defined(AT_EMPTY_PATH)
5038# error missing definition
5039#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005040int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005041#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305042EOF
5043if compile_prog "" "" ; then
5044 open_by_handle_at=yes
5045fi
5046
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305047########################################
5048# check if we have linux/magic.h
5049
5050linux_magic_h=no
5051cat > $TMPC << EOF
5052#include <linux/magic.h>
5053int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005054 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305055}
5056EOF
5057if compile_prog "" "" ; then
5058 linux_magic_h=yes
5059fi
5060
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005061########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005062# check whether we can disable warning option with a pragma (this is needed
5063# to silence warnings in the headers of some versions of external libraries).
5064# This test has to be compiled with -Werror as otherwise an unknown pragma is
5065# only a warning.
5066#
5067# If we can't selectively disable warning in the code, disable -Werror so that
5068# the build doesn't fail anyway.
5069
Peter Maydell06d71fa2012-07-30 16:13:07 +01005070pragma_disable_unused_but_set=no
5071cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005072#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005073#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005074#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005075
Peter Maydell06d71fa2012-07-30 16:13:07 +01005076int main(void) {
5077 return 0;
5078}
5079EOF
5080if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005081 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005082else
5083 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005084fi
5085
5086########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005087# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005088
5089valgrind_h=no
5090cat > $TMPC << EOF
5091#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005092int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005093 return 0;
5094}
5095EOF
5096if compile_prog "" "" ; then
5097 valgrind_h=yes
5098fi
5099
5100########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005101# check if environ is declared
5102
5103has_environ=no
5104cat > $TMPC << EOF
5105#include <unistd.h>
5106int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005107 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005108 return 0;
5109}
5110EOF
5111if compile_prog "" "" ; then
5112 has_environ=yes
5113fi
5114
Richard Henderson76a347e2012-12-28 14:17:02 -08005115########################################
5116# check if cpuid.h is usable.
5117
Richard Henderson76a347e2012-12-28 14:17:02 -08005118cat > $TMPC << EOF
5119#include <cpuid.h>
5120int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005121 unsigned a, b, c, d;
5122 int max = __get_cpuid_max(0, 0);
5123
5124 if (max >= 1) {
5125 __cpuid(1, a, b, c, d);
5126 }
5127
5128 if (max >= 7) {
5129 __cpuid_count(7, 0, a, b, c, d);
5130 }
5131
5132 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005133}
5134EOF
5135if compile_prog "" "" ; then
5136 cpuid_h=yes
5137fi
5138
Richard Henderson5dd89902017-07-18 18:40:18 -10005139##########################################
5140# avx2 optimization requirement check
5141#
5142# There is no point enabling this if cpuid.h is not usable,
5143# since we won't be able to select the new routines.
5144
Liam Merwick86583a02018-10-19 21:38:59 +01005145if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005146 cat > $TMPC << EOF
5147#pragma GCC push_options
5148#pragma GCC target("avx2")
5149#include <cpuid.h>
5150#include <immintrin.h>
5151static int bar(void *a) {
5152 __m256i x = *(__m256i *)a;
5153 return _mm256_testz_si256(x, x);
5154}
5155int main(int argc, char *argv[]) { return bar(argv[0]); }
5156EOF
5157 if compile_object "" ; then
5158 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005159 else
5160 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005161 fi
5162fi
5163
Richard Hendersonf5401662013-02-16 12:46:59 -08005164########################################
5165# check if __[u]int128_t is usable.
5166
5167int128=no
5168cat > $TMPC << EOF
5169__int128_t a;
5170__uint128_t b;
5171int main (void) {
5172 a = a + b;
5173 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005174 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005175 return 0;
5176}
5177EOF
5178if compile_prog "" "" ; then
5179 int128=yes
5180fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005181
Richard Henderson7ebee432016-06-29 21:10:59 -07005182#########################################
5183# See if 128-bit atomic operations are supported.
5184
5185atomic128=no
5186if test "$int128" = "yes"; then
5187 cat > $TMPC << EOF
5188int main(void)
5189{
5190 unsigned __int128 x = 0, y = 0;
5191 y = __atomic_load_16(&x, 0);
5192 __atomic_store_16(&x, y, 0);
5193 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5194 return 0;
5195}
5196EOF
5197 if compile_prog "" "" ; then
5198 atomic128=yes
5199 fi
5200fi
5201
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005202cmpxchg128=no
5203if test "$int128" = yes -a "$atomic128" = no; then
5204 cat > $TMPC << EOF
5205int main(void)
5206{
5207 unsigned __int128 x = 0, y = 0;
5208 __sync_val_compare_and_swap_16(&x, y, x);
5209 return 0;
5210}
5211EOF
5212 if compile_prog "" "" ; then
5213 cmpxchg128=yes
5214 fi
5215fi
5216
Richard Hendersondf79b992016-09-02 12:23:57 -07005217#########################################
5218# See if 64-bit atomic operations are supported.
5219# Note that without __atomic builtins, we can only
5220# assume atomic loads/stores max at pointer size.
5221
5222cat > $TMPC << EOF
5223#include <stdint.h>
5224int main(void)
5225{
5226 uint64_t x = 0, y = 0;
5227#ifdef __ATOMIC_RELAXED
5228 y = __atomic_load_8(&x, 0);
5229 __atomic_store_8(&x, y, 0);
5230 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5231 __atomic_exchange_8(&x, y, 0);
5232 __atomic_fetch_add_8(&x, y, 0);
5233#else
5234 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5235 __sync_lock_test_and_set(&x, y);
5236 __sync_val_compare_and_swap(&x, y, 0);
5237 __sync_fetch_and_add(&x, y);
5238#endif
5239 return 0;
5240}
5241EOF
5242if compile_prog "" "" ; then
5243 atomic64=yes
5244fi
5245
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005246########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005247# See if 16-byte vector operations are supported.
5248# Even without a vector unit the compiler may expand these.
5249# There is a bug in old GCC for PPC that crashes here.
5250# Unfortunately it's the system compiler for Centos 7.
5251
5252cat > $TMPC << EOF
5253typedef unsigned char U1 __attribute__((vector_size(16)));
5254typedef unsigned short U2 __attribute__((vector_size(16)));
5255typedef unsigned int U4 __attribute__((vector_size(16)));
5256typedef unsigned long long U8 __attribute__((vector_size(16)));
5257typedef signed char S1 __attribute__((vector_size(16)));
5258typedef signed short S2 __attribute__((vector_size(16)));
5259typedef signed int S4 __attribute__((vector_size(16)));
5260typedef signed long long S8 __attribute__((vector_size(16)));
5261static U1 a1, b1;
5262static U2 a2, b2;
5263static U4 a4, b4;
5264static U8 a8, b8;
5265static S1 c1;
5266static S2 c2;
5267static S4 c4;
5268static S8 c8;
5269static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005270void helper(void *d, void *a, int shift, int i);
5271void helper(void *d, void *a, int shift, int i)
5272{
5273 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5274 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5275 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5276 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5277}
Richard Hendersondb432672017-09-15 14:11:45 -07005278int main(void)
5279{
5280 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5281 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5282 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
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 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5287 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5288 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5289 return 0;
5290}
5291EOF
5292
5293vector16=no
5294if compile_prog "" "" ; then
5295 vector16=yes
5296fi
5297
5298########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005299# check if getauxval is available.
5300
5301getauxval=no
5302cat > $TMPC << EOF
5303#include <sys/auxv.h>
5304int main(void) {
5305 return getauxval(AT_HWCAP) == 0;
5306}
5307EOF
5308if compile_prog "" "" ; then
5309 getauxval=yes
5310fi
5311
John Snowfd0e6052015-03-25 18:57:39 -04005312########################################
5313# check if ccache is interfering with
5314# semantic analysis of macros
5315
John Snow5e4dfd32015-10-28 13:56:40 -04005316unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005317ccache_cpp2=no
5318cat > $TMPC << EOF
5319static const int Z = 1;
5320#define fn() ({ Z; })
5321#define TAUT(X) ((X) == Z)
5322#define PAREN(X, Y) (X == Y)
5323#define ID(X) (X)
5324int main(int argc, char *argv[])
5325{
5326 int x = 0, y = 0;
5327 x = ID(x);
5328 x = fn();
5329 fn();
5330 if (PAREN(x, y)) return 0;
5331 if (TAUT(Z)) return 0;
5332 return 0;
5333}
5334EOF
5335
5336if ! compile_object "-Werror"; then
5337 ccache_cpp2=yes
5338fi
5339
John Snowb553a042015-11-03 15:43:42 -05005340#################################################
5341# clang does not support glibc + FORTIFY_SOURCE.
5342
5343if test "$fortify_source" != "no"; then
5344 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5345 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005346 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005347 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005348 fortify_source="no";
5349 else
5350 fortify_source="yes"
5351 fi
5352fi
5353
Fam Zheng1efad062018-06-01 17:26:43 +08005354###############################################
5355# Check if copy_file_range is provided by glibc
5356have_copy_file_range=no
5357cat > $TMPC << EOF
5358#include <unistd.h>
5359int main(void) {
5360 copy_file_range(0, NULL, 0, NULL, 0, 0);
5361 return 0;
5362}
5363EOF
5364if compile_prog "" "" ; then
5365 have_copy_file_range=yes
5366fi
5367
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305368##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005369# check if struct fsxattr is available via linux/fs.h
5370
5371have_fsxattr=no
5372cat > $TMPC << EOF
5373#include <linux/fs.h>
5374struct fsxattr foo;
5375int main(void) {
5376 return 0;
5377}
5378EOF
5379if compile_prog "" "" ; then
5380 have_fsxattr=yes
5381fi
5382
Peter Maydellb66e10e2016-06-08 18:34:32 +01005383##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005384# check for usable membarrier system call
5385if test "$membarrier" = "yes"; then
5386 have_membarrier=no
5387 if test "$mingw32" = "yes" ; then
5388 have_membarrier=yes
5389 elif test "$linux" = "yes" ; then
5390 cat > $TMPC << EOF
5391 #include <linux/membarrier.h>
5392 #include <sys/syscall.h>
5393 #include <unistd.h>
5394 #include <stdlib.h>
5395 int main(void) {
5396 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5397 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5398 exit(0);
5399 }
5400EOF
5401 if compile_prog "" "" ; then
5402 have_membarrier=yes
5403 fi
5404 fi
5405 if test "$have_membarrier" = "no"; then
5406 feature_not_found "membarrier" "membarrier system call not available"
5407 fi
5408else
5409 # Do not enable it by default even for Mingw32, because it doesn't
5410 # work on Wine.
5411 membarrier=no
5412fi
5413
5414##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005415# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005416have_rtnetlink=no
5417cat > $TMPC << EOF
5418#include <linux/rtnetlink.h>
5419int main(void) {
5420 return IFLA_PROTO_DOWN;
5421}
5422EOF
5423if compile_prog "" "" ; then
5424 have_rtnetlink=yes
5425fi
5426
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005427##########################################
5428# check for usable AF_VSOCK environment
5429have_af_vsock=no
5430cat > $TMPC << EOF
5431#include <errno.h>
5432#include <sys/types.h>
5433#include <sys/socket.h>
5434#if !defined(AF_VSOCK)
5435# error missing AF_VSOCK flag
5436#endif
5437#include <linux/vm_sockets.h>
5438int main(void) {
5439 int sock, ret;
5440 struct sockaddr_vm svm;
5441 socklen_t len = sizeof(svm);
5442 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5443 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5444 if ((ret == -1) && (errno == ENOTCONN)) {
5445 return 0;
5446 }
5447 return -1;
5448}
5449EOF
5450if compile_prog "" "" ; then
5451 have_af_vsock=yes
5452fi
5453
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005454##########################################
5455# check for usable AF_ALG environment
5456hava_afalg=no
5457cat > $TMPC << EOF
5458#include <errno.h>
5459#include <sys/types.h>
5460#include <sys/socket.h>
5461#include <linux/if_alg.h>
5462int main(void) {
5463 int sock;
5464 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5465 return sock;
5466}
5467EOF
5468if compile_prog "" "" ; then
5469 have_afalg=yes
5470fi
5471if test "$crypto_afalg" = "yes"
5472then
5473 if test "$have_afalg" != "yes"
5474 then
5475 error_exit "AF_ALG requested but could not be detected"
5476 fi
5477fi
5478
5479
James Clarke6969ec62016-06-06 12:02:50 +01005480#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005481# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005482if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005483 cat > $TMPC << EOF
5484#include <Hypervisor/hv.h>
5485int main() { return 0;}
5486EOF
5487 if ! compile_object ""; then
5488 hvf='no'
5489 else
5490 hvf='yes'
5491 LDFLAGS="-framework Hypervisor $LDFLAGS"
5492 fi
5493fi
5494
5495#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005496# Sparc implicitly links with --relax, which is
5497# incompatible with -r, so --no-relax should be
5498# given. It does no harm to give it on other
5499# platforms too.
5500
5501# Note: the prototype is needed since QEMU_CFLAGS
5502# contains -Wmissing-prototypes
5503cat > $TMPC << EOF
5504extern int foo(void);
5505int foo(void) { return 0; }
5506EOF
5507if ! compile_object ""; then
5508 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5509fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005510for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5511 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5512 LD_REL_FLAGS=$i
5513 break
5514 fi
5515done
5516if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5517 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005518fi
5519
Jan Vesely277abf12016-04-29 13:15:23 -04005520##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005521# check for sysmacros.h
5522
5523have_sysmacros=no
5524cat > $TMPC << EOF
5525#include <sys/sysmacros.h>
5526int main(void) {
5527 return makedev(0, 0);
5528}
5529EOF
5530if compile_prog "" "" ; then
5531 have_sysmacros=yes
5532fi
5533
5534##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005535# Veritas HyperScale block driver VxHS
5536# Check if libvxhs is installed
5537
5538if test "$vxhs" != "no" ; then
5539 cat > $TMPC <<EOF
5540#include <stdint.h>
5541#include <qnio/qnio_api.h>
5542
5543void *vxhs_callback;
5544
5545int main(void) {
5546 iio_init(QNIO_VERSION, vxhs_callback);
5547 return 0;
5548}
5549EOF
5550 vxhs_libs="-lvxhs -lssl"
5551 if compile_prog "" "$vxhs_libs" ; then
5552 vxhs=yes
5553 else
5554 if test "$vxhs" = "yes" ; then
5555 feature_not_found "vxhs block device" "Install libvxhs See github"
5556 fi
5557 vxhs=no
5558 fi
5559fi
5560
5561##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005562# check for _Static_assert()
5563
5564have_static_assert=no
5565cat > $TMPC << EOF
5566_Static_assert(1, "success");
5567int main(void) {
5568 return 0;
5569}
5570EOF
5571if compile_prog "" "" ; then
5572 have_static_assert=yes
5573fi
5574
5575##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005576# check for utmpx.h, it is missing e.g. on OpenBSD
5577
5578have_utmpx=no
5579cat > $TMPC << EOF
5580#include <utmpx.h>
5581struct utmpx user_info;
5582int main(void) {
5583 return 0;
5584}
5585EOF
5586if compile_prog "" "" ; then
5587 have_utmpx=yes
5588fi
5589
5590##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005591# checks for sanitizers
5592
Marc-André Lureau247724c2018-01-16 16:11:51 +01005593have_asan=no
5594have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005595have_asan_iface_h=no
5596have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005597
5598if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005599 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005600 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5601 have_asan=yes
5602 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005603
5604 # we could use a simple skeleton for flags checks, but this also
5605 # detect the static linking issue of ubsan, see also:
5606 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5607 cat > $TMPC << EOF
5608#include <stdlib.h>
5609int main(void) {
5610 void *tmp = malloc(10);
5611 return *(int *)(tmp + 2);
5612}
5613EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005614 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5615 have_ubsan=yes
5616 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005617
5618 if check_include "sanitizer/asan_interface.h" ; then
5619 have_asan_iface_h=yes
5620 fi
5621
5622 cat > $TMPC << EOF
5623#include <sanitizer/asan_interface.h>
5624int main(void) {
5625 __sanitizer_start_switch_fiber(0, 0, 0);
5626 return 0;
5627}
5628EOF
5629 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5630 have_asan_iface_fiber=yes
5631 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005632fi
5633
5634##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005635# Docker and cross-compiler support
5636#
5637# This is specifically for building test
5638# cases for foreign architectures, not
5639# cross-compiling QEMU itself.
5640
5641if has "docker"; then
5642 docker=$($python $source_path/tests/docker/docker.py probe)
5643fi
5644
5645##########################################
Junyan He17824402018-07-18 15:47:59 +08005646# check for libpmem
5647
5648if test "$libpmem" != "no"; then
5649 if $pkg_config --exists "libpmem"; then
5650 libpmem="yes"
5651 libpmem_libs=$($pkg_config --libs libpmem)
5652 libpmem_cflags=$($pkg_config --cflags libpmem)
5653 libs_softmmu="$libs_softmmu $libpmem_libs"
5654 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5655 else
5656 if test "$libpmem" = "yes" ; then
5657 feature_not_found "libpmem" "Install nvml or pmdk"
5658 fi
5659 libpmem="no"
5660 fi
5661fi
5662
5663##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005664# End of CC checks
5665# After here, no more $cc or $ld runs
5666
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005667write_c_skeleton
5668
Blue Swirl1d728c32012-05-01 18:45:39 +00005669if test "$gcov" = "yes" ; then
5670 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5671 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005672elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005673 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005674elif test "$debug" = "no"; then
5675 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005676fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005677
Marc-André Lureau247724c2018-01-16 16:11:51 +01005678if test "$have_asan" = "yes"; then
5679 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005680 if test "$have_asan_iface_h" = "no" ; then
5681 echo "ASAN build enabled, but ASAN header missing." \
5682 "Without code annotation, the report may be inferior."
5683 elif test "$have_asan_iface_fiber" = "no" ; then
5684 echo "ASAN build enabled, but ASAN header is too old." \
5685 "Without code annotation, the report may be inferior."
5686 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005687fi
5688if test "$have_ubsan" = "yes"; then
5689 CFLAGS="-fsanitize=undefined $CFLAGS"
5690fi
5691
Peter Lieven6542aa92014-02-03 10:26:13 +01005692##########################################
5693# Do we have libnfs
5694if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005695 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005696 libnfs="yes"
5697 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005698 else
5699 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005700 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005701 fi
5702 libnfs="no"
5703 fi
5704fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005705
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005706##########################################
5707# Do we have libudev
5708if test "$libudev" != "no" ; then
5709 if $pkg_config libudev && test "$static" != "yes"; then
5710 libudev="yes"
5711 libudev_libs=$($pkg_config --libs libudev)
5712 else
5713 libudev="no"
5714 fi
5715fi
5716
Peter Maydell6ca026c2012-07-18 15:10:18 +01005717# Now we've finished running tests it's OK to add -Werror to the compiler flags
5718if test "$werror" = "yes"; then
5719 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5720fi
5721
Juan Quintelae86ecd42009-08-03 14:45:59 +02005722if test "$solaris" = "no" ; then
5723 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005724 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005725 fi
5726fi
5727
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005728# test if pod2man has --utf8 option
5729if pod2man --help | grep -q utf8; then
5730 POD2MAN="pod2man --utf8"
5731else
5732 POD2MAN="pod2man"
5733fi
5734
Blue Swirl952afb72010-09-19 08:36:34 +00005735# Use ASLR, no-SEH and DEP if available
5736if test "$mingw32" = "yes" ; then
5737 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005738 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005739 LDFLAGS="-Wl,$flag $LDFLAGS"
5740 fi
5741 done
5742fi
5743
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005744qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005745qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005746qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005747qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005748
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005749# We can only support ivshmem if we have eventfd
5750if [ "$eventfd" = "yes" ]; then
5751 ivshmem=yes
5752fi
5753
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005754tools=""
5755if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005756 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005757 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5758 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005759 fi
5760 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005761 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005762 fi
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005763 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5764 tools="elf2dmp $tools"
5765 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005766fi
5767if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005768 if test "$linux" = yes; then
5769 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005770 virtfs=yes
5771 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5772 else
5773 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005774 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305775 fi
Andreas Färber17500372012-05-01 01:12:03 +02005776 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005777 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005778 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5779 mpath=yes
5780 else
5781 if test "$mpath" = yes; then
5782 error_exit "Multipath requires libmpathpersist devel"
5783 fi
5784 mpath=no
5785 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005786 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5787 else
5788 if test "$virtfs" = yes; then
5789 error_exit "VirtFS is supported only on Linux"
5790 fi
5791 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005792 if test "$mpath" = yes; then
5793 error_exit "Multipath is supported only on Linux"
5794 fi
5795 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305796 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005797 if test "$xkbcommon" = "yes"; then
5798 tools="qemu-keymap\$(EXESUF) $tools"
5799 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005800fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005801
5802# Probe for guest agent support/options
5803
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005804if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005805 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005806 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005807 guest_agent=yes
5808 elif [ "$guest_agent" != yes ]; then
5809 guest_agent=no
5810 else
5811 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005812 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005813fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005814
Michael Roth9d6bc272015-08-26 10:49:13 -05005815# Guest agent Window MSI package
5816
5817if test "$guest_agent" != yes; then
5818 if test "$guest_agent_msi" = yes; then
5819 error_exit "MSI guest agent package requires guest agent enabled"
5820 fi
5821 guest_agent_msi=no
5822elif test "$mingw32" != "yes"; then
5823 if test "$guest_agent_msi" = "yes"; then
5824 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5825 fi
5826 guest_agent_msi=no
5827elif ! has wixl; then
5828 if test "$guest_agent_msi" = "yes"; then
5829 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5830 fi
5831 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005832else
5833 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5834 # disabled explicitly
5835 if test "$guest_agent_msi" != "no"; then
5836 guest_agent_msi=yes
5837 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005838fi
5839
Michael Roth1a349042015-08-26 11:14:31 -05005840if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005841 if test "$guest_agent_with_vss" = "yes"; then
5842 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5843 fi
5844
5845 if test "$QEMU_GA_MANUFACTURER" = ""; then
5846 QEMU_GA_MANUFACTURER=QEMU
5847 fi
5848
5849 if test "$QEMU_GA_DISTRO" = ""; then
5850 QEMU_GA_DISTRO=Linux
5851 fi
5852
5853 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005854 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005855 fi
5856
Stefan Weil89138852016-05-16 15:10:20 +02005857 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005858
5859 case "$cpu" in
5860 x86_64)
5861 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5862 ;;
5863 i386)
5864 QEMU_GA_MSI_ARCH="-D Arch=32"
5865 ;;
5866 *)
5867 error_exit "CPU $cpu not supported for building installation package"
5868 ;;
5869 esac
5870fi
5871
Paolo Bonzinica35f782010-05-26 16:08:29 +02005872# Mac OS X ships with a broken assembler
5873roms=
5874if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5875 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5876 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005877 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005878 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5879 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5880 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005881 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5882 ld_i386_emulation="$emu"
5883 roms="optionrom"
5884 break
5885 fi
5886 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005887fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005888if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005889 roms="$roms spapr-rtas"
5890fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005891
Thomas Huth2e33c3f2019-01-14 13:52:26 +01005892# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00005893if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01005894 write_c_skeleton
5895 if compile_prog "-march=z900" ""; then
5896 roms="$roms s390-ccw"
5897 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00005898fi
5899
Richard Henderson964c6fa2013-06-21 19:10:16 -07005900# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005901if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005902 textseg_addr=
5903 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005904 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5905 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005906 textseg_addr=0x60000000
5907 ;;
5908 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005909 # A 256M aligned address, high in the address space, with enough
5910 # room for the code_gen_buffer above it before the stack.
5911 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005912 ;;
5913 esac
5914 if [ -n "$textseg_addr" ]; then
5915 cat > $TMPC <<EOF
5916 int main(void) { return 0; }
5917EOF
5918 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5919 if ! compile_prog "" "$textseg_ldflags"; then
5920 # In case ld does not support -Ttext-segment, edit the default linker
5921 # script via sed to set the .text start addr. This is needed on FreeBSD
5922 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005923 if ! $ld --verbose >/dev/null 2>&1; then
5924 error_exit \
5925 "We need to link the QEMU user mode binaries at a" \
5926 "specific text address. Unfortunately your linker" \
5927 "doesn't support either the -Ttext-segment option or" \
5928 "printing the default linker script with --verbose." \
5929 "If you don't want the user mode binaries, pass the" \
5930 "--disable-user option to configure."
5931 fi
5932
Richard Henderson964c6fa2013-06-21 19:10:16 -07005933 $ld --verbose | sed \
5934 -e '1,/==================================================/d' \
5935 -e '/==================================================/,$d' \
5936 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5937 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5938 textseg_ldflags="-Wl,-T../config-host.ld"
5939 fi
5940 fi
5941fi
5942
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005943# Check that the C++ compiler exists and works with the C compiler.
5944# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5945if has $cxx; then
5946 cat > $TMPC <<EOF
5947int c_function(void);
5948int main(void) { return c_function(); }
5949EOF
5950
5951 compile_object
5952
5953 cat > $TMPCXX <<EOF
5954extern "C" {
5955 int c_function(void);
5956}
5957int c_function(void) { return 42; }
5958EOF
5959
5960 update_cxxflags
5961
5962 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5963 # C++ compiler $cxx works ok with C compiler $cc
5964 :
5965 else
5966 echo "C++ compiler $cxx does not work with C compiler $cc"
5967 echo "Disabling C++ specific optional code"
5968 cxx=
5969 fi
5970else
5971 echo "No C++ compiler available; disabling C++ specific optional code"
5972 cxx=
5973fi
5974
Cole Robinson02d34f62016-05-06 14:03:09 -04005975echo_version() {
5976 if test "$1" = "yes" ; then
5977 echo "($2)"
5978 fi
5979}
5980
Jan Kiszka50e12062014-10-02 10:03:55 +02005981# prepend pixman and ftd flags after all config tests are done
5982QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005983QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005984libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005985
bellard43ce4df2003-06-09 19:53:12 +00005986echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005987echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005988echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005989echo "binary directory $(eval echo $bindir)"
5990echo "library directory $(eval echo $libdir)"
5991echo "module directory $(eval echo $qemu_moddir)"
5992echo "libexec directory $(eval echo $libexecdir)"
5993echo "include directory $(eval echo $includedir)"
5994echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005995if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005996echo "local state directory $(eval echo $local_statedir)"
5997echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005998echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005999else
6000echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006001echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006002fi
bellard5a671352003-10-01 00:13:48 +00006003echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006004echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006005echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006006echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006007echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006008echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006009echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006010echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006011echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006012echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006013echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006014echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006015echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006016echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00006017echo "python $python"
Brade2d88302011-09-02 16:53:28 -04006018if test "$slirp" = "yes" ; then
6019 echo "smbd $smbd"
6020fi
Fam Zheng17969262014-02-10 14:48:56 +08006021echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006022echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006023echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006024echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006025echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006026echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006027echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006028echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006029echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006030if test "$darwin" = "yes" ; then
6031 echo "Cocoa support $cocoa"
6032fi
Stefan Weil89138852016-05-16 15:10:20 +02006033echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6034echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006035echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006036echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006037echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006038echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006039echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006040echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006041echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00006042echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006043echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006044echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006045echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006046echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006047echo "Block whitelist (rw) $block_drv_rw_whitelist"
6048echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306049echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006050echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006051echo "VNC support $vnc"
6052if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006053 echo "VNC SASL support $vnc_sasl"
6054 echo "VNC JPEG support $vnc_jpeg"
6055 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006056fi
blueswir131422552007-04-16 18:27:06 +00006057if test -n "$sparc_cpu"; then
6058 echo "Target Sparc Arch $sparc_cpu"
6059fi
aliguorie37630c2009-04-22 15:19:10 +00006060echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006061if test "$xen" = "yes" ; then
6062 echo "xen ctrl version $xen_ctrl_version"
6063fi
aurel322e4d9fb2008-04-08 06:01:02 +00006064echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006065echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006066echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006067echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006068echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006069echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006070echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006071echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006072echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006073echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006074echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006075echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006076echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006077echo "TCG support $tcg"
6078if test "$tcg" = "yes" ; then
6079 echo "TCG debug enabled $debug_tcg"
6080 echo "TCG interpreter $tcg_interpreter"
6081fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006082echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006083echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006084echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006085echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006086echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006087echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006088echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006089echo "madvise $madvise"
6090echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006091echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006092echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006093echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006094echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006095echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006096echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006097echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006098echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006099if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006100echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006101fi
Stefan Weil89138852016-05-16 15:10:20 +02006102echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006103echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006104echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006105echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006106echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006107echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006108echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006109echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006110echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006111echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006112echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006113echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006114echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006115echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006116echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006117echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006118echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006119echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006120echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006121echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306122echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006123echo "gcov $gcov_tool"
6124echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006125echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006126echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006127echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006128echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006129echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006130echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006131echo "lzo support $lzo"
6132echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006133echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006134echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006135echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006136echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006137echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006138echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006139echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006140echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006141echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006142echo "bochs support $bochs"
6143echo "cloop support $cloop"
6144echo "dmg support $dmg"
6145echo "qcow v1 support $qcow1"
6146echo "vdi support $vdi"
6147echo "vvfat support $vvfat"
6148echo "qed support $qed"
6149echo "parallels support $parallels"
6150echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006151echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006152echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006153echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006154echo "libudev $libudev"
bellard67b915a2004-03-31 23:37:16 +00006155
Stefan Weil1ba16962011-07-29 22:40:45 +02006156if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006157echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006158fi
bellard97a847b2003-08-10 21:36:04 +00006159
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006160if test "$sdlabi" = "1.2"; then
6161 echo
6162 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6163 echo "WARNING: future releases. Please switch to using SDL 2.0"
6164fi
6165
Peter Maydell898be3e2017-03-21 14:31:57 +00006166if test "$supported_cpu" = "no"; then
6167 echo
6168 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6169 echo
6170 echo "CPU host architecture $cpu support is not currently maintained."
6171 echo "The QEMU project intends to remove support for this host CPU in"
6172 echo "a future release if nobody volunteers to maintain it and to"
6173 echo "provide a build host for our continuous integration setup."
6174 echo "configure has succeeded and you can continue to build, but"
6175 echo "if you care about QEMU on this platform you should contact"
6176 echo "us upstream at qemu-devel@nongnu.org."
6177fi
6178
6179if test "$supported_os" = "no"; then
6180 echo
6181 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6182 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006183 echo "Host OS $targetos support is not currently maintained."
6184 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006185 echo "a future release if nobody volunteers to maintain it and to"
6186 echo "provide a build host for our continuous integration setup."
6187 echo "configure has succeeded and you can continue to build, but"
6188 echo "if you care about QEMU on this platform you should contact"
6189 echo "us upstream at qemu-devel@nongnu.org."
6190fi
6191
Juan Quintela98ec69a2009-07-16 18:34:18 +02006192config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006193
Stefan Weildbd99ae2013-01-01 18:33:44 +01006194echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6195
Juan Quintela98ec69a2009-07-16 18:34:18 +02006196echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006197echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006198
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006199echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006200echo "prefix=$prefix" >> $config_host_mak
6201echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006202echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006203echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006204echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006205echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006206echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006207echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006208echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006209echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006210echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006211echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006212if test "$mingw32" = "no" ; then
6213 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6214fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006215echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006216echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006217echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006218echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006219echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006220echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006221
Juan Quintela98ec69a2009-07-16 18:34:18 +02006222echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006223
aurel32f8393942009-04-13 18:45:38 +00006224if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006225 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006226fi
aliguori1625af82009-04-05 17:41:02 +00006227if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006228 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006229fi
bellard7d132992003-03-06 23:23:54 +00006230if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006231 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006232fi
bellard67b915a2004-03-31 23:37:16 +00006233if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006234 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006235 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006236 version_major=${rc_version%%.*}
6237 rc_version=${rc_version#*.}
6238 version_minor=${rc_version%%.*}
6239 rc_version=${rc_version#*.}
6240 version_subminor=${rc_version%%.*}
6241 version_micro=0
6242 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6243 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006244 if test "$guest_agent_with_vss" = "yes" ; then
6245 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006246 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006247 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6248 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006249 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006250 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006251 fi
Michael Roth1a349042015-08-26 11:14:31 -05006252 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006253 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006254 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6255 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6256 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6257 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6258 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6259 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6260 fi
pbrook210fa552007-02-27 21:04:49 +00006261else
Juan Quintela35f4df22009-07-27 16:13:07 +02006262 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006263fi
blueswir1128ab2f2008-08-15 18:33:42 +00006264
Mark McLoughlindffcb712009-10-22 17:49:11 +01006265if test "$linux" = "yes" ; then
6266 echo "CONFIG_LINUX=y" >> $config_host_mak
6267fi
6268
bellard83fb7ad2004-07-05 21:25:26 +00006269if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006270 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006271fi
malcb29fe3e2008-11-18 01:42:22 +00006272
bellardec530c82006-04-25 22:36:06 +00006273if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006274 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006275fi
Andreas Färber179cf402010-09-20 00:50:43 +02006276if test "$haiku" = "yes" ; then
6277 echo "CONFIG_HAIKU=y" >> $config_host_mak
6278fi
bellard97a847b2003-08-10 21:36:04 +00006279if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006280 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006281fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006282if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006283 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006284fi
bellardc20709a2004-04-21 23:27:19 +00006285if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006286 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006287 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006288fi
ths8a16d272008-07-19 09:56:24 +00006289if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006290 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006291 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006292fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006293if test "$netmap" = "yes" ; then
6294 echo "CONFIG_NETMAP=y" >> $config_host_mak
6295fi
Gonglei015a33b2014-07-01 20:58:08 +08006296if test "$l2tpv3" = "yes" ; then
6297 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6298fi
Corey Bryant47e98652012-01-26 09:42:26 -05006299if test "$cap_ng" = "yes" ; then
6300 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6301fi
Juan Quintela2358a492009-07-27 16:13:25 +02006302echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006303for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006304 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006305 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006306 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006307 echo "$def=m" >> $config_host_mak ;;
6308 *)
6309 echo "$def=y" >> $config_host_mak ;;
6310 esac
malc0c58ac12008-06-25 21:04:05 +00006311done
Fam Zhengb1149912017-09-07 16:29:13 +08006312echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6313echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6314echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6315echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6316echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006317if test "$audio_pt_int" = "yes" ; then
6318 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6319fi
malcd5631632009-10-10 01:13:41 +04006320if test "$audio_win_int" = "yes" ; then
6321 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6322fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006323echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6324echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006325if test "$vnc" = "yes" ; then
6326 echo "CONFIG_VNC=y" >> $config_host_mak
6327fi
aliguori2f9606b2009-03-06 20:27:28 +00006328if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006329 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006330fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006331if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006332 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006333fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006334if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006335 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006336fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006337if test "$xkbcommon" = "yes" ; then
6338 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6339 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6340fi
aliguori76655d62009-03-06 20:27:37 +00006341if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006342 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006343fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006344if test "$xfs" = "yes" ; then
6345 echo "CONFIG_XFS=y" >> $config_host_mak
6346fi
Stefan Weil89138852016-05-16 15:10:20 +02006347qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006348echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006349echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006350echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006351echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006352if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006353 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006354fi
Fam Zheng17969262014-02-10 14:48:56 +08006355if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006356 # $shacmd can generate a hash started with digit, which the compiler doesn't
6357 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006358 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006359 echo "CONFIG_MODULES=y" >> $config_host_mak
6360fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006361if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6362 echo "CONFIG_X11=y" >> $config_host_mak
6363 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6364 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6365fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006366if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006367 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006368 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006369 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006370 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006371fi
6372if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006373 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006374fi
6375if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006376 echo "CONFIG_CURSES=m" >> $config_host_mak
6377 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6378 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006379fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006380if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006381 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006382fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006383if test "$accept4" = "yes" ; then
6384 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6385fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306386if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006387 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306388fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006389if test "$eventfd" = "yes" ; then
6390 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6391fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006392if test "$memfd" = "yes" ; then
6393 echo "CONFIG_MEMFD=y" >> $config_host_mak
6394fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006395if test "$have_usbfs" = "yes" ; then
6396 echo "CONFIG_USBFS=y" >> $config_host_mak
6397fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006398if test "$fallocate" = "yes" ; then
6399 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6400fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006401if test "$fallocate_punch_hole" = "yes" ; then
6402 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6403fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006404if test "$fallocate_zero_range" = "yes" ; then
6405 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6406fi
Kevin Wolfed911432014-09-29 17:12:59 +02006407if test "$posix_fallocate" = "yes" ; then
6408 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6409fi
Peter Maydellc727f472011-01-06 11:05:10 +00006410if test "$sync_file_range" = "yes" ; then
6411 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6412fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006413if test "$fiemap" = "yes" ; then
6414 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6415fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006416if test "$dup3" = "yes" ; then
6417 echo "CONFIG_DUP3=y" >> $config_host_mak
6418fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006419if test "$ppoll" = "yes" ; then
6420 echo "CONFIG_PPOLL=y" >> $config_host_mak
6421fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006422if test "$prctl_pr_set_timerslack" = "yes" ; then
6423 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6424fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006425if test "$epoll" = "yes" ; then
6426 echo "CONFIG_EPOLL=y" >> $config_host_mak
6427fi
6428if test "$epoll_create1" = "yes" ; then
6429 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6430fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006431if test "$sendfile" = "yes" ; then
6432 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6433fi
Riku Voipio51834342014-06-22 11:25:42 +01006434if test "$timerfd" = "yes" ; then
6435 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6436fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006437if test "$setns" = "yes" ; then
6438 echo "CONFIG_SETNS=y" >> $config_host_mak
6439fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006440if test "$clock_adjtime" = "yes" ; then
6441 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6442fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006443if test "$syncfs" = "yes" ; then
6444 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6445fi
aurel323b3f24a2009-04-15 16:12:13 +00006446if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006447 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006448fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006449if test "$inotify1" = "yes" ; then
6450 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6451fi
Peter Maydell401bc052017-09-05 13:19:32 +01006452if test "$sem_timedwait" = "yes" ; then
6453 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6454fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006455if test "$strchrnul" = "yes" ; then
6456 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6457fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006458if test "$byteswap_h" = "yes" ; then
6459 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6460fi
6461if test "$bswap_h" = "yes" ; then
6462 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6463fi
Alexander Graf769ce762009-05-11 17:41:42 +02006464if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006465 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006466 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006467 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006468fi
aurel322e4d9fb2008-04-08 06:01:02 +00006469if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006470 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006471 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006472fi
balrogfb599c92008-09-28 23:49:55 +00006473if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006474 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006475 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006476fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006477if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006478 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006479 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006480 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006481 if test "$gtk_gl" = "yes" ; then
6482 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6483 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006484fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006485echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006486if test "$gnutls" = "yes" ; then
6487 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6488fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006489if test "$gcrypt" = "yes" ; then
6490 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006491 if test "$gcrypt_hmac" = "yes" ; then
6492 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6493 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006494fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006495if test "$nettle" = "yes" ; then
6496 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006497 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006498fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006499if test "$tasn1" = "yes" ; then
6500 echo "CONFIG_TASN1=y" >> $config_host_mak
6501fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006502if test "$have_ifaddrs_h" = "yes" ; then
6503 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6504fi
Eric Blake6b39b062016-10-11 10:46:23 -05006505if test "$have_broken_size_max" = "yes" ; then
6506 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6507fi
Jan Vesely277abf12016-04-29 13:15:23 -04006508
6509# Work around a system header bug with some kernel/XFS header
6510# versions where they both try to define 'struct fsxattr':
6511# xfs headers will not try to redefine structs from linux headers
6512# if this macro is set.
6513if test "$have_fsxattr" = "yes" ; then
6514 echo "HAVE_FSXATTR=y" >> $config_host_mak
6515fi
Fam Zheng1efad062018-06-01 17:26:43 +08006516if test "$have_copy_file_range" = "yes" ; then
6517 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6518fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006519if test "$vte" = "yes" ; then
6520 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006521 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006522 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006523fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006524if test "$virglrenderer" = "yes" ; then
6525 echo "CONFIG_VIRGL=y" >> $config_host_mak
6526 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6527 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6528fi
aliguorie37630c2009-04-22 15:19:10 +00006529if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006530 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006531 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00006532fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006533if test "$linux_aio" = "yes" ; then
6534 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6535fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006536if test "$attr" = "yes" ; then
6537 echo "CONFIG_ATTR=y" >> $config_host_mak
6538fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006539if test "$libattr" = "yes" ; then
6540 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6541fi
Meador Inge983eef52012-02-24 14:00:42 +05306542if test "$virtfs" = "yes" ; then
6543 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006544fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006545if test "$mpath" = "yes" ; then
6546 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006547 if test "$mpathpersist_new_api" = "yes"; then
6548 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6549 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006550fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006551if test "$vhost_scsi" = "yes" ; then
6552 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6553fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006554if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006555 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6556fi
Gonglei042cea22018-03-01 21:46:28 +08006557if test "$vhost_crypto" = "yes" ; then
6558 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6559fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006560if test "$vhost_vsock" = "yes" ; then
6561 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6562fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006563if test "$vhost_user" = "yes" ; then
6564 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6565fi
ths77755342008-11-27 15:45:16 +00006566if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006567 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006568fi
aliguoribf9298b2008-12-05 20:05:26 +00006569if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006570 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006571fi
aliguoriceb42de2009-04-07 18:43:28 +00006572if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006573 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006574fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006575if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006576 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006577fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006578if test "$membarrier" = "yes" ; then
6579 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6580fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006581if test "$signalfd" = "yes" ; then
6582 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6583fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006584if test "$tcg" = "yes"; then
6585 echo "CONFIG_TCG=y" >> $config_host_mak
6586 if test "$tcg_interpreter" = "yes" ; then
6587 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6588 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006589fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006590if test "$fdatasync" = "yes" ; then
6591 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6592fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006593if test "$madvise" = "yes" ; then
6594 echo "CONFIG_MADVISE=y" >> $config_host_mak
6595fi
6596if test "$posix_madvise" = "yes" ; then
6597 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6598fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006599if test "$posix_memalign" = "yes" ; then
6600 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6601fi
bellard97a847b2003-08-10 21:36:04 +00006602
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006603if test "$spice" = "yes" ; then
6604 echo "CONFIG_SPICE=y" >> $config_host_mak
6605fi
6606
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006607if test "$smartcard" = "yes" ; then
6608 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006609 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6610 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006611fi
6612
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006613if test "$libusb" = "yes" ; then
6614 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006615 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6616 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006617fi
6618
Hans de Goede69354a82011-07-19 11:04:10 +02006619if test "$usb_redir" = "yes" ; then
6620 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006621 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6622 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006623fi
6624
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006625if test "$opengl" = "yes" ; then
6626 echo "CONFIG_OPENGL=y" >> $config_host_mak
6627 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006628 if test "$opengl_dmabuf" = "yes" ; then
6629 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6630 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006631fi
6632
Yang Zhong5a22ab72017-12-20 21:16:46 +08006633if test "$malloc_trim" = "yes" ; then
6634 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6635fi
6636
Liang Li99f2dbd2016-03-08 13:53:16 +08006637if test "$avx2_opt" = "yes" ; then
6638 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6639fi
6640
qiaonuohan607dacd2014-02-18 14:11:30 +08006641if test "$lzo" = "yes" ; then
6642 echo "CONFIG_LZO=y" >> $config_host_mak
6643fi
6644
6645if test "$snappy" = "yes" ; then
6646 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6647fi
6648
Peter Wu6b383c02015-01-06 18:48:14 +01006649if test "$bzip2" = "yes" ; then
6650 echo "CONFIG_BZIP2=y" >> $config_host_mak
6651 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6652fi
6653
Julio Faracco83bc1f92018-11-05 13:08:04 -02006654if test "$lzfse" = "yes" ; then
6655 echo "CONFIG_LZFSE=y" >> $config_host_mak
6656 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6657fi
6658
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006659if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006660 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006661 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6662 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006663fi
6664
Peter Lieven6542aa92014-02-03 10:26:13 +01006665if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006666 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6667 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006668fi
6669
Eduardo Otubof7945732012-08-14 18:44:05 -03006670if test "$seccomp" = "yes"; then
6671 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006672 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6673 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006674fi
6675
bellard83fb7ad2004-07-05 21:25:26 +00006676# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006677if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006678 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006679fi
6680
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006681if test "$localtime_r" = "yes" ; then
6682 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6683fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006684if test "$qom_cast_debug" = "yes" ; then
6685 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6686fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006687if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006688 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006689 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6690 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006691fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006692
Peter Maydell7c2acc72013-04-08 12:11:27 +01006693echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006694if test "$coroutine_pool" = "yes" ; then
6695 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6696else
6697 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6698fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306699
Peter Lieven7d992e42016-09-27 11:58:45 +02006700if test "$debug_stack_usage" = "yes" ; then
6701 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6702fi
6703
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006704if test "$crypto_afalg" = "yes" ; then
6705 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6706fi
6707
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306708if test "$open_by_handle_at" = "yes" ; then
6709 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6710fi
6711
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306712if test "$linux_magic_h" = "yes" ; then
6713 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6714fi
6715
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006716if test "$pragma_diagnostic_available" = "yes" ; then
6717 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006718fi
6719
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006720if test "$valgrind_h" = "yes" ; then
6721 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6722fi
6723
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006724if test "$have_asan_iface_fiber" = "yes" ; then
6725 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6726fi
6727
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006728if test "$has_environ" = "yes" ; then
6729 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6730fi
6731
Richard Henderson76a347e2012-12-28 14:17:02 -08006732if test "$cpuid_h" = "yes" ; then
6733 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6734fi
6735
Richard Hendersonf5401662013-02-16 12:46:59 -08006736if test "$int128" = "yes" ; then
6737 echo "CONFIG_INT128=y" >> $config_host_mak
6738fi
6739
Richard Henderson7ebee432016-06-29 21:10:59 -07006740if test "$atomic128" = "yes" ; then
6741 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6742fi
6743
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006744if test "$cmpxchg128" = "yes" ; then
6745 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6746fi
6747
Richard Hendersondf79b992016-09-02 12:23:57 -07006748if test "$atomic64" = "yes" ; then
6749 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6750fi
6751
Richard Hendersondb432672017-09-15 14:11:45 -07006752if test "$vector16" = "yes" ; then
6753 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6754fi
6755
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006756if test "$getauxval" = "yes" ; then
6757 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6758fi
6759
Bharata B Raoeb100392012-09-24 14:42:45 +05306760if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006761 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006762 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6763 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306764fi
6765
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006766if test "$glusterfs_xlator_opt" = "yes" ; then
6767 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6768fi
6769
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306770if test "$glusterfs_discard" = "yes" ; then
6771 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6772fi
6773
Niels de Vosdf3a4292017-05-28 12:01:14 +05306774if test "$glusterfs_fallocate" = "yes" ; then
6775 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6776fi
6777
Bharata B Rao7c815372013-12-21 14:51:25 +05306778if test "$glusterfs_zerofill" = "yes" ; then
6779 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6780fi
6781
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006782if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006783 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006784 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6785 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006786fi
6787
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006788if test "$live_block_migration" = "yes" ; then
6789 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6790fi
6791
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006792if test "$tpm" = "yes"; then
6793 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006794 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006795 if test "$tpm_passthrough" = "yes"; then
6796 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6797 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006798 # TPM emulator support?
6799 if test "$tpm_emulator" = "yes"; then
6800 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6801 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006802fi
6803
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006804echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6805if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006806 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306807fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006808if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006809 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6810 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006811 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006812fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006813if have_backend "log"; then
6814 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02006815fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006816if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006817 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6818fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006819if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006820 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6821 if test "$trace_backend_stap" = "yes" ; then
6822 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6823 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006824fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006825if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006826 if test "$linux" = "yes" ; then
6827 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006828 else
Stewart Smith21684af2014-01-24 12:39:10 +11006829 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006830 fi
6831fi
Paul Durrant0a852412016-08-04 14:44:14 +01006832if have_backend "syslog"; then
6833 if test "$posix_syslog" = "yes" ; then
6834 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6835 else
6836 feature_not_found "syslog(trace backend)" "syslog not available"
6837 fi
6838fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006839echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6840
Michael R. Hines2da776d2013-07-22 10:01:54 -04006841if test "$rdma" = "yes" ; then
6842 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006843 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006844fi
6845
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006846if test "$pvrdma" = "yes" ; then
6847 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6848fi
6849
Laurent Vivier575b22b2016-06-02 22:14:15 +02006850if test "$have_rtnetlink" = "yes" ; then
6851 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6852fi
6853
Klim Kireeved279a02018-01-12 12:01:19 +03006854if test "$libxml2" = "yes" ; then
6855 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6856 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6857 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6858fi
6859
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006860if test "$replication" = "yes" ; then
6861 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6862fi
6863
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006864if test "$have_af_vsock" = "yes" ; then
6865 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6866fi
6867
Christopher Covington4d043512016-12-28 15:04:33 -05006868if test "$have_sysmacros" = "yes" ; then
6869 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6870fi
6871
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006872if test "$have_static_assert" = "yes" ; then
6873 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6874fi
6875
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006876if test "$have_utmpx" = "yes" ; then
6877 echo "HAVE_UTMPX=y" >> $config_host_mak
6878fi
6879
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006880if test "$ivshmem" = "yes" ; then
6881 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6882fi
Richard Hendersone219c492017-09-28 09:01:23 -07006883if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006884 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6885fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006886if test "$debug_mutex" = "yes" ; then
6887 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6888fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006889
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006890# Hold two types of flag:
6891# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6892# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03006893# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006894# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03006895if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006896 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03006897 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6898elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6899 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6900 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006901fi
6902
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006903if test "$vxhs" = "yes" ; then
6904 echo "CONFIG_VXHS=y" >> $config_host_mak
6905 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6906fi
6907
Junyan He17824402018-07-18 15:47:59 +08006908if test "$libpmem" = "yes" ; then
6909 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6910fi
6911
Jeff Cody2f740132018-11-07 07:36:44 +01006912if test "$bochs" = "yes" ; then
6913 echo "CONFIG_BOCHS=y" >> $config_host_mak
6914fi
6915if test "$cloop" = "yes" ; then
6916 echo "CONFIG_CLOOP=y" >> $config_host_mak
6917fi
6918if test "$dmg" = "yes" ; then
6919 echo "CONFIG_DMG=y" >> $config_host_mak
6920fi
6921if test "$qcow1" = "yes" ; then
6922 echo "CONFIG_QCOW1=y" >> $config_host_mak
6923fi
6924if test "$vdi" = "yes" ; then
6925 echo "CONFIG_VDI=y" >> $config_host_mak
6926fi
6927if test "$vvfat" = "yes" ; then
6928 echo "CONFIG_VVFAT=y" >> $config_host_mak
6929fi
6930if test "$qed" = "yes" ; then
6931 echo "CONFIG_QED=y" >> $config_host_mak
6932fi
6933if test "$parallels" = "yes" ; then
6934 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6935fi
6936if test "$sheepdog" = "yes" ; then
6937 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6938fi
6939
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006940if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006941 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006942elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006943 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006944elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006945 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006946elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006947 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006948elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006949 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Alistair Francisc4f80542018-12-19 19:20:19 +00006950elif test "$ARCH" = "riscv32" -o "$ARCH" = "riscv64" ; then
6951 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006952else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006953 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006954fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006955QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006956
Juan Quintela98ec69a2009-07-16 18:34:18 +02006957echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006958echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006959echo "MAKE=$make" >> $config_host_mak
6960echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006961echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6962echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006963echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6964echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006965echo "PYTHON=$python" >> $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"