blob: 39f3a4300163281cca6350d8548e5d8e4868b124 [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
63 echo $compiler "$@" >> config.log
64 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010065 # Test passed. If this is an --enable-werror build, rerun
66 # the test with -Werror and bail out if it fails. This
67 # makes warning-generating-errors in configure test code
68 # obvious to developers.
69 if test "$werror" != "yes"; then
70 return 0
71 fi
72 # Don't bother rerunning the compile if we were already using -Werror
73 case "$*" in
74 *-Werror*)
75 return 0
76 ;;
77 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000078 echo $compiler -Werror "$@" >> config.log
79 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010080 error_exit "configure test passed without -Werror but failed with -Werror." \
81 "This is probably a bug in the configure script. The failing command" \
82 "will be at the bottom of config.log." \
83 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010084}
85
Peter Maydell9c83ffd2014-02-25 18:27:49 +000086do_cc() {
87 do_compiler "$cc" "$@"
88}
89
90do_cxx() {
91 do_compiler "$cxx" "$@"
92}
93
94update_cxxflags() {
95 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
96 # options which some versions of GCC's C++ compiler complain about
97 # because they only make sense for C programs.
Bruno Dominguez11cde1c2017-06-06 14:07:47 +010098 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
99
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000100 for arg in $QEMU_CFLAGS; do
101 case $arg in
102 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
103 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
104 ;;
105 *)
106 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
107 ;;
108 esac
109 done
110}
111
Juan Quintela52166aa2009-08-03 14:46:03 +0200112compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400113 local_cflags="$1"
114 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200115}
116
117compile_prog() {
118 local_cflags="$1"
119 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100120 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200121}
122
Paolo Bonzini11568d62010-12-23 11:43:58 +0100123# symbolically link $1 to $2. Portable version of "ln -sf".
124symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100125 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800126 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100127 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100128}
129
Loïc Minier0dba6192010-01-28 21:26:51 +0000130# check whether a command is available to this shell (may be either an
131# executable or a builtin)
132has() {
133 type "$1" >/dev/null 2>&1
134}
135
136# search for an executable in PATH
137path_of() {
138 local_command="$1"
139 local_ifs="$IFS"
140 local_dir=""
141
142 # pathname has a dir component?
143 if [ "${local_command#*/}" != "$local_command" ]; then
144 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
145 echo "$local_command"
146 return 0
147 fi
148 fi
149 if [ -z "$local_command" ]; then
150 return 1
151 fi
152
153 IFS=:
154 for local_dir in $PATH; do
155 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
156 echo "$local_dir/$local_command"
157 IFS="${local_ifs:-$(printf ' \t\n')}"
158 return 0
159 fi
160 done
161 # not found
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 1
164}
165
Lluís Vilanova5b808272014-05-27 15:02:14 +0200166have_backend () {
167 echo "$trace_backends" | grep "$1" >/dev/null
168}
169
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200170glob() {
171 eval test -z '"${1#'"$2"'}"'
172}
173
174supported_hax_target() {
175 test "$hax" = "yes" || return 1
176 glob "$1" "*-softmmu" || return 1
177 case "${1%-softmmu}" in
178 i386|x86_64)
179 return 0
180 ;;
181 esac
182 return 1
183}
184
185supported_kvm_target() {
186 test "$kvm" = "yes" || return 1
187 glob "$1" "*-softmmu" || return 1
188 case "${1%-softmmu}:$cpu" in
189 arm:arm | aarch64:aarch64 | \
190 i386:i386 | i386:x86_64 | i386:x32 | \
191 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
192 mips:mips | mipsel:mips | \
193 ppc:ppc | ppcemb:ppc | ppc64:ppc | \
194 ppc:ppc64 | ppcemb:ppc64 | ppc64:ppc64 | \
195 s390x:s390x)
196 return 0
197 ;;
198 esac
199 return 1
200}
201
202supported_xen_target() {
203 test "$xen" = "yes" || return 1
204 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200205 # Only i386 and x86_64 provide the xenpv machine.
206 case "${1%-softmmu}" in
207 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200208 return 0
209 ;;
210 esac
211 return 1
212}
213
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500214supported_hvf_target() {
215 test "$hvf" = "yes" || return 1
216 glob "$1" "*-softmmu" || return 1
217 case "${1%-softmmu}" in
218 x86_64)
219 return 0
220 ;;
221 esac
222 return 1
223}
224
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800225supported_whpx_target() {
226 test "$whpx" = "yes" || return 1
227 glob "$1" "*-softmmu" || return 1
228 case "${1%-softmmu}" in
229 i386|x86_64)
230 return 0
231 ;;
232 esac
233 return 1
234}
235
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200236supported_target() {
237 case "$1" in
238 *-softmmu)
239 ;;
240 *-linux-user)
241 if test "$linux" != "yes"; then
242 print_error "Target '$target' is only available on a Linux host"
243 return 1
244 fi
245 ;;
246 *-bsd-user)
247 if test "$bsd" != "yes"; then
248 print_error "Target '$target' is only available on a BSD host"
249 return 1
250 fi
251 ;;
252 *)
253 print_error "Invalid target name '$target'"
254 return 1
255 ;;
256 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200257 test "$tcg" = "yes" && return 0
258 supported_kvm_target "$1" && return 0
259 supported_xen_target "$1" && return 0
260 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500261 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800262 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200263 print_error "TCG disabled, but hardware accelerator not available for '$target'"
264 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200265}
266
Christian Borntraegere9a35912017-08-23 12:16:23 +0200267
268ld_has() {
269 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
270}
271
bellard7d132992003-03-06 23:23:54 +0000272# default parameters
Stefan Weil89138852016-05-16 15:10:20 +0200273source_path=$(dirname "$0")
Juan Quintela2ff6b912009-08-03 14:45:55 +0200274cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300275iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000276interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000277static="no"
bellard7d132992003-03-06 23:23:54 +0000278cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000279audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800280block_drv_rw_whitelist=""
281block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000282host_cc="cc"
Juan Quintela73da3752009-08-03 14:46:26 +0200283libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200284libs_tools=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200285audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400286audio_win_int=""
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +0200287cc_i386=i386-pc-linux-gnu-gcc
Michael Roth957f1f92011-08-11 15:38:12 -0500288libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100289debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100290stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000291
Daniel P. Berrange92712822017-09-29 11:11:58 +0100292if test -e "$source_path/.git"
293then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100294 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100295 git_submodules="ui/keycodemapdb"
296else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100297 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100298 git_submodules=""
299fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100300git="git"
aliguoriac0df512008-12-29 17:14:15 +0000301
Stefan Weilafb63eb2012-09-26 22:04:38 +0200302# Don't accept a target_list environment variable.
303unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100304
305# Default value for a variable defining feature "foo".
306# * foo="no" feature will only be used if --enable-foo arg is given
307# * foo="" feature will be searched for, and if found, will be used
308# unless --disable-foo is given
309# * foo="yes" this value will only be set by --enable-foo flag.
310# feature will searched for,
311# if not found, configure exits with error
312#
313# Always add --enable-foo and --disable-foo command line args.
314# Distributions want to ensure that several features are compiled in, and it
315# is impossible without a --enable-foo that exits if a feature is not found.
316
317bluez=""
318brlapi=""
319curl=""
320curses=""
321docs=""
322fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100323netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100324sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400325sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530326virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200327mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100328vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100329sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100330vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100331vnc_sasl=""
332vnc_jpeg=""
333vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200334xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100335xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000336xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000337xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000338xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100339linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500340cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100341attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200342libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100343xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200344tcg="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100345
Bradd41a75a2011-07-26 23:11:26 -0400346vhost_net="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000347vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100348vhost_vsock="no"
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200349vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400350kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100351hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500352hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800353whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400354rdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100355gprof="no"
356debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100357debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100358sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500359fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100360strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200361tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100362bigendian="no"
363mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000364gcov="no"
365gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800367DSOSUF=".so"
368LDFLAGS_SHARED="-shared"
369modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100370prefix="/usr/local"
371mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300372datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200373firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300374qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100375bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300376libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400377libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200378includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100379sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300380local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100381confsuffix="/qemu"
382slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100383oss_lib=""
384bsd="no"
385linux="no"
386solaris="no"
387profiler="no"
388cocoa="no"
389softmmu="yes"
390linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100391bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100392blobs="yes"
393pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200394pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200395qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300396trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100397trace_file="trace"
398spice=""
399rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200400smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100401libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200402usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100403opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100404opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000405cpuid_h="no"
Liang Li99f2dbd2016-03-08 13:53:16 +0800406avx2_opt="no"
Alon Levy1ece9902011-07-26 12:30:40 +0300407zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700408capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200409lzo=""
410snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100411bzip2=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400412guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400413guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500414guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300415guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400416vss_win32_sdk=""
417win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100418want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100419libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100420libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100421coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200422coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200423debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400424crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300425seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530426glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400427glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530428glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530429glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530430glusterfs_zerofill="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600431gtk=""
Stefan Weil9e04c682014-05-17 16:29:18 +0200432gtkabi=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200433gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100434tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100435gnutls=""
Daniel P. Berrangeb917da42015-10-31 14:39:52 +0900436gnutls_rnd=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100437nettle=""
Daniel P. Berrangefff2f982016-03-29 15:47:51 +0100438nettle_kdf="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100439gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800440gcrypt_hmac="no"
Daniel P. Berrange37788f22015-10-14 13:14:04 +0100441gcrypt_kdf="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100442vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200443virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400444tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100445libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100446live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800447numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800448tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200449jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800450replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700451vxhs=""
Klim Kireeved279a02018-01-12 12:01:19 +0300452libxml2=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100453
Peter Maydell898be3e2017-03-21 14:31:57 +0000454supported_cpu="no"
455supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100456bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800457malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000458
aliguoriac0df512008-12-29 17:14:15 +0000459# parse CC options first
460for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200461 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000462 case "$opt" in
463 --cross-prefix=*) cross_prefix="$optarg"
464 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100465 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000466 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400467 --cxx=*) CXX="$optarg"
468 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100469 --source-path=*) source_path="$optarg"
470 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200471 --cpu=*) cpu="$optarg"
472 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100473 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200474 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100475 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100476 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100477 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100478 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200479 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100480 --enable-debug-info) debug_info="yes"
481 ;;
482 --disable-debug-info) debug_info="no"
483 ;;
aliguoriac0df512008-12-29 17:14:15 +0000484 esac
485done
aliguoriac0df512008-12-29 17:14:15 +0000486# OS specific
487# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100488# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000489
Peter Maydelle49d0212012-12-07 15:39:13 +0000490# Preferred compiler:
491# ${CC} (if set)
492# ${cross_prefix}gcc (if cross-prefix specified)
493# system compiler
494if test -z "${CC}${cross_prefix}"; then
495 cc="$host_cc"
496else
497 cc="${CC-${cross_prefix}gcc}"
498fi
499
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400500if test -z "${CXX}${cross_prefix}"; then
501 cxx="c++"
502else
503 cxx="${CXX-${cross_prefix}g++}"
504fi
505
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500506ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700507as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700508ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000509cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500510objcopy="${OBJCOPY-${cross_prefix}objcopy}"
511ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800512ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200513nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500514strip="${STRIP-${cross_prefix}strip}"
515windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300516pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
517query_pkg_config() {
518 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
519}
520pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500521sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000522sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000523
Peter Maydell45d285a2013-10-21 21:03:06 +0100524# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
525ARFLAGS="${ARFLAGS-rv}"
526
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200527# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100528# We use -fwrapv to tell the compiler that we require a C dialect where
529# left shift of signed integers is well defined and has the expected
530# 2s-complement style results. (Both clang and gcc agree that it
531# provides these semantics.)
532QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400533QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100534QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200535QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Yang Zhong244f1442017-06-02 14:06:45 +0800536QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100537if test "$debug_info" = "yes"; then
538 CFLAGS="-g $CFLAGS"
539 LDFLAGS="-g $LDFLAGS"
540fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200541
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100542# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200543source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100544
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300545# running configure in the source tree?
546# we know that's the case if configure is there.
547if test -f "./configure"; then
548 pwd_is_source_path="y"
549else
550 pwd_is_source_path="n"
551fi
552
aliguoriac0df512008-12-29 17:14:15 +0000553check_define() {
554cat > $TMPC <<EOF
555#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000556#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000557#endif
558int main(void) { return 0; }
559EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200560 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000561}
562
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200563check_include() {
564cat > $TMPC <<EOF
565#include <$1>
566int main(void) { return 0; }
567EOF
568 compile_object
569}
570
John Snow93b25862015-03-25 18:57:37 -0400571write_c_skeleton() {
572 cat > $TMPC <<EOF
573int main(void) { return 0; }
574EOF
575}
576
Peter Maydellbbea4052012-08-14 15:35:34 +0100577if check_define __linux__ ; then
578 targetos="Linux"
579elif check_define _WIN32 ; then
580 targetos='MINGW32'
581elif check_define __OpenBSD__ ; then
582 targetos='OpenBSD'
583elif check_define __sun__ ; then
584 targetos='SunOS'
585elif check_define __HAIKU__ ; then
586 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100587elif check_define __FreeBSD__ ; then
588 targetos='FreeBSD'
589elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
590 targetos='GNU/kFreeBSD'
591elif check_define __DragonFly__ ; then
592 targetos='DragonFly'
593elif check_define __NetBSD__; then
594 targetos='NetBSD'
595elif check_define __APPLE__; then
596 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100597else
Peter Maydell951fedf2017-07-13 16:15:32 +0100598 # This is a fatal error, but don't report it yet, because we
599 # might be going to just print the --help text, or it might
600 # be the result of a missing compiler.
601 targetos='bogus'
602 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100603fi
604
605# Some host OSes need non-standard checks for which CPU to use.
606# Note that these checks are broken for cross-compilation: if you're
607# cross-compiling to one of these OSes then you'll need to specify
608# the correct CPU with the --cpu option.
609case $targetos in
610Darwin)
611 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
612 # run 64-bit userspace code.
613 # If the user didn't specify a CPU explicitly and the kernel says this is
614 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
615 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
616 cpu="x86_64"
617 fi
618 ;;
619SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200620 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100621 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
622 cpu="x86_64"
623 fi
624esac
625
Juan Quintela2ff6b912009-08-03 14:45:55 +0200626if test ! -z "$cpu" ; then
627 # command line argument
628 :
629elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000630 cpu="i386"
631elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700632 if check_define __ILP32__ ; then
633 cpu="x32"
634 else
635 cpu="x86_64"
636 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000637elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000638 if check_define __arch64__ ; then
639 cpu="sparc64"
640 else
641 cpu="sparc"
642 fi
malcfdf7ed92009-01-14 18:39:52 +0000643elif check_define _ARCH_PPC ; then
644 if check_define _ARCH_PPC64 ; then
645 cpu="ppc64"
646 else
647 cpu="ppc"
648 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200649elif check_define __mips__ ; then
650 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200651elif check_define __s390__ ; then
652 if check_define __s390x__ ; then
653 cpu="s390x"
654 else
655 cpu="s390"
656 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100657elif check_define __arm__ ; then
658 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100659elif check_define __aarch64__ ; then
660 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000661else
Stefan Weil89138852016-05-16 15:10:20 +0200662 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000663fi
664
Peter Maydell359bc952011-12-24 13:07:25 +0000665ARCH=
666# Normalise host CPU name and set ARCH.
667# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000668case "$cpu" in
Peter Maydell6499fd12017-03-28 11:58:38 +0100669 ppc|ppc64|s390|s390x|sparc64|x32)
Peter Maydell898be3e2017-03-21 14:31:57 +0000670 cpu="$cpu"
671 supported_cpu="yes"
672 ;;
bellard7d132992003-03-06 23:23:54 +0000673 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000674 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000675 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000676 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000677 x86_64|amd64)
678 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000679 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000680 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100681 armv*b|armv*l|arm)
682 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000683 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000684 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100685 aarch64)
686 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000687 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100688 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200689 mips*)
690 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000691 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200692 ;;
blueswir131422552007-04-16 18:27:06 +0000693 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000694 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100695 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000696 ;;
bellard7d132992003-03-06 23:23:54 +0000697 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000698 # This will result in either an error or falling back to TCI later
699 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000700 ;;
701esac
Peter Maydell359bc952011-12-24 13:07:25 +0000702if test -z "$ARCH"; then
703 ARCH="$cpu"
704fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200705
bellard7d132992003-03-06 23:23:54 +0000706# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200707
Stacey Sonadfc3e92014-06-08 09:57:22 -0700708# host *BSD for user mode
709HOST_VARIANT_DIR=""
710
bellard7d132992003-03-06 23:23:54 +0000711case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000712MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200713 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100714 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200715 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200716 if check_include dsound.h; then
717 audio_drv_list="dsound"
718 else
719 audio_drv_list=""
720 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000721 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000722;;
ths5c40d2b2007-06-23 16:03:36 +0000723GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100724 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200725 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200726 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000727;;
bellard7d3505c2004-05-12 19:32:15 +0000728FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200729 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100730 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200731 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200732 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100733 # needed for kinfo_getvmmap(3) in libutil.h
734 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500735 # needed for kinfo_getproc
736 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100737 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700738 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000739 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000740;;
blueswir1c5e97232009-03-07 20:06:23 +0000741DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200742 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100743 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200744 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200745 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700746 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000747;;
bellard7d3505c2004-05-12 19:32:15 +0000748NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200749 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100750 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200751 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200752 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200753 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700754 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200755 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000756;;
757OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200758 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100759 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400760 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200761 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700762 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500763 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000764;;
bellard83fb7ad2004-07-05 21:25:26 +0000765Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200766 bsd="yes"
767 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100768 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500769 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800770 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200771 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200772 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200773 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200774 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200775 cocoa="yes"
776 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200777 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200778 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200779 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100780 # Disable attempts to use ObjectiveC features in os/object.h since they
781 # won't work when we're compiling with gcc as a C compiler.
782 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700783 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000784 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000785;;
bellardec530c82006-04-25 22:36:06 +0000786SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200787 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100788 make="${MAKE-gmake}"
789 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400790 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200791 if test -f /usr/include/sys/soundcard.h ; then
792 audio_drv_list="oss"
793 fi
794 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000795# needed for CMSG_ macros in sys/socket.h
796 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
797# needed for TIOCWIN* defines in termios.h
798 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200799 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200800 solarisnetlibs="-lsocket -lnsl -lresolv"
801 LIBS="$solarisnetlibs $LIBS"
802 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000803;;
Andreas Färber179cf402010-09-20 00:50:43 +0200804Haiku)
805 haiku="yes"
806 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
807 LIBS="-lposix_error_mapper -lnetwork $LIBS"
808;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000809Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200810 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200811 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200812 linux="yes"
813 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200814 kvm="yes"
815 vhost_net="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000816 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100817 vhost_vsock="yes"
Alexey Kardashevskiya5851402013-05-29 23:30:43 +1000818 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000819 supported_os="yes"
820;;
bellard7d132992003-03-06 23:23:54 +0000821esac
822
bellard7d3505c2004-05-12 19:32:15 +0000823if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000824 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200825 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000826 fi
bellard7d3505c2004-05-12 19:32:15 +0000827fi
828
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100829: ${make=${MAKE-make}}
830: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100831: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400832: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100833
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100834# Default objcc to clang if available, otherwise use CC
835if has clang; then
836 objcc=clang
837else
838 objcc="$cc"
839fi
840
Juan Quintela3457a3f2009-08-03 14:46:07 +0200841if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200842 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800843 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200844 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100845 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
846 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100847 # MinGW needs -mthreads for TLS and macro _MT.
848 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100849 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400850 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100851 if compile_prog "" "-liberty" ; then
852 LIBS="-liberty $LIBS"
853 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200854 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200855 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300856 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300857 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200858 bindir="\${prefix}"
859 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200860 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200861 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300862 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200863fi
864
Anthony Liguori487fefd2009-06-11 13:28:25 -0500865werror=""
bellard85aa5182007-11-11 20:17:03 +0000866
bellard7d132992003-03-06 23:23:54 +0000867for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200868 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000869 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000870 --help|-h) show_help=yes
871 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400872 --version|-V) exec cat $source_path/VERSION
873 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000874 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000875 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000876 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000877 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100878 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000879 ;;
aliguoriac0df512008-12-29 17:14:15 +0000880 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000881 ;;
aliguoriac0df512008-12-29 17:14:15 +0000882 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000883 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000884 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000885 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400886 --cxx=*)
887 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200888 --iasl=*) iasl="$optarg"
889 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100890 --objcc=*) objcc="$optarg"
891 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000892 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000893 ;;
pbrook6a882642006-04-17 13:57:12 +0000894 --install=*) install="$optarg"
895 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000896 --python=*) python="$optarg"
897 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000898 --gcov=*) gcov_tool="$optarg"
899 ;;
Brade2d88302011-09-02 16:53:28 -0400900 --smbd=*) smbd="$optarg"
901 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200902 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000903 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100904 --extra-cxxflags=*)
905 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200906 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000907 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100908 --enable-debug-info)
909 ;;
910 --disable-debug-info)
911 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800912 --enable-modules)
913 modules="yes"
914 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000915 --disable-modules)
916 modules="no"
917 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200918 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000919 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000920 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000921 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +0200922 --enable-trace-backends=*) trace_backends="$optarg"
923 ;;
924 # XXX: backwards compatibility
925 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100926 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100927 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100928 ;;
bellard7d132992003-03-06 23:23:54 +0000929 --enable-gprof) gprof="yes"
930 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000931 --enable-gcov) gcov="yes"
932 ;;
Loïc Minier79427692010-01-31 12:23:45 +0100933 --static)
934 static="yes"
935 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300936 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +0000937 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200938 --mandir=*) mandir="$optarg"
939 ;;
940 --bindir=*) bindir="$optarg"
941 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300942 --libdir=*) libdir="$optarg"
943 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400944 --libexecdir=*) libexecdir="$optarg"
945 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +0200946 --includedir=*) includedir="$optarg"
947 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300948 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200949 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -0300950 --with-confsuffix=*) confsuffix="$optarg"
951 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -0300952 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200953 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +0100954 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -0600955 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300956 --localstatedir=*) local_statedir="$optarg"
957 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200958 --firmwarepath=*) firmwarepath="$optarg"
959 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300960 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +0400961 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
962 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
963 # These switches are silently ignored, for compatibility with
964 # autoconf-generated configure scripts. This allows QEMU's
965 # configure to be used by RPM and similar macros that set
966 # lots of directory switches by default.
967 ;;
bellard97a847b2003-08-10 21:36:04 +0000968 --disable-sdl) sdl="no"
969 ;;
Juan Quintelac4198152009-08-12 18:29:53 +0200970 --enable-sdl) sdl="yes"
971 ;;
Dave Airlie47c03742013-12-10 14:05:51 +1000972 --with-sdlabi=*) sdlabi="$optarg"
973 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +0200974 --disable-qom-cast-debug) qom_cast_debug="no"
975 ;;
976 --enable-qom-cast-debug) qom_cast_debug="yes"
977 ;;
Meador Inge983eef52012-02-24 14:00:42 +0530978 --disable-virtfs) virtfs="no"
979 ;;
980 --enable-virtfs) virtfs="yes"
981 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200982 --disable-mpath) mpath="no"
983 ;;
984 --enable-mpath) mpath="yes"
985 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +0100986 --disable-vnc) vnc="no"
987 ;;
988 --enable-vnc) vnc="yes"
989 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +0000990 --oss-lib=*) oss_lib="$optarg"
991 ;;
malc0c58ac12008-06-25 21:04:05 +0000992 --audio-drv-list=*) audio_drv_list="$optarg"
993 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200994 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800995 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200996 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +0100997 ;;
aurel32f8393942009-04-13 18:45:38 +0000998 --enable-debug-tcg) debug_tcg="yes"
999 ;;
1000 --disable-debug-tcg) debug_tcg="no"
1001 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001002 --enable-debug)
1003 # Enable debugging options that aren't excessively noisy
1004 debug_tcg="yes"
1005 debug="yes"
1006 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001007 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001008 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001009 --enable-sanitizers) sanitizers="yes"
1010 ;;
1011 --disable-sanitizers) sanitizers="no"
1012 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001013 --enable-sparse) sparse="yes"
1014 ;;
1015 --disable-sparse) sparse="no"
1016 ;;
aliguori1625af82009-04-05 17:41:02 +00001017 --disable-strip) strip_opt="no"
1018 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001019 --disable-vnc-sasl) vnc_sasl="no"
1020 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001021 --enable-vnc-sasl) vnc_sasl="yes"
1022 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001023 --disable-vnc-jpeg) vnc_jpeg="no"
1024 ;;
1025 --enable-vnc-jpeg) vnc_jpeg="yes"
1026 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001027 --disable-vnc-png) vnc_png="no"
1028 ;;
1029 --enable-vnc-png) vnc_png="yes"
1030 ;;
bellard443f1372004-06-04 11:13:20 +00001031 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001032 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001033 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001034 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001035 --enable-vde) vde="yes"
1036 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001037 --disable-netmap) netmap="no"
1038 ;;
1039 --enable-netmap) netmap="yes"
1040 ;;
aliguorie37630c2009-04-22 15:19:10 +00001041 --disable-xen) xen="no"
1042 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001043 --enable-xen) xen="yes"
1044 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001045 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1046 ;;
1047 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1048 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +00001049 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1050 ;;
1051 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1052 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001053 --disable-brlapi) brlapi="no"
1054 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001055 --enable-brlapi) brlapi="yes"
1056 ;;
balrogfb599c92008-09-28 23:49:55 +00001057 --disable-bluez) bluez="no"
1058 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001059 --enable-bluez) bluez="yes"
1060 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001061 --disable-kvm) kvm="no"
1062 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001063 --enable-kvm) kvm="yes"
1064 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001065 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001066 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001067 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001068 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001069 --disable-hvf) hvf="no"
1070 ;;
1071 --enable-hvf) hvf="yes"
1072 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001073 --disable-whpx) whpx="no"
1074 ;;
1075 --enable-whpx) whpx="yes"
1076 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001077 --disable-tcg-interpreter) tcg_interpreter="no"
1078 ;;
1079 --enable-tcg-interpreter) tcg_interpreter="yes"
1080 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001081 --disable-cap-ng) cap_ng="no"
1082 ;;
1083 --enable-cap-ng) cap_ng="yes"
1084 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001085 --disable-tcg) tcg="no"
1086 ;;
1087 --enable-tcg) tcg="yes"
1088 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001089 --disable-malloc-trim) malloc_trim="no"
1090 ;;
1091 --enable-malloc-trim) malloc_trim="yes"
1092 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001093 --disable-spice) spice="no"
1094 ;;
1095 --enable-spice) spice="yes"
1096 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001097 --disable-libiscsi) libiscsi="no"
1098 ;;
1099 --enable-libiscsi) libiscsi="yes"
1100 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001101 --disable-libnfs) libnfs="no"
1102 ;;
1103 --enable-libnfs) libnfs="yes"
1104 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001105 --enable-profiler) profiler="yes"
1106 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001107 --disable-cocoa) cocoa="no"
1108 ;;
malcc2de5c92008-06-28 19:13:06 +00001109 --enable-cocoa)
1110 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001111 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001112 ;;
pbrookcad25d62006-03-19 16:31:11 +00001113 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001114 ;;
pbrookcad25d62006-03-19 16:31:11 +00001115 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001116 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001117 --disable-user)
1118 linux_user="no" ;
1119 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001120 ;;
1121 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001122 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001123 ;;
ths831b7822007-01-18 20:06:33 +00001124 --enable-linux-user) linux_user="yes"
1125 ;;
blueswir184778502008-10-26 20:33:16 +00001126 --disable-bsd-user) bsd_user="no"
1127 ;;
1128 --enable-bsd-user) bsd_user="yes"
1129 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001130 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001131 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001132 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001133 ;;
bellard85aa5182007-11-11 20:17:03 +00001134 --enable-werror) werror="yes"
1135 ;;
1136 --disable-werror) werror="no"
1137 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001138 --enable-stack-protector) stack_protector="yes"
1139 ;;
1140 --disable-stack-protector) stack_protector="no"
1141 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001142 --disable-curses) curses="no"
1143 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001144 --enable-curses) curses="yes"
1145 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001146 --disable-curl) curl="no"
1147 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001148 --enable-curl) curl="yes"
1149 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001150 --disable-fdt) fdt="no"
1151 ;;
1152 --enable-fdt) fdt="yes"
1153 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001154 --disable-linux-aio) linux_aio="no"
1155 ;;
1156 --enable-linux-aio) linux_aio="yes"
1157 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001158 --disable-attr) attr="no"
1159 ;;
1160 --enable-attr) attr="yes"
1161 ;;
ths77755342008-11-27 15:45:16 +00001162 --disable-blobs) blobs="no"
1163 ;;
pbrook4a19f1e2009-04-07 23:17:49 +00001164 --with-pkgversion=*) pkgversion=" ($optarg)"
1165 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001166 --with-coroutine=*) coroutine="$optarg"
1167 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001168 --disable-coroutine-pool) coroutine_pool="no"
1169 ;;
1170 --enable-coroutine-pool) coroutine_pool="yes"
1171 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001172 --enable-debug-stack-usage) debug_stack_usage="yes"
1173 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001174 --enable-crypto-afalg) crypto_afalg="yes"
1175 ;;
1176 --disable-crypto-afalg) crypto_afalg="no"
1177 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001178 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001179 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001180 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001181 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001182 --disable-vhost-net) vhost_net="no"
1183 ;;
1184 --enable-vhost-net) vhost_net="yes"
1185 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001186 --disable-vhost-scsi) vhost_scsi="no"
1187 ;;
1188 --enable-vhost-scsi) vhost_scsi="yes"
1189 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001190 --disable-vhost-vsock) vhost_vsock="no"
1191 ;;
1192 --enable-vhost-vsock) vhost_vsock="yes"
1193 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001194 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001195 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001196 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001197 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001198 --disable-rbd) rbd="no"
1199 ;;
1200 --enable-rbd) rbd="yes"
1201 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001202 --disable-xfsctl) xfs="no"
1203 ;;
1204 --enable-xfsctl) xfs="yes"
1205 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001206 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001207 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001208 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001209 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001210 --disable-libusb) libusb="no"
1211 ;;
1212 --enable-libusb) libusb="yes"
1213 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001214 --disable-usb-redir) usb_redir="no"
1215 ;;
1216 --enable-usb-redir) usb_redir="yes"
1217 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001218 --disable-zlib-test) zlib="no"
1219 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001220 --disable-lzo) lzo="no"
1221 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001222 --enable-lzo) lzo="yes"
1223 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001224 --disable-snappy) snappy="no"
1225 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001226 --enable-snappy) snappy="yes"
1227 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001228 --disable-bzip2) bzip2="no"
1229 ;;
1230 --enable-bzip2) bzip2="yes"
1231 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001232 --enable-guest-agent) guest_agent="yes"
1233 ;;
1234 --disable-guest-agent) guest_agent="no"
1235 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001236 --enable-guest-agent-msi) guest_agent_msi="yes"
1237 ;;
1238 --disable-guest-agent-msi) guest_agent_msi="no"
1239 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001240 --with-vss-sdk) vss_win32_sdk=""
1241 ;;
1242 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1243 ;;
1244 --without-vss-sdk) vss_win32_sdk="no"
1245 ;;
1246 --with-win-sdk) win_sdk=""
1247 ;;
1248 --with-win-sdk=*) win_sdk="$optarg"
1249 ;;
1250 --without-win-sdk) win_sdk="no"
1251 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001252 --enable-tools) want_tools="yes"
1253 ;;
1254 --disable-tools) want_tools="no"
1255 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001256 --enable-seccomp) seccomp="yes"
1257 ;;
1258 --disable-seccomp) seccomp="no"
1259 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301260 --disable-glusterfs) glusterfs="no"
1261 ;;
1262 --enable-glusterfs) glusterfs="yes"
1263 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001264 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1265 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001266 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001267 --enable-vhdx|--disable-vhdx)
1268 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1269 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001270 --enable-uuid|--disable-uuid)
1271 echo "$0: $opt is obsolete, UUID support is always built" >&2
1272 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001273 --disable-gtk) gtk="no"
1274 ;;
1275 --enable-gtk) gtk="yes"
1276 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001277 --tls-priority=*) tls_priority="$optarg"
1278 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001279 --disable-gnutls) gnutls="no"
1280 ;;
1281 --enable-gnutls) gnutls="yes"
1282 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001283 --disable-nettle) nettle="no"
1284 ;;
1285 --enable-nettle) nettle="yes"
1286 ;;
1287 --disable-gcrypt) gcrypt="no"
1288 ;;
1289 --enable-gcrypt) gcrypt="yes"
1290 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001291 --enable-rdma) rdma="yes"
1292 ;;
1293 --disable-rdma) rdma="no"
1294 ;;
Daniel P. Berrange528de902013-02-25 15:20:44 +00001295 --with-gtkabi=*) gtkabi="$optarg"
1296 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001297 --disable-vte) vte="no"
1298 ;;
1299 --enable-vte) vte="yes"
1300 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001301 --disable-virglrenderer) virglrenderer="no"
1302 ;;
1303 --enable-virglrenderer) virglrenderer="yes"
1304 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001305 --disable-tpm) tpm="no"
1306 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001307 --enable-tpm) tpm="yes"
1308 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001309 --disable-libssh2) libssh2="no"
1310 ;;
1311 --enable-libssh2) libssh2="yes"
1312 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001313 --disable-live-block-migration) live_block_migration="no"
1314 ;;
1315 --enable-live-block-migration) live_block_migration="yes"
1316 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001317 --disable-numa) numa="no"
1318 ;;
1319 --enable-numa) numa="yes"
1320 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001321 --disable-libxml2) libxml2="no"
1322 ;;
1323 --enable-libxml2) libxml2="yes"
1324 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001325 --disable-tcmalloc) tcmalloc="no"
1326 ;;
1327 --enable-tcmalloc) tcmalloc="yes"
1328 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001329 --disable-jemalloc) jemalloc="no"
1330 ;;
1331 --enable-jemalloc) jemalloc="yes"
1332 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001333 --disable-replication) replication="no"
1334 ;;
1335 --enable-replication) replication="yes"
1336 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001337 --disable-vxhs) vxhs="no"
1338 ;;
1339 --enable-vxhs) vxhs="yes"
1340 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001341 --disable-vhost-user) vhost_user="no"
1342 ;;
1343 --enable-vhost-user)
1344 vhost_user="yes"
1345 if test "$mingw32" = "yes"; then
1346 error_exit "vhost-user isn't available on win32"
1347 fi
1348 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001349 --disable-capstone) capstone="no"
1350 ;;
1351 --enable-capstone) capstone="yes"
1352 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001353 --enable-capstone=git) capstone="git"
1354 ;;
1355 --enable-capstone=system) capstone="system"
1356 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001357 --with-git=*) git="$optarg"
1358 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001359 --enable-git-update) git_update=yes
1360 ;;
1361 --disable-git-update) git_update=no
1362 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001363 *)
1364 echo "ERROR: unknown option $opt"
1365 echo "Try '$0 --help' for more information"
1366 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001367 ;;
bellard7d132992003-03-06 23:23:54 +00001368 esac
1369done
1370
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001371if test "$vhost_user" = ""; then
1372 if test "$mingw32" = "yes"; then
1373 vhost_user="no"
1374 else
1375 vhost_user="yes"
1376 fi
1377fi
1378
bellard40293e52008-01-31 11:32:10 +00001379case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001380 ppc)
1381 CPU_CFLAGS="-m32"
1382 LDFLAGS="-m32 $LDFLAGS"
1383 ;;
1384 ppc64)
1385 CPU_CFLAGS="-m64"
1386 LDFLAGS="-m64 $LDFLAGS"
1387 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001388 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001389 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1390 LDFLAGS="-m32 -mv8plus $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001391 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001392 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001393 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001394 LDFLAGS="-m64 $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001395 ;;
ths76d83bd2007-11-18 21:22:10 +00001396 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001397 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001398 LDFLAGS="-m31 $LDFLAGS"
1399 ;;
1400 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001401 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001402 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001403 ;;
bellard40293e52008-01-31 11:32:10 +00001404 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001405 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001406 LDFLAGS="-m32 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001407 cc_i386='$(CC) -m32'
bellard40293e52008-01-31 11:32:10 +00001408 ;;
1409 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001410 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1411 # If we truly care, we should simply detect this case at
1412 # runtime and generate the fallback to serial emulation.
1413 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001414 LDFLAGS="-m64 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001415 cc_i386='$(CC) -m32'
Paul Brook379f6692009-07-17 12:48:08 +01001416 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001417 x32)
1418 CPU_CFLAGS="-mx32"
1419 LDFLAGS="-mx32 $LDFLAGS"
1420 cc_i386='$(CC) -m32'
1421 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001422 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001423esac
1424
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001425QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001426
Peter Maydellaffc88c2016-06-13 11:32:24 +01001427# For user-mode emulation the host arch has to be one we explicitly
1428# support, even if we're using TCI.
1429if [ "$ARCH" = "unknown" ]; then
1430 bsd_user="no"
1431 linux_user="no"
1432fi
1433
Peter Maydell60e0df22011-05-03 14:50:13 +01001434default_target_list=""
1435
Peter Maydell6e92f822013-05-20 16:16:15 +01001436mak_wilds=""
1437
1438if [ "$softmmu" = "yes" ]; then
1439 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001440fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001441if [ "$linux_user" = "yes" ]; then
1442 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001443fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001444if [ "$bsd_user" = "yes" ]; then
1445 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001446fi
1447
Peter Maydell6e92f822013-05-20 16:16:15 +01001448for config in $mak_wilds; do
1449 default_target_list="${default_target_list} $(basename "$config" .mak)"
1450done
1451
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001452# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001453trace_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 +01001454
pbrookaf5db582006-04-08 14:26:41 +00001455if test x"$show_help" = x"yes" ; then
1456cat << EOF
1457
1458Usage: configure [options]
1459Options: [defaults in brackets after descriptions]
1460
Stefan Weil08fb77e2013-12-18 22:09:39 +01001461Standard options:
1462 --help print this message
1463 --prefix=PREFIX install in PREFIX [$prefix]
1464 --interp-prefix=PREFIX where to find shared libraries, etc.
1465 use %M for cpu name [$interp_prefix]
1466 --target-list=LIST set target list (default: build everything)
1467$(echo Available targets: $default_target_list | \
1468 fold -s -w 53 | sed -e 's/^/ /')
1469
1470Advanced options (experts only):
1471 --source-path=PATH path of source code [$source_path]
1472 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1473 --cc=CC use C compiler CC [$cc]
1474 --iasl=IASL use ACPI compiler IASL [$iasl]
1475 --host-cc=CC use C compiler CC [$host_cc] for code run at
1476 build time
1477 --cxx=CXX use C++ compiler CXX [$cxx]
1478 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1479 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001480 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001481 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1482 --make=MAKE use specified make [$make]
1483 --install=INSTALL use specified install [$install]
1484 --python=PYTHON use specified python [$python]
1485 --smbd=SMBD use specified smbd [$smbd]
1486 --static enable static build [$static]
1487 --mandir=PATH install man pages in PATH
1488 --datadir=PATH install firmware in PATH$confsuffix
1489 --docdir=PATH install documentation in PATH$confsuffix
1490 --bindir=PATH install binaries in PATH
1491 --libdir=PATH install libraries in PATH
1492 --sysconfdir=PATH install config in PATH$confsuffix
1493 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001494 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001495 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001496 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001497 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001498 --disable-strip disable stripping binaries
1499 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001500 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001501 --audio-drv-list=LIST set audio drivers list:
1502 Available drivers: $audio_possible_drivers
1503 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1504 --block-drv-rw-whitelist=L
1505 set block driver read-write whitelist
1506 (affects only QEMU, not qemu-img)
1507 --block-drv-ro-whitelist=L
1508 set block driver read-only whitelist
1509 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001510 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001511 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001512 --with-trace-file=NAME Full PATH,NAME of file to store traces
1513 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001514 --disable-slirp disable SLIRP userspace network connectivity
1515 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001516 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001517 --oss-lib path to OSS library
1518 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001519 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001520 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001521 --enable-gcov enable test coverage analysis with gcov
1522 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001523 --disable-blobs disable installing provided firmware blobs
1524 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1525 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001526 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001527 --enable-gprof QEMU profiling with gprof
1528 --enable-profiler profiler support
1529 --enable-xen-pv-domain-build
1530 xen pv domain builder
1531 --enable-debug-stack-usage
1532 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001533
1534Optional features, enabled with --enable-FEATURE and
1535disabled with --disable-FEATURE, default is enabled if available:
1536
1537 system all system emulation targets
1538 user supported user emulation targets
1539 linux-user all linux usermode emulation targets
1540 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001541 docs build documentation
1542 guest-agent build the QEMU Guest Agent
1543 guest-agent-msi build guest agent Windows MSI installation package
1544 pie Position Independent Executables
1545 modules modules support
1546 debug-tcg TCG debugging (default is disabled)
1547 debug-info debugging information
1548 sparse sparse checker
1549
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001550 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001551 nettle nettle cryptography support
1552 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001553 sdl SDL UI
1554 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1555 gtk gtk UI
1556 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1557 vte vte support for the gtk UI
1558 curses curses UI
1559 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001560 vnc-sasl SASL encryption for VNC server
1561 vnc-jpeg JPEG lossy compression for VNC server
1562 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001563 cocoa Cocoa UI (Mac OS X only)
1564 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001565 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001566 xen xen backend driver support
1567 xen-pci-passthrough
1568 brlapi BrlAPI (Braile)
1569 curl curl connectivity
1570 fdt fdt device tree
1571 bluez bluez stack connectivity
1572 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001573 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001574 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001575 whpx Windows Hypervisor Platform acceleration support
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02001576 rdma Enable RDMA-based migration and PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001577 vde support for vde network
1578 netmap support for netmap network
1579 linux-aio Linux AIO support
1580 cap-ng libcap-ng support
1581 attr attr and xattr support
1582 vhost-net vhost-net acceleration support
1583 spice spice
1584 rbd rados block device (rbd)
1585 libiscsi iscsi support
1586 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001587 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001588 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001589 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001590 usb-redir usb network redirection support
1591 lzo support of lzo compression library
1592 snappy support of snappy compression library
1593 bzip2 support of bzip2 compression library
1594 (for reading bzip2-compressed dmg images)
1595 seccomp seccomp support
1596 coroutine-pool coroutine freelist (better performance)
1597 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001598 tpm TPM support
1599 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001600 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001601 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001602 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001603 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001604 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001605 vhost-vsock virtio sockets device support
1606 opengl opengl support
1607 virglrenderer virgl rendering support
1608 xfsctl xfsctl support
1609 qom-cast-debug cast debugging support
1610 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001611 vxhs Veritas HyperScale vDisk backend support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001612 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001613 vhost-user vhost-user support
Richard Henderson8ca80762017-09-14 09:41:12 -07001614 capstone capstone disassembler support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001615
1616NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001617EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001618exit 0
pbrookaf5db582006-04-08 14:26:41 +00001619fi
1620
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001621if ! has $python; then
1622 error_exit "Python not found. Use --python=/path/to/python"
1623fi
1624
1625# Note that if the Python conditional here evaluates True we will exit
1626# with status 1 which is a shell 'false' value.
Daniel P. Berrangec21965a2018-01-16 13:42:13 +00001627if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6))'; then
1628 error_exit "Cannot use '$python', Python 2 >= 2.6 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001629 "Use --python=/path/to/python to specify a supported Python."
1630fi
1631
1632# Suppress writing compiled files
1633python="$python -B"
1634
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001635# Check that the C compiler works. Doing this here before testing
1636# the host CPU ensures that we had a valid CC to autodetect the
1637# $cpu var (and we should bail right here if that's not the case).
1638# It also allows the help message to be printed without a CC.
1639write_c_skeleton;
1640if compile_object ; then
1641 : C compiler works ok
1642else
1643 error_exit "\"$cc\" either does not exist or does not work"
1644fi
1645if ! compile_prog ; then
1646 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1647fi
1648
Peter Maydell359bc952011-12-24 13:07:25 +00001649# Now we have handled --enable-tcg-interpreter and know we're not just
1650# printing the help message, bail out if the host CPU isn't supported.
1651if test "$ARCH" = "unknown"; then
1652 if test "$tcg_interpreter" = "yes" ; then
1653 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001654 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001655 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001656 fi
1657fi
1658
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001659# Consult white-list to determine whether to enable werror
1660# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001661if test -z "$werror" ; then
1662 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001663 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001664 werror="yes"
1665 else
1666 werror="no"
1667 fi
1668fi
1669
Peter Maydellfb59dab2017-03-28 14:01:52 +01001670if test "$bogus_os" = "yes"; then
1671 # Now that we know that we're not printing the help and that
1672 # the compiler works (so the results of the check_defines we used
1673 # to identify the OS are reliable), if we didn't recognize the
1674 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001675 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001676fi
1677
Paolo Bonzini8d050952010-12-23 11:43:52 +01001678gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1679gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001680gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001681gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001682gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001683gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001684# Note that we do not add -Werror to gcc_flags here, because that would
1685# enable it for all configure tests. If a configure test failed due
1686# to -Werror this would just silently disable some features,
1687# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001688
1689cc_has_warning_flag() {
1690 write_c_skeleton;
1691
Peter Maydella1d29d62012-10-27 22:19:07 +01001692 # Use the positive sense of the flag when testing for -Wno-wombat
1693 # support (gcc will happily accept the -Wno- form of unknown
1694 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001695 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1696 compile_prog "-Werror $optflag" ""
1697}
1698
1699for flag in $gcc_flags; do
1700 if cc_has_warning_flag $flag ; then
1701 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001702 fi
1703done
1704
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001705if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001706 cat > $TMPC << EOF
1707int main(int argc, char *argv[])
1708{
1709 char arr[64], *p = arr, *c = argv[0];
1710 while (*c) {
1711 *p++ = *c++;
1712 }
1713 return 0;
1714}
1715EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001716 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001717 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001718 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001719 # We need to check both a compile and a link, since some compiler
1720 # setups fail only on a .c->.o compile and some only at link time
1721 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1722 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001723 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001724 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001725 break
1726 fi
1727 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001728 if test "$stack_protector" = yes; then
1729 if test $sp_on = 0; then
1730 error_exit "Stack protector not supported"
1731 fi
1732 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001733fi
1734
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001735# Disable -Wmissing-braces on older compilers that warn even for
1736# the "universal" C zero initializer {0}.
1737cat > $TMPC << EOF
1738struct {
1739 int a[2];
1740} x = {0};
1741EOF
1742if compile_object "-Werror" "" ; then
1743 :
1744else
1745 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1746fi
1747
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001748# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1749# large functions that use global variables. The bug is in all releases of
1750# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1751# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1752cat > $TMPC << EOF
1753#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1754int main(void) { return 0; }
1755#else
1756#error No bug in this compiler.
1757#endif
1758EOF
1759if compile_prog "-Werror -fno-gcse" "" ; then
1760 TRANSLATE_OPT_CFLAGS=-fno-gcse
1761fi
1762
Avi Kivity40d64442011-11-15 20:12:17 +02001763if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001764 if test "$modules" = "yes" ; then
1765 error_exit "static and modules are mutually incompatible"
1766 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001767 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001768 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001769 else
1770 pie="no"
1771 fi
1772fi
1773
Emilio G. Cota768b7852015-04-29 13:09:02 +02001774# Unconditional check for compiler __thread support
1775 cat > $TMPC << EOF
1776static __thread int tls_var;
1777int main(void) { return tls_var; }
1778EOF
1779
1780if ! compile_prog "-Werror" "" ; then
1781 error_exit "Your compiler does not support the __thread specifier for " \
1782 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1783fi
1784
Avi Kivity40d64442011-11-15 20:12:17 +02001785if test "$pie" = ""; then
1786 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001787 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001788 ;;
1789 *)
1790 pie="no"
1791 ;;
1792 esac
1793fi
1794
1795if test "$pie" != "no" ; then
1796 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001797
1798#ifdef __linux__
1799# define THREAD __thread
1800#else
1801# define THREAD
1802#endif
1803
1804static THREAD int tls_var;
1805
1806int main(void) { return tls_var; }
1807
Avi Kivity40d64442011-11-15 20:12:17 +02001808EOF
1809 if compile_prog "-fPIE -DPIE" "-pie"; then
1810 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1811 LDFLAGS="-pie $LDFLAGS"
1812 pie="yes"
1813 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1814 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1815 fi
1816 else
1817 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001818 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001819 else
1820 echo "Disabling PIE due to missing toolchain support"
1821 pie="no"
1822 fi
1823 fi
Brad46eef332013-12-10 19:49:08 -05001824
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001825 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001826 CFLAGS_NOPIE="-fno-pie"
1827 LDFLAGS_NOPIE="-nopie"
1828 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001829fi
1830
Paolo Bonzini09dada42013-04-17 16:26:47 +02001831##########################################
1832# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1833# use i686 as default anyway, but for those that don't, an explicit
1834# specification is necessary
1835
1836if test "$cpu" = "i386"; then
1837 cat > $TMPC << EOF
1838static int sfaa(int *ptr)
1839{
1840 return __sync_fetch_and_and(ptr, 0);
1841}
1842
1843int main(void)
1844{
1845 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001846 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001847 sfaa(&val);
1848 return val;
1849}
1850EOF
1851 if ! compile_prog "" "" ; then
1852 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1853 fi
1854fi
1855
1856#########################################
bellardec530c82006-04-25 22:36:06 +00001857# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001858
bellardec530c82006-04-25 22:36:06 +00001859if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001860 if has $install; then
1861 :
1862 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001863 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1864 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1865 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001866 fi
Stefan Weil89138852016-05-16 15:10:20 +02001867 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001868 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1869 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1870 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001871 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001872 if has ar; then
1873 :
1874 else
bellardec530c82006-04-25 22:36:06 +00001875 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001876 error_exit "No path includes ar" \
1877 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001878 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001879 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001880 fi
ths5fafdf22007-09-16 21:08:06 +00001881fi
bellardec530c82006-04-25 22:36:06 +00001882
Stefan Weilafb63eb2012-09-26 22:04:38 +02001883if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001884 for target in $default_target_list; do
1885 supported_target $target 2>/dev/null && \
1886 target_list="$target_list $target"
1887 done
1888 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05001889else
Stefan Weil89138852016-05-16 15:10:20 +02001890 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001891 for target in $target_list; do
1892 # Check that we recognised the target name; this allows a more
1893 # friendly error message than if we let it fall through.
1894 case " $default_target_list " in
1895 *" $target "*)
1896 ;;
1897 *)
1898 error_exit "Unknown target name '$target'"
1899 ;;
1900 esac
1901 supported_target $target || exit 1
1902 done
bellard5327cf42005-01-10 23:18:50 +00001903fi
Peter Maydell25b48332013-05-20 16:16:16 +01001904
Paolo Bonzinif55fe272010-05-26 16:08:17 +02001905# see if system emulation was really requested
1906case " $target_list " in
1907 *"-softmmu "*) softmmu=yes
1908 ;;
1909 *) softmmu=no
1910 ;;
1911esac
bellard5327cf42005-01-10 23:18:50 +00001912
Juan Quintela249247c2009-08-12 18:20:25 +02001913feature_not_found() {
1914 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11001915 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02001916
Peter Maydell76ad07a2013-04-08 12:11:26 +01001917 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11001918 "configure was not able to find it." \
1919 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02001920}
1921
bellard7d132992003-03-06 23:23:54 +00001922# ---
1923# big/little endian test
1924cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04001925short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1926short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1927extern int foo(short *, short *);
1928int main(int argc, char *argv[]) {
1929 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00001930}
1931EOF
1932
Mike Frysinger61cc9192013-06-30 23:30:18 -04001933if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01001934 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04001935 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01001936 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04001937 bigendian="no"
1938 else
1939 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01001940 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04001941else
1942 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00001943fi
1944
Juan Quintelab0a47e72009-08-12 18:29:49 +02001945##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01001946# cocoa implies not SDL or GTK
1947# (the cocoa UI code currently assumes it is always the active UI
1948# and doesn't interact well with other UI frontend code)
1949if test "$cocoa" = "yes"; then
1950 if test "$sdl" = "yes"; then
1951 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1952 fi
1953 if test "$gtk" = "yes"; then
1954 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1955 fi
1956 gtk=no
1957 sdl=no
1958fi
1959
Eric Blake6b39b062016-10-11 10:46:23 -05001960# Some versions of Mac OS X incorrectly define SIZE_MAX
1961cat > $TMPC << EOF
1962#include <stdint.h>
1963#include <stdio.h>
1964int main(int argc, char *argv[]) {
1965 return printf("%zu", SIZE_MAX);
1966}
1967EOF
1968have_broken_size_max=no
1969if ! compile_object -Werror ; then
1970 have_broken_size_max=yes
1971fi
1972
Peter Maydella30878e2015-08-14 16:10:52 +01001973##########################################
Gonglei015a33b2014-07-01 20:58:08 +08001974# L2TPV3 probe
1975
1976cat > $TMPC <<EOF
1977#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04001978#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08001979int main(void) { return sizeof(struct mmsghdr); }
1980EOF
1981if compile_prog "" "" ; then
1982 l2tpv3=yes
1983else
1984 l2tpv3=no
1985fi
1986
1987##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01001988# MinGW / Mingw-w64 localtime_r/gmtime_r check
1989
1990if test "$mingw32" = "yes"; then
1991 # Some versions of MinGW / Mingw-w64 lack localtime_r
1992 # and gmtime_r entirely.
1993 #
1994 # Some versions of Mingw-w64 define a macro for
1995 # localtime_r/gmtime_r.
1996 #
1997 # Some versions of Mingw-w64 will define functions
1998 # for localtime_r/gmtime_r, but only if you have
1999 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2000 # though, unistd.h and pthread.h both define
2001 # that for you.
2002 #
2003 # So this #undef localtime_r and #include <unistd.h>
2004 # are not in fact redundant.
2005cat > $TMPC << EOF
2006#include <unistd.h>
2007#include <time.h>
2008#undef localtime_r
2009int main(void) { localtime_r(NULL, NULL); return 0; }
2010EOF
2011 if compile_prog "" "" ; then
2012 localtime_r="yes"
2013 else
2014 localtime_r="no"
2015 fi
2016fi
2017
2018##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002019# pkg-config probe
2020
2021if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002022 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002023fi
2024
2025##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002026# NPTL probe
2027
Peter Maydell24cb36a2013-07-16 18:45:00 +01002028if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002029 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002030#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002031#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002032int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002033#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2034#error bork
2035#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002036 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002037}
2038EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002039 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002040 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002041 fi
pbrookbd0c5662008-05-29 14:34:11 +00002042fi
2043
Liang Li99f2dbd2016-03-08 13:53:16 +08002044#########################################
balrogac629222008-10-11 09:56:04 +00002045# zlib check
2046
Alon Levy1ece9902011-07-26 12:30:40 +03002047if test "$zlib" != "no" ; then
2048 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00002049#include <zlib.h>
2050int main(void) { zlibVersion(); return 0; }
2051EOF
Alon Levy1ece9902011-07-26 12:30:40 +03002052 if compile_prog "" "-lz" ; then
2053 :
2054 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002055 error_exit "zlib check failed" \
2056 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03002057 fi
balrogac629222008-10-11 09:56:04 +00002058fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00002059LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00002060
2061##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002062# lzo check
2063
2064if test "$lzo" != "no" ; then
2065 cat > $TMPC << EOF
2066#include <lzo/lzo1x.h>
2067int main(void) { lzo_version(); return 0; }
2068EOF
2069 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002070 libs_softmmu="$libs_softmmu -llzo2"
2071 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002072 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002073 if test "$lzo" = "yes"; then
2074 feature_not_found "liblzo2" "Install liblzo2 devel"
2075 fi
2076 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002077 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002078fi
2079
2080##########################################
2081# snappy check
2082
2083if test "$snappy" != "no" ; then
2084 cat > $TMPC << EOF
2085#include <snappy-c.h>
2086int main(void) { snappy_max_compressed_length(4096); return 0; }
2087EOF
2088 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002089 libs_softmmu="$libs_softmmu -lsnappy"
2090 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002091 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002092 if test "$snappy" = "yes"; then
2093 feature_not_found "libsnappy" "Install libsnappy devel"
2094 fi
2095 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002096 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002097fi
2098
2099##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002100# bzip2 check
2101
2102if test "$bzip2" != "no" ; then
2103 cat > $TMPC << EOF
2104#include <bzlib.h>
2105int main(void) { BZ2_bzlibVersion(); return 0; }
2106EOF
2107 if compile_prog "" "-lbz2" ; then
2108 bzip2="yes"
2109 else
2110 if test "$bzip2" = "yes"; then
2111 feature_not_found "libbzip2" "Install libbzip2 devel"
2112 fi
2113 bzip2="no"
2114 fi
2115fi
2116
2117##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002118# libseccomp check
2119
2120if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002121 case "$cpu" in
2122 i386|x86_64)
dann frazierba060c52015-10-23 15:34:22 -06002123 libseccomp_minver="2.1.0"
Andrew Jones693e5912015-09-30 11:59:18 -04002124 ;;
James Hogan5ce43972016-04-08 14:16:34 +01002125 mips)
2126 libseccomp_minver="2.2.0"
2127 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002128 arm|aarch64)
2129 libseccomp_minver="2.2.3"
2130 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002131 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002132 libseccomp_minver="2.3.0"
2133 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002134 *)
2135 libseccomp_minver=""
2136 ;;
2137 esac
2138
2139 if test "$libseccomp_minver" != "" &&
2140 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002141 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2142 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002143 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002144 else
Andrew Jones693e5912015-09-30 11:59:18 -04002145 if test "$seccomp" = "yes" ; then
2146 if test "$libseccomp_minver" != "" ; then
2147 feature_not_found "libseccomp" \
2148 "Install libseccomp devel >= $libseccomp_minver"
2149 else
2150 feature_not_found "libseccomp" \
2151 "libseccomp is not supported for host cpu $cpu"
2152 fi
2153 fi
2154 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002155 fi
2156fi
2157##########################################
aliguorie37630c2009-04-22 15:19:10 +00002158# xen probe
2159
Juan Quintelafc321b42009-08-12 18:29:55 +02002160if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002161 # Check whether Xen library path is specified via --extra-ldflags to avoid
2162 # overriding this setting with pkg-config output. If not, try pkg-config
2163 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002164
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002165 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2166 $pkg_config --exists xencontrol ; then
2167 xen_ctrl_version="$(printf '%d%02d%02d' \
2168 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2169 xen=yes
2170 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2171 xen_pc="$xen_pc xenevtchn xendevicemodel"
2172 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2173 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2174 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2175 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002176
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002177 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002178 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002179
2180 # First we test whether Xen headers and libraries are available.
2181 # If no, we are done and there is no Xen support.
2182 # If yes, more tests are run to detect the Xen version.
2183
2184 # Xen (any)
2185 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002186#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002187int main(void) {
2188 return 0;
2189}
2190EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002191 if ! compile_prog "" "$xen_libs" ; then
2192 # Xen not found
2193 if test "$xen" = "yes" ; then
2194 feature_not_found "xen" "Install xen devel"
2195 fi
2196 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002197
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002198 # Xen unstable
2199 elif
2200 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002201#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2202#include <xenforeignmemory.h>
2203int main(void) {
2204 xenforeignmemory_handle *xfmem;
2205
2206 xfmem = xenforeignmemory_open(0, 0);
2207 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2208
2209 return 0;
2210}
2211EOF
2212 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2213 then
2214 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2215 xen_ctrl_version=41000
2216 xen=yes
2217 elif
2218 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002219#undef XC_WANT_COMPAT_DEVICEMODEL_API
2220#define __XEN_TOOLS__
2221#include <xendevicemodel.h>
2222int main(void) {
2223 xendevicemodel_handle *xd;
2224
2225 xd = xendevicemodel_open(0, 0);
2226 xendevicemodel_close(xd);
2227
2228 return 0;
2229}
2230EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002231 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2232 then
2233 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2234 xen_ctrl_version=40900
2235 xen=yes
2236 elif
2237 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002238/*
2239 * If we have stable libs the we don't want the libxc compat
2240 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002241 *
2242 * Also, check if xengnttab_grant_copy_segment_t is defined and
2243 * grant copy operation is implemented.
2244 */
2245#undef XC_WANT_COMPAT_EVTCHN_API
2246#undef XC_WANT_COMPAT_GNTTAB_API
2247#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2248#include <xenctrl.h>
2249#include <xenstore.h>
2250#include <xenevtchn.h>
2251#include <xengnttab.h>
2252#include <xenforeignmemory.h>
2253#include <stdint.h>
2254#include <xen/hvm/hvm_info_table.h>
2255#if !defined(HVM_MAX_VCPUS)
2256# error HVM_MAX_VCPUS not defined
2257#endif
2258int main(void) {
2259 xc_interface *xc = NULL;
2260 xenforeignmemory_handle *xfmem;
2261 xenevtchn_handle *xe;
2262 xengnttab_handle *xg;
2263 xen_domain_handle_t handle;
2264 xengnttab_grant_copy_segment_t* seg = NULL;
2265
2266 xs_daemon_open();
2267
2268 xc = xc_interface_open(0, 0, 0);
2269 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2270 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2271 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2272 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2273 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2274
2275 xfmem = xenforeignmemory_open(0, 0);
2276 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2277
2278 xe = xenevtchn_open(0, 0);
2279 xenevtchn_fd(xe);
2280
2281 xg = xengnttab_open(0, 0);
2282 xengnttab_grant_copy(xg, 0, seg);
2283
2284 return 0;
2285}
2286EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002287 compile_prog "" "$xen_libs $xen_stable_libs"
2288 then
2289 xen_ctrl_version=40800
2290 xen=yes
2291 elif
2292 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002293/*
2294 * If we have stable libs the we don't want the libxc compat
2295 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002296 */
2297#undef XC_WANT_COMPAT_EVTCHN_API
2298#undef XC_WANT_COMPAT_GNTTAB_API
2299#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2300#include <xenctrl.h>
2301#include <xenstore.h>
2302#include <xenevtchn.h>
2303#include <xengnttab.h>
2304#include <xenforeignmemory.h>
2305#include <stdint.h>
2306#include <xen/hvm/hvm_info_table.h>
2307#if !defined(HVM_MAX_VCPUS)
2308# error HVM_MAX_VCPUS not defined
2309#endif
2310int main(void) {
2311 xc_interface *xc = NULL;
2312 xenforeignmemory_handle *xfmem;
2313 xenevtchn_handle *xe;
2314 xengnttab_handle *xg;
2315 xen_domain_handle_t handle;
2316
2317 xs_daemon_open();
2318
2319 xc = xc_interface_open(0, 0, 0);
2320 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2321 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2322 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2323 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2324 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2325
2326 xfmem = xenforeignmemory_open(0, 0);
2327 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2328
2329 xe = xenevtchn_open(0, 0);
2330 xenevtchn_fd(xe);
2331
2332 xg = xengnttab_open(0, 0);
2333 xengnttab_map_grant_ref(xg, 0, 0, 0);
2334
2335 return 0;
2336}
2337EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002338 compile_prog "" "$xen_libs $xen_stable_libs"
2339 then
2340 xen_ctrl_version=40701
2341 xen=yes
2342 elif
2343 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002344#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002345#include <stdint.h>
2346int main(void) {
2347 xc_interface *xc = NULL;
2348 xen_domain_handle_t handle;
2349 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2350 return 0;
2351}
2352EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002353 compile_prog "" "$xen_libs"
2354 then
2355 xen_ctrl_version=40700
2356 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002357
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002358 # Xen 4.6
2359 elif
2360 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002361#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002362#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002363#include <stdint.h>
2364#include <xen/hvm/hvm_info_table.h>
2365#if !defined(HVM_MAX_VCPUS)
2366# error HVM_MAX_VCPUS not defined
2367#endif
2368int main(void) {
2369 xc_interface *xc;
2370 xs_daemon_open();
2371 xc = xc_interface_open(0, 0, 0);
2372 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2373 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002374 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002375 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002376 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002377 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002378 return 0;
2379}
2380EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002381 compile_prog "" "$xen_libs"
2382 then
2383 xen_ctrl_version=40600
2384 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002385
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002386 # Xen 4.5
2387 elif
2388 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002389#include <xenctrl.h>
2390#include <xenstore.h>
2391#include <stdint.h>
2392#include <xen/hvm/hvm_info_table.h>
2393#if !defined(HVM_MAX_VCPUS)
2394# error HVM_MAX_VCPUS not defined
2395#endif
2396int main(void) {
2397 xc_interface *xc;
2398 xs_daemon_open();
2399 xc = xc_interface_open(0, 0, 0);
2400 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2401 xc_gnttab_open(NULL, 0);
2402 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2403 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002404 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2405 return 0;
2406}
2407EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002408 compile_prog "" "$xen_libs"
2409 then
2410 xen_ctrl_version=40500
2411 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002412
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002413 elif
2414 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002415#include <xenctrl.h>
2416#include <xenstore.h>
2417#include <stdint.h>
2418#include <xen/hvm/hvm_info_table.h>
2419#if !defined(HVM_MAX_VCPUS)
2420# error HVM_MAX_VCPUS not defined
2421#endif
2422int main(void) {
2423 xc_interface *xc;
2424 xs_daemon_open();
2425 xc = xc_interface_open(0, 0, 0);
2426 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2427 xc_gnttab_open(NULL, 0);
2428 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2429 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002430 return 0;
2431}
2432EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002433 compile_prog "" "$xen_libs"
2434 then
2435 xen_ctrl_version=40200
2436 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002437
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002438 else
2439 if test "$xen" = "yes" ; then
2440 feature_not_found "xen (unsupported version)" \
2441 "Install a supported xen (xen 4.2 or newer)"
2442 fi
2443 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002444 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002445
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002446 if test "$xen" = yes; then
2447 if test $xen_ctrl_version -ge 40701 ; then
2448 libs_softmmu="$xen_stable_libs $libs_softmmu"
2449 fi
2450 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002451 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002452 fi
aliguorie37630c2009-04-22 15:19:10 +00002453fi
2454
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002455if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002456 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002457 xen_pci_passthrough=yes
2458 else
2459 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002460 error_exit "User requested feature Xen PCI Passthrough" \
2461 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002462 fi
2463 xen_pci_passthrough=no
2464 fi
2465fi
2466
Ian Campbell64a7ad62016-01-15 13:23:44 +00002467if test "$xen_pv_domain_build" = "yes" &&
2468 test "$xen" != "yes"; then
2469 error_exit "User requested Xen PV domain builder support" \
2470 "which requires Xen support."
2471fi
2472
aliguorie37630c2009-04-22 15:19:10 +00002473##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002474# Windows Hypervisor Platform accelerator (WHPX) check
2475if test "$whpx" != "no" ; then
2476 cat > $TMPC << EOF
2477#include <windows.h>
2478#include <winhvplatform.h>
2479#include <winhvemulation.h>
2480int main(void) {
2481 WHV_CAPABILITY whpx_cap;
2482 WHvGetCapability(WHvCapabilityCodeFeatures, &whpx_cap, sizeof(whpx_cap));
2483 return 0;
2484}
2485EOF
2486 if compile_prog "" "-lwinhvplatform -lwinhvemulation" ; then
2487 libs_softmmu="$libs_softmmu -lwinhvplatform -lwinhvemulation"
2488 whpx="yes"
2489 else
2490 if test "$whpx" = "yes"; then
2491 feature_not_found "winhvplatform" "winhvemulation is not installed"
2492 fi
2493 whpx="no"
2494 fi
2495fi
2496
2497##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002498# Sparse probe
2499if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002500 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002501 sparse=yes
2502 else
2503 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002504 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002505 fi
2506 sparse=no
2507 fi
2508fi
2509
2510##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002511# X11 probe
2512x11_cflags=
2513x11_libs=-lX11
2514if $pkg_config --exists "x11"; then
Stefan Weil89138852016-05-16 15:10:20 +02002515 x11_cflags=$($pkg_config --cflags x11)
2516 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002517fi
2518
2519##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002520# GTK probe
2521
Stefan Weil9e04c682014-05-17 16:29:18 +02002522if test "$gtkabi" = ""; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002523 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2524 # Use 2.0 as a fallback if that is available.
2525 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002526 gtkabi=3.0
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002527 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002528 gtkabi=2.0
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002529 else
2530 gtkabi=3.0
Stefan Weil9e04c682014-05-17 16:29:18 +02002531 fi
2532fi
2533
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002534if test "$gtk" != "no"; then
Daniel P. Berrange528de902013-02-25 15:20:44 +00002535 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002536 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002537 if test "$gtkabi" = "3.0" ; then
2538 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002539 else
2540 gtkversion="2.18.0"
2541 fi
2542 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002543 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2544 gtk_libs=$($pkg_config --libs $gtkpackage)
2545 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002546 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Jeremy Whitef676c672015-01-09 13:08:49 -06002547 gtk_cflags="$gtk_cflags $x11_cflags"
2548 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002549 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002550 libs_softmmu="$gtk_libs $libs_softmmu"
2551 gtk="yes"
2552 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002553 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002554 else
2555 gtk="no"
2556 fi
2557fi
2558
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002559
2560##########################################
2561# GNUTLS probe
2562
Peter Maydell37371292015-07-24 18:28:08 +01002563gnutls_works() {
2564 # Unfortunately some distros have bad pkg-config information for gnutls
2565 # such that it claims to exist but you get a compiler error if you try
2566 # to use the options returned by --libs. Specifically, Ubuntu for --static
2567 # builds doesn't work:
2568 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2569 #
2570 # So sanity check the cflags/libs before assuming gnutls can be used.
2571 if ! $pkg_config --exists "gnutls"; then
2572 return 1
2573 fi
2574
2575 write_c_skeleton
2576 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2577}
2578
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002579gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002580gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002581if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002582 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002583 gnutls_cflags=$($pkg_config --cflags gnutls)
2584 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002585 libs_softmmu="$gnutls_libs $libs_softmmu"
2586 libs_tools="$gnutls_libs $libs_tools"
2587 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2588 gnutls="yes"
2589
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002590 # gnutls_rnd requires >= 2.11.0
2591 if $pkg_config --exists "gnutls >= 2.11.0"; then
2592 gnutls_rnd="yes"
2593 else
2594 gnutls_rnd="no"
2595 fi
2596
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002597 if $pkg_config --exists 'gnutls >= 3.0'; then
2598 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002599 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002600 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002601 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002602 *gcrypt*)
2603 gnutls_gcrypt=yes
2604 gnutls_nettle=no
2605 ;;
2606 *nettle*)
2607 gnutls_gcrypt=no
2608 gnutls_nettle=yes
2609 ;;
2610 *)
2611 gnutls_gcrypt=yes
2612 gnutls_nettle=no
2613 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002614 esac
2615 else
2616 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002617 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002618 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002619 elif test "$gnutls" = "yes"; then
2620 feature_not_found "gnutls" "Install gnutls devel"
2621 else
2622 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002623 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002624 fi
2625else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002626 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002627fi
2628
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002629
2630# If user didn't give a --disable/enable-gcrypt flag,
2631# then mark as disabled if user requested nettle
2632# explicitly, or if gnutls links to nettle
2633if test -z "$gcrypt"
2634then
2635 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2636 then
2637 gcrypt="no"
2638 fi
2639fi
2640
2641# If user didn't give a --disable/enable-nettle flag,
2642# then mark as disabled if user requested gcrypt
2643# explicitly, or if gnutls links to gcrypt
2644if test -z "$nettle"
2645then
2646 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2647 then
2648 nettle="no"
2649 fi
2650fi
2651
2652has_libgcrypt_config() {
2653 if ! has "libgcrypt-config"
2654 then
2655 return 1
2656 fi
2657
2658 if test -n "$cross_prefix"
2659 then
Stefan Weil89138852016-05-16 15:10:20 +02002660 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002661 if test "$host-" != $cross_prefix
2662 then
2663 return 1
2664 fi
2665 fi
2666
2667 return 0
2668}
2669
2670if test "$gcrypt" != "no"; then
2671 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002672 gcrypt_cflags=$(libgcrypt-config --cflags)
2673 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002674 # Debian has remove -lgpg-error from libgcrypt-config
2675 # as it "spreads unnecessary dependencies" which in
2676 # turn breaks static builds...
2677 if test "$static" = "yes"
2678 then
2679 gcrypt_libs="$gcrypt_libs -lgpg-error"
2680 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002681 libs_softmmu="$gcrypt_libs $libs_softmmu"
2682 libs_tools="$gcrypt_libs $libs_tools"
2683 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002684 gcrypt="yes"
2685 if test -z "$nettle"; then
2686 nettle="no"
2687 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002688
2689 cat > $TMPC << EOF
2690#include <gcrypt.h>
2691int main(void) {
2692 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2693 GCRY_MD_SHA256,
2694 NULL, 0, 0, 0, NULL);
2695 return 0;
2696}
2697EOF
2698 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2699 gcrypt_kdf=yes
2700 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002701
2702 cat > $TMPC << EOF
2703#include <gcrypt.h>
2704int main(void) {
2705 gcry_mac_hd_t handle;
2706 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2707 GCRY_MAC_FLAG_SECURE, NULL);
2708 return 0;
2709}
2710EOF
2711 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2712 gcrypt_hmac=yes
2713 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002714 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002715 if test "$gcrypt" = "yes"; then
2716 feature_not_found "gcrypt" "Install gcrypt devel"
2717 else
2718 gcrypt="no"
2719 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002720 fi
2721fi
2722
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002723
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002724if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002725 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002726 nettle_cflags=$($pkg_config --cflags nettle)
2727 nettle_libs=$($pkg_config --libs nettle)
2728 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002729 libs_softmmu="$nettle_libs $libs_softmmu"
2730 libs_tools="$nettle_libs $libs_tools"
2731 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002732 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002733
2734 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002735#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002736#include <nettle/pbkdf2.h>
2737int main(void) {
2738 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2739 return 0;
2740}
2741EOF
2742 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2743 nettle_kdf=yes
2744 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002745 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002746 if test "$nettle" = "yes"; then
2747 feature_not_found "nettle" "Install nettle devel"
2748 else
2749 nettle="no"
2750 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002751 fi
2752fi
2753
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002754if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2755then
2756 error_exit "Only one of gcrypt & nettle can be enabled"
2757fi
2758
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002759##########################################
2760# libtasn1 - only for the TLS creds/session test suite
2761
2762tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002763tasn1_cflags=""
2764tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002765if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002766 tasn1_cflags=$($pkg_config --cflags libtasn1)
2767 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002768else
2769 tasn1=no
2770fi
2771
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002772
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002773##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002774# getifaddrs (for tests/test-io-channel-socket )
2775
2776have_ifaddrs_h=yes
2777if ! check_include "ifaddrs.h" ; then
2778 have_ifaddrs_h=no
2779fi
2780
2781##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002782# VTE probe
2783
2784if test "$vte" != "no"; then
2785 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002786 vteminversion="0.32.0"
2787 if $pkg_config --exists "vte-2.91"; then
2788 vtepackage="vte-2.91"
2789 else
2790 vtepackage="vte-2.90"
2791 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002792 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002793 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002794 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002795 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002796 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002797 vte_cflags=$($pkg_config --cflags $vtepackage)
2798 vte_libs=$($pkg_config --libs $vtepackage)
2799 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002800 libs_softmmu="$vte_libs $libs_softmmu"
2801 vte="yes"
2802 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002803 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002804 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002805 else
2806 feature_not_found "vte" "Install libvte devel"
2807 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002808 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002809 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002810 fi
2811fi
2812
2813##########################################
bellard11d9f692004-04-02 20:55:59 +00002814# SDL probe
2815
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002816# Look for sdl configuration program (pkg-config or sdl-config). Try
2817# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002818
Cole Robinsonee8466d2016-05-06 14:03:07 -04002819if test "$sdlabi" = ""; then
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002820 if $pkg_config --exists "sdl2"; then
Cole Robinsonee8466d2016-05-06 14:03:07 -04002821 sdlabi=2.0
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002822 elif $pkg_config --exists "sdl"; then
Cole Robinsonee8466d2016-05-06 14:03:07 -04002823 sdlabi=1.2
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002824 else
2825 sdlabi=2.0
Cole Robinsonee8466d2016-05-06 14:03:07 -04002826 fi
2827fi
2828
Dave Airlie47c03742013-12-10 14:05:51 +10002829if test $sdlabi = "2.0"; then
2830 sdl_config=$sdl2_config
2831 sdlname=sdl2
2832 sdlconfigname=sdl2_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002833elif test $sdlabi = "1.2"; then
Dave Airlie47c03742013-12-10 14:05:51 +10002834 sdlname=sdl
2835 sdlconfigname=sdl_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002836else
2837 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002838fi
2839
Stefan Weil89138852016-05-16 15:10:20 +02002840if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
Dave Airlie47c03742013-12-10 14:05:51 +10002841 sdl_config=$sdlconfigname
2842fi
2843
2844if $pkg_config $sdlname --exists; then
2845 sdlconfig="$pkg_config $sdlname"
Stefan Weil89138852016-05-16 15:10:20 +02002846 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002847elif has ${sdl_config}; then
2848 sdlconfig="$sdl_config"
Stefan Weil89138852016-05-16 15:10:20 +02002849 sdlversion=$($sdlconfig --version)
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002850else
2851 if test "$sdl" = "yes" ; then
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002852 feature_not_found "sdl" "Install SDL2-devel"
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002853 fi
2854 sdl=no
Paolo Bonzini9316f802010-01-13 09:52:55 +01002855fi
Scott Wood29e5bad2011-04-08 14:15:50 -05002856if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002857 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2858fi
bellard11d9f692004-04-02 20:55:59 +00002859
Paolo Bonzini9316f802010-01-13 09:52:55 +01002860sdl_too_old=no
Juan Quintelac4198152009-08-12 18:29:53 +02002861if test "$sdl" != "no" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002862 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002863#include <SDL.h>
2864#undef main /* We don't want SDL to override our main() */
2865int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2866EOF
Stefan Weil89138852016-05-16 15:10:20 +02002867 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002868 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002869 if $pkg_config $sdlname --exists; then
2870 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2871 else
2872 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2873 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002874 else
Stefan Weil89138852016-05-16 15:10:20 +02002875 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002876 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002877 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002878 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002879 sdl_too_old=yes
2880 else
Peter Maydella30878e2015-08-14 16:10:52 +01002881 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002882 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002883
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002884 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002885 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002886 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002887 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2888 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002889 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002890 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002891 :
2892 else
2893 sdl=no
2894 fi
2895 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002896 else # sdl not found
2897 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002898 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002899 fi
2900 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002901 fi # sdl compile test
Juan Quintelaa68551b2009-07-27 16:13:09 +02002902fi
bellard11d9f692004-04-02 20:55:59 +00002903
aliguori5368a422009-03-03 17:37:21 +00002904if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002905 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002906#include <SDL.h>
2907#if defined(SDL_VIDEO_DRIVER_X11)
2908#include <X11/XKBlib.h>
2909#else
2910#error No x11 support
2911#endif
2912int main(void) { return 0; }
2913EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002914 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2915 sdl_cflags="$sdl_cflags $x11_cflags"
2916 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02002917 fi
aliguori5368a422009-03-03 17:37:21 +00002918fi
2919
ths8f28f3f2007-01-05 21:25:54 +00002920##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04002921# RDMA needs OpenFabrics libraries
2922if test "$rdma" != "no" ; then
2923 cat > $TMPC <<EOF
2924#include <rdma/rdma_cma.h>
2925int main(void) { return 0; }
2926EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002927 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04002928 if compile_prog "" "$rdma_libs" ; then
2929 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002930 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04002931 else
2932 if test "$rdma" = "yes" ; then
2933 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002934 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04002935 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02002936 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04002937 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2938 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2939 fi
2940 rdma="no"
2941 fi
2942fi
2943
ths8d5d2d42007-08-25 01:37:51 +00002944
2945##########################################
aliguori2f9606b2009-03-06 20:27:28 +00002946# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002947if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02002948 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00002949#include <sasl/sasl.h>
2950#include <stdio.h>
2951int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2952EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02002953 # Assuming Cyrus-SASL installed in /usr prefix
2954 vnc_sasl_cflags=""
2955 vnc_sasl_libs="-lsasl2"
2956 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2957 vnc_sasl=yes
2958 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002959 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02002960 else
2961 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002962 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00002963 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02002964 vnc_sasl=no
2965 fi
aliguori2f9606b2009-03-06 20:27:28 +00002966fi
2967
2968##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002969# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002970if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002971cat > $TMPC <<EOF
2972#include <stdio.h>
2973#include <jpeglib.h>
2974int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2975EOF
2976 vnc_jpeg_cflags=""
2977 vnc_jpeg_libs="-ljpeg"
2978 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2979 vnc_jpeg=yes
2980 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002981 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002982 else
2983 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002984 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002985 fi
2986 vnc_jpeg=no
2987 fi
2988fi
2989
2990##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02002991# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002992if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02002993cat > $TMPC <<EOF
2994//#include <stdio.h>
2995#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05002996#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02002997int main(void) {
2998 png_structp png_ptr;
2999 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003000 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003001}
3002EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003003 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003004 vnc_png_cflags=$($pkg_config libpng --cflags)
3005 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003006 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003007 vnc_png_cflags=""
3008 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003009 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003010 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3011 vnc_png=yes
3012 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003013 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003014 else
3015 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003016 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003017 fi
3018 vnc_png=no
3019 fi
3020fi
3021
3022##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003023# xkbcommon probe
3024if test "$xkbcommon" != "no" ; then
3025 if $pkg_config xkbcommon --exists; then
3026 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3027 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3028 xkbcommon=yes
3029 else
3030 if test "$xkbcommon" = "yes" ; then
3031 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3032 fi
3033 xkbcommon=no
3034 fi
3035fi
3036
3037##########################################
aliguori76655d62009-03-06 20:27:37 +00003038# fnmatch() probe, used for ACL routines
3039fnmatch="no"
3040cat > $TMPC << EOF
3041#include <fnmatch.h>
3042int main(void)
3043{
3044 fnmatch("foo", "foo", 0);
3045 return 0;
3046}
3047EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003048if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003049 fnmatch="yes"
3050fi
3051
3052##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003053# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003054if test "$xfs" != "no" ; then
3055 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003056#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003057#include <xfs/xfs.h>
3058int main(void)
3059{
3060 xfsctl(NULL, 0, 0, NULL);
3061 return 0;
3062}
3063EOF
3064 if compile_prog "" "" ; then
3065 xfs="yes"
3066 else
3067 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003068 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003069 fi
3070 xfs=no
3071 fi
3072fi
3073
3074##########################################
ths8a16d272008-07-19 09:56:24 +00003075# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003076if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003077 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003078 cat > $TMPC << EOF
3079#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003080int main(void)
3081{
3082 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003083 char s[] = "";
3084 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003085 return 0;
3086}
ths8a16d272008-07-19 09:56:24 +00003087EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003088 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003089 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003090 else
3091 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003092 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003093 fi
3094 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003095 fi
ths8a16d272008-07-19 09:56:24 +00003096fi
3097
3098##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003099# netmap support probe
3100# Apart from looking for netmap headers, we make sure that the host API version
3101# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3102# a minor/major version number. Minor new features will be marked with values up
3103# to 15, and if something happens that requires a change to the backend we will
3104# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003105if test "$netmap" != "no" ; then
3106 cat > $TMPC << EOF
3107#include <inttypes.h>
3108#include <net/if.h>
3109#include <net/netmap.h>
3110#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003111#if (NETMAP_API < 11) || (NETMAP_API > 15)
3112#error
3113#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003114int main(void) { return 0; }
3115EOF
3116 if compile_prog "" "" ; then
3117 netmap=yes
3118 else
3119 if test "$netmap" = "yes" ; then
3120 feature_not_found "netmap"
3121 fi
3122 netmap=no
3123 fi
3124fi
3125
3126##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003127# libcap-ng library probe
3128if test "$cap_ng" != "no" ; then
3129 cap_libs="-lcap-ng"
3130 cat > $TMPC << EOF
3131#include <cap-ng.h>
3132int main(void)
3133{
3134 capng_capability_to_name(CAPNG_EFFECTIVE);
3135 return 0;
3136}
3137EOF
3138 if compile_prog "" "$cap_libs" ; then
3139 cap_ng=yes
3140 libs_tools="$cap_libs $libs_tools"
3141 else
3142 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003143 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003144 fi
3145 cap_ng=no
3146 fi
3147fi
3148
3149##########################################
malcc2de5c92008-06-28 19:13:06 +00003150# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003151
malcc2de5c92008-06-28 19:13:06 +00003152audio_drv_probe()
3153{
3154 drv=$1
3155 hdr=$2
3156 lib=$3
3157 exp=$4
3158 cfl=$5
3159 cat > $TMPC << EOF
3160#include <$hdr>
3161int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003162EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003163 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003164 :
3165 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003166 error_exit "$drv check failed" \
3167 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003168 fi
3169}
3170
Stefan Weil89138852016-05-16 15:10:20 +02003171audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003172for drv in $audio_drv_list; do
3173 case $drv in
3174 alsa)
3175 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003176 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003177 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003178 ;;
3179
malcb8e59f12008-07-02 21:03:08 +00003180 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003181 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3182 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003183 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003184 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003185 ;;
3186
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003187 sdl)
3188 if test "$sdl" = "no"; then
3189 error_exit "sdl not found or disabled, can not use sdl audio driver"
3190 fi
3191 ;;
3192
Juan Quintela997e6902009-08-03 14:46:29 +02003193 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003194 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003195 ;;
3196
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003197 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003198 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003199 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003200 ;;
3201
3202 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003203 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003204 ;;
3205
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003206 wav)
3207 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003208 ;;
3209
malce4c63a62008-07-19 16:15:16 +00003210 *)
malc1c9b2a52008-07-19 16:57:30 +00003211 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003212 error_exit "Unknown driver '$drv' selected" \
3213 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003214 }
3215 ;;
malcc2de5c92008-06-28 19:13:06 +00003216 esac
3217done
ths8f28f3f2007-01-05 21:25:54 +00003218
balrog4d3b6f62008-02-10 16:33:14 +00003219##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003220# BrlAPI probe
3221
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003222if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003223 brlapi_libs="-lbrlapi"
3224 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003225#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003226#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003227int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3228EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003229 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003230 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003231 else
3232 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003233 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003234 fi
3235 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003236 fi
3237fi
aurel322e4d9fb2008-04-08 06:01:02 +00003238
3239##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003240# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003241if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003242 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003243 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3244 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003245 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003246 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003247 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003248 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003249 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003250 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003251#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003252#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003253#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003254int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003255 wchar_t wch = L'w';
3256 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003257 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003258 addwstr(L"wide chars\n");
3259 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003260 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003261 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003262}
balrog4d3b6f62008-02-10 16:33:14 +00003263EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003264 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003265 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003266 # Make sure we get the wide character prototypes
3267 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003268 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003269 for curses_lib in $curses_lib_list; do
3270 unset IFS
3271 if compile_prog "$curses_inc" "$curses_lib" ; then
3272 curses_found=yes
3273 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3274 libs_softmmu="$curses_lib $libs_softmmu"
3275 break
3276 fi
3277 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003278 if test "$curses_found" = yes ; then
3279 break
3280 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003281 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003282 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003283 if test "$curses_found" = "yes" ; then
3284 curses=yes
3285 else
3286 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003287 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003288 fi
3289 curses=no
3290 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003291fi
balrog4d3b6f62008-02-10 16:33:14 +00003292
blueswir1414f0da2008-08-15 18:20:52 +00003293##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003294# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003295if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003296 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003297 curlconfig="$pkg_config libcurl"
3298 else
3299 curlconfig=curl-config
3300 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003301 cat > $TMPC << EOF
3302#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003303int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003304EOF
Stefan Weil89138852016-05-16 15:10:20 +02003305 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3306 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003307 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003308 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003309 else
3310 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003311 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003312 fi
3313 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003314 fi
3315fi # test "$curl"
3316
3317##########################################
balrogfb599c92008-09-28 23:49:55 +00003318# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003319if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003320 cat > $TMPC << EOF
3321#include <bluetooth/bluetooth.h>
3322int main(void) { return bt_error(0); }
3323EOF
Stefan Weil89138852016-05-16 15:10:20 +02003324 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3325 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003326 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003327 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003328 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003329 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003330 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003331 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003332 fi
balroge820e3f2008-09-30 02:27:44 +00003333 bluez="no"
3334 fi
balrogfb599c92008-09-28 23:49:55 +00003335fi
3336
3337##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003338# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003339
Peter Maydellad04d8c2017-04-03 14:04:15 +01003340if test "$mingw32" = yes; then
3341 glib_req_ver=2.30
3342else
3343 glib_req_ver=2.22
3344fi
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003345glib_modules=gthread-2.0
3346if test "$modules" = yes; then
3347 glib_modules="$glib_modules gmodule-2.0"
3348fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003349
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003350# This workaround is required due to a bug in pkg-config file for glib as it
3351# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3352
3353if test "$static" = yes -a "$mingw32" = yes; then
3354 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3355fi
3356
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003357for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003358 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003359 glib_cflags=$($pkg_config --cflags $i)
3360 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003361 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003362 LIBS="$glib_libs $LIBS"
3363 libs_qga="$glib_libs $libs_qga"
3364 else
3365 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3366 fi
3367done
3368
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003369# Sanity check that the current size_t matches the
3370# size that glib thinks it should be. This catches
3371# problems on multi-arch where people try to build
3372# 32-bit QEMU while pointing at 64-bit glib headers
3373cat > $TMPC <<EOF
3374#include <glib.h>
3375#include <unistd.h>
3376
3377#define QEMU_BUILD_BUG_ON(x) \
3378 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3379
3380int main(void) {
3381 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3382 return 0;
3383}
3384EOF
3385
Stefan Weil5919e032016-04-28 23:33:41 +02003386if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003387 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3388 "You probably need to set PKG_CONFIG_LIBDIR"\
3389 "to point to the right pkg-config files for your"\
3390 "build target"
3391fi
3392
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003393# g_test_trap_subprocess added in 2.38. Used by some tests.
3394glib_subprocess=yes
Marc-André Lureaua0492232017-01-04 21:57:22 +01003395if ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003396 glib_subprocess=no
3397fi
3398
John Snowbbbf2e02015-03-25 18:57:38 -04003399# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3400cat > $TMPC << EOF
3401#include <glib.h>
3402int main(void) { return 0; }
3403EOF
3404if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3405 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3406 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3407 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3408 fi
3409fi
3410
Fam Zhenge26110c2014-02-10 14:48:57 +08003411##########################################
3412# SHA command probe for modules
3413if test "$modules" = yes; then
3414 shacmd_probe="sha1sum sha1 shasum"
3415 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003416 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003417 shacmd="$c"
3418 break
3419 fi
3420 done
3421 if test "$shacmd" = ""; then
3422 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3423 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003424fi
3425
3426##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003427# pixman support probe
3428
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003429if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003430 pixman_cflags=
3431 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003432elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003433 pixman_cflags=$($pkg_config --cflags pixman-1)
3434 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003435else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003436 error_exit "pixman >= 0.21.8 not present." \
3437 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003438fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003439
3440##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003441# libmpathpersist probe
3442
3443if test "$mpath" != "no" ; then
3444 cat > $TMPC <<EOF
3445#include <libudev.h>
3446#include <mpath_persist.h>
3447unsigned mpath_mx_alloc_len = 1024;
3448int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003449static struct config *multipath_conf;
3450extern struct udev *udev;
3451extern struct config *get_multipath_config(void);
3452extern void put_multipath_config(struct config *conf);
3453struct udev *udev;
3454struct config *get_multipath_config(void) { return multipath_conf; }
3455void put_multipath_config(struct config *conf) { }
3456
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003457int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003458 udev = udev_new();
3459 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003460 return 0;
3461}
3462EOF
3463 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3464 mpathpersist=yes
3465 else
3466 mpathpersist=no
3467 fi
3468else
3469 mpathpersist=no
3470fi
3471
3472##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303473# libcap probe
3474
3475if test "$cap" != "no" ; then
3476 cat > $TMPC <<EOF
3477#include <stdio.h>
3478#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003479int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303480EOF
3481 if compile_prog "" "-lcap" ; then
3482 cap=yes
3483 else
3484 cap=no
3485 fi
3486fi
3487
3488##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003489# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003490PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003491
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003492pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003493cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003494#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003495static void *f(void *p) { return NULL; }
3496int main(void) {
3497 pthread_t thread;
3498 pthread_create(&thread, 0, f, 0);
3499 return 0;
3500}
blueswir1414f0da2008-08-15 18:20:52 +00003501EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003502if compile_prog "" "" ; then
3503 pthread=yes
3504else
3505 for pthread_lib in $PTHREADLIBS_LIST; do
3506 if compile_prog "" "$pthread_lib" ; then
3507 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003508 found=no
3509 for lib_entry in $LIBS; do
3510 if test "$lib_entry" = "$pthread_lib"; then
3511 found=yes
3512 break
3513 fi
3514 done
3515 if test "$found" = "no"; then
3516 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003517 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003518 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003519 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003520 break
3521 fi
3522 done
3523fi
blueswir1414f0da2008-08-15 18:20:52 +00003524
Anthony Liguori4617e592009-08-25 17:21:56 -05003525if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003526 error_exit "pthread check failed" \
3527 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003528fi
3529
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003530# check for pthread_setname_np
3531pthread_setname_np=no
3532cat > $TMPC << EOF
3533#include <pthread.h>
3534
3535static void *f(void *p) { return NULL; }
3536int main(void)
3537{
3538 pthread_t thread;
3539 pthread_create(&thread, 0, f, 0);
3540 pthread_setname_np(thread, "QEMU");
3541 return 0;
3542}
3543EOF
3544if compile_prog "" "$pthread_lib" ; then
3545 pthread_setname_np=yes
3546fi
3547
aliguoribf9298b2008-12-05 20:05:26 +00003548##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003549# rbd probe
3550if test "$rbd" != "no" ; then
3551 cat > $TMPC <<EOF
3552#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003553#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003554int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003555 rados_t cluster;
3556 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003557 return 0;
3558}
3559EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003560 rbd_libs="-lrbd -lrados"
3561 if compile_prog "" "$rbd_libs" ; then
3562 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003563 else
3564 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003565 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003566 fi
3567 rbd=no
3568 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003569fi
3570
3571##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003572# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003573min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003574if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003575 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003576 libssh2_cflags=$($pkg_config libssh2 --cflags)
3577 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003578 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003579 else
3580 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003581 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003582 fi
3583 libssh2=no
3584 fi
3585fi
3586
3587##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003588# libssh2_sftp_fsync probe
3589
3590if test "$libssh2" = "yes"; then
3591 cat > $TMPC <<EOF
3592#include <stdio.h>
3593#include <libssh2.h>
3594#include <libssh2_sftp.h>
3595int main(void) {
3596 LIBSSH2_SESSION *session;
3597 LIBSSH2_SFTP *sftp;
3598 LIBSSH2_SFTP_HANDLE *sftp_handle;
3599 session = libssh2_session_init ();
3600 sftp = libssh2_sftp_init (session);
3601 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3602 libssh2_sftp_fsync (sftp_handle);
3603 return 0;
3604}
3605EOF
3606 # libssh2_cflags/libssh2_libs defined in previous test.
3607 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3608 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3609 fi
3610fi
3611
3612##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003613# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003614
3615if test "$linux_aio" != "no" ; then
3616 cat > $TMPC <<EOF
3617#include <libaio.h>
3618#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003619#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003620int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3621EOF
3622 if compile_prog "" "-laio" ; then
3623 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003624 else
3625 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003626 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003627 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003628 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003629 fi
3630fi
3631
3632##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003633# TPM passthrough is only on x86 Linux
3634
3635if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3636 tpm_passthrough=$tpm
3637else
3638 tpm_passthrough=no
3639fi
3640
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003641# TPM emulator is for all posix systems
3642if test "$mingw32" != "yes"; then
3643 tpm_emulator=$tpm
3644else
3645 tpm_emulator=no
3646fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003647##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003648# attr probe
3649
3650if test "$attr" != "no" ; then
3651 cat > $TMPC <<EOF
3652#include <stdio.h>
3653#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003654#ifdef CONFIG_LIBATTR
3655#include <attr/xattr.h>
3656#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003657#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003658#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003659int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3660EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003661 if compile_prog "" "" ; then
3662 attr=yes
3663 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003664 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003665 attr=yes
3666 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003667 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003668 else
3669 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003670 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003671 fi
3672 attr=no
3673 fi
3674fi
3675
3676##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003677# iovec probe
3678cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003679#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003680#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003681#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003682int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003683EOF
3684iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003685if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003686 iovec=yes
3687fi
3688
aurel32f652e6a2008-12-16 10:43:48 +00003689##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003690# preadv probe
3691cat > $TMPC <<EOF
3692#include <sys/types.h>
3693#include <sys/uio.h>
3694#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003695int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003696EOF
3697preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003698if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003699 preadv=yes
3700fi
3701
3702##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003703# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003704# fdt support is mandatory for at least some target architectures,
3705# so insist on it if we're building those system emulators.
3706fdt_required=no
3707for target in $target_list; do
3708 case $target in
Paul Burtondf1d8a12016-09-08 15:51:58 +01003709 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003710 fdt_required=yes
3711 ;;
3712 esac
3713done
3714
3715if test "$fdt_required" = "yes"; then
3716 if test "$fdt" = "no"; then
3717 error_exit "fdt disabled but some requested targets require it." \
3718 "You can turn off fdt only if you also disable all the system emulation" \
3719 "targets which need it (by specifying a cut down --target-list)."
3720 fi
3721 fdt=yes
3722fi
3723
Juan Quintela2df87df2009-08-12 18:29:54 +02003724if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003725 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003726 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003727 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003728 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003729#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003730#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003731int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003732EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003733 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003734 # system DTC is good - use it
aurel32f652e6a2008-12-16 10:43:48 +00003735 fdt=yes
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003736 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003737 # have GIT checkout, so activate dtc submodule
3738 if test -e "${source_path}/.git" ; then
3739 git_submodules="${git_submodules} dtc"
3740 fi
3741 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3742 fdt=yes
3743 dtc_internal="yes"
3744 mkdir -p dtc
3745 if [ "$pwd_is_source_path" != "y" ] ; then
3746 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3747 symlink "$source_path/dtc/scripts" "dtc/scripts"
3748 fi
3749 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3750 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3751 elif test "$fdt" = "yes" ; then
3752 # Not a git build & no libfdt found, prompt for system install
3753 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3754 "Please install the DTC (libfdt) devel package"
3755 else
3756 # don't have and don't want
3757 fdt_libs=
3758 fdt=no
3759 fi
aurel32f652e6a2008-12-16 10:43:48 +00003760 fi
3761fi
3762
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003763libs_softmmu="$libs_softmmu $fdt_libs"
3764
Michael Walle20ff0752011-03-07 23:32:39 +01003765##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003766# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003767
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003768if test "$opengl" != "no" ; then
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003769 opengl_pkgs="epoxy libdrm gbm"
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003770 if $pkg_config $opengl_pkgs x11; then
Jeremy Whitef676c672015-01-09 13:08:49 -06003771 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3772 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003773 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003774 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3775 gtk_gl="yes"
3776 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003777 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003778 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003779 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003780 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003781 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003782 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003783 opengl_libs=""
3784 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003785 fi
3786fi
3787
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003788if test "$opengl" = "yes"; then
3789 cat > $TMPC << EOF
3790#include <epoxy/egl.h>
3791#ifndef EGL_MESA_image_dma_buf_export
3792# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3793#endif
3794int main(void) { return 0; }
3795EOF
3796 if compile_prog "" "" ; then
3797 opengl_dmabuf=yes
3798 fi
3799fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003800
Klim Kireeved279a02018-01-12 12:01:19 +03003801##########################################
3802# libxml2 probe
3803if test "$libxml2" != "no" ; then
3804 if $pkg_config --exists libxml-2.0; then
3805 libxml2="yes"
3806 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3807 libxml2_libs=$($pkg_config --libs libxml-2.0)
3808 else
3809 if test "$libxml2" = "yes"; then
3810 feature_not_found "libxml2" "Install libxml2 devel"
3811 fi
3812 libxml2="no"
3813 fi
3814fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003815
Bharata B Raoeb100392012-09-24 14:42:45 +05303816##########################################
3817# glusterfs probe
3818if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003819 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303820 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003821 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3822 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003823 if $pkg_config --atleast-version=4 glusterfs-api; then
3824 glusterfs_xlator_opt="yes"
3825 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003826 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303827 glusterfs_discard="yes"
3828 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303829 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05303830 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05303831 glusterfs_zerofill="yes"
3832 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303833 else
3834 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003835 feature_not_found "GlusterFS backend support" \
3836 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303837 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303838 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303839 fi
3840fi
3841
aurel3239386ac2009-04-15 19:48:17 +00003842# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003843# emulator. This is done because older glibc versions don't
3844# have syscall stubs for these implemented. In that case we
3845# don't provide them even if kernel supports them.
3846#
3847inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003848cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003849#include <sys/inotify.h>
3850
3851int
3852main(void)
3853{
3854 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003855 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003856}
3857EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003858if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003859 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003860fi
3861
Riku Voipioc05c7a72010-03-26 15:25:11 +00003862inotify1=no
3863cat > $TMPC << EOF
3864#include <sys/inotify.h>
3865
3866int
3867main(void)
3868{
3869 /* try to start inotify */
3870 return inotify_init1(0);
3871}
3872EOF
3873if compile_prog "" "" ; then
3874 inotify1=yes
3875fi
3876
Riku Voipio099d6b02009-05-05 12:10:04 +03003877# check if pipe2 is there
3878pipe2=no
3879cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003880#include <unistd.h>
3881#include <fcntl.h>
3882
3883int main(void)
3884{
3885 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003886 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003887}
3888EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003889if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003890 pipe2=yes
3891fi
3892
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003893# check if accept4 is there
3894accept4=no
3895cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003896#include <sys/socket.h>
3897#include <stddef.h>
3898
3899int main(void)
3900{
3901 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3902 return 0;
3903}
3904EOF
3905if compile_prog "" "" ; then
3906 accept4=yes
3907fi
3908
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303909# check if tee/splice is there. vmsplice was added same time.
3910splice=no
3911cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303912#include <unistd.h>
3913#include <fcntl.h>
3914#include <limits.h>
3915
3916int main(void)
3917{
Stefan Weil66ea0f22011-12-17 09:27:35 +01003918 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303919 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3920 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3921 return 0;
3922}
3923EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003924if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303925 splice=yes
3926fi
3927
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003928##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003929# libnuma probe
3930
3931if test "$numa" != "no" ; then
3932 cat > $TMPC << EOF
3933#include <numa.h>
3934int main(void) { return numa_available(); }
3935EOF
3936
3937 if compile_prog "" "-lnuma" ; then
3938 numa=yes
3939 libs_softmmu="-lnuma $libs_softmmu"
3940 else
3941 if test "$numa" = "yes" ; then
3942 feature_not_found "numa" "install numactl devel"
3943 fi
3944 numa=no
3945 fi
3946fi
3947
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003948if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3949 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3950 exit 1
3951fi
3952
Yang Zhong5a22ab72017-12-20 21:16:46 +08003953# Even if malloc_trim() is available, these non-libc memory allocators
3954# do not support it.
3955if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
3956 if test "$malloc_trim" = "yes" ; then
3957 echo "Disabling malloc_trim with non-libc memory allocator"
3958 fi
3959 malloc_trim="no"
3960fi
3961
3962#######################################
3963# malloc_trim
3964
3965if test "$malloc_trim" != "no" ; then
3966 cat > $TMPC << EOF
3967#include <malloc.h>
3968int main(void) { malloc_trim(0); return 0; }
3969EOF
3970 if compile_prog "" "" ; then
3971 malloc_trim="yes"
3972 else
3973 malloc_trim="no"
3974 fi
3975fi
3976
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003977##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08003978# tcmalloc probe
3979
3980if test "$tcmalloc" = "yes" ; then
3981 cat > $TMPC << EOF
3982#include <stdlib.h>
3983int main(void) { malloc(1); return 0; }
3984EOF
3985
3986 if compile_prog "" "-ltcmalloc" ; then
3987 LIBS="-ltcmalloc $LIBS"
3988 else
3989 feature_not_found "tcmalloc" "install gperftools devel"
3990 fi
3991fi
3992
3993##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003994# jemalloc probe
3995
3996if test "$jemalloc" = "yes" ; then
3997 cat > $TMPC << EOF
3998#include <stdlib.h>
3999int main(void) { malloc(1); return 0; }
4000EOF
4001
4002 if compile_prog "" "-ljemalloc" ; then
4003 LIBS="-ljemalloc $LIBS"
4004 else
4005 feature_not_found "jemalloc" "install jemalloc devel"
4006 fi
4007fi
4008
4009##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004010# signalfd probe
4011signalfd="no"
4012cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004013#include <unistd.h>
4014#include <sys/syscall.h>
4015#include <signal.h>
4016int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4017EOF
4018
4019if compile_prog "" "" ; then
4020 signalfd=yes
4021fi
4022
Riku Voipioc2882b92009-08-12 15:08:24 +03004023# check if eventfd is supported
4024eventfd=no
4025cat > $TMPC << EOF
4026#include <sys/eventfd.h>
4027
4028int main(void)
4029{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004030 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004031}
4032EOF
4033if compile_prog "" "" ; then
4034 eventfd=yes
4035fi
4036
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004037# check if memfd is supported
4038memfd=no
4039cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004040#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004041
4042int main(void)
4043{
4044 return memfd_create("foo", MFD_ALLOW_SEALING);
4045}
4046EOF
4047if compile_prog "" "" ; then
4048 memfd=yes
4049fi
4050
4051
4052
Ulrich Hechtd0927932009-09-17 20:22:14 +03004053# check for fallocate
4054fallocate=no
4055cat > $TMPC << EOF
4056#include <fcntl.h>
4057
4058int main(void)
4059{
4060 fallocate(0, 0, 0, 0);
4061 return 0;
4062}
4063EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004064if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004065 fallocate=yes
4066fi
4067
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004068# check for fallocate hole punching
4069fallocate_punch_hole=no
4070cat > $TMPC << EOF
4071#include <fcntl.h>
4072#include <linux/falloc.h>
4073
4074int main(void)
4075{
4076 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4077 return 0;
4078}
4079EOF
4080if compile_prog "" "" ; then
4081 fallocate_punch_hole=yes
4082fi
4083
Denis V. Lunevb953f072015-01-30 11:42:14 +03004084# check that fallocate supports range zeroing inside the file
4085fallocate_zero_range=no
4086cat > $TMPC << EOF
4087#include <fcntl.h>
4088#include <linux/falloc.h>
4089
4090int main(void)
4091{
4092 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4093 return 0;
4094}
4095EOF
4096if compile_prog "" "" ; then
4097 fallocate_zero_range=yes
4098fi
4099
Kevin Wolfed911432014-09-29 17:12:59 +02004100# check for posix_fallocate
4101posix_fallocate=no
4102cat > $TMPC << EOF
4103#include <fcntl.h>
4104
4105int main(void)
4106{
4107 posix_fallocate(0, 0, 0);
4108 return 0;
4109}
4110EOF
4111if compile_prog "" "" ; then
4112 posix_fallocate=yes
4113fi
4114
Peter Maydellc727f472011-01-06 11:05:10 +00004115# check for sync_file_range
4116sync_file_range=no
4117cat > $TMPC << EOF
4118#include <fcntl.h>
4119
4120int main(void)
4121{
4122 sync_file_range(0, 0, 0, 0);
4123 return 0;
4124}
4125EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004126if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004127 sync_file_range=yes
4128fi
4129
Peter Maydelldace20d2011-01-10 13:11:24 +00004130# check for linux/fiemap.h and FS_IOC_FIEMAP
4131fiemap=no
4132cat > $TMPC << EOF
4133#include <sys/ioctl.h>
4134#include <linux/fs.h>
4135#include <linux/fiemap.h>
4136
4137int main(void)
4138{
4139 ioctl(0, FS_IOC_FIEMAP, 0);
4140 return 0;
4141}
4142EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004143if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004144 fiemap=yes
4145fi
4146
Ulrich Hechtd0927932009-09-17 20:22:14 +03004147# check for dup3
4148dup3=no
4149cat > $TMPC << EOF
4150#include <unistd.h>
4151
4152int main(void)
4153{
4154 dup3(0, 0, 0);
4155 return 0;
4156}
4157EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004158if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004159 dup3=yes
4160fi
4161
Alex Bligh4e0c6522013-08-21 16:02:43 +01004162# check for ppoll support
4163ppoll=no
4164cat > $TMPC << EOF
4165#include <poll.h>
4166
4167int main(void)
4168{
4169 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4170 ppoll(&pfd, 1, 0, 0);
4171 return 0;
4172}
4173EOF
4174if compile_prog "" "" ; then
4175 ppoll=yes
4176fi
4177
Alex Blighcd758dd2013-08-21 16:02:44 +01004178# check for prctl(PR_SET_TIMERSLACK , ... ) support
4179prctl_pr_set_timerslack=no
4180cat > $TMPC << EOF
4181#include <sys/prctl.h>
4182
4183int main(void)
4184{
4185 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4186 return 0;
4187}
4188EOF
4189if compile_prog "" "" ; then
4190 prctl_pr_set_timerslack=yes
4191fi
4192
Peter Maydell3b6edd12011-02-15 18:35:05 +00004193# check for epoll support
4194epoll=no
4195cat > $TMPC << EOF
4196#include <sys/epoll.h>
4197
4198int main(void)
4199{
4200 epoll_create(0);
4201 return 0;
4202}
4203EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004204if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004205 epoll=yes
4206fi
4207
Peter Maydell227f0212016-06-06 19:58:11 +01004208# epoll_create1 is a later addition
4209# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004210epoll_create1=no
4211cat > $TMPC << EOF
4212#include <sys/epoll.h>
4213
4214int main(void)
4215{
Peter Maydell19e83f62011-04-26 16:56:40 +01004216 /* Note that we use epoll_create1 as a value, not as
4217 * a function being called. This is necessary so that on
4218 * old SPARC glibc versions where the function was present in
4219 * the library but not declared in the header file we will
4220 * fail the configure check. (Otherwise we will get a compiler
4221 * warning but not an error, and will proceed to fail the
4222 * qemu compile where we compile with -Werror.)
4223 */
Blue Swirlc075a722012-08-09 20:21:25 +00004224 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004225}
4226EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004227if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004228 epoll_create1=yes
4229fi
4230
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004231# check for sendfile support
4232sendfile=no
4233cat > $TMPC << EOF
4234#include <sys/sendfile.h>
4235
4236int main(void)
4237{
4238 return sendfile(0, 0, 0, 0);
4239}
4240EOF
4241if compile_prog "" "" ; then
4242 sendfile=yes
4243fi
4244
Riku Voipio51834342014-06-22 11:25:42 +01004245# check for timerfd support (glibc 2.8 and newer)
4246timerfd=no
4247cat > $TMPC << EOF
4248#include <sys/timerfd.h>
4249
4250int main(void)
4251{
4252 return(timerfd_create(CLOCK_REALTIME, 0));
4253}
4254EOF
4255if compile_prog "" "" ; then
4256 timerfd=yes
4257fi
4258
Riku Voipio9af5c902014-08-12 15:58:57 +03004259# check for setns and unshare support
4260setns=no
4261cat > $TMPC << EOF
4262#include <sched.h>
4263
4264int main(void)
4265{
4266 int ret;
4267 ret = setns(0, 0);
4268 ret = unshare(0);
4269 return ret;
4270}
4271EOF
4272if compile_prog "" "" ; then
4273 setns=yes
4274fi
4275
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004276# clock_adjtime probe
4277clock_adjtime=no
4278cat > $TMPC <<EOF
4279#include <time.h>
4280
4281int main(void)
4282{
4283 return clock_adjtime(0, 0);
4284}
4285EOF
4286clock_adjtime=no
4287if compile_prog "" "" ; then
4288 clock_adjtime=yes
4289fi
4290
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004291# syncfs probe
4292syncfs=no
4293cat > $TMPC <<EOF
4294#include <unistd.h>
4295
4296int main(void)
4297{
4298 return syncfs(0);
4299}
4300EOF
4301syncfs=no
4302if compile_prog "" "" ; then
4303 syncfs=yes
4304fi
4305
pbrookcc8ae6d2006-04-23 17:57:59 +00004306# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004307if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004308 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004309 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004310 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004311 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004312 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004313 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004314 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004315 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004316fi
4317
Stefan Weilf514f412009-10-11 12:44:07 +02004318# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004319byteswap_h=no
4320cat > $TMPC << EOF
4321#include <byteswap.h>
4322int main(void) { return bswap_32(0); }
4323EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004324if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004325 byteswap_h=yes
4326fi
4327
Stefan Weil75f13592013-01-05 12:17:38 +01004328# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004329bswap_h=no
4330cat > $TMPC << EOF
4331#include <sys/endian.h>
4332#include <sys/types.h>
4333#include <machine/bswap.h>
4334int main(void) { return bswap32(0); }
4335EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004336if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004337 bswap_h=yes
4338fi
4339
aliguorida93a1f2008-12-12 20:02:52 +00004340##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004341# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004342if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004343 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004344 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004345 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4346 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004347 else
4348 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004349 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004350 fi
4351 libiscsi="no"
4352 fi
4353fi
4354
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004355##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004356# Do we need libm
4357cat > $TMPC << EOF
4358#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004359int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004360EOF
4361if compile_prog "" "" ; then
4362 :
4363elif compile_prog "" "-lm" ; then
4364 LIBS="-lm $LIBS"
4365 libs_qga="-lm $libs_qga"
4366else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004367 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004368fi
4369
4370##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004371# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004372# uClibc provides 2 versions of clock_gettime(), one with realtime
4373# support and one without. This means that the clock_gettime() don't
4374# need -lrt. We still need it for timer_create() so we check for this
4375# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004376cat > $TMPC <<EOF
4377#include <signal.h>
4378#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004379int main(void) {
4380 timer_create(CLOCK_REALTIME, NULL, NULL);
4381 return clock_gettime(CLOCK_REALTIME, NULL);
4382}
aliguorida93a1f2008-12-12 20:02:52 +00004383EOF
4384
Juan Quintela52166aa2009-08-03 14:46:03 +02004385if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004386 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004387# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004388elif compile_prog "" "$pthread_lib -lrt" ; then
4389 LIBS="$LIBS -lrt"
4390 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004391fi
4392
Blue Swirl31ff5042009-09-12 12:33:07 +00004393if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004394 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004395 libs_softmmu="-lutil $libs_softmmu"
4396fi
4397
Blue Swirlde5071c2009-09-12 09:58:46 +00004398##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004399# spice probe
4400if test "$spice" != "no" ; then
4401 cat > $TMPC << EOF
4402#include <spice.h>
4403int main(void) { spice_server_new(); return 0; }
4404EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004405 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4406 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004407 if $pkg_config --atleast-version=0.12.0 spice-server && \
4408 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004409 compile_prog "$spice_cflags" "$spice_libs" ; then
4410 spice="yes"
4411 libs_softmmu="$libs_softmmu $spice_libs"
4412 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004413 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4414 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004415 else
4416 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004417 feature_not_found "spice" \
4418 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004419 fi
4420 spice="no"
4421 fi
4422fi
4423
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004424# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004425if test "$smartcard" != "no"; then
4426 if $pkg_config libcacard; then
4427 libcacard_cflags=$($pkg_config --cflags libcacard)
4428 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004429 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004430 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004431 if test "$smartcard" = "yes"; then
4432 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004433 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004434 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004435 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004436fi
4437
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004438# check for libusb
4439if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004440 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004441 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004442 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4443 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004444 else
4445 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004446 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004447 fi
4448 libusb="no"
4449 fi
4450fi
4451
Hans de Goede69354a82011-07-19 11:04:10 +02004452# check for usbredirparser for usb network redirection support
4453if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004454 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004455 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004456 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4457 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004458 else
4459 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004460 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004461 fi
4462 usb_redir="no"
4463 fi
4464fi
4465
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004466##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004467# check if we have VSS SDK headers for win
4468
4469if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4470 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004471 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004472 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4473 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004474 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004475 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4476 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004477 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004478 esac
4479 cat > $TMPC << EOF
4480#define __MIDL_user_allocate_free_DEFINED__
4481#include <inc/win2003/vss.h>
4482int main(void) { return VSS_CTX_BACKUP; }
4483EOF
4484 if compile_prog "$vss_win32_include" "" ; then
4485 guest_agent_with_vss="yes"
4486 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004487 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004488 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004489 else
4490 if test "$vss_win32_sdk" != "" ; then
4491 echo "ERROR: Please download and install Microsoft VSS SDK:"
4492 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4493 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4494 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4495 echo "ERROR: The headers are extracted in the directory \`inc'."
4496 feature_not_found "VSS support"
4497 fi
4498 guest_agent_with_vss="no"
4499 fi
4500fi
4501
4502##########################################
4503# lookup Windows platform SDK (if not specified)
4504# The SDK is needed only to build .tlb (type library) file of guest agent
4505# VSS provider from the source. It is usually unnecessary because the
4506# pre-compiled .tlb file is included.
4507
4508if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4509 if test -z "$win_sdk"; then
4510 programfiles="$PROGRAMFILES"
4511 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4512 if test -n "$programfiles"; then
4513 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4514 else
4515 feature_not_found "Windows SDK"
4516 fi
4517 elif test "$win_sdk" = "no"; then
4518 win_sdk=""
4519 fi
4520fi
4521
4522##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004523# check if mingw environment provides a recent ntddscsi.h
4524if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4525 cat > $TMPC << EOF
4526#include <windows.h>
4527#include <ntddscsi.h>
4528int main(void) {
4529#if !defined(IOCTL_SCSI_GET_ADDRESS)
4530#error Missing required ioctl definitions
4531#endif
4532 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4533 return addr.Lun;
4534}
4535EOF
4536 if compile_prog "" "" ; then
4537 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004538 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004539 fi
4540fi
4541
4542##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004543# virgl renderer probe
4544
4545if test "$virglrenderer" != "no" ; then
4546 cat > $TMPC << EOF
4547#include <virglrenderer.h>
4548int main(void) { virgl_renderer_poll(); return 0; }
4549EOF
4550 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4551 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4552 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4553 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4554 virglrenderer="yes"
4555 else
4556 if test "$virglrenderer" = "yes" ; then
4557 feature_not_found "virglrenderer"
4558 fi
4559 virglrenderer="no"
4560 fi
4561fi
4562
4563##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004564# capstone
4565
Richard Hendersone219c492017-09-28 09:01:23 -07004566case "$capstone" in
4567 "" | yes)
4568 if $pkg_config capstone; then
4569 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004570 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004571 capstone=git
4572 elif test -e "${source_path}/capstone/Makefile" ; then
4573 capstone=internal
4574 elif test -z "$capstone" ; then
4575 capstone=no
4576 else
4577 feature_not_found "capstone" "Install capstone devel or git submodule"
4578 fi
4579 ;;
4580
4581 system)
4582 if ! $pkg_config capstone; then
4583 feature_not_found "capstone" "Install capstone devel"
4584 fi
4585 ;;
4586esac
4587
4588case "$capstone" in
4589 git | internal)
4590 if test "$capstone" = git; then
4591 git_submodules="${git_submodules} capstone"
4592 fi
4593 mkdir -p capstone
4594 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4595 if test "$mingw32" = "yes"; then
4596 LIBCAPSTONE=capstone.lib
4597 else
4598 LIBCAPSTONE=libcapstone.a
4599 fi
4600 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4601 ;;
4602
4603 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004604 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4605 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004606 ;;
4607
4608 no)
4609 ;;
4610 *)
4611 error_exit "Unknown state for capstone: $capstone"
4612 ;;
4613esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004614
4615##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004616# check if we have fdatasync
4617
4618fdatasync=no
4619cat > $TMPC << EOF
4620#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004621int main(void) {
4622#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4623return fdatasync(0);
4624#else
Stefan Weile172fe12012-04-06 21:33:20 +02004625#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004626#endif
4627}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004628EOF
4629if compile_prog "" "" ; then
4630 fdatasync=yes
4631fi
4632
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004633##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004634# check if we have madvise
4635
4636madvise=no
4637cat > $TMPC << EOF
4638#include <sys/types.h>
4639#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004640#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004641int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4642EOF
4643if compile_prog "" "" ; then
4644 madvise=yes
4645fi
4646
4647##########################################
4648# check if we have posix_madvise
4649
4650posix_madvise=no
4651cat > $TMPC << EOF
4652#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004653#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004654int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4655EOF
4656if compile_prog "" "" ; then
4657 posix_madvise=yes
4658fi
4659
4660##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004661# check if we have posix_memalign()
4662
4663posix_memalign=no
4664cat > $TMPC << EOF
4665#include <stdlib.h>
4666int main(void) {
4667 void *p;
4668 return posix_memalign(&p, 8, 8);
4669}
4670EOF
4671if compile_prog "" "" ; then
4672 posix_memalign=yes
4673fi
4674
4675##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004676# check if we have posix_syslog
4677
4678posix_syslog=no
4679cat > $TMPC << EOF
4680#include <syslog.h>
4681int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4682EOF
4683if compile_prog "" "" ; then
4684 posix_syslog=yes
4685fi
4686
4687##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004688# check if we have sem_timedwait
4689
4690sem_timedwait=no
4691cat > $TMPC << EOF
4692#include <semaphore.h>
4693int main(void) { return sem_timedwait(0, 0); }
4694EOF
4695if compile_prog "" "" ; then
4696 sem_timedwait=yes
4697fi
4698
4699##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004700# check if trace backend exists
4701
Lluís Vilanova5b808272014-05-27 15:02:14 +02004702$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004703if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004704 error_exit "invalid trace backends" \
4705 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004706fi
4707
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004708##########################################
4709# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004710if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004711 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004712#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004713int main(void) { return 0; }
4714EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004715 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004716 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004717 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004718 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004719 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004720 fi
4721 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004722 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004723 else
4724 urcu_bp_libs="-lurcu-bp"
4725 fi
4726
4727 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4728 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004729 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004730 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004731 fi
4732fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004733
4734##########################################
4735# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004736if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004737 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004738 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004739 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004740 trace_backend_stap="no"
4741 if has 'stap' ; then
4742 trace_backend_stap="yes"
4743 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004744fi
4745
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004746##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004747# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304748
Peter Maydell7c2acc72013-04-08 12:11:27 +01004749# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004750# is sigcontext. On Windows the only valid backend is the Windows
4751# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004752
4753ucontext_works=no
4754if test "$darwin" != "yes"; then
4755 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304756#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004757#ifdef __stub_makecontext
4758#error Ignoring glibc stub makecontext which will always fail
4759#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004760int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304761EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004762 if compile_prog "" "" ; then
4763 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304764 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004765fi
4766
4767if test "$coroutine" = ""; then
4768 if test "$mingw32" = "yes"; then
4769 coroutine=win32
4770 elif test "$ucontext_works" = "yes"; then
4771 coroutine=ucontext
4772 else
4773 coroutine=sigaltstack
4774 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004775else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004776 case $coroutine in
4777 windows)
4778 if test "$mingw32" != "yes"; then
4779 error_exit "'windows' coroutine backend only valid for Windows"
4780 fi
4781 # Unfortunately the user visible backend name doesn't match the
4782 # coroutine-*.c filename for this case, so we have to adjust it here.
4783 coroutine=win32
4784 ;;
4785 ucontext)
4786 if test "$ucontext_works" != "yes"; then
4787 feature_not_found "ucontext"
4788 fi
4789 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004790 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004791 if test "$mingw32" = "yes"; then
4792 error_exit "only the 'windows' coroutine backend is valid for Windows"
4793 fi
4794 ;;
4795 *)
4796 error_exit "unknown coroutine backend $coroutine"
4797 ;;
4798 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304799fi
4800
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004801if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004802 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004803fi
4804
Peter Lieven7d992e42016-09-27 11:58:45 +02004805if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02004806 if test "$coroutine_pool" = "yes"; then
4807 echo "WARN: disabling coroutine pool for stack usage debugging"
4808 coroutine_pool=no
4809 fi
4810fi
4811
4812
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304813##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304814# check if we have open_by_handle_at
4815
Stefan Weil4e1797f2012-06-18 22:11:06 +02004816open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304817cat > $TMPC << EOF
4818#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004819#if !defined(AT_EMPTY_PATH)
4820# error missing definition
4821#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004822int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004823#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304824EOF
4825if compile_prog "" "" ; then
4826 open_by_handle_at=yes
4827fi
4828
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304829########################################
4830# check if we have linux/magic.h
4831
4832linux_magic_h=no
4833cat > $TMPC << EOF
4834#include <linux/magic.h>
4835int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004836 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304837}
4838EOF
4839if compile_prog "" "" ; then
4840 linux_magic_h=yes
4841fi
4842
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004843########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004844# check whether we can disable warning option with a pragma (this is needed
4845# to silence warnings in the headers of some versions of external libraries).
4846# This test has to be compiled with -Werror as otherwise an unknown pragma is
4847# only a warning.
4848#
4849# If we can't selectively disable warning in the code, disable -Werror so that
4850# the build doesn't fail anyway.
4851
Peter Maydell06d71fa2012-07-30 16:13:07 +01004852pragma_disable_unused_but_set=no
4853cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004854#pragma GCC diagnostic push
Peter Maydell06d71fa2012-07-30 16:13:07 +01004855#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
Kevin Wolfc95e3082013-02-22 21:08:51 +01004856#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004857#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004858
Peter Maydell06d71fa2012-07-30 16:13:07 +01004859int main(void) {
4860 return 0;
4861}
4862EOF
4863if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004864 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004865else
4866 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004867fi
4868
4869########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004870# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004871
4872valgrind_h=no
4873cat > $TMPC << EOF
4874#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004875int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004876 return 0;
4877}
4878EOF
4879if compile_prog "" "" ; then
4880 valgrind_h=yes
4881fi
4882
4883########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004884# check if environ is declared
4885
4886has_environ=no
4887cat > $TMPC << EOF
4888#include <unistd.h>
4889int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00004890 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004891 return 0;
4892}
4893EOF
4894if compile_prog "" "" ; then
4895 has_environ=yes
4896fi
4897
Richard Henderson76a347e2012-12-28 14:17:02 -08004898########################################
4899# check if cpuid.h is usable.
4900
Richard Henderson76a347e2012-12-28 14:17:02 -08004901cat > $TMPC << EOF
4902#include <cpuid.h>
4903int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00004904 unsigned a, b, c, d;
4905 int max = __get_cpuid_max(0, 0);
4906
4907 if (max >= 1) {
4908 __cpuid(1, a, b, c, d);
4909 }
4910
4911 if (max >= 7) {
4912 __cpuid_count(7, 0, a, b, c, d);
4913 }
4914
4915 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08004916}
4917EOF
4918if compile_prog "" "" ; then
4919 cpuid_h=yes
4920fi
4921
Richard Henderson5dd89902017-07-18 18:40:18 -10004922##########################################
4923# avx2 optimization requirement check
4924#
4925# There is no point enabling this if cpuid.h is not usable,
4926# since we won't be able to select the new routines.
4927
4928if test $cpuid_h = yes; then
4929 cat > $TMPC << EOF
4930#pragma GCC push_options
4931#pragma GCC target("avx2")
4932#include <cpuid.h>
4933#include <immintrin.h>
4934static int bar(void *a) {
4935 __m256i x = *(__m256i *)a;
4936 return _mm256_testz_si256(x, x);
4937}
4938int main(int argc, char *argv[]) { return bar(argv[0]); }
4939EOF
4940 if compile_object "" ; then
4941 avx2_opt="yes"
4942 fi
4943fi
4944
Richard Hendersonf5401662013-02-16 12:46:59 -08004945########################################
4946# check if __[u]int128_t is usable.
4947
4948int128=no
4949cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01004950#if defined(__clang_major__) && defined(__clang_minor__)
4951# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4952# error __int128_t does not work in CLANG before 3.2
4953# endif
4954#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08004955__int128_t a;
4956__uint128_t b;
4957int main (void) {
4958 a = a + b;
4959 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01004960 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08004961 return 0;
4962}
4963EOF
4964if compile_prog "" "" ; then
4965 int128=yes
4966fi
Richard Henderson76a347e2012-12-28 14:17:02 -08004967
Richard Henderson7ebee432016-06-29 21:10:59 -07004968#########################################
4969# See if 128-bit atomic operations are supported.
4970
4971atomic128=no
4972if test "$int128" = "yes"; then
4973 cat > $TMPC << EOF
4974int main(void)
4975{
4976 unsigned __int128 x = 0, y = 0;
4977 y = __atomic_load_16(&x, 0);
4978 __atomic_store_16(&x, y, 0);
4979 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4980 return 0;
4981}
4982EOF
4983 if compile_prog "" "" ; then
4984 atomic128=yes
4985 fi
4986fi
4987
Richard Hendersondf79b992016-09-02 12:23:57 -07004988#########################################
4989# See if 64-bit atomic operations are supported.
4990# Note that without __atomic builtins, we can only
4991# assume atomic loads/stores max at pointer size.
4992
4993cat > $TMPC << EOF
4994#include <stdint.h>
4995int main(void)
4996{
4997 uint64_t x = 0, y = 0;
4998#ifdef __ATOMIC_RELAXED
4999 y = __atomic_load_8(&x, 0);
5000 __atomic_store_8(&x, y, 0);
5001 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5002 __atomic_exchange_8(&x, y, 0);
5003 __atomic_fetch_add_8(&x, y, 0);
5004#else
5005 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5006 __sync_lock_test_and_set(&x, y);
5007 __sync_val_compare_and_swap(&x, y, 0);
5008 __sync_fetch_and_add(&x, y);
5009#endif
5010 return 0;
5011}
5012EOF
5013if compile_prog "" "" ; then
5014 atomic64=yes
5015fi
5016
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005017########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005018# See if 16-byte vector operations are supported.
5019# Even without a vector unit the compiler may expand these.
5020# There is a bug in old GCC for PPC that crashes here.
5021# Unfortunately it's the system compiler for Centos 7.
5022
5023cat > $TMPC << EOF
5024typedef unsigned char U1 __attribute__((vector_size(16)));
5025typedef unsigned short U2 __attribute__((vector_size(16)));
5026typedef unsigned int U4 __attribute__((vector_size(16)));
5027typedef unsigned long long U8 __attribute__((vector_size(16)));
5028typedef signed char S1 __attribute__((vector_size(16)));
5029typedef signed short S2 __attribute__((vector_size(16)));
5030typedef signed int S4 __attribute__((vector_size(16)));
5031typedef signed long long S8 __attribute__((vector_size(16)));
5032static U1 a1, b1;
5033static U2 a2, b2;
5034static U4 a4, b4;
5035static U8 a8, b8;
5036static S1 c1;
5037static S2 c2;
5038static S4 c4;
5039static S8 c8;
5040static int i;
5041int main(void)
5042{
5043 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5044 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5045 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5046 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5047 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5048 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5049 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5050 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5051 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5052 return 0;
5053}
5054EOF
5055
5056vector16=no
5057if compile_prog "" "" ; then
5058 vector16=yes
5059fi
5060
5061########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005062# check if getauxval is available.
5063
5064getauxval=no
5065cat > $TMPC << EOF
5066#include <sys/auxv.h>
5067int main(void) {
5068 return getauxval(AT_HWCAP) == 0;
5069}
5070EOF
5071if compile_prog "" "" ; then
5072 getauxval=yes
5073fi
5074
John Snowfd0e6052015-03-25 18:57:39 -04005075########################################
5076# check if ccache is interfering with
5077# semantic analysis of macros
5078
John Snow5e4dfd32015-10-28 13:56:40 -04005079unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005080ccache_cpp2=no
5081cat > $TMPC << EOF
5082static const int Z = 1;
5083#define fn() ({ Z; })
5084#define TAUT(X) ((X) == Z)
5085#define PAREN(X, Y) (X == Y)
5086#define ID(X) (X)
5087int main(int argc, char *argv[])
5088{
5089 int x = 0, y = 0;
5090 x = ID(x);
5091 x = fn();
5092 fn();
5093 if (PAREN(x, y)) return 0;
5094 if (TAUT(Z)) return 0;
5095 return 0;
5096}
5097EOF
5098
5099if ! compile_object "-Werror"; then
5100 ccache_cpp2=yes
5101fi
5102
John Snowb553a042015-11-03 15:43:42 -05005103#################################################
5104# clang does not support glibc + FORTIFY_SOURCE.
5105
5106if test "$fortify_source" != "no"; then
5107 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5108 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005109 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005110 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005111 fortify_source="no";
5112 else
5113 fortify_source="yes"
5114 fi
5115fi
5116
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305117##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005118# check if struct fsxattr is available via linux/fs.h
5119
5120have_fsxattr=no
5121cat > $TMPC << EOF
5122#include <linux/fs.h>
5123struct fsxattr foo;
5124int main(void) {
5125 return 0;
5126}
5127EOF
5128if compile_prog "" "" ; then
5129 have_fsxattr=yes
5130fi
5131
Peter Maydellb66e10e2016-06-08 18:34:32 +01005132##########################################
5133# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005134have_rtnetlink=no
5135cat > $TMPC << EOF
5136#include <linux/rtnetlink.h>
5137int main(void) {
5138 return IFLA_PROTO_DOWN;
5139}
5140EOF
5141if compile_prog "" "" ; then
5142 have_rtnetlink=yes
5143fi
5144
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005145##########################################
5146# check for usable AF_VSOCK environment
5147have_af_vsock=no
5148cat > $TMPC << EOF
5149#include <errno.h>
5150#include <sys/types.h>
5151#include <sys/socket.h>
5152#if !defined(AF_VSOCK)
5153# error missing AF_VSOCK flag
5154#endif
5155#include <linux/vm_sockets.h>
5156int main(void) {
5157 int sock, ret;
5158 struct sockaddr_vm svm;
5159 socklen_t len = sizeof(svm);
5160 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5161 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5162 if ((ret == -1) && (errno == ENOTCONN)) {
5163 return 0;
5164 }
5165 return -1;
5166}
5167EOF
5168if compile_prog "" "" ; then
5169 have_af_vsock=yes
5170fi
5171
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005172##########################################
5173# check for usable AF_ALG environment
5174hava_afalg=no
5175cat > $TMPC << EOF
5176#include <errno.h>
5177#include <sys/types.h>
5178#include <sys/socket.h>
5179#include <linux/if_alg.h>
5180int main(void) {
5181 int sock;
5182 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5183 return sock;
5184}
5185EOF
5186if compile_prog "" "" ; then
5187 have_afalg=yes
5188fi
5189if test "$crypto_afalg" = "yes"
5190then
5191 if test "$have_afalg" != "yes"
5192 then
5193 error_exit "AF_ALG requested but could not be detected"
5194 fi
5195fi
5196
5197
James Clarke6969ec62016-06-06 12:02:50 +01005198#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005199# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005200if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005201 cat > $TMPC << EOF
5202#include <Hypervisor/hv.h>
5203int main() { return 0;}
5204EOF
5205 if ! compile_object ""; then
5206 hvf='no'
5207 else
5208 hvf='yes'
5209 LDFLAGS="-framework Hypervisor $LDFLAGS"
5210 fi
5211fi
5212
5213#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005214# Sparc implicitly links with --relax, which is
5215# incompatible with -r, so --no-relax should be
5216# given. It does no harm to give it on other
5217# platforms too.
5218
5219# Note: the prototype is needed since QEMU_CFLAGS
5220# contains -Wmissing-prototypes
5221cat > $TMPC << EOF
5222extern int foo(void);
5223int foo(void) { return 0; }
5224EOF
5225if ! compile_object ""; then
5226 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5227fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005228for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5229 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5230 LD_REL_FLAGS=$i
5231 break
5232 fi
5233done
5234if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5235 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005236fi
5237
Jan Vesely277abf12016-04-29 13:15:23 -04005238##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005239# check for sysmacros.h
5240
5241have_sysmacros=no
5242cat > $TMPC << EOF
5243#include <sys/sysmacros.h>
5244int main(void) {
5245 return makedev(0, 0);
5246}
5247EOF
5248if compile_prog "" "" ; then
5249 have_sysmacros=yes
5250fi
5251
5252##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005253# Veritas HyperScale block driver VxHS
5254# Check if libvxhs is installed
5255
5256if test "$vxhs" != "no" ; then
5257 cat > $TMPC <<EOF
5258#include <stdint.h>
5259#include <qnio/qnio_api.h>
5260
5261void *vxhs_callback;
5262
5263int main(void) {
5264 iio_init(QNIO_VERSION, vxhs_callback);
5265 return 0;
5266}
5267EOF
5268 vxhs_libs="-lvxhs -lssl"
5269 if compile_prog "" "$vxhs_libs" ; then
5270 vxhs=yes
5271 else
5272 if test "$vxhs" = "yes" ; then
5273 feature_not_found "vxhs block device" "Install libvxhs See github"
5274 fi
5275 vxhs=no
5276 fi
5277fi
5278
5279##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005280# check for _Static_assert()
5281
5282have_static_assert=no
5283cat > $TMPC << EOF
5284_Static_assert(1, "success");
5285int main(void) {
5286 return 0;
5287}
5288EOF
5289if compile_prog "" "" ; then
5290 have_static_assert=yes
5291fi
5292
5293##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005294# check for utmpx.h, it is missing e.g. on OpenBSD
5295
5296have_utmpx=no
5297cat > $TMPC << EOF
5298#include <utmpx.h>
5299struct utmpx user_info;
5300int main(void) {
5301 return 0;
5302}
5303EOF
5304if compile_prog "" "" ; then
5305 have_utmpx=yes
5306fi
5307
5308##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005309# checks for sanitizers
5310
Marc-André Lureau218bb572018-02-08 17:23:42 +01005311# we could use a simple skeleton for flags checks, but this also
5312# detect the static linking issue of ubsan, see also:
5313# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5314cat > $TMPC << EOF
5315#include <stdint.h>
5316int main(void) {
5317 return INT32_MIN / -1;
5318}
5319EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005320
5321have_asan=no
5322have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005323have_asan_iface_h=no
5324have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005325
5326if test "$sanitizers" = "yes" ; then
5327 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5328 have_asan=yes
5329 fi
5330 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5331 have_ubsan=yes
5332 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005333
5334 if check_include "sanitizer/asan_interface.h" ; then
5335 have_asan_iface_h=yes
5336 fi
5337
5338 cat > $TMPC << EOF
5339#include <sanitizer/asan_interface.h>
5340int main(void) {
5341 __sanitizer_start_switch_fiber(0, 0, 0);
5342 return 0;
5343}
5344EOF
5345 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5346 have_asan_iface_fiber=yes
5347 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005348fi
5349
5350##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005351# End of CC checks
5352# After here, no more $cc or $ld runs
5353
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005354write_c_skeleton
5355
Blue Swirl1d728c32012-05-01 18:45:39 +00005356if test "$gcov" = "yes" ; then
5357 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5358 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005359elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005360 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Marc-André Lureau90654862018-01-04 17:05:09 +01005361elif test "$debug" = "yes"; then
5362 if compile_prog "-Og" ""; then
5363 CFLAGS="-Og $CFLAGS"
5364 elif compile_prog "-O1" ""; then
5365 CFLAGS="-O1 $CFLAGS"
5366 fi
5367 # Workaround GCC false-positive Wuninitialized bugs with Og or O1:
5368 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
5369 if cc_has_warning_flag "-Wno-maybe-uninitialized"; then
5370 CFLAGS="-Wno-maybe-uninitialized $CFLAGS"
5371 fi
5372else
5373 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005374fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005375
Marc-André Lureau247724c2018-01-16 16:11:51 +01005376if test "$have_asan" = "yes"; then
5377 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005378 if test "$have_asan_iface_h" = "no" ; then
5379 echo "ASAN build enabled, but ASAN header missing." \
5380 "Without code annotation, the report may be inferior."
5381 elif test "$have_asan_iface_fiber" = "no" ; then
5382 echo "ASAN build enabled, but ASAN header is too old." \
5383 "Without code annotation, the report may be inferior."
5384 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005385fi
5386if test "$have_ubsan" = "yes"; then
5387 CFLAGS="-fsanitize=undefined $CFLAGS"
5388fi
5389
Peter Lieven6542aa92014-02-03 10:26:13 +01005390##########################################
5391# Do we have libnfs
5392if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005393 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005394 libnfs="yes"
5395 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005396 else
5397 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005398 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005399 fi
5400 libnfs="no"
5401 fi
5402fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005403
Peter Maydell6ca026c2012-07-18 15:10:18 +01005404# Now we've finished running tests it's OK to add -Werror to the compiler flags
5405if test "$werror" = "yes"; then
5406 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5407fi
5408
Juan Quintelae86ecd42009-08-03 14:45:59 +02005409if test "$solaris" = "no" ; then
5410 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005411 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005412 fi
5413fi
5414
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005415# test if pod2man has --utf8 option
5416if pod2man --help | grep -q utf8; then
5417 POD2MAN="pod2man --utf8"
5418else
5419 POD2MAN="pod2man"
5420fi
5421
Blue Swirl952afb72010-09-19 08:36:34 +00005422# Use ASLR, no-SEH and DEP if available
5423if test "$mingw32" = "yes" ; then
5424 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005425 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005426 LDFLAGS="-Wl,$flag $LDFLAGS"
5427 fi
5428 done
5429fi
5430
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005431qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005432qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005433qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005434qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005435
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005436# We can only support ivshmem if we have eventfd
5437if [ "$eventfd" = "yes" ]; then
5438 ivshmem=yes
5439fi
5440
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005441tools=""
5442if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02005443 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005444 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5445 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005446 fi
5447 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005448 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005449 fi
5450fi
5451if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005452 if test "$linux" = yes; then
5453 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005454 virtfs=yes
5455 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5456 else
5457 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005458 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305459 fi
Andreas Färber17500372012-05-01 01:12:03 +02005460 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005461 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005462 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5463 mpath=yes
5464 else
5465 if test "$mpath" = yes; then
5466 error_exit "Multipath requires libmpathpersist devel"
5467 fi
5468 mpath=no
5469 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005470 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5471 else
5472 if test "$virtfs" = yes; then
5473 error_exit "VirtFS is supported only on Linux"
5474 fi
5475 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005476 if test "$mpath" = yes; then
5477 error_exit "Multipath is supported only on Linux"
5478 fi
5479 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305480 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005481 if test "$xkbcommon" = "yes"; then
5482 tools="qemu-keymap\$(EXESUF) $tools"
5483 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005484fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005485
5486# Probe for guest agent support/options
5487
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005488if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005489 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005490 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005491 guest_agent=yes
5492 elif [ "$guest_agent" != yes ]; then
5493 guest_agent=no
5494 else
5495 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005496 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005497fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005498
Michael Roth9d6bc272015-08-26 10:49:13 -05005499# Guest agent Window MSI package
5500
5501if test "$guest_agent" != yes; then
5502 if test "$guest_agent_msi" = yes; then
5503 error_exit "MSI guest agent package requires guest agent enabled"
5504 fi
5505 guest_agent_msi=no
5506elif test "$mingw32" != "yes"; then
5507 if test "$guest_agent_msi" = "yes"; then
5508 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5509 fi
5510 guest_agent_msi=no
5511elif ! has wixl; then
5512 if test "$guest_agent_msi" = "yes"; then
5513 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5514 fi
5515 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005516else
5517 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5518 # disabled explicitly
5519 if test "$guest_agent_msi" != "no"; then
5520 guest_agent_msi=yes
5521 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005522fi
5523
Michael Roth1a349042015-08-26 11:14:31 -05005524if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005525 if test "$guest_agent_with_vss" = "yes"; then
5526 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5527 fi
5528
5529 if test "$QEMU_GA_MANUFACTURER" = ""; then
5530 QEMU_GA_MANUFACTURER=QEMU
5531 fi
5532
5533 if test "$QEMU_GA_DISTRO" = ""; then
5534 QEMU_GA_DISTRO=Linux
5535 fi
5536
5537 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005538 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005539 fi
5540
Stefan Weil89138852016-05-16 15:10:20 +02005541 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005542
5543 case "$cpu" in
5544 x86_64)
5545 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5546 ;;
5547 i386)
5548 QEMU_GA_MSI_ARCH="-D Arch=32"
5549 ;;
5550 *)
5551 error_exit "CPU $cpu not supported for building installation package"
5552 ;;
5553 esac
5554fi
5555
Paolo Bonzinica35f782010-05-26 16:08:29 +02005556# Mac OS X ships with a broken assembler
5557roms=
5558if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5559 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5560 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005561 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005562 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5563 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5564 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005565 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5566 ld_i386_emulation="$emu"
5567 roms="optionrom"
5568 break
5569 fi
5570 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005571fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005572if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005573 roms="$roms spapr-rtas"
5574fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005575
Christian Borntraeger9933c302013-04-23 01:23:03 +00005576if test "$cpu" = "s390x" ; then
5577 roms="$roms s390-ccw"
5578fi
5579
Richard Henderson964c6fa2013-06-21 19:10:16 -07005580# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005581if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005582 textseg_addr=
5583 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005584 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5585 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005586 textseg_addr=0x60000000
5587 ;;
5588 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005589 # A 256M aligned address, high in the address space, with enough
5590 # room for the code_gen_buffer above it before the stack.
5591 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005592 ;;
5593 esac
5594 if [ -n "$textseg_addr" ]; then
5595 cat > $TMPC <<EOF
5596 int main(void) { return 0; }
5597EOF
5598 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5599 if ! compile_prog "" "$textseg_ldflags"; then
5600 # In case ld does not support -Ttext-segment, edit the default linker
5601 # script via sed to set the .text start addr. This is needed on FreeBSD
5602 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005603 if ! $ld --verbose >/dev/null 2>&1; then
5604 error_exit \
5605 "We need to link the QEMU user mode binaries at a" \
5606 "specific text address. Unfortunately your linker" \
5607 "doesn't support either the -Ttext-segment option or" \
5608 "printing the default linker script with --verbose." \
5609 "If you don't want the user mode binaries, pass the" \
5610 "--disable-user option to configure."
5611 fi
5612
Richard Henderson964c6fa2013-06-21 19:10:16 -07005613 $ld --verbose | sed \
5614 -e '1,/==================================================/d' \
5615 -e '/==================================================/,$d' \
5616 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5617 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5618 textseg_ldflags="-Wl,-T../config-host.ld"
5619 fi
5620 fi
5621fi
5622
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005623# Check that the C++ compiler exists and works with the C compiler.
5624# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5625if has $cxx; then
5626 cat > $TMPC <<EOF
5627int c_function(void);
5628int main(void) { return c_function(); }
5629EOF
5630
5631 compile_object
5632
5633 cat > $TMPCXX <<EOF
5634extern "C" {
5635 int c_function(void);
5636}
5637int c_function(void) { return 42; }
5638EOF
5639
5640 update_cxxflags
5641
5642 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5643 # C++ compiler $cxx works ok with C compiler $cc
5644 :
5645 else
5646 echo "C++ compiler $cxx does not work with C compiler $cc"
5647 echo "Disabling C++ specific optional code"
5648 cxx=
5649 fi
5650else
5651 echo "No C++ compiler available; disabling C++ specific optional code"
5652 cxx=
5653fi
5654
Cole Robinson02d34f62016-05-06 14:03:09 -04005655echo_version() {
5656 if test "$1" = "yes" ; then
5657 echo "($2)"
5658 fi
5659}
5660
Jan Kiszka50e12062014-10-02 10:03:55 +02005661# prepend pixman and ftd flags after all config tests are done
5662QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5663libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005664
bellard43ce4df2003-06-09 19:53:12 +00005665echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005666echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005667echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005668echo "binary directory $(eval echo $bindir)"
5669echo "library directory $(eval echo $libdir)"
5670echo "module directory $(eval echo $qemu_moddir)"
5671echo "libexec directory $(eval echo $libexecdir)"
5672echo "include directory $(eval echo $includedir)"
5673echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005674if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005675echo "local state directory $(eval echo $local_statedir)"
5676echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005677echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005678else
5679echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005680echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005681fi
bellard5a671352003-10-01 00:13:48 +00005682echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005683echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005684echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005685echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005686echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005687echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005688echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005689echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005690echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005691echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005692echo "LDFLAGS $LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005693echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005694echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005695echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005696if test "$slirp" = "yes" ; then
5697 echo "smbd $smbd"
5698fi
Fam Zheng17969262014-02-10 14:48:56 +08005699echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005700echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005701echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005702echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005703echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005704echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005705echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005706echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005707echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005708if test "$darwin" = "yes" ; then
5709 echo "Cocoa support $cocoa"
5710fi
Stefan Weil89138852016-05-16 15:10:20 +02005711echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5712echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005713echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005714echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005715echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005716echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005717echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005718echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005719echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02005720echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005721echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005722echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005723echo "curses support $curses"
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005724echo "virgl support $virglrenderer"
Alexander Graf769ce762009-05-11 17:41:42 +02005725echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005726echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005727echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005728echo "Block whitelist (rw) $block_drv_rw_whitelist"
5729echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305730echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005731echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01005732echo "VNC support $vnc"
5733if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005734 echo "VNC SASL support $vnc_sasl"
5735 echo "VNC JPEG support $vnc_jpeg"
5736 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005737fi
blueswir131422552007-04-16 18:27:06 +00005738if test -n "$sparc_cpu"; then
5739 echo "Target Sparc Arch $sparc_cpu"
5740fi
aliguorie37630c2009-04-22 15:19:10 +00005741echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005742if test "$xen" = "yes" ; then
5743 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005744 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005745fi
aurel322e4d9fb2008-04-08 06:01:02 +00005746echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005747echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005748echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005749echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005750echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005751echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005752echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005753echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005754echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005755echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01005756echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005757echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08005758echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005759echo "TCG support $tcg"
5760if test "$tcg" = "yes" ; then
5761 echo "TCG debug enabled $debug_tcg"
5762 echo "TCG interpreter $tcg_interpreter"
5763fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08005764echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04005765echo "RDMA support $rdma"
aurel32f652e6a2008-12-16 10:43:48 +00005766echo "fdt support $fdt"
aliguoriceb42de2009-04-07 18:43:28 +00005767echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005768echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005769echo "madvise $madvise"
5770echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005771echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05005772echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005773echo "vhost-net support $vhost_net"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005774echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005775echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005776echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005777echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005778if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005779echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005780fi
Stefan Weil89138852016-05-16 15:10:20 +02005781echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005782echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005783echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005784echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005785echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005786echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005787echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005788echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005789echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01005790echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05005791echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005792echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05005793echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05005794echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03005795echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01005796echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005797echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02005798echo "debug stack usage $debug_stack_usage"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005799echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05305800echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00005801echo "gcov $gcov_tool"
5802echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05005803echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005804echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005805echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03005806echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02005807echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01005808echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08005809echo "lzo support $lzo"
5810echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01005811echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08005812echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03005813echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08005814echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02005815echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08005816echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005817echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005818echo "VxHS block device $vxhs"
Richard Henderson8ca80762017-09-14 09:41:12 -07005819echo "capstone $capstone"
bellard67b915a2004-03-31 23:37:16 +00005820
Stefan Weil1ba16962011-07-29 22:40:45 +02005821if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00005822echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00005823fi
bellard97a847b2003-08-10 21:36:04 +00005824
Daniel P. Berrangeb7715af2017-12-12 11:34:40 +00005825if test "$gtkabi" = "2.0"; then
5826 echo
5827 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5828 echo "WARNING: future releases. Please switch to using GTK 3.0"
5829fi
5830
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00005831if test "$sdlabi" = "1.2"; then
5832 echo
5833 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
5834 echo "WARNING: future releases. Please switch to using SDL 2.0"
5835fi
5836
Peter Maydell898be3e2017-03-21 14:31:57 +00005837if test "$supported_cpu" = "no"; then
5838 echo
5839 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5840 echo
5841 echo "CPU host architecture $cpu support is not currently maintained."
5842 echo "The QEMU project intends to remove support for this host CPU in"
5843 echo "a future release if nobody volunteers to maintain it and to"
5844 echo "provide a build host for our continuous integration setup."
5845 echo "configure has succeeded and you can continue to build, but"
5846 echo "if you care about QEMU on this platform you should contact"
5847 echo "us upstream at qemu-devel@nongnu.org."
5848fi
5849
5850if test "$supported_os" = "no"; then
5851 echo
5852 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5853 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00005854 echo "Host OS $targetos support is not currently maintained."
5855 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00005856 echo "a future release if nobody volunteers to maintain it and to"
5857 echo "provide a build host for our continuous integration setup."
5858 echo "configure has succeeded and you can continue to build, but"
5859 echo "if you care about QEMU on this platform you should contact"
5860 echo "us upstream at qemu-devel@nongnu.org."
5861fi
5862
Juan Quintela98ec69a2009-07-16 18:34:18 +02005863config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00005864
Stefan Weildbd99ae2013-01-01 18:33:44 +01005865echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5866
Juan Quintela98ec69a2009-07-16 18:34:18 +02005867echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005868echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005869
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02005870echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005871echo "prefix=$prefix" >> $config_host_mak
5872echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03005873echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04005874echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02005875echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005876echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005877echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03005878echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03005879echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005880echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03005881echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08005882echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005883if test "$mingw32" = "no" ; then
5884 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5885fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04005886echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06005887echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02005888echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005889echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005890echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01005891echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005892
Juan Quintela98ec69a2009-07-16 18:34:18 +02005893echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02005894
aurel32f8393942009-04-13 18:45:38 +00005895if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005896 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00005897fi
aliguori1625af82009-04-05 17:41:02 +00005898if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07005899 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00005900fi
bellard7d132992003-03-06 23:23:54 +00005901if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02005902 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005903fi
bellard67b915a2004-03-31 23:37:16 +00005904if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005905 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02005906 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00005907 version_major=${rc_version%%.*}
5908 rc_version=${rc_version#*.}
5909 version_minor=${rc_version%%.*}
5910 rc_version=${rc_version#*.}
5911 version_subminor=${rc_version%%.*}
5912 version_micro=0
5913 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5914 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005915 if test "$guest_agent_with_vss" = "yes" ; then
5916 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05005917 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005918 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5919 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05005920 if test "$guest_agent_ntddscsi" = "yes" ; then
5921 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5922 fi
Michael Roth1a349042015-08-26 11:14:31 -05005923 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08005924 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03005925 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5926 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5927 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5928 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5929 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5930 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5931 fi
pbrook210fa552007-02-27 21:04:49 +00005932else
Juan Quintela35f4df22009-07-27 16:13:07 +02005933 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00005934fi
blueswir1128ab2f2008-08-15 18:33:42 +00005935
Mark McLoughlindffcb712009-10-22 17:49:11 +01005936if test "$linux" = "yes" ; then
5937 echo "CONFIG_LINUX=y" >> $config_host_mak
5938fi
5939
bellard83fb7ad2004-07-05 21:25:26 +00005940if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005941 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00005942fi
malcb29fe3e2008-11-18 01:42:22 +00005943
bellardec530c82006-04-25 22:36:06 +00005944if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005945 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00005946fi
Andreas Färber179cf402010-09-20 00:50:43 +02005947if test "$haiku" = "yes" ; then
5948 echo "CONFIG_HAIKU=y" >> $config_host_mak
5949fi
bellard97a847b2003-08-10 21:36:04 +00005950if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005951 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005952fi
Stefan Weil1ba16962011-07-29 22:40:45 +02005953if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005954 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00005955fi
bellardc20709a2004-04-21 23:27:19 +00005956if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005957 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04005958 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00005959fi
ths8a16d272008-07-19 09:56:24 +00005960if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005961 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08005962 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00005963fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01005964if test "$netmap" = "yes" ; then
5965 echo "CONFIG_NETMAP=y" >> $config_host_mak
5966fi
Gonglei015a33b2014-07-01 20:58:08 +08005967if test "$l2tpv3" = "yes" ; then
5968 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5969fi
Corey Bryant47e98652012-01-26 09:42:26 -05005970if test "$cap_ng" = "yes" ; then
5971 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5972fi
Juan Quintela2358a492009-07-27 16:13:25 +02005973echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005974for drv in $audio_drv_list; do
Stefan Weil89138852016-05-16 15:10:20 +02005975 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Juan Quintela98ec69a2009-07-16 18:34:18 +02005976 echo "$def=y" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005977done
Fam Zhengb1149912017-09-07 16:29:13 +08005978echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5979echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5980echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5981echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5982echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02005983if test "$audio_pt_int" = "yes" ; then
5984 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5985fi
malcd5631632009-10-10 01:13:41 +04005986if test "$audio_win_int" = "yes" ; then
5987 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5988fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005989echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5990echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01005991if test "$vnc" = "yes" ; then
5992 echo "CONFIG_VNC=y" >> $config_host_mak
5993fi
aliguori2f9606b2009-03-06 20:27:28 +00005994if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005995 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00005996fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005997if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005998 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005999fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006000if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006001 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006002fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006003if test "$xkbcommon" = "yes" ; then
6004 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6005 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6006fi
aliguori76655d62009-03-06 20:27:37 +00006007if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006008 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006009fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006010if test "$xfs" = "yes" ; then
6011 echo "CONFIG_XFS=y" >> $config_host_mak
6012fi
Stefan Weil89138852016-05-16 15:10:20 +02006013qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006014echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006015echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006016echo "SRC_PATH=$source_path" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006017echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006018if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006019 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006020fi
Fam Zheng17969262014-02-10 14:48:56 +08006021if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006022 # $shacmd can generate a hash started with digit, which the compiler doesn't
6023 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006024 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006025 echo "CONFIG_MODULES=y" >> $config_host_mak
6026fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006027if test "$sdl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006028 echo "CONFIG_SDL=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006029 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006030 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006031 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006032fi
6033if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006034 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006035fi
6036if test "$curses" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006037 echo "CONFIG_CURSES=y" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006038fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006039if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006040 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006041fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006042if test "$accept4" = "yes" ; then
6043 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6044fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306045if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006046 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306047fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006048if test "$eventfd" = "yes" ; then
6049 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6050fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006051if test "$memfd" = "yes" ; then
6052 echo "CONFIG_MEMFD=y" >> $config_host_mak
6053fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006054if test "$fallocate" = "yes" ; then
6055 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6056fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006057if test "$fallocate_punch_hole" = "yes" ; then
6058 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6059fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006060if test "$fallocate_zero_range" = "yes" ; then
6061 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6062fi
Kevin Wolfed911432014-09-29 17:12:59 +02006063if test "$posix_fallocate" = "yes" ; then
6064 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6065fi
Peter Maydellc727f472011-01-06 11:05:10 +00006066if test "$sync_file_range" = "yes" ; then
6067 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6068fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006069if test "$fiemap" = "yes" ; then
6070 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6071fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006072if test "$dup3" = "yes" ; then
6073 echo "CONFIG_DUP3=y" >> $config_host_mak
6074fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006075if test "$ppoll" = "yes" ; then
6076 echo "CONFIG_PPOLL=y" >> $config_host_mak
6077fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006078if test "$prctl_pr_set_timerslack" = "yes" ; then
6079 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6080fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006081if test "$epoll" = "yes" ; then
6082 echo "CONFIG_EPOLL=y" >> $config_host_mak
6083fi
6084if test "$epoll_create1" = "yes" ; then
6085 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6086fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006087if test "$sendfile" = "yes" ; then
6088 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6089fi
Riku Voipio51834342014-06-22 11:25:42 +01006090if test "$timerfd" = "yes" ; then
6091 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6092fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006093if test "$setns" = "yes" ; then
6094 echo "CONFIG_SETNS=y" >> $config_host_mak
6095fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006096if test "$clock_adjtime" = "yes" ; then
6097 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6098fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006099if test "$syncfs" = "yes" ; then
6100 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6101fi
aurel323b3f24a2009-04-15 16:12:13 +00006102if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006103 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006104fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006105if test "$inotify1" = "yes" ; then
6106 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6107fi
Peter Maydell401bc052017-09-05 13:19:32 +01006108if test "$sem_timedwait" = "yes" ; then
6109 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6110fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006111if test "$byteswap_h" = "yes" ; then
6112 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6113fi
6114if test "$bswap_h" = "yes" ; then
6115 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6116fi
Alexander Graf769ce762009-05-11 17:41:42 +02006117if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006118 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006119 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006120 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006121fi
aurel322e4d9fb2008-04-08 06:01:02 +00006122if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006123 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006124 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006125fi
balrogfb599c92008-09-28 23:49:55 +00006126if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006127 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006128 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006129fi
Dr. David Alan Gilbertd46f7c92015-06-24 10:45:42 +01006130if test "$glib_subprocess" = "yes" ; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03006131 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6132fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006133if test "$gtk" = "yes" ; then
6134 echo "CONFIG_GTK=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006135 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006136 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006137 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006138 if test "$gtk_gl" = "yes" ; then
6139 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6140 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006141fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006142echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006143if test "$gnutls" = "yes" ; then
6144 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6145fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09006146if test "$gnutls_rnd" = "yes" ; then
6147 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6148fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006149if test "$gcrypt" = "yes" ; then
6150 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006151 if test "$gcrypt_hmac" = "yes" ; then
6152 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6153 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01006154 if test "$gcrypt_kdf" = "yes" ; then
6155 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6156 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006157fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006158if test "$nettle" = "yes" ; then
6159 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006160 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01006161 if test "$nettle_kdf" = "yes" ; then
6162 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6163 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006164fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006165if test "$tasn1" = "yes" ; then
6166 echo "CONFIG_TASN1=y" >> $config_host_mak
6167fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006168if test "$have_ifaddrs_h" = "yes" ; then
6169 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6170fi
Eric Blake6b39b062016-10-11 10:46:23 -05006171if test "$have_broken_size_max" = "yes" ; then
6172 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6173fi
Jan Vesely277abf12016-04-29 13:15:23 -04006174
6175# Work around a system header bug with some kernel/XFS header
6176# versions where they both try to define 'struct fsxattr':
6177# xfs headers will not try to redefine structs from linux headers
6178# if this macro is set.
6179if test "$have_fsxattr" = "yes" ; then
6180 echo "HAVE_FSXATTR=y" >> $config_host_mak
6181fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006182if test "$vte" = "yes" ; then
6183 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006184 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6185fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006186if test "$virglrenderer" = "yes" ; then
6187 echo "CONFIG_VIRGL=y" >> $config_host_mak
6188 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6189 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6190fi
aliguorie37630c2009-04-22 15:19:10 +00006191if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006192 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006193 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006194 if test "$xen_pv_domain_build" = "yes" ; then
6195 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6196 fi
aliguorie37630c2009-04-22 15:19:10 +00006197fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006198if test "$linux_aio" = "yes" ; then
6199 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6200fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006201if test "$attr" = "yes" ; then
6202 echo "CONFIG_ATTR=y" >> $config_host_mak
6203fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006204if test "$libattr" = "yes" ; then
6205 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6206fi
Meador Inge983eef52012-02-24 14:00:42 +05306207if test "$virtfs" = "yes" ; then
6208 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006209fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006210if test "$mpath" = "yes" ; then
6211 echo "CONFIG_MPATH=y" >> $config_host_mak
6212fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006213if test "$vhost_scsi" = "yes" ; then
6214 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6215fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006216if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006217 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6218fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006219if test "$vhost_vsock" = "yes" ; then
6220 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6221fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006222if test "$vhost_user" = "yes" ; then
6223 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6224fi
ths77755342008-11-27 15:45:16 +00006225if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006226 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006227fi
aliguoribf9298b2008-12-05 20:05:26 +00006228if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006229 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006230fi
aliguoriceb42de2009-04-07 18:43:28 +00006231if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006232 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006233fi
aurel32f652e6a2008-12-16 10:43:48 +00006234if test "$fdt" = "yes" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006235 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006236fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006237if test "$signalfd" = "yes" ; then
6238 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6239fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006240if test "$tcg" = "yes"; then
6241 echo "CONFIG_TCG=y" >> $config_host_mak
6242 if test "$tcg_interpreter" = "yes" ; then
6243 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6244 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006245fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006246if test "$fdatasync" = "yes" ; then
6247 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6248fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006249if test "$madvise" = "yes" ; then
6250 echo "CONFIG_MADVISE=y" >> $config_host_mak
6251fi
6252if test "$posix_madvise" = "yes" ; then
6253 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6254fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006255if test "$posix_memalign" = "yes" ; then
6256 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6257fi
bellard97a847b2003-08-10 21:36:04 +00006258
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006259if test "$spice" = "yes" ; then
6260 echo "CONFIG_SPICE=y" >> $config_host_mak
6261fi
6262
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006263if test "$smartcard" = "yes" ; then
6264 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006265 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6266 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006267fi
6268
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006269if test "$libusb" = "yes" ; then
6270 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006271 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6272 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006273fi
6274
Hans de Goede69354a82011-07-19 11:04:10 +02006275if test "$usb_redir" = "yes" ; then
6276 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006277 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6278 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006279fi
6280
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006281if test "$opengl" = "yes" ; then
6282 echo "CONFIG_OPENGL=y" >> $config_host_mak
6283 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006284 if test "$opengl_dmabuf" = "yes" ; then
6285 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6286 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006287fi
6288
Yang Zhong5a22ab72017-12-20 21:16:46 +08006289if test "$malloc_trim" = "yes" ; then
6290 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6291fi
6292
Liang Li99f2dbd2016-03-08 13:53:16 +08006293if test "$avx2_opt" = "yes" ; then
6294 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6295fi
6296
qiaonuohan607dacd2014-02-18 14:11:30 +08006297if test "$lzo" = "yes" ; then
6298 echo "CONFIG_LZO=y" >> $config_host_mak
6299fi
6300
6301if test "$snappy" = "yes" ; then
6302 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6303fi
6304
Peter Wu6b383c02015-01-06 18:48:14 +01006305if test "$bzip2" = "yes" ; then
6306 echo "CONFIG_BZIP2=y" >> $config_host_mak
6307 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6308fi
6309
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006310if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006311 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006312 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6313 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006314fi
6315
Peter Lieven6542aa92014-02-03 10:26:13 +01006316if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006317 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6318 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006319fi
6320
Eduardo Otubof7945732012-08-14 18:44:05 -03006321if test "$seccomp" = "yes"; then
6322 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006323 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6324 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006325fi
6326
bellard83fb7ad2004-07-05 21:25:26 +00006327# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006328if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006329 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006330fi
6331
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006332if test "$localtime_r" = "yes" ; then
6333 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6334fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006335if test "$qom_cast_debug" = "yes" ; then
6336 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6337fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006338if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006339 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006340 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6341 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006342fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006343
Peter Maydell7c2acc72013-04-08 12:11:27 +01006344echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006345if test "$coroutine_pool" = "yes" ; then
6346 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6347else
6348 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6349fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306350
Peter Lieven7d992e42016-09-27 11:58:45 +02006351if test "$debug_stack_usage" = "yes" ; then
6352 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6353fi
6354
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006355if test "$crypto_afalg" = "yes" ; then
6356 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6357fi
6358
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306359if test "$open_by_handle_at" = "yes" ; then
6360 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6361fi
6362
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306363if test "$linux_magic_h" = "yes" ; then
6364 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6365fi
6366
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006367if test "$pragma_diagnostic_available" = "yes" ; then
6368 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006369fi
6370
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006371if test "$valgrind_h" = "yes" ; then
6372 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6373fi
6374
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006375if test "$have_asan_iface_fiber" = "yes" ; then
6376 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6377fi
6378
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006379if test "$has_environ" = "yes" ; then
6380 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6381fi
6382
Richard Henderson76a347e2012-12-28 14:17:02 -08006383if test "$cpuid_h" = "yes" ; then
6384 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6385fi
6386
Richard Hendersonf5401662013-02-16 12:46:59 -08006387if test "$int128" = "yes" ; then
6388 echo "CONFIG_INT128=y" >> $config_host_mak
6389fi
6390
Richard Henderson7ebee432016-06-29 21:10:59 -07006391if test "$atomic128" = "yes" ; then
6392 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6393fi
6394
Richard Hendersondf79b992016-09-02 12:23:57 -07006395if test "$atomic64" = "yes" ; then
6396 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6397fi
6398
Richard Hendersondb432672017-09-15 14:11:45 -07006399if test "$vector16" = "yes" ; then
6400 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6401fi
6402
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006403if test "$getauxval" = "yes" ; then
6404 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6405fi
6406
Bharata B Raoeb100392012-09-24 14:42:45 +05306407if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006408 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006409 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6410 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306411fi
6412
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006413if test "$glusterfs_xlator_opt" = "yes" ; then
6414 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6415fi
6416
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306417if test "$glusterfs_discard" = "yes" ; then
6418 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6419fi
6420
Niels de Vosdf3a4292017-05-28 12:01:14 +05306421if test "$glusterfs_fallocate" = "yes" ; then
6422 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6423fi
6424
Bharata B Rao7c815372013-12-21 14:51:25 +05306425if test "$glusterfs_zerofill" = "yes" ; then
6426 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6427fi
6428
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006429if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006430 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006431 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6432 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006433fi
6434
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006435if test "$live_block_migration" = "yes" ; then
6436 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6437fi
6438
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006439if test "$tpm" = "yes"; then
6440 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006441 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006442 if test "$tpm_passthrough" = "yes"; then
6443 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6444 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006445 # TPM emulator support?
6446 if test "$tpm_emulator" = "yes"; then
6447 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6448 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006449fi
6450
Lluís Vilanova5b808272014-05-27 15:02:14 +02006451echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6452if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02006453 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306454fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006455if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02006456 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6457 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006458 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006459fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006460if have_backend "log"; then
6461 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02006462fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006463if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02006464 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6465fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006466if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006467 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6468 if test "$trace_backend_stap" = "yes" ; then
6469 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6470 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006471fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006472if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006473 if test "$linux" = "yes" ; then
6474 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006475 else
Stewart Smith21684af2014-01-24 12:39:10 +11006476 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006477 fi
6478fi
Paul Durrant0a852412016-08-04 14:44:14 +01006479if have_backend "syslog"; then
6480 if test "$posix_syslog" = "yes" ; then
6481 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6482 else
6483 feature_not_found "syslog(trace backend)" "syslog not available"
6484 fi
6485fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006486echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6487
Michael R. Hines2da776d2013-07-22 10:01:54 -04006488if test "$rdma" = "yes" ; then
6489 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006490 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006491fi
6492
Laurent Vivier575b22b2016-06-02 22:14:15 +02006493if test "$have_rtnetlink" = "yes" ; then
6494 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6495fi
6496
Klim Kireeved279a02018-01-12 12:01:19 +03006497if test "$libxml2" = "yes" ; then
6498 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6499 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6500 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6501fi
6502
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006503if test "$replication" = "yes" ; then
6504 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6505fi
6506
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006507if test "$have_af_vsock" = "yes" ; then
6508 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6509fi
6510
Christopher Covington4d043512016-12-28 15:04:33 -05006511if test "$have_sysmacros" = "yes" ; then
6512 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6513fi
6514
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006515if test "$have_static_assert" = "yes" ; then
6516 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6517fi
6518
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006519if test "$have_utmpx" = "yes" ; then
6520 echo "HAVE_UTMPX=y" >> $config_host_mak
6521fi
6522
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006523if test "$ivshmem" = "yes" ; then
6524 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6525fi
Richard Hendersone219c492017-09-28 09:01:23 -07006526if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006527 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6528fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006529
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006530# Hold two types of flag:
6531# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6532# a thread we have a handle to
6533# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6534# platform
6535if test "$pthread_setname_np" = "yes" ; then
6536 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6537 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6538fi
6539
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006540if test "$vxhs" = "yes" ; then
6541 echo "CONFIG_VXHS=y" >> $config_host_mak
6542 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6543fi
6544
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006545if test "$tcg_interpreter" = "yes"; then
6546 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6547elif test "$ARCH" = "sparc64" ; then
6548 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6549elif test "$ARCH" = "s390x" ; then
6550 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006551elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006552 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006553elif test "$ARCH" = "ppc64" ; then
6554 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006555else
6556 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6557fi
6558QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6559
Juan Quintela98ec69a2009-07-16 18:34:18 +02006560echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006561echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006562echo "MAKE=$make" >> $config_host_mak
6563echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006564echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6565echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006566echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6567echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006568echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006569echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006570if $iasl -h > /dev/null 2>&1; then
6571 echo "IASL=$iasl" >> $config_host_mak
6572fi
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02006573echo "CC_I386=$cc_i386" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006574echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006575echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006576echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006577echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006578echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006579echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006580echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006581echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006582echo "OBJCOPY=$objcopy" >> $config_host_mak
6583echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006584echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006585echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006586echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006587echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006588echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006589echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006590echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006591echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006592if test "$sparse" = "yes" ; then
6593 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006594 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006595 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006596 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6597 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6598fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006599if test "$cross_prefix" != ""; then
6600 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6601else
6602 echo "AUTOCONF_HOST := " >> $config_host_mak
6603fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006604echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006605echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006606echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006607echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006608echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006609echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006610echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006611echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006612echo "DSOSUF=$DSOSUF" >> $config_host_mak
6613echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006614echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006615echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6616echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006617echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006618echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006619if test "$gcov" = "yes" ; then
6620 echo "CONFIG_GCOV=y" >> $config_host_mak
6621 echo "GCOV=$gcov_tool" >> $config_host_mak
6622fi
Juan Quintela804edf22009-07-27 16:12:49 +02006623
Peter Maydell6efd7512011-11-30 11:59:04 +00006624# use included Linux headers
6625if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006626 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006627 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006628 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006629 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006630 ;;
6631 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006632 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006633 ;;
6634 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006635 linux_arch=s390
6636 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006637 aarch64)
6638 linux_arch=arm64
6639 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006640 mips64)
6641 linux_arch=mips
6642 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006643 *)
6644 # For most CPUs the kernel architecture name and QEMU CPU name match.
6645 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006646 ;;
6647 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006648 # For non-KVM architectures we will not have asm headers
6649 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6650 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6651 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006652fi
6653
bellard1d14ffa2005-10-30 18:58:22 +00006654for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006655target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006656config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006657target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006658target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006659
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006660case "$target_name" in
Michael Weiser722dd7b2018-01-11 13:25:32 +00006661 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
Juan Quintelaea2d6a32009-07-16 18:34:10 +02006662 target_bigendian=yes
6663 ;;
6664esac
bellard97a847b2003-08-10 21:36:04 +00006665target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006666target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006667target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006668target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006669case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006670 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006671 target_softmmu="yes"
6672 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006673 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00006674 target_user_only="yes"
6675 target_linux_user="yes"
6676 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006677 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00006678 target_user_only="yes"
6679 target_bsd_user="yes"
6680 ;;
pbrook9e407a82007-05-26 16:38:53 +00006681 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006682 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00006683 exit 1
6684 ;;
6685esac
ths831b7822007-01-18 20:06:33 +00006686
bellard97a847b2003-08-10 21:36:04 +00006687mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02006688echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006689
pbrooke5fe0c52006-06-11 13:32:59 +00006690bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00006691mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02006692interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00006693gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00006694
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006695TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02006696TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02006697TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02006698
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006699case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00006700 i386)
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006701 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
aurel322408a522008-04-20 20:19:44 +00006702 ;;
6703 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006704 TARGET_BASE_ARCH=i386
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006705 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
aurel322408a522008-04-20 20:19:44 +00006706 ;;
6707 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11006708 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00006709 ;;
6710 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006711 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00006712 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006713 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00006714 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00006715 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00006716 aarch64|aarch64_be)
6717 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01006718 TARGET_BASE_ARCH=arm
6719 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006720 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01006721 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alexander Graf6a49fa92013-09-03 20:12:22 +01006722 ;;
aurel322408a522008-04-20 20:19:44 +00006723 cris)
aurel322408a522008-04-20 20:19:44 +00006724 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08006725 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08006726 mttcg="yes"
Richard Henderson61766fe2016-12-15 11:26:14 -08006727 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01006728 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01006729 ;;
aurel322408a522008-04-20 20:19:44 +00006730 m68k)
aurel322408a522008-04-20 20:19:44 +00006731 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02006732 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00006733 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006734 microblaze|microblazeel)
6735 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006736 bflt="yes"
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006737 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02006738 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006739 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006740 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006741 ;;
6742 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08006743 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006744 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006745 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08006746 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006747 ;;
6748 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006749 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006750 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006751 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006752 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006753 moxie)
6754 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006755 nios2)
6756 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006757 or1k)
Jia Liue67db062012-07-20 15:50:39 +08006758 TARGET_ARCH=openrisc
6759 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08006760 ;;
aurel322408a522008-04-20 20:19:44 +00006761 ppc)
aurel32c8b35322009-01-24 15:07:34 +00006762 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00006763 ;;
6764 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006765 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006766 TARGET_ABI_DIR=ppc
aurel32c8b35322009-01-24 15:07:34 +00006767 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00006768 ;;
6769 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006770 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006771 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306772 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006773 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00006774 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05006775 ppc64le)
6776 TARGET_ARCH=ppc64
6777 TARGET_BASE_ARCH=ppc
6778 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306779 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006780 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Doug Kwan9c351262014-05-29 09:12:21 -05006781 ;;
aurel322408a522008-04-20 20:19:44 +00006782 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006783 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006784 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006785 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02006786 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01006787 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00006788 ;;
6789 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006790 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00006791 bflt="yes"
6792 ;;
6793 sparc)
aurel322408a522008-04-20 20:19:44 +00006794 ;;
6795 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006796 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00006797 ;;
6798 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006799 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006800 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006801 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02006802 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006803 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006804 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01006805 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01006806 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
Alexander Graf24e804ec2009-12-05 12:44:22 +01006807 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08006808 tilegx)
6809 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07006810 tricore)
6811 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08006812 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08006813 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006814 xtensa|xtensaeb)
6815 TARGET_ARCH=xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04006816 ;;
aurel322408a522008-04-20 20:19:44 +00006817 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006818 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00006819 ;;
6820esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006821# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6822if [ "$TARGET_BASE_ARCH" = "" ]; then
6823 TARGET_BASE_ARCH=$TARGET_ARCH
6824fi
6825
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006826symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6827
Daniel P. Berrange99afc912012-08-20 15:31:38 +01006828upper() {
6829 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6830}
6831
Stefan Weil89138852016-05-16 15:10:20 +02006832target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02006833echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006834echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02006835echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02006836if [ "$TARGET_ABI_DIR" = "" ]; then
6837 TARGET_ABI_DIR=$TARGET_ARCH
6838fi
Juan Quintela25be2102009-10-07 02:41:00 +02006839echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07006840if [ "$HOST_VARIANT_DIR" != "" ]; then
6841 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6842fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006843
6844if supported_xen_target $target; then
6845 echo "CONFIG_XEN=y" >> $config_target_mak
6846 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00006847 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006848 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006849fi
6850if supported_kvm_target $target; then
6851 echo "CONFIG_KVM=y" >> $config_target_mak
6852 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006853 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006854 if test "$vhost_user" = "yes" ; then
6855 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6856 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02006857 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006858fi
6859if supported_hax_target $target; then
6860 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006861fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006862if supported_hvf_target $target; then
6863 echo "CONFIG_HVF=y" >> $config_target_mak
6864fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006865if supported_whpx_target $target; then
6866 echo "CONFIG_WHPX=y" >> $config_target_mak
6867fi
bellardde83cd02003-06-15 20:25:43 +00006868if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006869 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006870fi
6871if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006872 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00006873 if test "$mttcg" = "yes" ; then
6874 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6875 fi
bellardde83cd02003-06-15 20:25:43 +00006876fi
bellard997344f2003-10-27 21:10:39 +00006877if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006878 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01006879 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00006880fi
ths831b7822007-01-18 20:06:33 +00006881if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006882 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00006883fi
pbrook56aebc82008-10-11 17:55:29 +00006884list=""
6885if test ! -z "$gdb_xml_files" ; then
6886 for x in $gdb_xml_files; do
6887 list="$list $source_path/gdb-xml/$x"
6888 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02006889 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00006890fi
bellardde83cd02003-06-15 20:25:43 +00006891
pbrooke5fe0c52006-06-11 13:32:59 +00006892if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02006893 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00006894fi
blueswir184778502008-10-26 20:33:16 +00006895if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006896 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00006897fi
bellard5b0753e2005-03-01 21:37:28 +00006898
Juan Quintela4afddb52009-08-03 14:46:45 +02006899# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02006900
Juan Quintela4afddb52009-08-03 14:46:45 +02006901cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02006902ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02006903
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006904disas_config() {
6905 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6906 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6907}
6908
Juan Quintela64656022009-08-03 14:46:53 +02006909for i in $ARCH $TARGET_BASE_ARCH ; do
6910 case "$i" in
6911 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006912 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02006913 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05006914 aarch64)
6915 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006916 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05006917 fi
6918 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006919 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006920 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006921 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006922 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006923 fi
Juan Quintela64656022009-08-03 14:46:53 +02006924 ;;
6925 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006926 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02006927 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07006928 hppa)
6929 disas_config "HPPA"
6930 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006931 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006932 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02006933 ;;
Michael Walle79368f42012-03-31 19:54:20 +02006934 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006935 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02006936 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006937 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006938 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02006939 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006940 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006941 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02006942 ;;
6943 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006944 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02006945 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006946 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006947 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04006948 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006949 nios2)
6950 disas_config "NIOS2"
6951 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006952 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006953 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08006954 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006955 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006956 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02006957 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006958 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006959 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02006960 ;;
6961 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006962 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02006963 ;;
6964 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006965 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02006966 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006967 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006968 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04006969 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006970 esac
6971done
Stefan Weil9195b2c2011-10-19 07:07:18 +02006972if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006973 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02006974fi
Juan Quintela64656022009-08-03 14:46:53 +02006975
Juan Quintela6ee71262009-08-03 14:46:47 +02006976case "$ARCH" in
6977alpha)
6978 # Ensure there's only a single GP
6979 cflags="-msmall-data $cflags"
6980;;
6981esac
6982
Juan Quintelad02c1db2009-08-03 14:46:50 +02006983if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006984 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006985 if test "$target_linux_user" = "yes" ; then
6986 cflags="-p $cflags"
6987 ldflags="-p $ldflags"
6988 fi
6989 if test "$target_softmmu" = "yes" ; then
6990 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02006991 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006992 fi
6993fi
6994
Juan Quintela9b8e1112009-08-03 14:46:46 +02006995if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006996 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02006997fi
Juan Quintelafa282482009-07-22 22:37:39 +02006998
Christian Borntraegere9a35912017-08-23 12:16:23 +02006999# Newer kernels on s390 check for an S390_PGSTE program header and
7000# enable the pgste page table extensions in that case. This makes
7001# the vm.allocate_pgste sysctl unnecessary. We enable this program
7002# header if
7003# - we build on s390x
7004# - we build the system emulation for s390x (qemu-system-s390x)
7005# - KVM is enabled
7006# - the linker supports --s390-pgste
7007if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7008 if ld_has --s390-pgste ; then
7009 ldflags="-Wl,--s390-pgste $ldflags"
7010 fi
7011fi
7012
Juan Quintela25be2102009-10-07 02:41:00 +02007013echo "LDFLAGS+=$ldflags" >> $config_target_mak
7014echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007015
bellard97a847b2003-08-10 21:36:04 +00007016done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007017
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007018if [ "$dtc_internal" = "yes" ]; then
7019 echo "config-host.h: subdir-dtc" >> $config_host_mak
7020fi
Richard Hendersone219c492017-09-28 09:01:23 -07007021if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7022 echo "config-host.h: subdir-capstone" >> $config_host_mak
7023fi
7024if test -n "$LIBCAPSTONE"; then
7025 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7026fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007027
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007028if test "$numa" = "yes"; then
7029 echo "CONFIG_NUMA=y" >> $config_host_mak
7030fi
7031
John Snowfd0e6052015-03-25 18:57:39 -04007032if test "$ccache_cpp2" = "yes"; then
7033 echo "export CCACHE_CPP2=y" >> $config_host_mak
7034fi
7035
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007036# build tree in object directory in case the source is not in the current directory
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007037DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007038DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007039DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007040DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2dee8d52012-06-04 09:15:43 +02007041DIRS="$DIRS qapi-generated"
Anthony Liguoric09015d2012-01-10 13:10:42 -06007042FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7043FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02007044FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007045FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02007046FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007047FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007048FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01007049FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01007050FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07007051for bios_file in \
7052 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007053 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007054 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007055 $source_path/pc-bios/*.rom \
7056 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007057 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007058 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007059 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007060 $source_path/pc-bios/palcode-*
7061do
Stefan Weil89138852016-05-16 15:10:20 +02007062 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007063done
Stefan Weil89138852016-05-16 15:10:20 +02007064for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007065do
Stefan Weil89138852016-05-16 15:10:20 +02007066 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007067done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007068mkdir -p $DIRS
7069for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007070 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007071 symlink "$source_path/$f" "$f"
7072 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007073done
Paul Brook1ad21342009-05-19 16:17:58 +01007074
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007075# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007076for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007077 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007078 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007079 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007080 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007081 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007082 echo "CC=$cc" >> $config_mak
7083 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007084 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007085 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007086 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007087 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007088 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007089done
7090
Marc-André Lureaufe310172016-06-15 13:06:00 +02007091# set up tests data directory
7092if [ ! -e tests/data ]; then
7093 symlink "$source_path/tests/data" tests/data
7094fi
7095
Max Reitz76c75602014-05-24 23:24:56 +02007096# set up qemu-iotests in this build directory
7097iotests_common_env="tests/qemu-iotests/common.env"
7098iotests_check="tests/qemu-iotests/check"
7099
7100echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7101echo >> "$iotests_common_env"
7102echo "export PYTHON='$python'" >> "$iotests_common_env"
7103
7104if [ ! -e "$iotests_check" ]; then
7105 symlink "$source_path/$iotests_check" "$iotests_check"
7106fi
7107
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007108# Save the configure command line for later reuse.
7109cat <<EOD >config.status
7110#!/bin/sh
7111# Generated by configure.
7112# Run this file to recreate the current configuration.
7113# Compiler output produced by configure, useful for debugging
7114# configure, is in config.log if it exists.
7115EOD
7116printf "exec" >>config.status
7117printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007118echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007119chmod +x config.status
7120
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007121rm -r "$TMPDIR1"