blob: 5354d51930ee460e5831c36862c70b2ea6334975 [file] [log] [blame]
bellard7d132992003-03-06 23:23:54 +00001#!/bin/sh
2#
bellard3ef693a2003-03-23 20:17:16 +00003# qemu configure script (c) 2003 Fabrice Bellard
bellard7d132992003-03-06 23:23:54 +00004#
Peter Maydell8cd05ab2014-05-23 17:07:24 +01005
Cornelia Huck99519e62014-05-28 12:39:17 +02006# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
John Snow5e4dfd32015-10-28 13:56:40 -040011# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
Peter Maydell8cd05ab2014-05-23 17:07:24 +010014# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
bellard7d132992003-03-06 23:23:54 +000025fi
26
Peter Maydell8cd05ab2014-05-23 17:07:24 +010027TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
Don Slutz66518bf2014-01-02 21:12:46 -050029TMPO="${TMPDIR1}/${TMPB}.o"
Peter Maydell9c83ffd2014-02-25 18:27:49 +000030TMPCXX="${TMPDIR1}/${TMPB}.cxx"
Peter Maydell8cd05ab2014-05-23 17:07:24 +010031TMPE="${TMPDIR1}/${TMPB}.exe"
James Clarke6969ec62016-06-06 12:02:50 +010032TMPMO="${TMPDIR1}/${TMPB}.mo"
bellard7d132992003-03-06 23:23:54 +000033
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020034rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000035
Peter Maydellb48e3612011-11-23 17:26:44 +000036# Print a helpful header at the top of config.log
37echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000038printf "# Configured with:" >> config.log
39printf " '%s'" "$0" "$@" >> config.log
40echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000041echo "#" >> config.log
42
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020043print_error() {
44 (echo
Peter Maydell76ad07a2013-04-08 12:11:26 +010045 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
Paolo Bonzinid880a3b2017-07-03 16:58:28 +020050 echo) >&2
51}
52
53error_exit() {
54 print_error "$@"
Peter Maydell76ad07a2013-04-08 12:11:26 +010055 exit 1
56}
57
Peter Maydell9c83ffd2014-02-25 18:27:49 +000058do_compiler() {
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
61 local compiler="$1"
62 shift
Ian Jackson8bbe05d2017-09-25 16:41:03 +010063 if test -n "$BASH_VERSION"; then eval '
64 echo >>config.log "
65funcs: ${FUNCNAME[*]}
66lines: ${BASH_LINENO[*]}"
67 '; fi
Peter Maydell9c83ffd2014-02-25 18:27:49 +000068 echo $compiler "$@" >> config.log
69 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010070 # Test passed. If this is an --enable-werror build, rerun
71 # the test with -Werror and bail out if it fails. This
72 # makes warning-generating-errors in configure test code
73 # obvious to developers.
74 if test "$werror" != "yes"; then
75 return 0
76 fi
77 # Don't bother rerunning the compile if we were already using -Werror
78 case "$*" in
79 *-Werror*)
80 return 0
81 ;;
82 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000083 echo $compiler -Werror "$@" >> config.log
84 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010085 error_exit "configure test passed without -Werror but failed with -Werror." \
86 "This is probably a bug in the configure script. The failing command" \
87 "will be at the bottom of config.log." \
88 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010089}
90
Peter Maydell9c83ffd2014-02-25 18:27:49 +000091do_cc() {
92 do_compiler "$cc" "$@"
93}
94
95do_cxx() {
96 do_compiler "$cxx" "$@"
97}
98
99update_cxxflags() {
100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101 # options which some versions of GCC's C++ compiler complain about
102 # because they only make sense for C programs.
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100103 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
104
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000105 for arg in $QEMU_CFLAGS; do
106 case $arg in
107 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
108 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
109 ;;
Thomas Huth7be41672019-01-07 11:25:22 +0100110 -std=gnu99)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
112 ;;
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000113 *)
114 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
115 ;;
116 esac
117 done
118}
119
Juan Quintela52166aa2009-08-03 14:46:03 +0200120compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400121 local_cflags="$1"
122 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200123}
124
125compile_prog() {
126 local_cflags="$1"
127 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100128 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200129}
130
Paolo Bonzini11568d62010-12-23 11:43:58 +0100131# symbolically link $1 to $2. Portable version of "ln -sf".
132symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100133 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800134 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100135 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100136}
137
LoĂŻc Minier0dba6192010-01-28 21:26:51 +0000138# check whether a command is available to this shell (may be either an
139# executable or a builtin)
140has() {
141 type "$1" >/dev/null 2>&1
142}
143
144# search for an executable in PATH
145path_of() {
146 local_command="$1"
147 local_ifs="$IFS"
148 local_dir=""
149
150 # pathname has a dir component?
151 if [ "${local_command#*/}" != "$local_command" ]; then
152 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
153 echo "$local_command"
154 return 0
155 fi
156 fi
157 if [ -z "$local_command" ]; then
158 return 1
159 fi
160
161 IFS=:
162 for local_dir in $PATH; do
163 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
164 echo "$local_dir/$local_command"
165 IFS="${local_ifs:-$(printf ' \t\n')}"
166 return 0
167 fi
168 done
169 # not found
170 IFS="${local_ifs:-$(printf ' \t\n')}"
171 return 1
172}
173
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200174have_backend () {
175 echo "$trace_backends" | grep "$1" >/dev/null
176}
177
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200178glob() {
179 eval test -z '"${1#'"$2"'}"'
180}
181
182supported_hax_target() {
183 test "$hax" = "yes" || return 1
184 glob "$1" "*-softmmu" || return 1
185 case "${1%-softmmu}" in
186 i386|x86_64)
187 return 0
188 ;;
189 esac
190 return 1
191}
192
193supported_kvm_target() {
194 test "$kvm" = "yes" || return 1
195 glob "$1" "*-softmmu" || return 1
196 case "${1%-softmmu}:$cpu" in
197 arm:arm | aarch64:aarch64 | \
198 i386:i386 | i386:x86_64 | i386:x32 | \
199 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
200 mips:mips | mipsel:mips | \
Thomas Hutha69dc532018-08-21 13:27:48 +0200201 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | \
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200202 s390x:s390x)
203 return 0
204 ;;
205 esac
206 return 1
207}
208
209supported_xen_target() {
210 test "$xen" = "yes" || return 1
211 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200212 # Only i386 and x86_64 provide the xenpv machine.
213 case "${1%-softmmu}" in
214 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200215 return 0
216 ;;
217 esac
218 return 1
219}
220
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500221supported_hvf_target() {
222 test "$hvf" = "yes" || return 1
223 glob "$1" "*-softmmu" || return 1
224 case "${1%-softmmu}" in
225 x86_64)
226 return 0
227 ;;
228 esac
229 return 1
230}
231
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800232supported_whpx_target() {
233 test "$whpx" = "yes" || return 1
234 glob "$1" "*-softmmu" || return 1
235 case "${1%-softmmu}" in
236 i386|x86_64)
237 return 0
238 ;;
239 esac
240 return 1
241}
242
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200243supported_target() {
244 case "$1" in
245 *-softmmu)
246 ;;
247 *-linux-user)
248 if test "$linux" != "yes"; then
249 print_error "Target '$target' is only available on a Linux host"
250 return 1
251 fi
252 ;;
253 *-bsd-user)
254 if test "$bsd" != "yes"; then
255 print_error "Target '$target' is only available on a BSD host"
256 return 1
257 fi
258 ;;
259 *)
260 print_error "Invalid target name '$target'"
261 return 1
262 ;;
263 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200264 test "$tcg" = "yes" && return 0
265 supported_kvm_target "$1" && return 0
266 supported_xen_target "$1" && return 0
267 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500268 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800269 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200270 print_error "TCG disabled, but hardware accelerator not available for '$target'"
271 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200272}
273
Christian Borntraegere9a35912017-08-23 12:16:23 +0200274
275ld_has() {
276 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
277}
278
bellard7d132992003-03-06 23:23:54 +0000279# default parameters
Stefan Weil89138852016-05-16 15:10:20 +0200280source_path=$(dirname "$0")
Juan Quintela2ff6b912009-08-03 14:45:55 +0200281cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300282iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000283interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000284static="no"
bellard7d132992003-03-06 23:23:54 +0000285cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000286audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800287block_drv_rw_whitelist=""
288block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000289host_cc="cc"
Juan Quintela73da3752009-08-03 14:46:26 +0200290libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200291libs_tools=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200292audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400293audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500294libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100295debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100296stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000297
Daniel P. Berrange92712822017-09-29 11:11:58 +0100298if test -e "$source_path/.git"
299then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100300 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100301 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500302 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
303 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100304else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100305 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100306 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100307
308 if ! test -f "$source_path/ui/keycodemapdb/README"
309 then
310 echo
311 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
312 echo
313 echo "This is not a GIT checkout but module content appears to"
314 echo "be missing. Do not use 'git archive' or GitHub download links"
315 echo "to acquire QEMU source archives. Non-GIT builds are only"
316 echo "supported with source archives linked from:"
317 echo
318 echo " https://www.qemu.org/download/"
319 echo
320 echo "Developers working with GIT can use scripts/archive-source.sh"
321 echo "if they need to create valid source archives."
322 echo
323 exit 1
324 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100325fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100326git="git"
aliguoriac0df512008-12-29 17:14:15 +0000327
Stefan Weilafb63eb2012-09-26 22:04:38 +0200328# Don't accept a target_list environment variable.
329unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100330
331# Default value for a variable defining feature "foo".
332# * foo="no" feature will only be used if --enable-foo arg is given
333# * foo="" feature will be searched for, and if found, will be used
334# unless --disable-foo is given
335# * foo="yes" this value will only be set by --enable-foo flag.
336# feature will searched for,
337# if not found, configure exits with error
338#
339# Always add --enable-foo and --disable-foo command line args.
340# Distributions want to ensure that several features are compiled in, and it
341# is impossible without a --enable-foo that exits if a feature is not found.
342
343bluez=""
344brlapi=""
345curl=""
346curses=""
347docs=""
348fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100349netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100350sdl=""
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +0000351sdl_image=""
Meador Inge983eef52012-02-24 14:00:42 +0530352virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200353mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100354vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100355sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100356vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100357vnc_sasl=""
358vnc_jpeg=""
359vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200360xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100361xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000362xen_ctrl_version=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000363xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500365cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200367libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100368xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200369tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100370membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100371vhost_net=""
372vhost_crypto=""
373vhost_scsi=""
374vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200375vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400376kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100377hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500378hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800379whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400380rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300381pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100382gprof="no"
383debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100384debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100385sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500386fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100387strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200388tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100389bigendian="no"
390mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000391gcov="no"
392gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100393EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800394DSOSUF=".so"
395LDFLAGS_SHARED="-shared"
396modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100397prefix="/usr/local"
398mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300399datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200400firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300401qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100402bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300403libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400404libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200405includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100406sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300407local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100408confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100409slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100410oss_lib=""
411bsd="no"
412linux="no"
413solaris="no"
414profiler="no"
415cocoa="no"
416softmmu="yes"
417linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100418bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100419blobs="yes"
420pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200421pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200422qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300423trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100424trace_file="trace"
425spice=""
426rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200427smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100428libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200429usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100430opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100431opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000432cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100433avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300434zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700435capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200436lzo=""
437snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100438bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200439lzfse=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400440guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400441guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500442guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300443guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400444vss_win32_sdk=""
445win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100446want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100447libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100448libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100449coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200450coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200451debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400452crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300453seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530454glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400455glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530456glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530457glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530458glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100459glusterfs_ftruncate_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600460gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200461gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100462tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100463gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100464nettle=""
465gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800466gcrypt_hmac="no"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100467auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100468vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200469virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800470tpm=""
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100471libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100472live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800473numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800474tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200475jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800476replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700477vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100478bochs="yes"
479cloop="yes"
480dmg="yes"
481qcow1="yes"
482vdi="yes"
483vvfat="yes"
484qed="yes"
485parallels="yes"
486sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300487libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100488docker="no"
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200489debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800490libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800491default_devices="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100492
Alex Bennéed75402b2018-04-04 20:27:05 +0100493# cross compilers defaults, can be overridden with --cross-cc-ARCH
494cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100495cross_cc_aarch64_be="$cross_cc_aarch64"
496cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100497cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100498cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100499cross_cc_i386="i386-pc-linux-gnu-gcc"
500cross_cc_cflags_i386=""
Alex Bennéed75402b2018-04-04 20:27:05 +0100501cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100502cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100503
504enabled_cross_compilers=""
505
Peter Maydell898be3e2017-03-21 14:31:57 +0000506supported_cpu="no"
507supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100508bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800509malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000510
aliguoriac0df512008-12-29 17:14:15 +0000511# parse CC options first
512for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200513 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000514 case "$opt" in
515 --cross-prefix=*) cross_prefix="$optarg"
516 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100517 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000518 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400519 --cxx=*) CXX="$optarg"
520 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100521 --source-path=*) source_path="$optarg"
522 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200523 --cpu=*) cpu="$optarg"
524 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100525 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200526 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100527 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100528 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100529 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100530 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200531 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100532 --enable-debug-info) debug_info="yes"
533 ;;
534 --disable-debug-info) debug_info="no"
535 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100536 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
537 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100538 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
539 eval "cross_cc_cflags_${cc_arch}=\$optarg"
540 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100541 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
542 eval "cross_cc_${cc_arch}=\$optarg"
543 ;;
aliguoriac0df512008-12-29 17:14:15 +0000544 esac
545done
aliguoriac0df512008-12-29 17:14:15 +0000546# OS specific
547# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100548# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000549
Peter Maydelle49d0212012-12-07 15:39:13 +0000550# Preferred compiler:
551# ${CC} (if set)
552# ${cross_prefix}gcc (if cross-prefix specified)
553# system compiler
554if test -z "${CC}${cross_prefix}"; then
555 cc="$host_cc"
556else
557 cc="${CC-${cross_prefix}gcc}"
558fi
559
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400560if test -z "${CXX}${cross_prefix}"; then
561 cxx="c++"
562else
563 cxx="${CXX-${cross_prefix}g++}"
564fi
565
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500566ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700567as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700568ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000569cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500570objcopy="${OBJCOPY-${cross_prefix}objcopy}"
571ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800572ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200573nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500574strip="${STRIP-${cross_prefix}strip}"
575windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300576pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
577query_pkg_config() {
578 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
579}
580pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000581sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000582
Peter Maydell45d285a2013-10-21 21:03:06 +0100583# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
584ARFLAGS="${ARFLAGS-rv}"
585
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200586# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100587# We use -fwrapv to tell the compiler that we require a C dialect where
588# left shift of signed integers is well defined and has the expected
589# 2s-complement style results. (Both clang and gcc agree that it
590# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100591QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400592QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100593QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200594QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200595QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100596if test "$debug_info" = "yes"; then
597 CFLAGS="-g $CFLAGS"
598 LDFLAGS="-g $LDFLAGS"
599fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200600
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100601# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200602source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100603
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300604# running configure in the source tree?
605# we know that's the case if configure is there.
606if test -f "./configure"; then
607 pwd_is_source_path="y"
608else
609 pwd_is_source_path="n"
610fi
611
aliguoriac0df512008-12-29 17:14:15 +0000612check_define() {
613cat > $TMPC <<EOF
614#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000615#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000616#endif
617int main(void) { return 0; }
618EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200619 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000620}
621
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200622check_include() {
623cat > $TMPC <<EOF
624#include <$1>
625int main(void) { return 0; }
626EOF
627 compile_object
628}
629
John Snow93b25862015-03-25 18:57:37 -0400630write_c_skeleton() {
631 cat > $TMPC <<EOF
632int main(void) { return 0; }
633EOF
634}
635
Peter Maydellbbea4052012-08-14 15:35:34 +0100636if check_define __linux__ ; then
637 targetos="Linux"
638elif check_define _WIN32 ; then
639 targetos='MINGW32'
640elif check_define __OpenBSD__ ; then
641 targetos='OpenBSD'
642elif check_define __sun__ ; then
643 targetos='SunOS'
644elif check_define __HAIKU__ ; then
645 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100646elif check_define __FreeBSD__ ; then
647 targetos='FreeBSD'
648elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
649 targetos='GNU/kFreeBSD'
650elif check_define __DragonFly__ ; then
651 targetos='DragonFly'
652elif check_define __NetBSD__; then
653 targetos='NetBSD'
654elif check_define __APPLE__; then
655 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100656else
Peter Maydell951fedf2017-07-13 16:15:32 +0100657 # This is a fatal error, but don't report it yet, because we
658 # might be going to just print the --help text, or it might
659 # be the result of a missing compiler.
660 targetos='bogus'
661 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100662fi
663
664# Some host OSes need non-standard checks for which CPU to use.
665# Note that these checks are broken for cross-compilation: if you're
666# cross-compiling to one of these OSes then you'll need to specify
667# the correct CPU with the --cpu option.
668case $targetos in
669Darwin)
670 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
671 # run 64-bit userspace code.
672 # If the user didn't specify a CPU explicitly and the kernel says this is
673 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
674 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
675 cpu="x86_64"
676 fi
677 ;;
678SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200679 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100680 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
681 cpu="x86_64"
682 fi
683esac
684
Juan Quintela2ff6b912009-08-03 14:45:55 +0200685if test ! -z "$cpu" ; then
686 # command line argument
687 :
688elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000689 cpu="i386"
690elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700691 if check_define __ILP32__ ; then
692 cpu="x32"
693 else
694 cpu="x86_64"
695 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000696elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000697 if check_define __arch64__ ; then
698 cpu="sparc64"
699 else
700 cpu="sparc"
701 fi
malcfdf7ed92009-01-14 18:39:52 +0000702elif check_define _ARCH_PPC ; then
703 if check_define _ARCH_PPC64 ; then
704 cpu="ppc64"
705 else
706 cpu="ppc"
707 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200708elif check_define __mips__ ; then
709 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200710elif check_define __s390__ ; then
711 if check_define __s390x__ ; then
712 cpu="s390x"
713 else
714 cpu="s390"
715 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000716elif check_define __riscv ; then
717 if check_define _LP64 ; then
718 cpu="riscv64"
719 else
720 cpu="riscv32"
721 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100722elif check_define __arm__ ; then
723 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100724elif check_define __aarch64__ ; then
725 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000726else
Stefan Weil89138852016-05-16 15:10:20 +0200727 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000728fi
729
Peter Maydell359bc952011-12-24 13:07:25 +0000730ARCH=
731# Normalise host CPU name and set ARCH.
732# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000733case "$cpu" in
Alistair Francisc4f80542018-12-19 19:20:19 +0000734 ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000735 cpu="$cpu"
736 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100737 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000738 ;;
bellard7d132992003-03-06 23:23:54 +0000739 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000740 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000741 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100742 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000743 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000744 x86_64|amd64)
745 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000746 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100747 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000748 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100749 armv*b|armv*l|arm)
750 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000751 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100752 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000753 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100754 aarch64)
755 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000756 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100757 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100758 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200759 mips*)
760 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000761 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100762 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200763 ;;
blueswir131422552007-04-16 18:27:06 +0000764 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000765 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100766 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100767 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000768 ;;
bellard7d132992003-03-06 23:23:54 +0000769 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000770 # This will result in either an error or falling back to TCI later
771 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000772 ;;
773esac
Peter Maydell359bc952011-12-24 13:07:25 +0000774if test -z "$ARCH"; then
775 ARCH="$cpu"
776fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200777
bellard7d132992003-03-06 23:23:54 +0000778# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200779
Stacey Sonadfc3e92014-06-08 09:57:22 -0700780# host *BSD for user mode
781HOST_VARIANT_DIR=""
782
bellard7d132992003-03-06 23:23:54 +0000783case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000784MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200785 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100786 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100787 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200788 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200789 if check_include dsound.h; then
790 audio_drv_list="dsound"
791 else
792 audio_drv_list=""
793 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000794 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000795;;
ths5c40d2b2007-06-23 16:03:36 +0000796GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100797 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100798 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200799 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000800;;
bellard7d3505c2004-05-12 19:32:15 +0000801FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200802 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100803 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100804 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200805 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100806 # needed for kinfo_getvmmap(3) in libutil.h
807 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500808 # needed for kinfo_getproc
809 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100810 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700811 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000812 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000813;;
blueswir1c5e97232009-03-07 20:06:23 +0000814DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200815 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100816 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100817 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200818 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700819 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000820;;
bellard7d3505c2004-05-12 19:32:15 +0000821NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200822 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100823 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100824 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100825 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200826 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200827 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700828 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200829 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000830;;
831OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200832 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100833 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100834 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200835 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700836 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500837 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000838;;
bellard83fb7ad2004-07-05 21:25:26 +0000839Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200840 bsd="yes"
841 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100842 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500843 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800844 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200845 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200846 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200847 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200848 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200849 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100850 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200851 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200852 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200853 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100854 # Disable attempts to use ObjectiveC features in os/object.h since they
855 # won't work when we're compiling with gcc as a C compiler.
856 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700857 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000858 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000859;;
bellardec530c82006-04-25 22:36:06 +0000860SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200861 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100862 make="${MAKE-gmake}"
863 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400864 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200865 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100866 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200867 fi
868 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000869# needed for CMSG_ macros in sys/socket.h
870 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
871# needed for TIOCWIN* defines in termios.h
872 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200873 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200874 solarisnetlibs="-lsocket -lnsl -lresolv"
875 LIBS="$solarisnetlibs $LIBS"
876 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000877;;
Andreas Färber179cf402010-09-20 00:50:43 +0200878Haiku)
879 haiku="yes"
880 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
881 LIBS="-lposix_error_mapper -lnetwork $LIBS"
882;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000883Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100884 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200885 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200886 linux="yes"
887 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200888 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600889 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000890 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200891 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000892;;
bellard7d132992003-03-06 23:23:54 +0000893esac
894
bellard7d3505c2004-05-12 19:32:15 +0000895if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000896 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200897 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000898 fi
bellard7d3505c2004-05-12 19:32:15 +0000899fi
900
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100901: ${make=${MAKE-make}}
902: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100903: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400904: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100905
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100906# Default objcc to clang if available, otherwise use CC
907if has clang; then
908 objcc=clang
909else
910 objcc="$cc"
911fi
912
Juan Quintela3457a3f2009-08-03 14:46:07 +0200913if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200914 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800915 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100916 # MinGW needs -mthreads for TLS and macro _MT.
917 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100918 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400919 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100920 if compile_prog "" "-liberty" ; then
921 LIBS="-liberty $LIBS"
922 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200923 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200924 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300925 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300926 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200927 bindir="\${prefix}"
928 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200929 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200930 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300931 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200932fi
933
Anthony Liguori487fefd2009-06-11 13:28:25 -0500934werror=""
bellard85aa5182007-11-11 20:17:03 +0000935
bellard7d132992003-03-06 23:23:54 +0000936for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200937 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000938 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000939 --help|-h) show_help=yes
940 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400941 --version|-V) exec cat $source_path/VERSION
942 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000943 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000944 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000945 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000946 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100947 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000948 ;;
aliguoriac0df512008-12-29 17:14:15 +0000949 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000950 ;;
aliguoriac0df512008-12-29 17:14:15 +0000951 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000952 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000953 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000954 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400955 --cxx=*)
956 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200957 --iasl=*) iasl="$optarg"
958 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100959 --objcc=*) objcc="$optarg"
960 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000961 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000962 ;;
pbrook6a882642006-04-17 13:57:12 +0000963 --install=*) install="$optarg"
964 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000965 --python=*) python="$optarg"
966 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000967 --gcov=*) gcov_tool="$optarg"
968 ;;
Brade2d88302011-09-02 16:53:28 -0400969 --smbd=*) smbd="$optarg"
970 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200971 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000972 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100973 --extra-cxxflags=*)
974 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200975 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000976 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100977 --enable-debug-info)
978 ;;
979 --disable-debug-info)
980 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100981 --cross-cc-*)
982 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800983 --enable-modules)
984 modules="yes"
985 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000986 --disable-modules)
987 modules="no"
988 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200989 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000990 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000991 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000992 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200993 --enable-trace-backends=*) trace_backends="$optarg"
994 ;;
995 # XXX: backwards compatibility
996 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100997 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100998 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100999 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001000 --with-default-devices) default_devices="yes"
1001 ;;
1002 --without-default-devices) default_devices="no"
1003 ;;
bellard7d132992003-03-06 23:23:54 +00001004 --enable-gprof) gprof="yes"
1005 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001006 --enable-gcov) gcov="yes"
1007 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +01001008 --static)
1009 static="yes"
1010 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001011 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001012 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001013 --mandir=*) mandir="$optarg"
1014 ;;
1015 --bindir=*) bindir="$optarg"
1016 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001017 --libdir=*) libdir="$optarg"
1018 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001019 --libexecdir=*) libexecdir="$optarg"
1020 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001021 --includedir=*) includedir="$optarg"
1022 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001023 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001024 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001025 --with-confsuffix=*) confsuffix="$optarg"
1026 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001027 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001028 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001029 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001030 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001031 --localstatedir=*) local_statedir="$optarg"
1032 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001033 --firmwarepath=*) firmwarepath="$optarg"
1034 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001035 --host=*|--build=*|\
1036 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001037 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001038 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1039 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1040 # These switches are silently ignored, for compatibility with
1041 # autoconf-generated configure scripts. This allows QEMU's
1042 # configure to be used by RPM and similar macros that set
1043 # lots of directory switches by default.
1044 ;;
bellard97a847b2003-08-10 21:36:04 +00001045 --disable-sdl) sdl="no"
1046 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001047 --enable-sdl) sdl="yes"
1048 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001049 --disable-sdl-image) sdl_image="no"
1050 ;;
1051 --enable-sdl-image) sdl_image="yes"
1052 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001053 --disable-qom-cast-debug) qom_cast_debug="no"
1054 ;;
1055 --enable-qom-cast-debug) qom_cast_debug="yes"
1056 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301057 --disable-virtfs) virtfs="no"
1058 ;;
1059 --enable-virtfs) virtfs="yes"
1060 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001061 --disable-mpath) mpath="no"
1062 ;;
1063 --enable-mpath) mpath="yes"
1064 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001065 --disable-vnc) vnc="no"
1066 ;;
1067 --enable-vnc) vnc="yes"
1068 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001069 --oss-lib=*) oss_lib="$optarg"
1070 ;;
malc0c58ac12008-06-25 21:04:05 +00001071 --audio-drv-list=*) audio_drv_list="$optarg"
1072 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001073 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001074 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001075 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001076 ;;
aurel32f8393942009-04-13 18:45:38 +00001077 --enable-debug-tcg) debug_tcg="yes"
1078 ;;
1079 --disable-debug-tcg) debug_tcg="no"
1080 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001081 --enable-debug)
1082 # Enable debugging options that aren't excessively noisy
1083 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001084 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001085 debug="yes"
1086 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001087 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001088 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001089 --enable-sanitizers) sanitizers="yes"
1090 ;;
1091 --disable-sanitizers) sanitizers="no"
1092 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001093 --enable-sparse) sparse="yes"
1094 ;;
1095 --disable-sparse) sparse="no"
1096 ;;
aliguori1625af82009-04-05 17:41:02 +00001097 --disable-strip) strip_opt="no"
1098 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001099 --disable-vnc-sasl) vnc_sasl="no"
1100 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001101 --enable-vnc-sasl) vnc_sasl="yes"
1102 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001103 --disable-vnc-jpeg) vnc_jpeg="no"
1104 ;;
1105 --enable-vnc-jpeg) vnc_jpeg="yes"
1106 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001107 --disable-vnc-png) vnc_png="no"
1108 ;;
1109 --enable-vnc-png) vnc_png="yes"
1110 ;;
bellard443f1372004-06-04 11:13:20 +00001111 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001112 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001113 --enable-slirp=git) slirp="git"
1114 ;;
1115 --enable-slirp=system) slirp="system"
1116 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001117 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001118 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001119 --enable-vde) vde="yes"
1120 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001121 --disable-netmap) netmap="no"
1122 ;;
1123 --enable-netmap) netmap="yes"
1124 ;;
aliguorie37630c2009-04-22 15:19:10 +00001125 --disable-xen) xen="no"
1126 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001127 --enable-xen) xen="yes"
1128 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001129 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1130 ;;
1131 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1132 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001133 --disable-brlapi) brlapi="no"
1134 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001135 --enable-brlapi) brlapi="yes"
1136 ;;
balrogfb599c92008-09-28 23:49:55 +00001137 --disable-bluez) bluez="no"
1138 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001139 --enable-bluez) bluez="yes"
1140 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001141 --disable-kvm) kvm="no"
1142 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001143 --enable-kvm) kvm="yes"
1144 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001145 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001146 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001147 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001148 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001149 --disable-hvf) hvf="no"
1150 ;;
1151 --enable-hvf) hvf="yes"
1152 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001153 --disable-whpx) whpx="no"
1154 ;;
1155 --enable-whpx) whpx="yes"
1156 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001157 --disable-tcg-interpreter) tcg_interpreter="no"
1158 ;;
1159 --enable-tcg-interpreter) tcg_interpreter="yes"
1160 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001161 --disable-cap-ng) cap_ng="no"
1162 ;;
1163 --enable-cap-ng) cap_ng="yes"
1164 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001165 --disable-tcg) tcg="no"
1166 ;;
1167 --enable-tcg) tcg="yes"
1168 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001169 --disable-malloc-trim) malloc_trim="no"
1170 ;;
1171 --enable-malloc-trim) malloc_trim="yes"
1172 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001173 --disable-spice) spice="no"
1174 ;;
1175 --enable-spice) spice="yes"
1176 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001177 --disable-libiscsi) libiscsi="no"
1178 ;;
1179 --enable-libiscsi) libiscsi="yes"
1180 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001181 --disable-libnfs) libnfs="no"
1182 ;;
1183 --enable-libnfs) libnfs="yes"
1184 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001185 --enable-profiler) profiler="yes"
1186 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001187 --disable-cocoa) cocoa="no"
1188 ;;
malcc2de5c92008-06-28 19:13:06 +00001189 --enable-cocoa)
1190 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001191 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001192 ;;
pbrookcad25d62006-03-19 16:31:11 +00001193 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001194 ;;
pbrookcad25d62006-03-19 16:31:11 +00001195 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001196 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001197 --disable-user)
1198 linux_user="no" ;
1199 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001200 ;;
1201 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001202 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001203 ;;
ths831b7822007-01-18 20:06:33 +00001204 --enable-linux-user) linux_user="yes"
1205 ;;
blueswir184778502008-10-26 20:33:16 +00001206 --disable-bsd-user) bsd_user="no"
1207 ;;
1208 --enable-bsd-user) bsd_user="yes"
1209 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001210 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001211 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001212 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001213 ;;
bellard85aa5182007-11-11 20:17:03 +00001214 --enable-werror) werror="yes"
1215 ;;
1216 --disable-werror) werror="no"
1217 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001218 --enable-stack-protector) stack_protector="yes"
1219 ;;
1220 --disable-stack-protector) stack_protector="no"
1221 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001222 --disable-curses) curses="no"
1223 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001224 --enable-curses) curses="yes"
1225 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001226 --disable-curl) curl="no"
1227 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001228 --enable-curl) curl="yes"
1229 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001230 --disable-fdt) fdt="no"
1231 ;;
1232 --enable-fdt) fdt="yes"
1233 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001234 --disable-linux-aio) linux_aio="no"
1235 ;;
1236 --enable-linux-aio) linux_aio="yes"
1237 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001238 --disable-attr) attr="no"
1239 ;;
1240 --enable-attr) attr="yes"
1241 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001242 --disable-membarrier) membarrier="no"
1243 ;;
1244 --enable-membarrier) membarrier="yes"
1245 ;;
ths77755342008-11-27 15:45:16 +00001246 --disable-blobs) blobs="no"
1247 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001248 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001249 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001250 --with-coroutine=*) coroutine="$optarg"
1251 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001252 --disable-coroutine-pool) coroutine_pool="no"
1253 ;;
1254 --enable-coroutine-pool) coroutine_pool="yes"
1255 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001256 --enable-debug-stack-usage) debug_stack_usage="yes"
1257 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001258 --enable-crypto-afalg) crypto_afalg="yes"
1259 ;;
1260 --disable-crypto-afalg) crypto_afalg="no"
1261 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001262 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001263 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001264 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001265 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001266 --disable-vhost-net) vhost_net="no"
1267 ;;
1268 --enable-vhost-net) vhost_net="yes"
1269 ;;
Gonglei042cea22018-03-01 21:46:28 +08001270 --disable-vhost-crypto) vhost_crypto="no"
1271 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001272 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001273 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001274 --disable-vhost-scsi) vhost_scsi="no"
1275 ;;
1276 --enable-vhost-scsi) vhost_scsi="yes"
1277 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001278 --disable-vhost-vsock) vhost_vsock="no"
1279 ;;
1280 --enable-vhost-vsock) vhost_vsock="yes"
1281 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001282 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001283 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001284 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001285 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001286 --disable-rbd) rbd="no"
1287 ;;
1288 --enable-rbd) rbd="yes"
1289 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001290 --disable-xfsctl) xfs="no"
1291 ;;
1292 --enable-xfsctl) xfs="yes"
1293 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001294 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001295 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001296 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001297 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001298 --disable-libusb) libusb="no"
1299 ;;
1300 --enable-libusb) libusb="yes"
1301 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001302 --disable-usb-redir) usb_redir="no"
1303 ;;
1304 --enable-usb-redir) usb_redir="yes"
1305 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001306 --disable-zlib-test) zlib="no"
1307 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001308 --disable-lzo) lzo="no"
1309 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001310 --enable-lzo) lzo="yes"
1311 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001312 --disable-snappy) snappy="no"
1313 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001314 --enable-snappy) snappy="yes"
1315 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001316 --disable-bzip2) bzip2="no"
1317 ;;
1318 --enable-bzip2) bzip2="yes"
1319 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001320 --enable-lzfse) lzfse="yes"
1321 ;;
1322 --disable-lzfse) lzfse="no"
1323 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001324 --enable-guest-agent) guest_agent="yes"
1325 ;;
1326 --disable-guest-agent) guest_agent="no"
1327 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001328 --enable-guest-agent-msi) guest_agent_msi="yes"
1329 ;;
1330 --disable-guest-agent-msi) guest_agent_msi="no"
1331 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001332 --with-vss-sdk) vss_win32_sdk=""
1333 ;;
1334 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1335 ;;
1336 --without-vss-sdk) vss_win32_sdk="no"
1337 ;;
1338 --with-win-sdk) win_sdk=""
1339 ;;
1340 --with-win-sdk=*) win_sdk="$optarg"
1341 ;;
1342 --without-win-sdk) win_sdk="no"
1343 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001344 --enable-tools) want_tools="yes"
1345 ;;
1346 --disable-tools) want_tools="no"
1347 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001348 --enable-seccomp) seccomp="yes"
1349 ;;
1350 --disable-seccomp) seccomp="no"
1351 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301352 --disable-glusterfs) glusterfs="no"
1353 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001354 --disable-avx2) avx2_opt="no"
1355 ;;
1356 --enable-avx2) avx2_opt="yes"
1357 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301358 --enable-glusterfs) glusterfs="yes"
1359 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001360 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1361 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001362 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001363 --enable-vhdx|--disable-vhdx)
1364 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1365 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001366 --enable-uuid|--disable-uuid)
1367 echo "$0: $opt is obsolete, UUID support is always built" >&2
1368 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001369 --disable-gtk) gtk="no"
1370 ;;
1371 --enable-gtk) gtk="yes"
1372 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001373 --tls-priority=*) tls_priority="$optarg"
1374 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001375 --disable-gnutls) gnutls="no"
1376 ;;
1377 --enable-gnutls) gnutls="yes"
1378 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001379 --disable-nettle) nettle="no"
1380 ;;
1381 --enable-nettle) nettle="yes"
1382 ;;
1383 --disable-gcrypt) gcrypt="no"
1384 ;;
1385 --enable-gcrypt) gcrypt="yes"
1386 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001387 --disable-auth-pam) auth_pam="no"
1388 ;;
1389 --enable-auth-pam) auth_pam="yes"
1390 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001391 --enable-rdma) rdma="yes"
1392 ;;
1393 --disable-rdma) rdma="no"
1394 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001395 --enable-pvrdma) pvrdma="yes"
1396 ;;
1397 --disable-pvrdma) pvrdma="no"
1398 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001399 --disable-vte) vte="no"
1400 ;;
1401 --enable-vte) vte="yes"
1402 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001403 --disable-virglrenderer) virglrenderer="no"
1404 ;;
1405 --enable-virglrenderer) virglrenderer="yes"
1406 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001407 --disable-tpm) tpm="no"
1408 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001409 --enable-tpm) tpm="yes"
1410 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001411 --disable-libssh2) libssh2="no"
1412 ;;
1413 --enable-libssh2) libssh2="yes"
1414 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001415 --disable-live-block-migration) live_block_migration="no"
1416 ;;
1417 --enable-live-block-migration) live_block_migration="yes"
1418 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001419 --disable-numa) numa="no"
1420 ;;
1421 --enable-numa) numa="yes"
1422 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001423 --disable-libxml2) libxml2="no"
1424 ;;
1425 --enable-libxml2) libxml2="yes"
1426 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001427 --disable-tcmalloc) tcmalloc="no"
1428 ;;
1429 --enable-tcmalloc) tcmalloc="yes"
1430 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001431 --disable-jemalloc) jemalloc="no"
1432 ;;
1433 --enable-jemalloc) jemalloc="yes"
1434 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001435 --disable-replication) replication="no"
1436 ;;
1437 --enable-replication) replication="yes"
1438 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001439 --disable-vxhs) vxhs="no"
1440 ;;
1441 --enable-vxhs) vxhs="yes"
1442 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001443 --disable-bochs) bochs="no"
1444 ;;
1445 --enable-bochs) bochs="yes"
1446 ;;
1447 --disable-cloop) cloop="no"
1448 ;;
1449 --enable-cloop) cloop="yes"
1450 ;;
1451 --disable-dmg) dmg="no"
1452 ;;
1453 --enable-dmg) dmg="yes"
1454 ;;
1455 --disable-qcow1) qcow1="no"
1456 ;;
1457 --enable-qcow1) qcow1="yes"
1458 ;;
1459 --disable-vdi) vdi="no"
1460 ;;
1461 --enable-vdi) vdi="yes"
1462 ;;
1463 --disable-vvfat) vvfat="no"
1464 ;;
1465 --enable-vvfat) vvfat="yes"
1466 ;;
1467 --disable-qed) qed="no"
1468 ;;
1469 --enable-qed) qed="yes"
1470 ;;
1471 --disable-parallels) parallels="no"
1472 ;;
1473 --enable-parallels) parallels="yes"
1474 ;;
1475 --disable-sheepdog) sheepdog="no"
1476 ;;
1477 --enable-sheepdog) sheepdog="yes"
1478 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001479 --disable-vhost-user) vhost_user="no"
1480 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001481 --enable-vhost-user) vhost_user="yes"
1482 ;;
1483 --disable-vhost-kernel) vhost_kernel="no"
1484 ;;
1485 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001486 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001487 --disable-capstone) capstone="no"
1488 ;;
1489 --enable-capstone) capstone="yes"
1490 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001491 --enable-capstone=git) capstone="git"
1492 ;;
1493 --enable-capstone=system) capstone="system"
1494 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001495 --with-git=*) git="$optarg"
1496 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001497 --enable-git-update) git_update=yes
1498 ;;
1499 --disable-git-update) git_update=no
1500 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001501 --enable-debug-mutex) debug_mutex=yes
1502 ;;
1503 --disable-debug-mutex) debug_mutex=no
1504 ;;
Junyan He17824402018-07-18 15:47:59 +08001505 --enable-libpmem) libpmem=yes
1506 ;;
1507 --disable-libpmem) libpmem=no
1508 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001509 *)
1510 echo "ERROR: unknown option $opt"
1511 echo "Try '$0 --help' for more information"
1512 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001513 ;;
bellard7d132992003-03-06 23:23:54 +00001514 esac
1515done
1516
bellard40293e52008-01-31 11:32:10 +00001517case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001518 ppc)
1519 CPU_CFLAGS="-m32"
1520 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001521 cross_cc_powerpc=$cc
1522 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001523 ;;
1524 ppc64)
1525 CPU_CFLAGS="-m64"
1526 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001527 cross_cc_ppc64=$cc
1528 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001529 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001530 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001531 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1532 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001533 cross_cc_sparc=$cc
1534 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001535 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001536 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001537 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001538 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001539 cross_cc_sparc64=$cc
1540 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001541 ;;
ths76d83bd2007-11-18 21:22:10 +00001542 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001543 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001544 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001545 cross_cc_s390=$cc
1546 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001547 ;;
1548 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001549 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001550 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001551 cross_cc_s390x=$cc
1552 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001553 ;;
bellard40293e52008-01-31 11:32:10 +00001554 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001555 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001556 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001557 cross_cc_i386=$cc
1558 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001559 ;;
1560 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001561 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1562 # If we truly care, we should simply detect this case at
1563 # runtime and generate the fallback to serial emulation.
1564 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001565 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001566 cross_cc_x86_64=$cc
1567 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001568 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001569 x32)
1570 CPU_CFLAGS="-mx32"
1571 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001572 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001573 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001574 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001575 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001576esac
1577
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001578QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001579
Peter Maydellaffc88c2016-06-13 11:32:24 +01001580# For user-mode emulation the host arch has to be one we explicitly
1581# support, even if we're using TCI.
1582if [ "$ARCH" = "unknown" ]; then
1583 bsd_user="no"
1584 linux_user="no"
1585fi
1586
Peter Maydell60e0df22011-05-03 14:50:13 +01001587default_target_list=""
1588
Peter Maydell6e92f822013-05-20 16:16:15 +01001589mak_wilds=""
1590
1591if [ "$softmmu" = "yes" ]; then
1592 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001593fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001594if [ "$linux_user" = "yes" ]; then
1595 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001596fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001597if [ "$bsd_user" = "yes" ]; then
1598 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001599fi
1600
Peter Maydell6e92f822013-05-20 16:16:15 +01001601for config in $mak_wilds; do
1602 default_target_list="${default_target_list} $(basename "$config" .mak)"
1603done
1604
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001605# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001606trace_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 +01001607
pbrookaf5db582006-04-08 14:26:41 +00001608if test x"$show_help" = x"yes" ; then
1609cat << EOF
1610
1611Usage: configure [options]
1612Options: [defaults in brackets after descriptions]
1613
Stefan Weil08fb77e2013-12-18 22:09:39 +01001614Standard options:
1615 --help print this message
1616 --prefix=PREFIX install in PREFIX [$prefix]
1617 --interp-prefix=PREFIX where to find shared libraries, etc.
1618 use %M for cpu name [$interp_prefix]
1619 --target-list=LIST set target list (default: build everything)
1620$(echo Available targets: $default_target_list | \
1621 fold -s -w 53 | sed -e 's/^/ /')
1622
1623Advanced options (experts only):
1624 --source-path=PATH path of source code [$source_path]
1625 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1626 --cc=CC use C compiler CC [$cc]
1627 --iasl=IASL use ACPI compiler IASL [$iasl]
1628 --host-cc=CC use C compiler CC [$host_cc] for code run at
1629 build time
1630 --cxx=CXX use C++ compiler CXX [$cxx]
1631 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1632 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001633 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001634 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001635 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001636 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001637 --make=MAKE use specified make [$make]
1638 --install=INSTALL use specified install [$install]
1639 --python=PYTHON use specified python [$python]
1640 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001641 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001642 --static enable static build [$static]
1643 --mandir=PATH install man pages in PATH
1644 --datadir=PATH install firmware in PATH$confsuffix
1645 --docdir=PATH install documentation in PATH$confsuffix
1646 --bindir=PATH install binaries in PATH
1647 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001648 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001649 --sysconfdir=PATH install config in PATH$confsuffix
1650 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001651 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001652 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001653 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001654 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001655 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001656 --disable-strip disable stripping binaries
1657 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001658 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001659 --audio-drv-list=LIST set audio drivers list:
1660 Available drivers: $audio_possible_drivers
1661 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1662 --block-drv-rw-whitelist=L
1663 set block driver read-write whitelist
1664 (affects only QEMU, not qemu-img)
1665 --block-drv-ro-whitelist=L
1666 set block driver read-only whitelist
1667 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001668 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001669 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001670 --with-trace-file=NAME Full PATH,NAME of file to store traces
1671 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001672 --disable-slirp disable SLIRP userspace network connectivity
1673 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001674 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001675 --oss-lib path to OSS library
1676 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001677 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001678 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001679 --enable-gcov enable test coverage analysis with gcov
1680 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001681 --disable-blobs disable installing provided firmware blobs
1682 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1683 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001684 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001685 --enable-gprof QEMU profiling with gprof
1686 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001687 --enable-debug-stack-usage
1688 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001689
1690Optional features, enabled with --enable-FEATURE and
1691disabled with --disable-FEATURE, default is enabled if available:
1692
1693 system all system emulation targets
1694 user supported user emulation targets
1695 linux-user all linux usermode emulation targets
1696 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001697 docs build documentation
1698 guest-agent build the QEMU Guest Agent
1699 guest-agent-msi build guest agent Windows MSI installation package
1700 pie Position Independent Executables
1701 modules modules support
1702 debug-tcg TCG debugging (default is disabled)
1703 debug-info debugging information
1704 sparse sparse checker
1705
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001706 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001707 nettle nettle cryptography support
1708 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001709 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001710 sdl SDL UI
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001711 sdl_image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001712 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001713 vte vte support for the gtk UI
1714 curses curses UI
1715 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001716 vnc-sasl SASL encryption for VNC server
1717 vnc-jpeg JPEG lossy compression for VNC server
1718 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001719 cocoa Cocoa UI (Mac OS X only)
1720 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001721 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001722 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001723 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001724 brlapi BrlAPI (Braile)
1725 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001726 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001727 fdt fdt device tree
1728 bluez bluez stack connectivity
1729 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001730 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001731 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001732 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001733 rdma Enable RDMA-based migration
1734 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001735 vde support for vde network
1736 netmap support for netmap network
1737 linux-aio Linux AIO support
1738 cap-ng libcap-ng support
1739 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001740 vhost-net vhost-net kernel acceleration support
1741 vhost-vsock virtio sockets device support
1742 vhost-scsi vhost-scsi kernel target support
1743 vhost-crypto vhost-user-crypto backend support
1744 vhost-kernel vhost kernel backend support
1745 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001746 spice spice
1747 rbd rados block device (rbd)
1748 libiscsi iscsi support
1749 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001750 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001751 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001752 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001753 usb-redir usb network redirection support
1754 lzo support of lzo compression library
1755 snappy support of snappy compression library
1756 bzip2 support of bzip2 compression library
1757 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001758 lzfse support of lzfse compression library
1759 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001760 seccomp seccomp support
1761 coroutine-pool coroutine freelist (better performance)
1762 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001763 tpm TPM support
1764 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001765 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001766 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001767 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001768 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001769 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001770 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001771 opengl opengl support
1772 virglrenderer virgl rendering support
1773 xfsctl xfsctl support
1774 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001775 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001776 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001777 bochs bochs image format support
1778 cloop cloop image format support
1779 dmg dmg image format support
1780 qcow1 qcow v1 image format support
1781 vdi vdi image format support
1782 vvfat vvfat image format support
1783 qed qed image format support
1784 parallels parallels image format support
1785 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001786 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001787 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001788 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001789 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001790
1791NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001792EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001793exit 0
pbrookaf5db582006-04-08 14:26:41 +00001794fi
1795
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001796if ! has $python; then
1797 error_exit "Python not found. Use --python=/path/to/python"
1798fi
1799
1800# Note that if the Python conditional here evaluates True we will exit
1801# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001802if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1803 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001804 "Use --python=/path/to/python to specify a supported Python."
1805fi
1806
Cleber Rosa755ee702018-11-09 10:07:07 -05001807# Preserve python version since some functionality is dependent on it
1808python_version=$($python -V 2>&1 | sed -e 's/Python\ //')
1809
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001810# Suppress writing compiled files
1811python="$python -B"
1812
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001813# Check that the C compiler works. Doing this here before testing
1814# the host CPU ensures that we had a valid CC to autodetect the
1815# $cpu var (and we should bail right here if that's not the case).
1816# It also allows the help message to be printed without a CC.
1817write_c_skeleton;
1818if compile_object ; then
1819 : C compiler works ok
1820else
1821 error_exit "\"$cc\" either does not exist or does not work"
1822fi
1823if ! compile_prog ; then
1824 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1825fi
1826
Peter Maydell359bc952011-12-24 13:07:25 +00001827# Now we have handled --enable-tcg-interpreter and know we're not just
1828# printing the help message, bail out if the host CPU isn't supported.
1829if test "$ARCH" = "unknown"; then
1830 if test "$tcg_interpreter" = "yes" ; then
1831 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001832 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001833 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001834 fi
1835fi
1836
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001837# Consult white-list to determine whether to enable werror
1838# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001839if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001840 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001841 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001842 werror="yes"
1843 else
1844 werror="no"
1845 fi
1846fi
1847
Peter Maydellfb59dab2017-03-28 14:01:52 +01001848if test "$bogus_os" = "yes"; then
1849 # Now that we know that we're not printing the help and that
1850 # the compiler works (so the results of the check_defines we used
1851 # to identify the OS are reliable), if we didn't recognize the
1852 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001853 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001854fi
1855
Thomas Huthefc6c072018-12-03 10:12:32 +01001856# Check whether the compiler matches our minimum requirements:
1857cat > $TMPC << EOF
1858#if defined(__clang_major__) && defined(__clang_minor__)
1859# ifdef __apple_build_version__
1860# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1861# error You need at least XCode Clang v5.1 to compile QEMU
1862# endif
1863# else
1864# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1865# error You need at least Clang v3.4 to compile QEMU
1866# endif
1867# endif
1868#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1869# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1870# error You need at least GCC v4.8 to compile QEMU
1871# endif
1872#else
1873# error You either need GCC or Clang to compiler QEMU
1874#endif
1875int main (void) { return 0; }
1876EOF
1877if ! compile_prog "" "" ; then
1878 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1879fi
1880
Paolo Bonzini8d050952010-12-23 11:43:52 +01001881gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1882gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001883gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001884gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001885gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001886gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001887# Note that we do not add -Werror to gcc_flags here, because that would
1888# enable it for all configure tests. If a configure test failed due
1889# to -Werror this would just silently disable some features,
1890# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001891
1892cc_has_warning_flag() {
1893 write_c_skeleton;
1894
Peter Maydella1d29d62012-10-27 22:19:07 +01001895 # Use the positive sense of the flag when testing for -Wno-wombat
1896 # support (gcc will happily accept the -Wno- form of unknown
1897 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001898 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1899 compile_prog "-Werror $optflag" ""
1900}
1901
1902for flag in $gcc_flags; do
1903 if cc_has_warning_flag $flag ; then
1904 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001905 fi
1906done
1907
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001908if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001909 cat > $TMPC << EOF
1910int main(int argc, char *argv[])
1911{
1912 char arr[64], *p = arr, *c = argv[0];
1913 while (*c) {
1914 *p++ = *c++;
1915 }
1916 return 0;
1917}
1918EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001919 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001920 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001921 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001922 # We need to check both a compile and a link, since some compiler
1923 # setups fail only on a .c->.o compile and some only at link time
1924 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1925 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001926 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001927 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001928 break
1929 fi
1930 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001931 if test "$stack_protector" = yes; then
1932 if test $sp_on = 0; then
1933 error_exit "Stack protector not supported"
1934 fi
1935 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001936fi
1937
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001938# Disable -Wmissing-braces on older compilers that warn even for
1939# the "universal" C zero initializer {0}.
1940cat > $TMPC << EOF
1941struct {
1942 int a[2];
1943} x = {0};
1944EOF
1945if compile_object "-Werror" "" ; then
1946 :
1947else
1948 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1949fi
1950
Thomas Huthd376e9d2018-12-03 11:41:38 +01001951# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001952if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001953 if test "$modules" = "yes" ; then
1954 error_exit "static and modules are mutually incompatible"
1955 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001956 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001957 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001958 else
1959 pie="no"
1960 fi
1961fi
1962
Emilio G. Cota768b7852015-04-29 13:09:02 +02001963# Unconditional check for compiler __thread support
1964 cat > $TMPC << EOF
1965static __thread int tls_var;
1966int main(void) { return tls_var; }
1967EOF
1968
1969if ! compile_prog "-Werror" "" ; then
1970 error_exit "Your compiler does not support the __thread specifier for " \
1971 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1972fi
1973
Avi Kivity40d64442011-11-15 20:12:17 +02001974if test "$pie" = ""; then
1975 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001976 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001977 ;;
1978 *)
1979 pie="no"
1980 ;;
1981 esac
1982fi
1983
1984if test "$pie" != "no" ; then
1985 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001986
1987#ifdef __linux__
1988# define THREAD __thread
1989#else
1990# define THREAD
1991#endif
1992
1993static THREAD int tls_var;
1994
1995int main(void) { return tls_var; }
1996
Avi Kivity40d64442011-11-15 20:12:17 +02001997EOF
1998 if compile_prog "-fPIE -DPIE" "-pie"; then
1999 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2000 LDFLAGS="-pie $LDFLAGS"
2001 pie="yes"
2002 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2003 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2004 fi
2005 else
2006 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002007 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002008 else
2009 echo "Disabling PIE due to missing toolchain support"
2010 pie="no"
2011 fi
2012 fi
Brad46eef332013-12-10 19:49:08 -05002013
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04002014 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05002015 CFLAGS_NOPIE="-fno-pie"
2016 LDFLAGS_NOPIE="-nopie"
2017 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002018fi
2019
Paolo Bonzini09dada42013-04-17 16:26:47 +02002020##########################################
2021# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2022# use i686 as default anyway, but for those that don't, an explicit
2023# specification is necessary
2024
2025if test "$cpu" = "i386"; then
2026 cat > $TMPC << EOF
2027static int sfaa(int *ptr)
2028{
2029 return __sync_fetch_and_and(ptr, 0);
2030}
2031
2032int main(void)
2033{
2034 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002035 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002036 sfaa(&val);
2037 return val;
2038}
2039EOF
2040 if ! compile_prog "" "" ; then
2041 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2042 fi
2043fi
2044
2045#########################################
bellardec530c82006-04-25 22:36:06 +00002046# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002047
bellardec530c82006-04-25 22:36:06 +00002048if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002049 if has $install; then
2050 :
2051 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002052 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2053 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2054 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002055 fi
Stefan Weil89138852016-05-16 15:10:20 +02002056 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002057 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2058 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2059 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002060 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002061 if has ar; then
2062 :
2063 else
bellardec530c82006-04-25 22:36:06 +00002064 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002065 error_exit "No path includes ar" \
2066 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002067 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002068 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002069 fi
ths5fafdf22007-09-16 21:08:06 +00002070fi
bellardec530c82006-04-25 22:36:06 +00002071
Stefan Weilafb63eb2012-09-26 22:04:38 +02002072if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002073 for target in $default_target_list; do
2074 supported_target $target 2>/dev/null && \
2075 target_list="$target_list $target"
2076 done
2077 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002078else
Stefan Weil89138852016-05-16 15:10:20 +02002079 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002080 for target in $target_list; do
2081 # Check that we recognised the target name; this allows a more
2082 # friendly error message than if we let it fall through.
2083 case " $default_target_list " in
2084 *" $target "*)
2085 ;;
2086 *)
2087 error_exit "Unknown target name '$target'"
2088 ;;
2089 esac
2090 supported_target $target || exit 1
2091 done
bellard5327cf42005-01-10 23:18:50 +00002092fi
Peter Maydell25b48332013-05-20 16:16:16 +01002093
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002094# see if system emulation was really requested
2095case " $target_list " in
2096 *"-softmmu "*) softmmu=yes
2097 ;;
2098 *) softmmu=no
2099 ;;
2100esac
bellard5327cf42005-01-10 23:18:50 +00002101
Juan Quintela249247c2009-08-12 18:20:25 +02002102feature_not_found() {
2103 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002104 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002105
Peter Maydell76ad07a2013-04-08 12:11:26 +01002106 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002107 "configure was not able to find it." \
2108 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002109}
2110
bellard7d132992003-03-06 23:23:54 +00002111# ---
2112# big/little endian test
2113cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002114short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2115short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2116extern int foo(short *, short *);
2117int main(int argc, char *argv[]) {
2118 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002119}
2120EOF
2121
Mike Frysinger61cc9192013-06-30 23:30:18 -04002122if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002123 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002124 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002125 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002126 bigendian="no"
2127 else
2128 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002129 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002130else
2131 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002132fi
2133
Juan Quintelab0a47e72009-08-12 18:29:49 +02002134##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002135# cocoa implies not SDL or GTK
2136# (the cocoa UI code currently assumes it is always the active UI
2137# and doesn't interact well with other UI frontend code)
2138if test "$cocoa" = "yes"; then
2139 if test "$sdl" = "yes"; then
2140 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2141 fi
2142 if test "$gtk" = "yes"; then
2143 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2144 fi
2145 gtk=no
2146 sdl=no
2147fi
2148
Eric Blake6b39b062016-10-11 10:46:23 -05002149# Some versions of Mac OS X incorrectly define SIZE_MAX
2150cat > $TMPC << EOF
2151#include <stdint.h>
2152#include <stdio.h>
2153int main(int argc, char *argv[]) {
2154 return printf("%zu", SIZE_MAX);
2155}
2156EOF
2157have_broken_size_max=no
2158if ! compile_object -Werror ; then
2159 have_broken_size_max=yes
2160fi
2161
Peter Maydella30878e2015-08-14 16:10:52 +01002162##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002163# L2TPV3 probe
2164
2165cat > $TMPC <<EOF
2166#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002167#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002168int main(void) { return sizeof(struct mmsghdr); }
2169EOF
2170if compile_prog "" "" ; then
2171 l2tpv3=yes
2172else
2173 l2tpv3=no
2174fi
2175
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002176#########################################
2177# vhost interdependencies and host support
2178
2179# vhost backends
2180test "$vhost_user" = "" && vhost_user=yes
2181if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2182 error_exit "vhost-user isn't available on win32"
2183fi
2184test "$vhost_kernel" = "" && vhost_kernel=$linux
2185if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2186 error_exit "vhost-kernel is only available on Linux"
2187fi
2188
2189# vhost-kernel devices
2190test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2191if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2192 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2193fi
2194test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2195if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2196 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2197fi
2198
2199# vhost-user backends
2200test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2201if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2202 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2203fi
2204test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2205if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2206 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2207fi
2208
2209# OR the vhost-kernel and vhost-user values for simplicity
2210if test "$vhost_net" = ""; then
2211 test "$vhost_net_user" = "yes" && vhost_net=yes
2212 test "$vhost_kernel" = "yes" && vhost_net=yes
2213fi
2214
Gonglei015a33b2014-07-01 20:58:08 +08002215##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002216# MinGW / Mingw-w64 localtime_r/gmtime_r check
2217
2218if test "$mingw32" = "yes"; then
2219 # Some versions of MinGW / Mingw-w64 lack localtime_r
2220 # and gmtime_r entirely.
2221 #
2222 # Some versions of Mingw-w64 define a macro for
2223 # localtime_r/gmtime_r.
2224 #
2225 # Some versions of Mingw-w64 will define functions
2226 # for localtime_r/gmtime_r, but only if you have
2227 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2228 # though, unistd.h and pthread.h both define
2229 # that for you.
2230 #
2231 # So this #undef localtime_r and #include <unistd.h>
2232 # are not in fact redundant.
2233cat > $TMPC << EOF
2234#include <unistd.h>
2235#include <time.h>
2236#undef localtime_r
2237int main(void) { localtime_r(NULL, NULL); return 0; }
2238EOF
2239 if compile_prog "" "" ; then
2240 localtime_r="yes"
2241 else
2242 localtime_r="no"
2243 fi
2244fi
2245
2246##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002247# pkg-config probe
2248
2249if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002250 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002251fi
2252
2253##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002254# NPTL probe
2255
Peter Maydell24cb36a2013-07-16 18:45:00 +01002256if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002257 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002258#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002259#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002260int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002261#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2262#error bork
2263#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002264 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002265}
2266EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002267 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002268 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002269 fi
pbrookbd0c5662008-05-29 14:34:11 +00002270fi
2271
balrogac629222008-10-11 09:56:04 +00002272##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002273# lzo check
2274
2275if test "$lzo" != "no" ; then
2276 cat > $TMPC << EOF
2277#include <lzo/lzo1x.h>
2278int main(void) { lzo_version(); return 0; }
2279EOF
2280 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002281 libs_softmmu="$libs_softmmu -llzo2"
2282 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002283 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002284 if test "$lzo" = "yes"; then
2285 feature_not_found "liblzo2" "Install liblzo2 devel"
2286 fi
2287 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002288 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002289fi
2290
2291##########################################
2292# snappy check
2293
2294if test "$snappy" != "no" ; then
2295 cat > $TMPC << EOF
2296#include <snappy-c.h>
2297int main(void) { snappy_max_compressed_length(4096); return 0; }
2298EOF
2299 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002300 libs_softmmu="$libs_softmmu -lsnappy"
2301 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002302 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002303 if test "$snappy" = "yes"; then
2304 feature_not_found "libsnappy" "Install libsnappy devel"
2305 fi
2306 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002307 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002308fi
2309
2310##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002311# bzip2 check
2312
2313if test "$bzip2" != "no" ; then
2314 cat > $TMPC << EOF
2315#include <bzlib.h>
2316int main(void) { BZ2_bzlibVersion(); return 0; }
2317EOF
2318 if compile_prog "" "-lbz2" ; then
2319 bzip2="yes"
2320 else
2321 if test "$bzip2" = "yes"; then
2322 feature_not_found "libbzip2" "Install libbzip2 devel"
2323 fi
2324 bzip2="no"
2325 fi
2326fi
2327
2328##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002329# lzfse check
2330
2331if test "$lzfse" != "no" ; then
2332 cat > $TMPC << EOF
2333#include <lzfse.h>
2334int main(void) { lzfse_decode_scratch_size(); return 0; }
2335EOF
2336 if compile_prog "" "-llzfse" ; then
2337 lzfse="yes"
2338 else
2339 if test "$lzfse" = "yes"; then
2340 feature_not_found "lzfse" "Install lzfse devel"
2341 fi
2342 lzfse="no"
2343 fi
2344fi
2345
2346##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002347# libseccomp check
2348
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002349libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002350if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002351 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002352 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002353 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002354 arm|aarch64)
2355 libseccomp_minver="2.2.3"
2356 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002357 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002358 libseccomp_minver="2.3.0"
2359 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002360 *)
2361 libseccomp_minver=""
2362 ;;
2363 esac
2364
2365 if test "$libseccomp_minver" != "" &&
2366 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002367 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2368 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002369 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002370 else
Andrew Jones693e5912015-09-30 11:59:18 -04002371 if test "$seccomp" = "yes" ; then
2372 if test "$libseccomp_minver" != "" ; then
2373 feature_not_found "libseccomp" \
2374 "Install libseccomp devel >= $libseccomp_minver"
2375 else
2376 feature_not_found "libseccomp" \
2377 "libseccomp is not supported for host cpu $cpu"
2378 fi
2379 fi
2380 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002381 fi
2382fi
2383##########################################
aliguorie37630c2009-04-22 15:19:10 +00002384# xen probe
2385
Juan Quintelafc321b42009-08-12 18:29:55 +02002386if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002387 # Check whether Xen library path is specified via --extra-ldflags to avoid
2388 # overriding this setting with pkg-config output. If not, try pkg-config
2389 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002390
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002391 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2392 $pkg_config --exists xencontrol ; then
2393 xen_ctrl_version="$(printf '%d%02d%02d' \
2394 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2395 xen=yes
2396 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2397 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002398 if $pkg_config --exists xentoolcore; then
2399 xen_pc="$xen_pc xentoolcore"
2400 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002401 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2402 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002403 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002404
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002405 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002406 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002407
2408 # First we test whether Xen headers and libraries are available.
2409 # If no, we are done and there is no Xen support.
2410 # If yes, more tests are run to detect the Xen version.
2411
2412 # Xen (any)
2413 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002414#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002415int main(void) {
2416 return 0;
2417}
2418EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002419 if ! compile_prog "" "$xen_libs" ; then
2420 # Xen not found
2421 if test "$xen" = "yes" ; then
2422 feature_not_found "xen" "Install xen devel"
2423 fi
2424 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002425
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002426 # Xen unstable
2427 elif
2428 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002429#undef XC_WANT_COMPAT_DEVICEMODEL_API
2430#define __XEN_TOOLS__
2431#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002432#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002433int main(void) {
2434 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002435 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002436
2437 xd = xendevicemodel_open(0, 0);
2438 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2439
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002440 xfmem = xenforeignmemory_open(0, 0);
2441 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2442
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002443 return 0;
2444}
2445EOF
2446 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2447 then
2448 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2449 xen_ctrl_version=41100
2450 xen=yes
2451 elif
2452 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002453#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2454#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002455#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002456int main(void) {
2457 xenforeignmemory_handle *xfmem;
2458
2459 xfmem = xenforeignmemory_open(0, 0);
2460 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002461 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002462
2463 return 0;
2464}
2465EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002466 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002467 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002468 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002469 xen_ctrl_version=41000
2470 xen=yes
2471 elif
2472 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002473#undef XC_WANT_COMPAT_DEVICEMODEL_API
2474#define __XEN_TOOLS__
2475#include <xendevicemodel.h>
2476int main(void) {
2477 xendevicemodel_handle *xd;
2478
2479 xd = xendevicemodel_open(0, 0);
2480 xendevicemodel_close(xd);
2481
2482 return 0;
2483}
2484EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002485 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2486 then
2487 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2488 xen_ctrl_version=40900
2489 xen=yes
2490 elif
2491 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002492/*
2493 * If we have stable libs the we don't want the libxc compat
2494 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002495 *
2496 * Also, check if xengnttab_grant_copy_segment_t is defined and
2497 * grant copy operation is implemented.
2498 */
2499#undef XC_WANT_COMPAT_EVTCHN_API
2500#undef XC_WANT_COMPAT_GNTTAB_API
2501#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2502#include <xenctrl.h>
2503#include <xenstore.h>
2504#include <xenevtchn.h>
2505#include <xengnttab.h>
2506#include <xenforeignmemory.h>
2507#include <stdint.h>
2508#include <xen/hvm/hvm_info_table.h>
2509#if !defined(HVM_MAX_VCPUS)
2510# error HVM_MAX_VCPUS not defined
2511#endif
2512int main(void) {
2513 xc_interface *xc = NULL;
2514 xenforeignmemory_handle *xfmem;
2515 xenevtchn_handle *xe;
2516 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002517 xengnttab_grant_copy_segment_t* seg = NULL;
2518
2519 xs_daemon_open();
2520
2521 xc = xc_interface_open(0, 0, 0);
2522 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2523 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2524 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2525 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002526
2527 xfmem = xenforeignmemory_open(0, 0);
2528 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2529
2530 xe = xenevtchn_open(0, 0);
2531 xenevtchn_fd(xe);
2532
2533 xg = xengnttab_open(0, 0);
2534 xengnttab_grant_copy(xg, 0, seg);
2535
2536 return 0;
2537}
2538EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002539 compile_prog "" "$xen_libs $xen_stable_libs"
2540 then
2541 xen_ctrl_version=40800
2542 xen=yes
2543 elif
2544 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002545/*
2546 * If we have stable libs the we don't want the libxc compat
2547 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002548 */
2549#undef XC_WANT_COMPAT_EVTCHN_API
2550#undef XC_WANT_COMPAT_GNTTAB_API
2551#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2552#include <xenctrl.h>
2553#include <xenstore.h>
2554#include <xenevtchn.h>
2555#include <xengnttab.h>
2556#include <xenforeignmemory.h>
2557#include <stdint.h>
2558#include <xen/hvm/hvm_info_table.h>
2559#if !defined(HVM_MAX_VCPUS)
2560# error HVM_MAX_VCPUS not defined
2561#endif
2562int main(void) {
2563 xc_interface *xc = NULL;
2564 xenforeignmemory_handle *xfmem;
2565 xenevtchn_handle *xe;
2566 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002567
2568 xs_daemon_open();
2569
2570 xc = xc_interface_open(0, 0, 0);
2571 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2572 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2573 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2574 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002575
2576 xfmem = xenforeignmemory_open(0, 0);
2577 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2578
2579 xe = xenevtchn_open(0, 0);
2580 xenevtchn_fd(xe);
2581
2582 xg = xengnttab_open(0, 0);
2583 xengnttab_map_grant_ref(xg, 0, 0, 0);
2584
2585 return 0;
2586}
2587EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002588 compile_prog "" "$xen_libs $xen_stable_libs"
2589 then
2590 xen_ctrl_version=40701
2591 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002592
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002593 # Xen 4.6
2594 elif
2595 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002596#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002597#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002598#include <stdint.h>
2599#include <xen/hvm/hvm_info_table.h>
2600#if !defined(HVM_MAX_VCPUS)
2601# error HVM_MAX_VCPUS not defined
2602#endif
2603int main(void) {
2604 xc_interface *xc;
2605 xs_daemon_open();
2606 xc = xc_interface_open(0, 0, 0);
2607 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2608 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002609 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002610 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002611 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002612 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002613 return 0;
2614}
2615EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002616 compile_prog "" "$xen_libs"
2617 then
2618 xen_ctrl_version=40600
2619 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002620
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002621 # Xen 4.5
2622 elif
2623 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002624#include <xenctrl.h>
2625#include <xenstore.h>
2626#include <stdint.h>
2627#include <xen/hvm/hvm_info_table.h>
2628#if !defined(HVM_MAX_VCPUS)
2629# error HVM_MAX_VCPUS not defined
2630#endif
2631int main(void) {
2632 xc_interface *xc;
2633 xs_daemon_open();
2634 xc = xc_interface_open(0, 0, 0);
2635 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2636 xc_gnttab_open(NULL, 0);
2637 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2638 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002639 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2640 return 0;
2641}
2642EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002643 compile_prog "" "$xen_libs"
2644 then
2645 xen_ctrl_version=40500
2646 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002647
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002648 elif
2649 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002650#include <xenctrl.h>
2651#include <xenstore.h>
2652#include <stdint.h>
2653#include <xen/hvm/hvm_info_table.h>
2654#if !defined(HVM_MAX_VCPUS)
2655# error HVM_MAX_VCPUS not defined
2656#endif
2657int main(void) {
2658 xc_interface *xc;
2659 xs_daemon_open();
2660 xc = xc_interface_open(0, 0, 0);
2661 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2662 xc_gnttab_open(NULL, 0);
2663 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2664 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002665 return 0;
2666}
2667EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002668 compile_prog "" "$xen_libs"
2669 then
2670 xen_ctrl_version=40200
2671 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002672
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002673 else
2674 if test "$xen" = "yes" ; then
2675 feature_not_found "xen (unsupported version)" \
2676 "Install a supported xen (xen 4.2 or newer)"
2677 fi
2678 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002679 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002680
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002681 if test "$xen" = yes; then
2682 if test $xen_ctrl_version -ge 40701 ; then
2683 libs_softmmu="$xen_stable_libs $libs_softmmu"
2684 fi
2685 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002686 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002687 fi
aliguorie37630c2009-04-22 15:19:10 +00002688fi
2689
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002690if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002691 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002692 xen_pci_passthrough=yes
2693 else
2694 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002695 error_exit "User requested feature Xen PCI Passthrough" \
2696 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002697 fi
2698 xen_pci_passthrough=no
2699 fi
2700fi
2701
aliguorie37630c2009-04-22 15:19:10 +00002702##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002703# Windows Hypervisor Platform accelerator (WHPX) check
2704if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002705 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002706 whpx="yes"
2707 else
2708 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002709 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002710 fi
2711 whpx="no"
2712 fi
2713fi
2714
2715##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002716# Sparse probe
2717if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002718 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002719 sparse=yes
2720 else
2721 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002722 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002723 fi
2724 sparse=no
2725 fi
2726fi
2727
2728##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002729# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002730if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002731 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002732 x11_cflags=$($pkg_config --cflags x11)
2733 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002734fi
2735
2736##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002737# GTK probe
2738
2739if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002740 gtkpackage="gtk+-3.0"
2741 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002742 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002743 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002744 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2745 gtk_libs=$($pkg_config --libs $gtkpackage)
2746 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002747 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002748 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002749 gtk_cflags="$gtk_cflags $x11_cflags"
2750 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002751 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002752 gtk="yes"
2753 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002754 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002755 else
2756 gtk="no"
2757 fi
2758fi
2759
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002760
2761##########################################
2762# GNUTLS probe
2763
2764if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002765 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002766 gnutls_cflags=$($pkg_config --cflags gnutls)
2767 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002768 libs_softmmu="$gnutls_libs $libs_softmmu"
2769 libs_tools="$gnutls_libs $libs_tools"
2770 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2771 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002772 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002773 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002774 else
2775 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002776 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002777fi
2778
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002779
2780# If user didn't give a --disable/enable-gcrypt flag,
2781# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002782# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002783if test -z "$gcrypt"
2784then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002785 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002786 then
2787 gcrypt="no"
2788 fi
2789fi
2790
2791# If user didn't give a --disable/enable-nettle flag,
2792# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002793# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002794if test -z "$nettle"
2795then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002796 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002797 then
2798 nettle="no"
2799 fi
2800fi
2801
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002802has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002803 if ! has "libgcrypt-config"
2804 then
2805 return 1
2806 fi
2807
2808 if test -n "$cross_prefix"
2809 then
Stefan Weil89138852016-05-16 15:10:20 +02002810 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002811 if test "$host-" != $cross_prefix
2812 then
2813 return 1
2814 fi
2815 fi
2816
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002817 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2818 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2819
2820 if test $maj != 1 || test $min -lt 5
2821 then
2822 return 1
2823 fi
2824
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002825 return 0
2826}
2827
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002828
2829if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002830 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002831 nettle_cflags=$($pkg_config --cflags nettle)
2832 nettle_libs=$($pkg_config --libs nettle)
2833 nettle_version=$($pkg_config --modversion nettle)
2834 libs_softmmu="$nettle_libs $libs_softmmu"
2835 libs_tools="$nettle_libs $libs_tools"
2836 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2837 nettle="yes"
2838
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002839 if test -z "$gcrypt"; then
2840 gcrypt="no"
2841 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002842 else
2843 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002844 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002845 else
2846 nettle="no"
2847 fi
2848 fi
2849fi
2850
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002851if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002852 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002853 gcrypt_cflags=$(libgcrypt-config --cflags)
2854 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002855 # Debian has remove -lgpg-error from libgcrypt-config
2856 # as it "spreads unnecessary dependencies" which in
2857 # turn breaks static builds...
2858 if test "$static" = "yes"
2859 then
2860 gcrypt_libs="$gcrypt_libs -lgpg-error"
2861 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002862 libs_softmmu="$gcrypt_libs $libs_softmmu"
2863 libs_tools="$gcrypt_libs $libs_tools"
2864 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002865 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002866
2867 cat > $TMPC << EOF
2868#include <gcrypt.h>
2869int main(void) {
2870 gcry_mac_hd_t handle;
2871 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2872 GCRY_MAC_FLAG_SECURE, NULL);
2873 return 0;
2874}
2875EOF
2876 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2877 gcrypt_hmac=yes
2878 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002879 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002880 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002881 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002882 else
2883 gcrypt="no"
2884 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002885 fi
2886fi
2887
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002888
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002889if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2890then
2891 error_exit "Only one of gcrypt & nettle can be enabled"
2892fi
2893
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002894##########################################
2895# libtasn1 - only for the TLS creds/session test suite
2896
2897tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002898tasn1_cflags=""
2899tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002900if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002901 tasn1_cflags=$($pkg_config --cflags libtasn1)
2902 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002903else
2904 tasn1=no
2905fi
2906
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002907
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002908##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002909# PAM probe
2910
2911if test "$auth_pam" != "no"; then
2912 cat > $TMPC <<EOF
2913#include <security/pam_appl.h>
2914#include <stdio.h>
2915int main(void) {
2916 const char *service_name = "qemu";
2917 const char *user = "frank";
2918 const struct pam_conv *pam_conv = NULL;
2919 pam_handle_t *pamh = NULL;
2920 pam_start(service_name, user, pam_conv, &pamh);
2921 return 0;
2922}
2923EOF
2924 if compile_prog "" "-lpam" ; then
2925 auth_pam=yes
2926 else
2927 if test "$auth_pam" = "yes"; then
2928 feature_not_found "PAM" "Install PAM development package"
2929 else
2930 auth_pam=no
2931 fi
2932 fi
2933fi
2934
2935##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002936# getifaddrs (for tests/test-io-channel-socket )
2937
2938have_ifaddrs_h=yes
2939if ! check_include "ifaddrs.h" ; then
2940 have_ifaddrs_h=no
2941fi
2942
2943##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002944# VTE probe
2945
2946if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002947 vteminversion="0.32.0"
2948 if $pkg_config --exists "vte-2.91"; then
2949 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002950 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002951 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002952 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002953 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002954 vte_cflags=$($pkg_config --cflags $vtepackage)
2955 vte_libs=$($pkg_config --libs $vtepackage)
2956 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002957 vte="yes"
2958 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002959 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002960 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002961 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002962 fi
2963fi
2964
2965##########################################
bellard11d9f692004-04-02 20:55:59 +00002966# SDL probe
2967
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002968# Look for sdl configuration program (pkg-config or sdl-config). Try
2969# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002970
Peter Xuc6093a02018-04-10 13:40:34 +08002971sdl_probe ()
2972{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002973 if $pkg_config sdl2 --exists; then
2974 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08002975 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2976 elif has ${sdl_config}; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002977 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08002978 sdlversion=$($sdlconfig --version)
2979 else
2980 if test "$sdl" = "yes" ; then
2981 feature_not_found "sdl" "Install SDL2-devel"
2982 fi
2983 sdl=no
2984 # no need to do the rest
2985 return
2986 fi
2987 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2988 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2989 fi
2990
Juan Quintelaac119f92009-07-27 16:13:15 +02002991 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002992#include <SDL.h>
2993#undef main /* We don't want SDL to override our main() */
2994int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2995EOF
Stefan Weil89138852016-05-16 15:10:20 +02002996 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002997 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002998 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002999 if $pkg_config sdl2 --exists; then
3000 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003001 else
3002 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3003 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003004 else
Stefan Weil89138852016-05-16 15:10:20 +02003005 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003006 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003007 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003008 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003009
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003010 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003011 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003012 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003013 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3014 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003015 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003016 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003017 :
3018 else
3019 sdl=no
3020 fi
3021 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003022 else # sdl not found
3023 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003024 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003025 fi
3026 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003027 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003028}
3029
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003030sdl_image_probe ()
3031{
3032 if test "$sdl_image" != "no" ; then
3033 if $pkg_config SDL2_image --exists; then
3034 if test "$static" = "yes"; then
3035 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3036 else
3037 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3038 fi
3039 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3040 sdl_image=yes
3041
3042 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3043 sdl_libs="$sdl_libs $sdl_image_libs"
3044 else
3045 if test "$sdl_image" = "yes" ; then
3046 feature_not_found "sdl_image" "Install SDL Image devel"
3047 else
3048 sdl_image=no
3049 fi
3050 fi
3051 fi
3052}
3053
Peter Xuc6093a02018-04-10 13:40:34 +08003054if test "$sdl" != "no" ; then
3055 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003056fi
bellard11d9f692004-04-02 20:55:59 +00003057
aliguori5368a422009-03-03 17:37:21 +00003058if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003059 sdl_image_probe
3060else
3061 if test "$sdl_image" = "yes"; then
3062 echo "warning: SDL Image requested, but SDL is not available, disabling"
3063 fi
3064 sdl_image=no
3065fi
3066
3067if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003068 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003069#include <SDL.h>
3070#if defined(SDL_VIDEO_DRIVER_X11)
3071#include <X11/XKBlib.h>
3072#else
3073#error No x11 support
3074#endif
3075int main(void) { return 0; }
3076EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003077 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003078 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003079 sdl_cflags="$sdl_cflags $x11_cflags"
3080 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003081 fi
aliguori5368a422009-03-03 17:37:21 +00003082fi
3083
ths8f28f3f2007-01-05 21:25:54 +00003084##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003085# RDMA needs OpenFabrics libraries
3086if test "$rdma" != "no" ; then
3087 cat > $TMPC <<EOF
3088#include <rdma/rdma_cma.h>
3089int main(void) { return 0; }
3090EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003091 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003092 if compile_prog "" "$rdma_libs" ; then
3093 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003094 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003095 else
3096 if test "$rdma" = "yes" ; then
3097 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003098 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003099 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003100 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003101 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3102 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3103 fi
3104 rdma="no"
3105 fi
3106fi
3107
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003108##########################################
3109# PVRDMA detection
3110
3111cat > $TMPC <<EOF &&
3112#include <sys/mman.h>
3113
3114int
3115main(void)
3116{
3117 char buf = 0;
3118 void *addr = &buf;
3119 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3120
3121 return 0;
3122}
3123EOF
3124
3125if test "$rdma" = "yes" ; then
3126 case "$pvrdma" in
3127 "")
3128 if compile_prog "" ""; then
3129 pvrdma="yes"
3130 else
3131 pvrdma="no"
3132 fi
3133 ;;
3134 "yes")
3135 if ! compile_prog "" ""; then
3136 error_exit "PVRDMA is not supported since mremap is not implemented"
3137 fi
3138 pvrdma="yes"
3139 ;;
3140 "no")
3141 pvrdma="no"
3142 ;;
3143 esac
3144else
3145 if test "$pvrdma" = "yes" ; then
3146 error_exit "PVRDMA requires rdma suppport"
3147 fi
3148 pvrdma="no"
3149fi
ths8d5d2d42007-08-25 01:37:51 +00003150
3151##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003152# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003153if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003154 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003155#include <sasl/sasl.h>
3156#include <stdio.h>
3157int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3158EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003159 # Assuming Cyrus-SASL installed in /usr prefix
3160 vnc_sasl_cflags=""
3161 vnc_sasl_libs="-lsasl2"
3162 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3163 vnc_sasl=yes
3164 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003165 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003166 else
3167 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003168 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003169 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003170 vnc_sasl=no
3171 fi
aliguori2f9606b2009-03-06 20:27:28 +00003172fi
3173
3174##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003175# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003176if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003177cat > $TMPC <<EOF
3178#include <stdio.h>
3179#include <jpeglib.h>
3180int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3181EOF
3182 vnc_jpeg_cflags=""
3183 vnc_jpeg_libs="-ljpeg"
3184 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3185 vnc_jpeg=yes
3186 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003187 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003188 else
3189 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003190 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003191 fi
3192 vnc_jpeg=no
3193 fi
3194fi
3195
3196##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003197# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003198if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003199cat > $TMPC <<EOF
3200//#include <stdio.h>
3201#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003202#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003203int main(void) {
3204 png_structp png_ptr;
3205 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003206 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003207}
3208EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003209 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003210 vnc_png_cflags=$($pkg_config libpng --cflags)
3211 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003212 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003213 vnc_png_cflags=""
3214 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003215 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003216 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3217 vnc_png=yes
3218 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003219 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003220 else
3221 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003222 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003223 fi
3224 vnc_png=no
3225 fi
3226fi
3227
3228##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003229# xkbcommon probe
3230if test "$xkbcommon" != "no" ; then
3231 if $pkg_config xkbcommon --exists; then
3232 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3233 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3234 xkbcommon=yes
3235 else
3236 if test "$xkbcommon" = "yes" ; then
3237 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3238 fi
3239 xkbcommon=no
3240 fi
3241fi
3242
aliguori76655d62009-03-06 20:27:37 +00003243
3244##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003245# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003246if test "$xfs" != "no" ; then
3247 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003248#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003249#include <xfs/xfs.h>
3250int main(void)
3251{
3252 xfsctl(NULL, 0, 0, NULL);
3253 return 0;
3254}
3255EOF
3256 if compile_prog "" "" ; then
3257 xfs="yes"
3258 else
3259 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003260 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003261 fi
3262 xfs=no
3263 fi
3264fi
3265
3266##########################################
ths8a16d272008-07-19 09:56:24 +00003267# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003268if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003269 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003270 cat > $TMPC << EOF
3271#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003272int main(void)
3273{
3274 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003275 char s[] = "";
3276 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003277 return 0;
3278}
ths8a16d272008-07-19 09:56:24 +00003279EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003280 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003281 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003282 else
3283 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003284 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003285 fi
3286 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003287 fi
ths8a16d272008-07-19 09:56:24 +00003288fi
3289
3290##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003291# netmap support probe
3292# Apart from looking for netmap headers, we make sure that the host API version
3293# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3294# a minor/major version number. Minor new features will be marked with values up
3295# to 15, and if something happens that requires a change to the backend we will
3296# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003297if test "$netmap" != "no" ; then
3298 cat > $TMPC << EOF
3299#include <inttypes.h>
3300#include <net/if.h>
3301#include <net/netmap.h>
3302#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003303#if (NETMAP_API < 11) || (NETMAP_API > 15)
3304#error
3305#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003306int main(void) { return 0; }
3307EOF
3308 if compile_prog "" "" ; then
3309 netmap=yes
3310 else
3311 if test "$netmap" = "yes" ; then
3312 feature_not_found "netmap"
3313 fi
3314 netmap=no
3315 fi
3316fi
3317
3318##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003319# libcap-ng library probe
3320if test "$cap_ng" != "no" ; then
3321 cap_libs="-lcap-ng"
3322 cat > $TMPC << EOF
3323#include <cap-ng.h>
3324int main(void)
3325{
3326 capng_capability_to_name(CAPNG_EFFECTIVE);
3327 return 0;
3328}
3329EOF
3330 if compile_prog "" "$cap_libs" ; then
3331 cap_ng=yes
3332 libs_tools="$cap_libs $libs_tools"
3333 else
3334 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003335 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003336 fi
3337 cap_ng=no
3338 fi
3339fi
3340
3341##########################################
malcc2de5c92008-06-28 19:13:06 +00003342# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003343
Stefan Weil89138852016-05-16 15:10:20 +02003344audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003345for drv in $audio_drv_list; do
3346 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003347 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003348 if $pkg_config alsa --exists; then
3349 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003350 if test "$drv" = "try-alsa"; then
3351 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3352 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003353 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003354 if test "$drv" = "try-alsa"; then
3355 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3356 else
3357 error_exit "$drv check failed" \
3358 "Make sure to have the $drv libs and headers installed."
3359 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003360 fi
malcc2de5c92008-06-28 19:13:06 +00003361 ;;
3362
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003363 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003364 if $pkg_config libpulse --exists; then
3365 pulse_libs=$($pkg_config libpulse --libs)
3366 audio_pt_int="yes"
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003367 if test "$drv" = "try-pa"; then
3368 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3369 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003370 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003371 if test "$drv" = "try-pa"; then
3372 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3373 else
3374 error_exit "$drv check failed" \
3375 "Make sure to have the $drv libs and headers installed."
3376 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003377 fi
malcb8e59f12008-07-02 21:03:08 +00003378 ;;
3379
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003380 sdl)
3381 if test "$sdl" = "no"; then
3382 error_exit "sdl not found or disabled, can not use sdl audio driver"
3383 fi
3384 ;;
3385
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003386 try-sdl)
3387 if test "$sdl" = "no"; then
3388 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3389 else
3390 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3391 fi
3392 ;;
3393
Juan Quintela997e6902009-08-03 14:46:29 +02003394 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003395 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003396 ;;
3397
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003398 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003399 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003400 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003401 ;;
3402
3403 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003404 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003405 ;;
3406
malce4c63a62008-07-19 16:15:16 +00003407 *)
malc1c9b2a52008-07-19 16:57:30 +00003408 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003409 error_exit "Unknown driver '$drv' selected" \
3410 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003411 }
3412 ;;
malcc2de5c92008-06-28 19:13:06 +00003413 esac
3414done
ths8f28f3f2007-01-05 21:25:54 +00003415
balrog4d3b6f62008-02-10 16:33:14 +00003416##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003417# BrlAPI probe
3418
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003419if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003420 brlapi_libs="-lbrlapi"
3421 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003422#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003423#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003424int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3425EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003426 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003427 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003428 else
3429 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003430 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003431 fi
3432 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003433 fi
3434fi
aurel322e4d9fb2008-04-08 06:01:02 +00003435
3436##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003437# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003438if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003439 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003440 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3441 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003442 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003443 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003444 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003445 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003446 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003447 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003448#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003449#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003450#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003451int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003452 wchar_t wch = L'w';
3453 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003454 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003455 addwstr(L"wide chars\n");
3456 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003457 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003458 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003459}
balrog4d3b6f62008-02-10 16:33:14 +00003460EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003461 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003462 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003463 # Make sure we get the wide character prototypes
3464 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003465 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003466 for curses_lib in $curses_lib_list; do
3467 unset IFS
3468 if compile_prog "$curses_inc" "$curses_lib" ; then
3469 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003470 break
3471 fi
3472 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003473 if test "$curses_found" = yes ; then
3474 break
3475 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003476 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003477 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003478 if test "$curses_found" = "yes" ; then
3479 curses=yes
3480 else
3481 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003482 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003483 fi
3484 curses=no
3485 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003486fi
balrog4d3b6f62008-02-10 16:33:14 +00003487
blueswir1414f0da2008-08-15 18:20:52 +00003488##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003489# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003490if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003491 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003492 curlconfig="$pkg_config libcurl"
3493 else
3494 curlconfig=curl-config
3495 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003496 cat > $TMPC << EOF
3497#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003498int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003499EOF
Stefan Weil89138852016-05-16 15:10:20 +02003500 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3501 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003502 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003503 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003504 else
3505 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003506 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003507 fi
3508 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003509 fi
3510fi # test "$curl"
3511
3512##########################################
balrogfb599c92008-09-28 23:49:55 +00003513# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003514if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003515 cat > $TMPC << EOF
3516#include <bluetooth/bluetooth.h>
3517int main(void) { return bt_error(0); }
3518EOF
Stefan Weil89138852016-05-16 15:10:20 +02003519 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3520 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003521 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003522 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003523 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003524 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003525 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003526 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003527 fi
balroge820e3f2008-09-30 02:27:44 +00003528 bluez="no"
3529 fi
balrogfb599c92008-09-28 23:49:55 +00003530fi
3531
3532##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003533# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003534
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003535glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003536glib_modules=gthread-2.0
3537if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003538 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003539fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003540
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003541# This workaround is required due to a bug in pkg-config file for glib as it
3542# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3543
Eric Blakee633a5c2019-02-04 20:39:37 -06003544if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003545 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3546fi
3547
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003548for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003549 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003550 glib_cflags=$($pkg_config --cflags $i)
3551 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003552 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003553 LIBS="$glib_libs $LIBS"
3554 libs_qga="$glib_libs $libs_qga"
3555 else
3556 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3557 fi
3558done
3559
Marc-André Lureauf876b762019-02-21 12:07:00 +01003560if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3561 gio=yes
3562 gio_cflags=$($pkg_config --cflags gio-2.0)
3563 gio_libs=$($pkg_config --libs gio-2.0)
3564else
3565 gio=no
3566fi
3567
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003568# Sanity check that the current size_t matches the
3569# size that glib thinks it should be. This catches
3570# problems on multi-arch where people try to build
3571# 32-bit QEMU while pointing at 64-bit glib headers
3572cat > $TMPC <<EOF
3573#include <glib.h>
3574#include <unistd.h>
3575
3576#define QEMU_BUILD_BUG_ON(x) \
3577 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3578
3579int main(void) {
3580 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3581 return 0;
3582}
3583EOF
3584
Stefan Weil5919e032016-04-28 23:33:41 +02003585if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003586 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3587 "You probably need to set PKG_CONFIG_LIBDIR"\
3588 "to point to the right pkg-config files for your"\
3589 "build target"
3590fi
3591
John Snowbbbf2e02015-03-25 18:57:38 -04003592# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3593cat > $TMPC << EOF
3594#include <glib.h>
3595int main(void) { return 0; }
3596EOF
3597if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3598 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3599 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3600 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3601 fi
3602fi
3603
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003604#########################################
3605# zlib check
3606
3607if test "$zlib" != "no" ; then
3608 if $pkg_config --exists zlib; then
3609 zlib_cflags=$($pkg_config --cflags zlib)
3610 zlib_libs=$($pkg_config --libs zlib)
3611 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3612 LIBS="$zlib_libs $LIBS"
3613 else
3614 cat > $TMPC << EOF
3615#include <zlib.h>
3616int main(void) { zlibVersion(); return 0; }
3617EOF
3618 if compile_prog "" "-lz" ; then
3619 LIBS="$LIBS -lz"
3620 else
3621 error_exit "zlib check failed" \
3622 "Make sure to have the zlib libs and headers installed."
3623 fi
3624 fi
3625fi
3626
Fam Zhenge26110c2014-02-10 14:48:57 +08003627##########################################
3628# SHA command probe for modules
3629if test "$modules" = yes; then
3630 shacmd_probe="sha1sum sha1 shasum"
3631 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003632 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003633 shacmd="$c"
3634 break
3635 fi
3636 done
3637 if test "$shacmd" = ""; then
3638 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3639 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003640fi
3641
3642##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003643# pixman support probe
3644
Eric Blakee633a5c2019-02-04 20:39:37 -06003645if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003646 pixman_cflags=
3647 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003648elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003649 pixman_cflags=$($pkg_config --cflags pixman-1)
3650 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003651else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003652 error_exit "pixman >= 0.21.8 not present." \
3653 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003654fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003655
3656##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003657# libmpathpersist probe
3658
3659if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003660 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003661 cat > $TMPC <<EOF
3662#include <libudev.h>
3663#include <mpath_persist.h>
3664unsigned mpath_mx_alloc_len = 1024;
3665int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003666static struct config *multipath_conf;
3667extern struct udev *udev;
3668extern struct config *get_multipath_config(void);
3669extern void put_multipath_config(struct config *conf);
3670struct udev *udev;
3671struct config *get_multipath_config(void) { return multipath_conf; }
3672void put_multipath_config(struct config *conf) { }
3673
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003674int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003675 udev = udev_new();
3676 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003677 return 0;
3678}
3679EOF
3680 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3681 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003682 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003683 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003684 # probe for the old API
3685 cat > $TMPC <<EOF
3686#include <libudev.h>
3687#include <mpath_persist.h>
3688unsigned mpath_mx_alloc_len = 1024;
3689int logsink;
3690int main(void) {
3691 struct udev *udev = udev_new();
3692 mpath_lib_init(udev);
3693 return 0;
3694}
3695EOF
3696 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3697 mpathpersist=yes
3698 mpathpersist_new_api=no
3699 else
3700 mpathpersist=no
3701 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003702 fi
3703else
3704 mpathpersist=no
3705fi
3706
3707##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303708# libcap probe
3709
3710if test "$cap" != "no" ; then
3711 cat > $TMPC <<EOF
3712#include <stdio.h>
3713#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003714int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303715EOF
3716 if compile_prog "" "-lcap" ; then
3717 cap=yes
3718 else
3719 cap=no
3720 fi
3721fi
3722
3723##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003724# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003725PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003726
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003727pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003728cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003729#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003730static void *f(void *p) { return NULL; }
3731int main(void) {
3732 pthread_t thread;
3733 pthread_create(&thread, 0, f, 0);
3734 return 0;
3735}
blueswir1414f0da2008-08-15 18:20:52 +00003736EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003737if compile_prog "" "" ; then
3738 pthread=yes
3739else
3740 for pthread_lib in $PTHREADLIBS_LIST; do
3741 if compile_prog "" "$pthread_lib" ; then
3742 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003743 found=no
3744 for lib_entry in $LIBS; do
3745 if test "$lib_entry" = "$pthread_lib"; then
3746 found=yes
3747 break
3748 fi
3749 done
3750 if test "$found" = "no"; then
3751 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003752 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003753 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003754 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003755 break
3756 fi
3757 done
3758fi
blueswir1414f0da2008-08-15 18:20:52 +00003759
Eric Blakee633a5c2019-02-04 20:39:37 -06003760if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003761 error_exit "pthread check failed" \
3762 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003763fi
3764
Roman Bolshakov479a5742018-12-17 23:26:01 +03003765# check for pthread_setname_np with thread id
3766pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003767cat > $TMPC << EOF
3768#include <pthread.h>
3769
3770static void *f(void *p) { return NULL; }
3771int main(void)
3772{
3773 pthread_t thread;
3774 pthread_create(&thread, 0, f, 0);
3775 pthread_setname_np(thread, "QEMU");
3776 return 0;
3777}
3778EOF
3779if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003780 pthread_setname_np_w_tid=yes
3781fi
3782
3783# check for pthread_setname_np without thread id
3784pthread_setname_np_wo_tid=no
3785cat > $TMPC << EOF
3786#include <pthread.h>
3787
3788static void *f(void *p) { pthread_setname_np("QEMU"); }
3789int main(void)
3790{
3791 pthread_t thread;
3792 pthread_create(&thread, 0, f, 0);
3793 return 0;
3794}
3795EOF
3796if compile_prog "" "$pthread_lib" ; then
3797 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003798fi
3799
aliguoribf9298b2008-12-05 20:05:26 +00003800##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003801# rbd probe
3802if test "$rbd" != "no" ; then
3803 cat > $TMPC <<EOF
3804#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003805#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003806int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003807 rados_t cluster;
3808 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003809 return 0;
3810}
3811EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003812 rbd_libs="-lrbd -lrados"
3813 if compile_prog "" "$rbd_libs" ; then
3814 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003815 else
3816 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003817 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003818 fi
3819 rbd=no
3820 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003821fi
3822
3823##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003824# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003825min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003826if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003827 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003828 libssh2_cflags=$($pkg_config libssh2 --cflags)
3829 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003830 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003831 else
3832 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003833 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003834 fi
3835 libssh2=no
3836 fi
3837fi
3838
3839##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003840# libssh2_sftp_fsync probe
3841
3842if test "$libssh2" = "yes"; then
3843 cat > $TMPC <<EOF
3844#include <stdio.h>
3845#include <libssh2.h>
3846#include <libssh2_sftp.h>
3847int main(void) {
3848 LIBSSH2_SESSION *session;
3849 LIBSSH2_SFTP *sftp;
3850 LIBSSH2_SFTP_HANDLE *sftp_handle;
3851 session = libssh2_session_init ();
3852 sftp = libssh2_sftp_init (session);
3853 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3854 libssh2_sftp_fsync (sftp_handle);
3855 return 0;
3856}
3857EOF
3858 # libssh2_cflags/libssh2_libs defined in previous test.
3859 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3860 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3861 fi
3862fi
3863
3864##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003865# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003866
3867if test "$linux_aio" != "no" ; then
3868 cat > $TMPC <<EOF
3869#include <libaio.h>
3870#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003871#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003872int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3873EOF
3874 if compile_prog "" "-laio" ; then
3875 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003876 else
3877 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003878 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003879 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003880 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003881 fi
3882fi
3883
3884##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08003885# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003886
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08003887if test "$tpm" = ""; then
3888 if test "$mingw32" = "yes"; then
3889 tpm=no
3890 else
3891 tpm=yes
3892 fi
3893elif test "$tpm" = "yes"; then
3894 if test "$mingw32" = "yes" ; then
3895 error_exit "TPM emulation only available on POSIX systems"
3896 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003897fi
3898
3899##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003900# attr probe
3901
3902if test "$attr" != "no" ; then
3903 cat > $TMPC <<EOF
3904#include <stdio.h>
3905#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003906#ifdef CONFIG_LIBATTR
3907#include <attr/xattr.h>
3908#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003909#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003910#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003911int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3912EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003913 if compile_prog "" "" ; then
3914 attr=yes
3915 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003916 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003917 attr=yes
3918 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003919 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003920 else
3921 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003922 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003923 fi
3924 attr=no
3925 fi
3926fi
3927
3928##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003929# iovec probe
3930cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003931#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003932#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003933#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003934int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003935EOF
3936iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003937if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003938 iovec=yes
3939fi
3940
aurel32f652e6a2008-12-16 10:43:48 +00003941##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003942# preadv probe
3943cat > $TMPC <<EOF
3944#include <sys/types.h>
3945#include <sys/uio.h>
3946#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003947int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003948EOF
3949preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003950if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003951 preadv=yes
3952fi
3953
3954##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003955# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003956# fdt support is mandatory for at least some target architectures,
3957# so insist on it if we're building those system emulators.
3958fdt_required=no
3959for target in $target_list; do
3960 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003961 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003962 fdt_required=yes
3963 ;;
3964 esac
3965done
3966
3967if test "$fdt_required" = "yes"; then
3968 if test "$fdt" = "no"; then
3969 error_exit "fdt disabled but some requested targets require it." \
3970 "You can turn off fdt only if you also disable all the system emulation" \
3971 "targets which need it (by specifying a cut down --target-list)."
3972 fi
3973 fdt=yes
3974fi
3975
Juan Quintela2df87df2009-08-12 18:29:54 +02003976if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003977 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003978 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003979 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003980 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003981#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003982#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01003983int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003984EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003985 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003986 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003987 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003988 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003989 # have GIT checkout, so activate dtc submodule
3990 if test -e "${source_path}/.git" ; then
3991 git_submodules="${git_submodules} dtc"
3992 fi
3993 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003994 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003995 mkdir -p dtc
3996 if [ "$pwd_is_source_path" != "y" ] ; then
3997 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3998 symlink "$source_path/dtc/scripts" "dtc/scripts"
3999 fi
4000 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004001 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4002 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004003 elif test "$fdt" = "yes" ; then
4004 # Not a git build & no libfdt found, prompt for system install
4005 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4006 "Please install the DTC (libfdt) devel package"
4007 else
4008 # don't have and don't want
4009 fdt_libs=
4010 fdt=no
4011 fi
aurel32f652e6a2008-12-16 10:43:48 +00004012 fi
4013fi
4014
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004015libs_softmmu="$libs_softmmu $fdt_libs"
4016
Michael Walle20ff0752011-03-07 23:32:39 +01004017##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004018# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004019
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004020if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004021 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004022 if $pkg_config $opengl_pkgs; then
4023 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4024 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004025 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004026 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4027 gtk_gl="yes"
4028 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004029 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004030 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004031 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004032 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004033 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004034 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004035 opengl_libs=""
4036 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004037 fi
4038fi
4039
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004040if test "$opengl" = "yes"; then
4041 cat > $TMPC << EOF
4042#include <epoxy/egl.h>
4043#ifndef EGL_MESA_image_dma_buf_export
4044# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4045#endif
4046int main(void) { return 0; }
4047EOF
4048 if compile_prog "" "" ; then
4049 opengl_dmabuf=yes
4050 fi
4051fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004052
Eric Blakee633a5c2019-02-04 20:39:37 -06004053if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004054 for target in $target_list; do
4055 case $target in
4056 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4057 need_x11=yes
4058 ;;
4059 esac
4060 done
4061fi
4062
Klim Kireeved279a02018-01-12 12:01:19 +03004063##########################################
4064# libxml2 probe
4065if test "$libxml2" != "no" ; then
4066 if $pkg_config --exists libxml-2.0; then
4067 libxml2="yes"
4068 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4069 libxml2_libs=$($pkg_config --libs libxml-2.0)
4070 else
4071 if test "$libxml2" = "yes"; then
4072 feature_not_found "libxml2" "Install libxml2 devel"
4073 fi
4074 libxml2="no"
4075 fi
4076fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004077
Bharata B Raoeb100392012-09-24 14:42:45 +05304078##########################################
4079# glusterfs probe
4080if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004081 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304082 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004083 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4084 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004085 if $pkg_config --atleast-version=4 glusterfs-api; then
4086 glusterfs_xlator_opt="yes"
4087 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004088 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304089 glusterfs_discard="yes"
4090 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304091 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304092 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304093 glusterfs_zerofill="yes"
4094 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004095 cat > $TMPC << EOF
4096#include <glusterfs/api/glfs.h>
4097
4098int
4099main(void)
4100{
4101 /* new glfs_ftruncate() passes two additional args */
4102 return glfs_ftruncate(NULL, 0, NULL, NULL);
4103}
4104EOF
4105 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4106 glusterfs_ftruncate_has_stat="yes"
4107 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304108 else
4109 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004110 feature_not_found "GlusterFS backend support" \
4111 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304112 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304113 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304114 fi
4115fi
4116
aurel3239386ac2009-04-15 19:48:17 +00004117# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004118# emulator. This is done because older glibc versions don't
4119# have syscall stubs for these implemented. In that case we
4120# don't provide them even if kernel supports them.
4121#
4122inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004123cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004124#include <sys/inotify.h>
4125
4126int
4127main(void)
4128{
4129 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004130 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004131}
4132EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004133if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004134 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004135fi
4136
Riku Voipioc05c7a72010-03-26 15:25:11 +00004137inotify1=no
4138cat > $TMPC << EOF
4139#include <sys/inotify.h>
4140
4141int
4142main(void)
4143{
4144 /* try to start inotify */
4145 return inotify_init1(0);
4146}
4147EOF
4148if compile_prog "" "" ; then
4149 inotify1=yes
4150fi
4151
Riku Voipio099d6b02009-05-05 12:10:04 +03004152# check if pipe2 is there
4153pipe2=no
4154cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004155#include <unistd.h>
4156#include <fcntl.h>
4157
4158int main(void)
4159{
4160 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004161 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004162}
4163EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004164if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004165 pipe2=yes
4166fi
4167
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004168# check if accept4 is there
4169accept4=no
4170cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004171#include <sys/socket.h>
4172#include <stddef.h>
4173
4174int main(void)
4175{
4176 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4177 return 0;
4178}
4179EOF
4180if compile_prog "" "" ; then
4181 accept4=yes
4182fi
4183
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304184# check if tee/splice is there. vmsplice was added same time.
4185splice=no
4186cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304187#include <unistd.h>
4188#include <fcntl.h>
4189#include <limits.h>
4190
4191int main(void)
4192{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004193 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304194 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4195 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4196 return 0;
4197}
4198EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004199if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304200 splice=yes
4201fi
4202
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004203##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004204# libnuma probe
4205
4206if test "$numa" != "no" ; then
4207 cat > $TMPC << EOF
4208#include <numa.h>
4209int main(void) { return numa_available(); }
4210EOF
4211
4212 if compile_prog "" "-lnuma" ; then
4213 numa=yes
4214 libs_softmmu="-lnuma $libs_softmmu"
4215 else
4216 if test "$numa" = "yes" ; then
4217 feature_not_found "numa" "install numactl devel"
4218 fi
4219 numa=no
4220 fi
4221fi
4222
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004223if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4224 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4225 exit 1
4226fi
4227
Yang Zhong5a22ab72017-12-20 21:16:46 +08004228# Even if malloc_trim() is available, these non-libc memory allocators
4229# do not support it.
4230if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4231 if test "$malloc_trim" = "yes" ; then
4232 echo "Disabling malloc_trim with non-libc memory allocator"
4233 fi
4234 malloc_trim="no"
4235fi
4236
4237#######################################
4238# malloc_trim
4239
4240if test "$malloc_trim" != "no" ; then
4241 cat > $TMPC << EOF
4242#include <malloc.h>
4243int main(void) { malloc_trim(0); return 0; }
4244EOF
4245 if compile_prog "" "" ; then
4246 malloc_trim="yes"
4247 else
4248 malloc_trim="no"
4249 fi
4250fi
4251
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004252##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004253# tcmalloc probe
4254
4255if test "$tcmalloc" = "yes" ; then
4256 cat > $TMPC << EOF
4257#include <stdlib.h>
4258int main(void) { malloc(1); return 0; }
4259EOF
4260
4261 if compile_prog "" "-ltcmalloc" ; then
4262 LIBS="-ltcmalloc $LIBS"
4263 else
4264 feature_not_found "tcmalloc" "install gperftools devel"
4265 fi
4266fi
4267
4268##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004269# jemalloc probe
4270
4271if test "$jemalloc" = "yes" ; then
4272 cat > $TMPC << EOF
4273#include <stdlib.h>
4274int main(void) { malloc(1); return 0; }
4275EOF
4276
4277 if compile_prog "" "-ljemalloc" ; then
4278 LIBS="-ljemalloc $LIBS"
4279 else
4280 feature_not_found "jemalloc" "install jemalloc devel"
4281 fi
4282fi
4283
4284##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004285# signalfd probe
4286signalfd="no"
4287cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004288#include <unistd.h>
4289#include <sys/syscall.h>
4290#include <signal.h>
4291int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4292EOF
4293
4294if compile_prog "" "" ; then
4295 signalfd=yes
4296fi
4297
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004298# check if optreset global is declared by <getopt.h>
4299optreset="no"
4300cat > $TMPC << EOF
4301#include <getopt.h>
4302int main(void) { return optreset; }
4303EOF
4304
4305if compile_prog "" "" ; then
4306 optreset=yes
4307fi
4308
Riku Voipioc2882b92009-08-12 15:08:24 +03004309# check if eventfd is supported
4310eventfd=no
4311cat > $TMPC << EOF
4312#include <sys/eventfd.h>
4313
4314int main(void)
4315{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004316 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004317}
4318EOF
4319if compile_prog "" "" ; then
4320 eventfd=yes
4321fi
4322
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004323# check if memfd is supported
4324memfd=no
4325cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004326#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004327
4328int main(void)
4329{
4330 return memfd_create("foo", MFD_ALLOW_SEALING);
4331}
4332EOF
4333if compile_prog "" "" ; then
4334 memfd=yes
4335fi
4336
Cortland Tölva955727d2018-10-08 09:35:19 -07004337# check for usbfs
4338have_usbfs=no
4339if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004340 cat > $TMPC << EOF
4341#include <linux/usbdevice_fs.h>
4342
4343#ifndef USBDEVFS_GET_CAPABILITIES
4344#error "USBDEVFS_GET_CAPABILITIES undefined"
4345#endif
4346
4347#ifndef USBDEVFS_DISCONNECT_CLAIM
4348#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4349#endif
4350
4351int main(void)
4352{
4353 return 0;
4354}
4355EOF
4356 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004357 have_usbfs=yes
4358 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004359fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004360
Ulrich Hechtd0927932009-09-17 20:22:14 +03004361# check for fallocate
4362fallocate=no
4363cat > $TMPC << EOF
4364#include <fcntl.h>
4365
4366int main(void)
4367{
4368 fallocate(0, 0, 0, 0);
4369 return 0;
4370}
4371EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004372if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004373 fallocate=yes
4374fi
4375
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004376# check for fallocate hole punching
4377fallocate_punch_hole=no
4378cat > $TMPC << EOF
4379#include <fcntl.h>
4380#include <linux/falloc.h>
4381
4382int main(void)
4383{
4384 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4385 return 0;
4386}
4387EOF
4388if compile_prog "" "" ; then
4389 fallocate_punch_hole=yes
4390fi
4391
Denis V. Lunevb953f072015-01-30 11:42:14 +03004392# check that fallocate supports range zeroing inside the file
4393fallocate_zero_range=no
4394cat > $TMPC << EOF
4395#include <fcntl.h>
4396#include <linux/falloc.h>
4397
4398int main(void)
4399{
4400 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4401 return 0;
4402}
4403EOF
4404if compile_prog "" "" ; then
4405 fallocate_zero_range=yes
4406fi
4407
Kevin Wolfed911432014-09-29 17:12:59 +02004408# check for posix_fallocate
4409posix_fallocate=no
4410cat > $TMPC << EOF
4411#include <fcntl.h>
4412
4413int main(void)
4414{
4415 posix_fallocate(0, 0, 0);
4416 return 0;
4417}
4418EOF
4419if compile_prog "" "" ; then
4420 posix_fallocate=yes
4421fi
4422
Peter Maydellc727f472011-01-06 11:05:10 +00004423# check for sync_file_range
4424sync_file_range=no
4425cat > $TMPC << EOF
4426#include <fcntl.h>
4427
4428int main(void)
4429{
4430 sync_file_range(0, 0, 0, 0);
4431 return 0;
4432}
4433EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004434if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004435 sync_file_range=yes
4436fi
4437
Peter Maydelldace20d2011-01-10 13:11:24 +00004438# check for linux/fiemap.h and FS_IOC_FIEMAP
4439fiemap=no
4440cat > $TMPC << EOF
4441#include <sys/ioctl.h>
4442#include <linux/fs.h>
4443#include <linux/fiemap.h>
4444
4445int main(void)
4446{
4447 ioctl(0, FS_IOC_FIEMAP, 0);
4448 return 0;
4449}
4450EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004451if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004452 fiemap=yes
4453fi
4454
Ulrich Hechtd0927932009-09-17 20:22:14 +03004455# check for dup3
4456dup3=no
4457cat > $TMPC << EOF
4458#include <unistd.h>
4459
4460int main(void)
4461{
4462 dup3(0, 0, 0);
4463 return 0;
4464}
4465EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004466if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004467 dup3=yes
4468fi
4469
Alex Bligh4e0c6522013-08-21 16:02:43 +01004470# check for ppoll support
4471ppoll=no
4472cat > $TMPC << EOF
4473#include <poll.h>
4474
4475int main(void)
4476{
4477 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4478 ppoll(&pfd, 1, 0, 0);
4479 return 0;
4480}
4481EOF
4482if compile_prog "" "" ; then
4483 ppoll=yes
4484fi
4485
Alex Blighcd758dd2013-08-21 16:02:44 +01004486# check for prctl(PR_SET_TIMERSLACK , ... ) support
4487prctl_pr_set_timerslack=no
4488cat > $TMPC << EOF
4489#include <sys/prctl.h>
4490
4491int main(void)
4492{
4493 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4494 return 0;
4495}
4496EOF
4497if compile_prog "" "" ; then
4498 prctl_pr_set_timerslack=yes
4499fi
4500
Peter Maydell3b6edd12011-02-15 18:35:05 +00004501# check for epoll support
4502epoll=no
4503cat > $TMPC << EOF
4504#include <sys/epoll.h>
4505
4506int main(void)
4507{
4508 epoll_create(0);
4509 return 0;
4510}
4511EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004512if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004513 epoll=yes
4514fi
4515
Peter Maydell227f0212016-06-06 19:58:11 +01004516# epoll_create1 is a later addition
4517# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004518epoll_create1=no
4519cat > $TMPC << EOF
4520#include <sys/epoll.h>
4521
4522int main(void)
4523{
Peter Maydell19e83f62011-04-26 16:56:40 +01004524 /* Note that we use epoll_create1 as a value, not as
4525 * a function being called. This is necessary so that on
4526 * old SPARC glibc versions where the function was present in
4527 * the library but not declared in the header file we will
4528 * fail the configure check. (Otherwise we will get a compiler
4529 * warning but not an error, and will proceed to fail the
4530 * qemu compile where we compile with -Werror.)
4531 */
Blue Swirlc075a722012-08-09 20:21:25 +00004532 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004533}
4534EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004535if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004536 epoll_create1=yes
4537fi
4538
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004539# check for sendfile support
4540sendfile=no
4541cat > $TMPC << EOF
4542#include <sys/sendfile.h>
4543
4544int main(void)
4545{
4546 return sendfile(0, 0, 0, 0);
4547}
4548EOF
4549if compile_prog "" "" ; then
4550 sendfile=yes
4551fi
4552
Riku Voipio51834342014-06-22 11:25:42 +01004553# check for timerfd support (glibc 2.8 and newer)
4554timerfd=no
4555cat > $TMPC << EOF
4556#include <sys/timerfd.h>
4557
4558int main(void)
4559{
4560 return(timerfd_create(CLOCK_REALTIME, 0));
4561}
4562EOF
4563if compile_prog "" "" ; then
4564 timerfd=yes
4565fi
4566
Riku Voipio9af5c902014-08-12 15:58:57 +03004567# check for setns and unshare support
4568setns=no
4569cat > $TMPC << EOF
4570#include <sched.h>
4571
4572int main(void)
4573{
4574 int ret;
4575 ret = setns(0, 0);
4576 ret = unshare(0);
4577 return ret;
4578}
4579EOF
4580if compile_prog "" "" ; then
4581 setns=yes
4582fi
4583
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004584# clock_adjtime probe
4585clock_adjtime=no
4586cat > $TMPC <<EOF
4587#include <time.h>
4588
4589int main(void)
4590{
4591 return clock_adjtime(0, 0);
4592}
4593EOF
4594clock_adjtime=no
4595if compile_prog "" "" ; then
4596 clock_adjtime=yes
4597fi
4598
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004599# syncfs probe
4600syncfs=no
4601cat > $TMPC <<EOF
4602#include <unistd.h>
4603
4604int main(void)
4605{
4606 return syncfs(0);
4607}
4608EOF
4609syncfs=no
4610if compile_prog "" "" ; then
4611 syncfs=yes
4612fi
4613
Peter Maydell5f71eac2019-03-07 14:26:46 +00004614# Check we have a new enough version of sphinx-build
4615has_sphinx_build() {
4616 # This is a bit awkward but works: create a trivial document and
4617 # try to run it with our configuration file (which enforces a
4618 # version requirement). This will fail if either
4619 # sphinx-build doesn't exist at all or if it is too old.
4620 mkdir -p "$TMPDIR1/sphinx"
4621 touch "$TMPDIR1/sphinx/index.rst"
4622 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4623}
4624
pbrookcc8ae6d2006-04-23 17:57:59 +00004625# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004626if test "$docs" != "no" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004627 if has makeinfo && has pod2man && has_sphinx_build; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004628 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004629 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004630 if test "$docs" = "yes" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004631 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004632 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004633 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004634 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004635fi
4636
Stefan Weilf514f412009-10-11 12:44:07 +02004637# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004638byteswap_h=no
4639cat > $TMPC << EOF
4640#include <byteswap.h>
4641int main(void) { return bswap_32(0); }
4642EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004643if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004644 byteswap_h=yes
4645fi
4646
Stefan Weil75f13592013-01-05 12:17:38 +01004647# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004648bswap_h=no
4649cat > $TMPC << EOF
4650#include <sys/endian.h>
4651#include <sys/types.h>
4652#include <machine/bswap.h>
4653int main(void) { return bswap32(0); }
4654EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004655if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004656 bswap_h=yes
4657fi
4658
aliguorida93a1f2008-12-12 20:02:52 +00004659##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004660# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004661if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004662 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004663 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004664 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4665 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004666 else
4667 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004668 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004669 fi
4670 libiscsi="no"
4671 fi
4672fi
4673
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004674##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004675# Do we need libm
4676cat > $TMPC << EOF
4677#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004678int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004679EOF
4680if compile_prog "" "" ; then
4681 :
4682elif compile_prog "" "-lm" ; then
4683 LIBS="-lm $LIBS"
4684 libs_qga="-lm $libs_qga"
4685else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004686 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004687fi
4688
4689##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004690# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004691# uClibc provides 2 versions of clock_gettime(), one with realtime
4692# support and one without. This means that the clock_gettime() don't
4693# need -lrt. We still need it for timer_create() so we check for this
4694# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004695cat > $TMPC <<EOF
4696#include <signal.h>
4697#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004698int main(void) {
4699 timer_create(CLOCK_REALTIME, NULL, NULL);
4700 return clock_gettime(CLOCK_REALTIME, NULL);
4701}
aliguorida93a1f2008-12-12 20:02:52 +00004702EOF
4703
Juan Quintela52166aa2009-08-03 14:46:03 +02004704if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004705 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004706# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004707elif compile_prog "" "$pthread_lib -lrt" ; then
4708 LIBS="$LIBS -lrt"
4709 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004710fi
4711
Thomas Huthd99e97e2019-01-17 18:14:08 +01004712# Check whether we need to link libutil for openpty()
4713cat > $TMPC << EOF
4714extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4715int main(void) { return openpty(0, 0, 0, 0, 0); }
4716EOF
4717
4718if ! compile_prog "" "" ; then
4719 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004720 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004721 libs_tools="-lutil $libs_tools"
4722 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004723fi
4724
Blue Swirlde5071c2009-09-12 09:58:46 +00004725##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004726# spice probe
4727if test "$spice" != "no" ; then
4728 cat > $TMPC << EOF
4729#include <spice.h>
4730int main(void) { spice_server_new(); return 0; }
4731EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004732 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4733 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004734 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004735 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004736 compile_prog "$spice_cflags" "$spice_libs" ; then
4737 spice="yes"
4738 libs_softmmu="$libs_softmmu $spice_libs"
4739 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004740 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4741 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004742 else
4743 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004744 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004745 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004746 fi
4747 spice="no"
4748 fi
4749fi
4750
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004751# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004752if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004753 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004754 libcacard_cflags=$($pkg_config --cflags libcacard)
4755 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004756 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004757 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004758 if test "$smartcard" = "yes"; then
4759 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004760 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004761 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004762 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004763fi
4764
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004765# check for libusb
4766if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004767 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004768 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004769 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4770 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004771 else
4772 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004773 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004774 fi
4775 libusb="no"
4776 fi
4777fi
4778
Hans de Goede69354a82011-07-19 11:04:10 +02004779# check for usbredirparser for usb network redirection support
4780if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004781 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004782 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004783 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4784 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004785 else
4786 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004787 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004788 fi
4789 usb_redir="no"
4790 fi
4791fi
4792
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004793##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004794# check if we have VSS SDK headers for win
4795
Eric Blakee633a5c2019-02-04 20:39:37 -06004796if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4797 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004798 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004799 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004800 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4801 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004802 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004803 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4804 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004805 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004806 esac
4807 cat > $TMPC << EOF
4808#define __MIDL_user_allocate_free_DEFINED__
4809#include <inc/win2003/vss.h>
4810int main(void) { return VSS_CTX_BACKUP; }
4811EOF
4812 if compile_prog "$vss_win32_include" "" ; then
4813 guest_agent_with_vss="yes"
4814 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004815 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004816 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004817 else
4818 if test "$vss_win32_sdk" != "" ; then
4819 echo "ERROR: Please download and install Microsoft VSS SDK:"
4820 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4821 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4822 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4823 echo "ERROR: The headers are extracted in the directory \`inc'."
4824 feature_not_found "VSS support"
4825 fi
4826 guest_agent_with_vss="no"
4827 fi
4828fi
4829
4830##########################################
4831# lookup Windows platform SDK (if not specified)
4832# The SDK is needed only to build .tlb (type library) file of guest agent
4833# VSS provider from the source. It is usually unnecessary because the
4834# pre-compiled .tlb file is included.
4835
Eric Blakee633a5c2019-02-04 20:39:37 -06004836if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4837 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004838 if test -z "$win_sdk"; then
4839 programfiles="$PROGRAMFILES"
4840 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4841 if test -n "$programfiles"; then
4842 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4843 else
4844 feature_not_found "Windows SDK"
4845 fi
4846 elif test "$win_sdk" = "no"; then
4847 win_sdk=""
4848 fi
4849fi
4850
4851##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004852# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06004853if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05004854 cat > $TMPC << EOF
4855#include <windows.h>
4856#include <ntddscsi.h>
4857int main(void) {
4858#if !defined(IOCTL_SCSI_GET_ADDRESS)
4859#error Missing required ioctl definitions
4860#endif
4861 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4862 return addr.Lun;
4863}
4864EOF
4865 if compile_prog "" "" ; then
4866 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004867 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004868 fi
4869fi
4870
4871##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004872# virgl renderer probe
4873
4874if test "$virglrenderer" != "no" ; then
4875 cat > $TMPC << EOF
4876#include <virglrenderer.h>
4877int main(void) { virgl_renderer_poll(); return 0; }
4878EOF
4879 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4880 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004881 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004882 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4883 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4884 virglrenderer="yes"
4885 else
4886 if test "$virglrenderer" = "yes" ; then
4887 feature_not_found "virglrenderer"
4888 fi
4889 virglrenderer="no"
4890 fi
4891fi
4892
4893##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004894# capstone
4895
Richard Hendersone219c492017-09-28 09:01:23 -07004896case "$capstone" in
4897 "" | yes)
4898 if $pkg_config capstone; then
4899 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06004900 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004901 capstone=git
4902 elif test -e "${source_path}/capstone/Makefile" ; then
4903 capstone=internal
4904 elif test -z "$capstone" ; then
4905 capstone=no
4906 else
4907 feature_not_found "capstone" "Install capstone devel or git submodule"
4908 fi
4909 ;;
4910
4911 system)
4912 if ! $pkg_config capstone; then
4913 feature_not_found "capstone" "Install capstone devel"
4914 fi
4915 ;;
4916esac
4917
4918case "$capstone" in
4919 git | internal)
4920 if test "$capstone" = git; then
4921 git_submodules="${git_submodules} capstone"
4922 fi
4923 mkdir -p capstone
4924 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4925 if test "$mingw32" = "yes"; then
4926 LIBCAPSTONE=capstone.lib
4927 else
4928 LIBCAPSTONE=libcapstone.a
4929 fi
4930 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4931 ;;
4932
4933 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004934 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4935 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004936 ;;
4937
4938 no)
4939 ;;
4940 *)
4941 error_exit "Unknown state for capstone: $capstone"
4942 ;;
4943esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004944
4945##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004946# check if we have fdatasync
4947
4948fdatasync=no
4949cat > $TMPC << EOF
4950#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004951int main(void) {
4952#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4953return fdatasync(0);
4954#else
Stefan Weile172fe12012-04-06 21:33:20 +02004955#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004956#endif
4957}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004958EOF
4959if compile_prog "" "" ; then
4960 fdatasync=yes
4961fi
4962
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004963##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004964# check if we have madvise
4965
4966madvise=no
4967cat > $TMPC << EOF
4968#include <sys/types.h>
4969#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004970#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004971int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4972EOF
4973if compile_prog "" "" ; then
4974 madvise=yes
4975fi
4976
4977##########################################
4978# check if we have posix_madvise
4979
4980posix_madvise=no
4981cat > $TMPC << EOF
4982#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004983#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004984int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4985EOF
4986if compile_prog "" "" ; then
4987 posix_madvise=yes
4988fi
4989
4990##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004991# check if we have posix_memalign()
4992
4993posix_memalign=no
4994cat > $TMPC << EOF
4995#include <stdlib.h>
4996int main(void) {
4997 void *p;
4998 return posix_memalign(&p, 8, 8);
4999}
5000EOF
5001if compile_prog "" "" ; then
5002 posix_memalign=yes
5003fi
5004
5005##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005006# check if we have posix_syslog
5007
5008posix_syslog=no
5009cat > $TMPC << EOF
5010#include <syslog.h>
5011int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5012EOF
5013if compile_prog "" "" ; then
5014 posix_syslog=yes
5015fi
5016
5017##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005018# check if we have sem_timedwait
5019
5020sem_timedwait=no
5021cat > $TMPC << EOF
5022#include <semaphore.h>
5023int main(void) { return sem_timedwait(0, 0); }
5024EOF
5025if compile_prog "" "" ; then
5026 sem_timedwait=yes
5027fi
5028
5029##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005030# check if we have strchrnul
5031
5032strchrnul=no
5033cat > $TMPC << EOF
5034#include <string.h>
5035int main(void);
5036// Use a haystack that the compiler shouldn't be able to constant fold
5037char *haystack = (char*)&main;
5038int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5039EOF
5040if compile_prog "" "" ; then
5041 strchrnul=yes
5042fi
5043
5044##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005045# check if trace backend exists
5046
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005047$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005048if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005049 error_exit "invalid trace backends" \
5050 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005051fi
5052
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005053##########################################
5054# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005055if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005056 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005057#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005058int main(void) { return 0; }
5059EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005060 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005061 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005062 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005063 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005064 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005065 fi
5066 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005067 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005068 else
5069 urcu_bp_libs="-lurcu-bp"
5070 fi
5071
5072 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5073 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005074 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005075 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005076 fi
5077fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005078
5079##########################################
5080# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005081if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005082 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005083 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005084 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005085 trace_backend_stap="no"
5086 if has 'stap' ; then
5087 trace_backend_stap="yes"
5088 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005089fi
5090
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005091##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005092# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305093
Peter Maydell7c2acc72013-04-08 12:11:27 +01005094# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005095# is sigcontext. On Windows the only valid backend is the Windows
5096# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005097
5098ucontext_works=no
5099if test "$darwin" != "yes"; then
5100 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305101#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005102#ifdef __stub_makecontext
5103#error Ignoring glibc stub makecontext which will always fail
5104#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005105int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305106EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005107 if compile_prog "" "" ; then
5108 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305109 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005110fi
5111
5112if test "$coroutine" = ""; then
5113 if test "$mingw32" = "yes"; then
5114 coroutine=win32
5115 elif test "$ucontext_works" = "yes"; then
5116 coroutine=ucontext
5117 else
5118 coroutine=sigaltstack
5119 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005120else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005121 case $coroutine in
5122 windows)
5123 if test "$mingw32" != "yes"; then
5124 error_exit "'windows' coroutine backend only valid for Windows"
5125 fi
5126 # Unfortunately the user visible backend name doesn't match the
5127 # coroutine-*.c filename for this case, so we have to adjust it here.
5128 coroutine=win32
5129 ;;
5130 ucontext)
5131 if test "$ucontext_works" != "yes"; then
5132 feature_not_found "ucontext"
5133 fi
5134 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005135 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005136 if test "$mingw32" = "yes"; then
5137 error_exit "only the 'windows' coroutine backend is valid for Windows"
5138 fi
5139 ;;
5140 *)
5141 error_exit "unknown coroutine backend $coroutine"
5142 ;;
5143 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305144fi
5145
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005146if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005147 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005148fi
5149
Peter Lieven7d992e42016-09-27 11:58:45 +02005150if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005151 if test "$coroutine_pool" = "yes"; then
5152 echo "WARN: disabling coroutine pool for stack usage debugging"
5153 coroutine_pool=no
5154 fi
5155fi
5156
5157
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305158##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305159# check if we have open_by_handle_at
5160
Stefan Weil4e1797f2012-06-18 22:11:06 +02005161open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305162cat > $TMPC << EOF
5163#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005164#if !defined(AT_EMPTY_PATH)
5165# error missing definition
5166#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005167int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005168#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305169EOF
5170if compile_prog "" "" ; then
5171 open_by_handle_at=yes
5172fi
5173
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305174########################################
5175# check if we have linux/magic.h
5176
5177linux_magic_h=no
5178cat > $TMPC << EOF
5179#include <linux/magic.h>
5180int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005181 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305182}
5183EOF
5184if compile_prog "" "" ; then
5185 linux_magic_h=yes
5186fi
5187
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005188########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005189# check whether we can disable warning option with a pragma (this is needed
5190# to silence warnings in the headers of some versions of external libraries).
5191# This test has to be compiled with -Werror as otherwise an unknown pragma is
5192# only a warning.
5193#
5194# If we can't selectively disable warning in the code, disable -Werror so that
5195# the build doesn't fail anyway.
5196
Peter Maydell06d71fa2012-07-30 16:13:07 +01005197pragma_disable_unused_but_set=no
5198cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005199#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005200#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005201#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005202
Peter Maydell06d71fa2012-07-30 16:13:07 +01005203int main(void) {
5204 return 0;
5205}
5206EOF
5207if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005208 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005209else
5210 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005211fi
5212
5213########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005214# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005215
5216valgrind_h=no
5217cat > $TMPC << EOF
5218#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005219int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005220 return 0;
5221}
5222EOF
5223if compile_prog "" "" ; then
5224 valgrind_h=yes
5225fi
5226
5227########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005228# check if environ is declared
5229
5230has_environ=no
5231cat > $TMPC << EOF
5232#include <unistd.h>
5233int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005234 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005235 return 0;
5236}
5237EOF
5238if compile_prog "" "" ; then
5239 has_environ=yes
5240fi
5241
Richard Henderson76a347e2012-12-28 14:17:02 -08005242########################################
5243# check if cpuid.h is usable.
5244
Richard Henderson76a347e2012-12-28 14:17:02 -08005245cat > $TMPC << EOF
5246#include <cpuid.h>
5247int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005248 unsigned a, b, c, d;
5249 int max = __get_cpuid_max(0, 0);
5250
5251 if (max >= 1) {
5252 __cpuid(1, a, b, c, d);
5253 }
5254
5255 if (max >= 7) {
5256 __cpuid_count(7, 0, a, b, c, d);
5257 }
5258
5259 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005260}
5261EOF
5262if compile_prog "" "" ; then
5263 cpuid_h=yes
5264fi
5265
Richard Henderson5dd89902017-07-18 18:40:18 -10005266##########################################
5267# avx2 optimization requirement check
5268#
5269# There is no point enabling this if cpuid.h is not usable,
5270# since we won't be able to select the new routines.
5271
Eric Blakee633a5c2019-02-04 20:39:37 -06005272if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005273 cat > $TMPC << EOF
5274#pragma GCC push_options
5275#pragma GCC target("avx2")
5276#include <cpuid.h>
5277#include <immintrin.h>
5278static int bar(void *a) {
5279 __m256i x = *(__m256i *)a;
5280 return _mm256_testz_si256(x, x);
5281}
5282int main(int argc, char *argv[]) { return bar(argv[0]); }
5283EOF
5284 if compile_object "" ; then
5285 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005286 else
5287 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005288 fi
5289fi
5290
Richard Hendersonf5401662013-02-16 12:46:59 -08005291########################################
5292# check if __[u]int128_t is usable.
5293
5294int128=no
5295cat > $TMPC << EOF
5296__int128_t a;
5297__uint128_t b;
5298int main (void) {
5299 a = a + b;
5300 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005301 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005302 return 0;
5303}
5304EOF
5305if compile_prog "" "" ; then
5306 int128=yes
5307fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005308
Richard Henderson7ebee432016-06-29 21:10:59 -07005309#########################################
5310# See if 128-bit atomic operations are supported.
5311
5312atomic128=no
5313if test "$int128" = "yes"; then
5314 cat > $TMPC << EOF
5315int main(void)
5316{
5317 unsigned __int128 x = 0, y = 0;
5318 y = __atomic_load_16(&x, 0);
5319 __atomic_store_16(&x, y, 0);
5320 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5321 return 0;
5322}
5323EOF
5324 if compile_prog "" "" ; then
5325 atomic128=yes
5326 fi
5327fi
5328
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005329cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005330if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005331 cat > $TMPC << EOF
5332int main(void)
5333{
5334 unsigned __int128 x = 0, y = 0;
5335 __sync_val_compare_and_swap_16(&x, y, x);
5336 return 0;
5337}
5338EOF
5339 if compile_prog "" "" ; then
5340 cmpxchg128=yes
5341 fi
5342fi
5343
Richard Hendersondf79b992016-09-02 12:23:57 -07005344#########################################
5345# See if 64-bit atomic operations are supported.
5346# Note that without __atomic builtins, we can only
5347# assume atomic loads/stores max at pointer size.
5348
5349cat > $TMPC << EOF
5350#include <stdint.h>
5351int main(void)
5352{
5353 uint64_t x = 0, y = 0;
5354#ifdef __ATOMIC_RELAXED
5355 y = __atomic_load_8(&x, 0);
5356 __atomic_store_8(&x, y, 0);
5357 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5358 __atomic_exchange_8(&x, y, 0);
5359 __atomic_fetch_add_8(&x, y, 0);
5360#else
5361 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5362 __sync_lock_test_and_set(&x, y);
5363 __sync_val_compare_and_swap(&x, y, 0);
5364 __sync_fetch_and_add(&x, y);
5365#endif
5366 return 0;
5367}
5368EOF
5369if compile_prog "" "" ; then
5370 atomic64=yes
5371fi
5372
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005373########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005374# See if 16-byte vector operations are supported.
5375# Even without a vector unit the compiler may expand these.
5376# There is a bug in old GCC for PPC that crashes here.
5377# Unfortunately it's the system compiler for Centos 7.
5378
5379cat > $TMPC << EOF
5380typedef unsigned char U1 __attribute__((vector_size(16)));
5381typedef unsigned short U2 __attribute__((vector_size(16)));
5382typedef unsigned int U4 __attribute__((vector_size(16)));
5383typedef unsigned long long U8 __attribute__((vector_size(16)));
5384typedef signed char S1 __attribute__((vector_size(16)));
5385typedef signed short S2 __attribute__((vector_size(16)));
5386typedef signed int S4 __attribute__((vector_size(16)));
5387typedef signed long long S8 __attribute__((vector_size(16)));
5388static U1 a1, b1;
5389static U2 a2, b2;
5390static U4 a4, b4;
5391static U8 a8, b8;
5392static S1 c1;
5393static S2 c2;
5394static S4 c4;
5395static S8 c8;
5396static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005397void helper(void *d, void *a, int shift, int i);
5398void helper(void *d, void *a, int shift, int i)
5399{
5400 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5401 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5402 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5403 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5404}
Richard Hendersondb432672017-09-15 14:11:45 -07005405int main(void)
5406{
5407 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5408 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5409 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5410 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5411 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5412 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5413 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5414 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5415 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5416 return 0;
5417}
5418EOF
5419
5420vector16=no
5421if compile_prog "" "" ; then
5422 vector16=yes
5423fi
5424
5425########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005426# check if getauxval is available.
5427
5428getauxval=no
5429cat > $TMPC << EOF
5430#include <sys/auxv.h>
5431int main(void) {
5432 return getauxval(AT_HWCAP) == 0;
5433}
5434EOF
5435if compile_prog "" "" ; then
5436 getauxval=yes
5437fi
5438
John Snowfd0e6052015-03-25 18:57:39 -04005439########################################
5440# check if ccache is interfering with
5441# semantic analysis of macros
5442
John Snow5e4dfd32015-10-28 13:56:40 -04005443unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005444ccache_cpp2=no
5445cat > $TMPC << EOF
5446static const int Z = 1;
5447#define fn() ({ Z; })
5448#define TAUT(X) ((X) == Z)
5449#define PAREN(X, Y) (X == Y)
5450#define ID(X) (X)
5451int main(int argc, char *argv[])
5452{
5453 int x = 0, y = 0;
5454 x = ID(x);
5455 x = fn();
5456 fn();
5457 if (PAREN(x, y)) return 0;
5458 if (TAUT(Z)) return 0;
5459 return 0;
5460}
5461EOF
5462
5463if ! compile_object "-Werror"; then
5464 ccache_cpp2=yes
5465fi
5466
John Snowb553a042015-11-03 15:43:42 -05005467#################################################
5468# clang does not support glibc + FORTIFY_SOURCE.
5469
5470if test "$fortify_source" != "no"; then
5471 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5472 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005473 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005474 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005475 fortify_source="no";
5476 else
5477 fortify_source="yes"
5478 fi
5479fi
5480
Fam Zheng1efad062018-06-01 17:26:43 +08005481###############################################
5482# Check if copy_file_range is provided by glibc
5483have_copy_file_range=no
5484cat > $TMPC << EOF
5485#include <unistd.h>
5486int main(void) {
5487 copy_file_range(0, NULL, 0, NULL, 0, 0);
5488 return 0;
5489}
5490EOF
5491if compile_prog "" "" ; then
5492 have_copy_file_range=yes
5493fi
5494
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305495##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005496# check if struct fsxattr is available via linux/fs.h
5497
5498have_fsxattr=no
5499cat > $TMPC << EOF
5500#include <linux/fs.h>
5501struct fsxattr foo;
5502int main(void) {
5503 return 0;
5504}
5505EOF
5506if compile_prog "" "" ; then
5507 have_fsxattr=yes
5508fi
5509
Peter Maydellb66e10e2016-06-08 18:34:32 +01005510##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005511# check for usable membarrier system call
5512if test "$membarrier" = "yes"; then
5513 have_membarrier=no
5514 if test "$mingw32" = "yes" ; then
5515 have_membarrier=yes
5516 elif test "$linux" = "yes" ; then
5517 cat > $TMPC << EOF
5518 #include <linux/membarrier.h>
5519 #include <sys/syscall.h>
5520 #include <unistd.h>
5521 #include <stdlib.h>
5522 int main(void) {
5523 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5524 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5525 exit(0);
5526 }
5527EOF
5528 if compile_prog "" "" ; then
5529 have_membarrier=yes
5530 fi
5531 fi
5532 if test "$have_membarrier" = "no"; then
5533 feature_not_found "membarrier" "membarrier system call not available"
5534 fi
5535else
5536 # Do not enable it by default even for Mingw32, because it doesn't
5537 # work on Wine.
5538 membarrier=no
5539fi
5540
5541##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005542# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005543have_rtnetlink=no
5544cat > $TMPC << EOF
5545#include <linux/rtnetlink.h>
5546int main(void) {
5547 return IFLA_PROTO_DOWN;
5548}
5549EOF
5550if compile_prog "" "" ; then
5551 have_rtnetlink=yes
5552fi
5553
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005554##########################################
5555# check for usable AF_VSOCK environment
5556have_af_vsock=no
5557cat > $TMPC << EOF
5558#include <errno.h>
5559#include <sys/types.h>
5560#include <sys/socket.h>
5561#if !defined(AF_VSOCK)
5562# error missing AF_VSOCK flag
5563#endif
5564#include <linux/vm_sockets.h>
5565int main(void) {
5566 int sock, ret;
5567 struct sockaddr_vm svm;
5568 socklen_t len = sizeof(svm);
5569 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5570 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5571 if ((ret == -1) && (errno == ENOTCONN)) {
5572 return 0;
5573 }
5574 return -1;
5575}
5576EOF
5577if compile_prog "" "" ; then
5578 have_af_vsock=yes
5579fi
5580
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005581##########################################
5582# check for usable AF_ALG environment
5583hava_afalg=no
5584cat > $TMPC << EOF
5585#include <errno.h>
5586#include <sys/types.h>
5587#include <sys/socket.h>
5588#include <linux/if_alg.h>
5589int main(void) {
5590 int sock;
5591 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5592 return sock;
5593}
5594EOF
5595if compile_prog "" "" ; then
5596 have_afalg=yes
5597fi
5598if test "$crypto_afalg" = "yes"
5599then
5600 if test "$have_afalg" != "yes"
5601 then
5602 error_exit "AF_ALG requested but could not be detected"
5603 fi
5604fi
5605
5606
James Clarke6969ec62016-06-06 12:02:50 +01005607#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005608# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005609if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005610 cat > $TMPC << EOF
5611#include <Hypervisor/hv.h>
5612int main() { return 0;}
5613EOF
5614 if ! compile_object ""; then
5615 hvf='no'
5616 else
5617 hvf='yes'
5618 LDFLAGS="-framework Hypervisor $LDFLAGS"
5619 fi
5620fi
5621
5622#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005623# Sparc implicitly links with --relax, which is
5624# incompatible with -r, so --no-relax should be
5625# given. It does no harm to give it on other
5626# platforms too.
5627
5628# Note: the prototype is needed since QEMU_CFLAGS
5629# contains -Wmissing-prototypes
5630cat > $TMPC << EOF
5631extern int foo(void);
5632int foo(void) { return 0; }
5633EOF
5634if ! compile_object ""; then
5635 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5636fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005637for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5638 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5639 LD_REL_FLAGS=$i
5640 break
5641 fi
5642done
5643if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5644 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005645fi
5646
Jan Vesely277abf12016-04-29 13:15:23 -04005647##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005648# check for sysmacros.h
5649
5650have_sysmacros=no
5651cat > $TMPC << EOF
5652#include <sys/sysmacros.h>
5653int main(void) {
5654 return makedev(0, 0);
5655}
5656EOF
5657if compile_prog "" "" ; then
5658 have_sysmacros=yes
5659fi
5660
5661##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005662# Veritas HyperScale block driver VxHS
5663# Check if libvxhs is installed
5664
5665if test "$vxhs" != "no" ; then
5666 cat > $TMPC <<EOF
5667#include <stdint.h>
5668#include <qnio/qnio_api.h>
5669
5670void *vxhs_callback;
5671
5672int main(void) {
5673 iio_init(QNIO_VERSION, vxhs_callback);
5674 return 0;
5675}
5676EOF
5677 vxhs_libs="-lvxhs -lssl"
5678 if compile_prog "" "$vxhs_libs" ; then
5679 vxhs=yes
5680 else
5681 if test "$vxhs" = "yes" ; then
5682 feature_not_found "vxhs block device" "Install libvxhs See github"
5683 fi
5684 vxhs=no
5685 fi
5686fi
5687
5688##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005689# check for _Static_assert()
5690
5691have_static_assert=no
5692cat > $TMPC << EOF
5693_Static_assert(1, "success");
5694int main(void) {
5695 return 0;
5696}
5697EOF
5698if compile_prog "" "" ; then
5699 have_static_assert=yes
5700fi
5701
5702##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005703# check for utmpx.h, it is missing e.g. on OpenBSD
5704
5705have_utmpx=no
5706cat > $TMPC << EOF
5707#include <utmpx.h>
5708struct utmpx user_info;
5709int main(void) {
5710 return 0;
5711}
5712EOF
5713if compile_prog "" "" ; then
5714 have_utmpx=yes
5715fi
5716
5717##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005718# checks for sanitizers
5719
Marc-André Lureau247724c2018-01-16 16:11:51 +01005720have_asan=no
5721have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005722have_asan_iface_h=no
5723have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005724
5725if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005726 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005727 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5728 have_asan=yes
5729 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005730
5731 # we could use a simple skeleton for flags checks, but this also
5732 # detect the static linking issue of ubsan, see also:
5733 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5734 cat > $TMPC << EOF
5735#include <stdlib.h>
5736int main(void) {
5737 void *tmp = malloc(10);
5738 return *(int *)(tmp + 2);
5739}
5740EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005741 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5742 have_ubsan=yes
5743 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005744
5745 if check_include "sanitizer/asan_interface.h" ; then
5746 have_asan_iface_h=yes
5747 fi
5748
5749 cat > $TMPC << EOF
5750#include <sanitizer/asan_interface.h>
5751int main(void) {
5752 __sanitizer_start_switch_fiber(0, 0, 0);
5753 return 0;
5754}
5755EOF
5756 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5757 have_asan_iface_fiber=yes
5758 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005759fi
5760
5761##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005762# Docker and cross-compiler support
5763#
5764# This is specifically for building test
5765# cases for foreign architectures, not
5766# cross-compiling QEMU itself.
5767
5768if has "docker"; then
5769 docker=$($python $source_path/tests/docker/docker.py probe)
5770fi
5771
5772##########################################
Junyan He17824402018-07-18 15:47:59 +08005773# check for libpmem
5774
5775if test "$libpmem" != "no"; then
5776 if $pkg_config --exists "libpmem"; then
5777 libpmem="yes"
5778 libpmem_libs=$($pkg_config --libs libpmem)
5779 libpmem_cflags=$($pkg_config --cflags libpmem)
5780 libs_softmmu="$libs_softmmu $libpmem_libs"
5781 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5782 else
5783 if test "$libpmem" = "yes" ; then
5784 feature_not_found "libpmem" "Install nvml or pmdk"
5785 fi
5786 libpmem="no"
5787 fi
5788fi
5789
5790##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01005791# check for slirp
5792
5793case "$slirp" in
5794 "" | yes)
5795 if $pkg_config slirp; then
5796 slirp=system
5797 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5798 slirp=git
5799 elif test -e "${source_path}/slirp/Makefile" ; then
5800 slirp=internal
5801 elif test -z "$slirp" ; then
5802 slirp=no
5803 else
5804 feature_not_found "slirp" "Install slirp devel or git submodule"
5805 fi
5806 ;;
5807
5808 system)
5809 if ! $pkg_config slirp; then
5810 feature_not_found "slirp" "Install slirp devel"
5811 fi
5812 ;;
5813esac
5814
5815case "$slirp" in
5816 git | internal)
5817 if test "$slirp" = git; then
5818 git_submodules="${git_submodules} slirp"
5819 fi
5820 mkdir -p slirp
5821 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5822 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5823 ;;
5824
5825 system)
5826 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5827 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5828 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5829 ;;
5830
5831 no)
5832 ;;
5833 *)
5834 error_exit "Unknown state for slirp: $slirp"
5835 ;;
5836esac
5837
5838
5839##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005840# End of CC checks
5841# After here, no more $cc or $ld runs
5842
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005843write_c_skeleton
5844
Blue Swirl1d728c32012-05-01 18:45:39 +00005845if test "$gcov" = "yes" ; then
5846 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5847 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005848elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005849 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005850elif test "$debug" = "no"; then
5851 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005852fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005853
Marc-André Lureau247724c2018-01-16 16:11:51 +01005854if test "$have_asan" = "yes"; then
5855 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005856 if test "$have_asan_iface_h" = "no" ; then
5857 echo "ASAN build enabled, but ASAN header missing." \
5858 "Without code annotation, the report may be inferior."
5859 elif test "$have_asan_iface_fiber" = "no" ; then
5860 echo "ASAN build enabled, but ASAN header is too old." \
5861 "Without code annotation, the report may be inferior."
5862 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005863fi
5864if test "$have_ubsan" = "yes"; then
5865 CFLAGS="-fsanitize=undefined $CFLAGS"
5866fi
5867
Peter Lieven6542aa92014-02-03 10:26:13 +01005868##########################################
5869# Do we have libnfs
5870if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005871 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005872 libnfs="yes"
5873 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005874 else
5875 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005876 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005877 fi
5878 libnfs="no"
5879 fi
5880fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005881
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005882##########################################
5883# Do we have libudev
5884if test "$libudev" != "no" ; then
5885 if $pkg_config libudev && test "$static" != "yes"; then
5886 libudev="yes"
5887 libudev_libs=$($pkg_config --libs libudev)
5888 else
5889 libudev="no"
5890 fi
5891fi
5892
Peter Maydell6ca026c2012-07-18 15:10:18 +01005893# Now we've finished running tests it's OK to add -Werror to the compiler flags
5894if test "$werror" = "yes"; then
5895 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5896fi
5897
Juan Quintelae86ecd42009-08-03 14:45:59 +02005898if test "$solaris" = "no" ; then
5899 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005900 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005901 fi
5902fi
5903
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005904# test if pod2man has --utf8 option
5905if pod2man --help | grep -q utf8; then
5906 POD2MAN="pod2man --utf8"
5907else
5908 POD2MAN="pod2man"
5909fi
5910
Blue Swirl952afb72010-09-19 08:36:34 +00005911# Use ASLR, no-SEH and DEP if available
5912if test "$mingw32" = "yes" ; then
5913 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005914 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005915 LDFLAGS="-Wl,$flag $LDFLAGS"
5916 fi
5917 done
5918fi
5919
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01005920# Disable OpenBSD W^X if available
5921if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
5922 cat > $TMPC <<EOF
5923 int main(void) { return 0; }
5924EOF
5925 wx_ldflags="-Wl,-z,wxneeded"
5926 if compile_prog "" "$wx_ldflags"; then
5927 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
5928 fi
5929fi
5930
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005931qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005932qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005933qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005934qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00005935qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00005936qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005937
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005938# We can only support ivshmem if we have eventfd
5939if [ "$eventfd" = "yes" ]; then
5940 ivshmem=yes
5941fi
5942
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005943tools=""
5944if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005945 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005946 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5947 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005948 fi
5949 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005950 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005951 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03005952 if [ "$curl" = "yes" ]; then
5953 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005954 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005955fi
5956if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005957 if test "$linux" = yes; then
5958 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005959 virtfs=yes
5960 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5961 else
5962 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005963 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305964 fi
Andreas Färber17500372012-05-01 01:12:03 +02005965 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005966 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005967 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5968 mpath=yes
5969 else
5970 if test "$mpath" = yes; then
5971 error_exit "Multipath requires libmpathpersist devel"
5972 fi
5973 mpath=no
5974 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005975 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5976 else
5977 if test "$virtfs" = yes; then
5978 error_exit "VirtFS is supported only on Linux"
5979 fi
5980 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005981 if test "$mpath" = yes; then
5982 error_exit "Multipath is supported only on Linux"
5983 fi
5984 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305985 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005986 if test "$xkbcommon" = "yes"; then
5987 tools="qemu-keymap\$(EXESUF) $tools"
5988 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005989fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005990
5991# Probe for guest agent support/options
5992
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005993if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005994 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005995 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005996 guest_agent=yes
5997 elif [ "$guest_agent" != yes ]; then
5998 guest_agent=no
5999 else
6000 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006001 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006002fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006003
Michael Roth9d6bc272015-08-26 10:49:13 -05006004# Guest agent Window MSI package
6005
6006if test "$guest_agent" != yes; then
6007 if test "$guest_agent_msi" = yes; then
6008 error_exit "MSI guest agent package requires guest agent enabled"
6009 fi
6010 guest_agent_msi=no
6011elif test "$mingw32" != "yes"; then
6012 if test "$guest_agent_msi" = "yes"; then
6013 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6014 fi
6015 guest_agent_msi=no
6016elif ! has wixl; then
6017 if test "$guest_agent_msi" = "yes"; then
6018 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6019 fi
6020 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006021else
6022 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6023 # disabled explicitly
6024 if test "$guest_agent_msi" != "no"; then
6025 guest_agent_msi=yes
6026 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006027fi
6028
Michael Roth1a349042015-08-26 11:14:31 -05006029if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006030 if test "$guest_agent_with_vss" = "yes"; then
6031 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6032 fi
6033
6034 if test "$QEMU_GA_MANUFACTURER" = ""; then
6035 QEMU_GA_MANUFACTURER=QEMU
6036 fi
6037
6038 if test "$QEMU_GA_DISTRO" = ""; then
6039 QEMU_GA_DISTRO=Linux
6040 fi
6041
6042 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006043 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006044 fi
6045
Stefan Weil89138852016-05-16 15:10:20 +02006046 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006047
6048 case "$cpu" in
6049 x86_64)
6050 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6051 ;;
6052 i386)
6053 QEMU_GA_MSI_ARCH="-D Arch=32"
6054 ;;
6055 *)
6056 error_exit "CPU $cpu not supported for building installation package"
6057 ;;
6058 esac
6059fi
6060
Paolo Bonzinica35f782010-05-26 16:08:29 +02006061# Mac OS X ships with a broken assembler
6062roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006063if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6064 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6065 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006066 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006067 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6068 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6069 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006070 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6071 ld_i386_emulation="$emu"
6072 roms="optionrom"
6073 break
6074 fi
6075 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006076fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006077if test "$cpu" = "ppc64" && test "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11006078 roms="$roms spapr-rtas"
6079fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006080
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006081# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006082if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006083 write_c_skeleton
6084 if compile_prog "-march=z900" ""; then
6085 roms="$roms s390-ccw"
6086 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006087fi
6088
Richard Henderson964c6fa2013-06-21 19:10:16 -07006089# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006090if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006091 textseg_addr=
6092 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006093 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6094 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006095 textseg_addr=0x60000000
6096 ;;
6097 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006098 # A 256M aligned address, high in the address space, with enough
6099 # room for the code_gen_buffer above it before the stack.
6100 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006101 ;;
6102 esac
6103 if [ -n "$textseg_addr" ]; then
6104 cat > $TMPC <<EOF
6105 int main(void) { return 0; }
6106EOF
6107 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6108 if ! compile_prog "" "$textseg_ldflags"; then
6109 # In case ld does not support -Ttext-segment, edit the default linker
6110 # script via sed to set the .text start addr. This is needed on FreeBSD
6111 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006112 if ! $ld --verbose >/dev/null 2>&1; then
6113 error_exit \
6114 "We need to link the QEMU user mode binaries at a" \
6115 "specific text address. Unfortunately your linker" \
6116 "doesn't support either the -Ttext-segment option or" \
6117 "printing the default linker script with --verbose." \
6118 "If you don't want the user mode binaries, pass the" \
6119 "--disable-user option to configure."
6120 fi
6121
Richard Henderson964c6fa2013-06-21 19:10:16 -07006122 $ld --verbose | sed \
6123 -e '1,/==================================================/d' \
6124 -e '/==================================================/,$d' \
6125 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6126 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6127 textseg_ldflags="-Wl,-T../config-host.ld"
6128 fi
6129 fi
6130fi
6131
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006132# Check that the C++ compiler exists and works with the C compiler.
6133# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6134if has $cxx; then
6135 cat > $TMPC <<EOF
6136int c_function(void);
6137int main(void) { return c_function(); }
6138EOF
6139
6140 compile_object
6141
6142 cat > $TMPCXX <<EOF
6143extern "C" {
6144 int c_function(void);
6145}
6146int c_function(void) { return 42; }
6147EOF
6148
6149 update_cxxflags
6150
6151 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6152 # C++ compiler $cxx works ok with C compiler $cc
6153 :
6154 else
6155 echo "C++ compiler $cxx does not work with C compiler $cc"
6156 echo "Disabling C++ specific optional code"
6157 cxx=
6158 fi
6159else
6160 echo "No C++ compiler available; disabling C++ specific optional code"
6161 cxx=
6162fi
6163
Cole Robinson02d34f62016-05-06 14:03:09 -04006164echo_version() {
6165 if test "$1" = "yes" ; then
6166 echo "($2)"
6167 fi
6168}
6169
Jan Kiszka50e12062014-10-02 10:03:55 +02006170# prepend pixman and ftd flags after all config tests are done
6171QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006172QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006173libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006174
bellard43ce4df2003-06-09 19:53:12 +00006175echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006176echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006177echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006178echo "binary directory $(eval echo $bindir)"
6179echo "library directory $(eval echo $libdir)"
6180echo "module directory $(eval echo $qemu_moddir)"
6181echo "libexec directory $(eval echo $libexecdir)"
6182echo "include directory $(eval echo $includedir)"
6183echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006184if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006185echo "local state directory $(eval echo $local_statedir)"
6186echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006187echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006188else
6189echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006190echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006191fi
bellard5a671352003-10-01 00:13:48 +00006192echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006193echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006194echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006195echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006196echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006197echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006198echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006199echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006200echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006201echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006202echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006203echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006204echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006205echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006206echo "python $python ($python_version)"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006207echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6208if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006209 echo "smbd $smbd"
6210fi
Fam Zheng17969262014-02-10 14:48:56 +08006211echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006212echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006213echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006214echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006215echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006216echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006217echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006218echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006219echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006220if test "$darwin" = "yes" ; then
6221 echo "Cocoa support $cocoa"
6222fi
Stefan Weil89138852016-05-16 15:10:20 +02006223echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006224echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006225echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006226echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006227echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006228echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006229echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006230echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006231echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006232echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006233echo "PAM $auth_pam"
balrog4d3b6f62008-02-10 16:33:14 +00006234echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006235echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006236echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006237echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006238echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006239echo "Block whitelist (rw) $block_drv_rw_whitelist"
6240echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306241echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006242echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006243echo "VNC support $vnc"
6244if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006245 echo "VNC SASL support $vnc_sasl"
6246 echo "VNC JPEG support $vnc_jpeg"
6247 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006248fi
blueswir131422552007-04-16 18:27:06 +00006249if test -n "$sparc_cpu"; then
6250 echo "Target Sparc Arch $sparc_cpu"
6251fi
aliguorie37630c2009-04-22 15:19:10 +00006252echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006253if test "$xen" = "yes" ; then
6254 echo "xen ctrl version $xen_ctrl_version"
6255fi
aurel322e4d9fb2008-04-08 06:01:02 +00006256echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006257echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006258echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006259echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006260echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006261echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006262echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006263echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006264echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006265echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006266echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006267echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006268echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006269echo "TCG support $tcg"
6270if test "$tcg" = "yes" ; then
6271 echo "TCG debug enabled $debug_tcg"
6272 echo "TCG interpreter $tcg_interpreter"
6273fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006274echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006275echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006276echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006277echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006278echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006279echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006280echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006281echo "madvise $madvise"
6282echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006283echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006284echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006285echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006286echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006287echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006288echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006289echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006290echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006291if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006292echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006293fi
Stefan Weil89138852016-05-16 15:10:20 +02006294echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006295echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006296echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006297echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006298echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006299echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006300echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006301echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006302echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006303echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006304echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006305echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006306echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006307echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006308echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006309echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006310echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006311echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006312echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006313echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306314echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006315echo "gcov $gcov_tool"
6316echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006317echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006318echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006319echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006320echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006321echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006322echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006323echo "lzo support $lzo"
6324echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006325echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006326echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006327echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006328echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006329echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006330echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006331echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006332echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006333echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006334echo "bochs support $bochs"
6335echo "cloop support $cloop"
6336echo "dmg support $dmg"
6337echo "qcow v1 support $qcow1"
6338echo "vdi support $vdi"
6339echo "vvfat support $vvfat"
6340echo "qed support $qed"
6341echo "parallels support $parallels"
6342echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006343echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006344echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006345echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006346echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006347echo "default devices $default_devices"
bellard67b915a2004-03-31 23:37:16 +00006348
Peter Maydell898be3e2017-03-21 14:31:57 +00006349if test "$supported_cpu" = "no"; then
6350 echo
6351 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6352 echo
6353 echo "CPU host architecture $cpu support is not currently maintained."
6354 echo "The QEMU project intends to remove support for this host CPU in"
6355 echo "a future release if nobody volunteers to maintain it and to"
6356 echo "provide a build host for our continuous integration setup."
6357 echo "configure has succeeded and you can continue to build, but"
6358 echo "if you care about QEMU on this platform you should contact"
6359 echo "us upstream at qemu-devel@nongnu.org."
6360fi
6361
6362if test "$supported_os" = "no"; then
6363 echo
6364 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6365 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006366 echo "Host OS $targetos support is not currently maintained."
6367 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006368 echo "a future release if nobody volunteers to maintain it and to"
6369 echo "provide a build host for our continuous integration setup."
6370 echo "configure has succeeded and you can continue to build, but"
6371 echo "if you care about QEMU on this platform you should contact"
6372 echo "us upstream at qemu-devel@nongnu.org."
6373fi
6374
Juan Quintela98ec69a2009-07-16 18:34:18 +02006375config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006376
Stefan Weildbd99ae2013-01-01 18:33:44 +01006377echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6378
Juan Quintela98ec69a2009-07-16 18:34:18 +02006379echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006380echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006381
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006382echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006383echo "prefix=$prefix" >> $config_host_mak
6384echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006385echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006386echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006387echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006388echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006389echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006390echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006391echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006392echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006393echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006394echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006395if test "$mingw32" = "no" ; then
6396 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6397fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006398echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006399echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006400echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006401echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006402echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006403echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006404echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006405echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006406
Juan Quintela98ec69a2009-07-16 18:34:18 +02006407echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006408
Paolo Bonzinif3494742019-01-23 14:56:17 +08006409if test "$default_devices" = "yes" ; then
6410 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6411else
6412 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6413fi
aurel32f8393942009-04-13 18:45:38 +00006414if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006415 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006416fi
aliguori1625af82009-04-05 17:41:02 +00006417if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006418 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006419fi
bellard7d132992003-03-06 23:23:54 +00006420if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006421 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006422fi
bellard67b915a2004-03-31 23:37:16 +00006423if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006424 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006425 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006426 version_major=${rc_version%%.*}
6427 rc_version=${rc_version#*.}
6428 version_minor=${rc_version%%.*}
6429 rc_version=${rc_version#*.}
6430 version_subminor=${rc_version%%.*}
6431 version_micro=0
6432 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6433 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006434 if test "$guest_agent_with_vss" = "yes" ; then
6435 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006436 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006437 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6438 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006439 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006440 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006441 fi
Michael Roth1a349042015-08-26 11:14:31 -05006442 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006443 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006444 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6445 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6446 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6447 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6448 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6449 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6450 fi
pbrook210fa552007-02-27 21:04:49 +00006451else
Juan Quintela35f4df22009-07-27 16:13:07 +02006452 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006453fi
blueswir1128ab2f2008-08-15 18:33:42 +00006454
Mark McLoughlindffcb712009-10-22 17:49:11 +01006455if test "$linux" = "yes" ; then
6456 echo "CONFIG_LINUX=y" >> $config_host_mak
6457fi
6458
bellard83fb7ad2004-07-05 21:25:26 +00006459if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006460 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006461fi
malcb29fe3e2008-11-18 01:42:22 +00006462
bellardec530c82006-04-25 22:36:06 +00006463if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006464 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006465fi
Andreas Färber179cf402010-09-20 00:50:43 +02006466if test "$haiku" = "yes" ; then
6467 echo "CONFIG_HAIKU=y" >> $config_host_mak
6468fi
bellard97a847b2003-08-10 21:36:04 +00006469if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006470 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006471fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006472if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006473 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006474fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006475if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006476 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006477 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006478 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6479 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6480fi
6481if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6482 echo "config-host.h: subdir-slirp" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006483fi
ths8a16d272008-07-19 09:56:24 +00006484if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006485 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006486 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006487fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006488if test "$netmap" = "yes" ; then
6489 echo "CONFIG_NETMAP=y" >> $config_host_mak
6490fi
Gonglei015a33b2014-07-01 20:58:08 +08006491if test "$l2tpv3" = "yes" ; then
6492 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6493fi
Corey Bryant47e98652012-01-26 09:42:26 -05006494if test "$cap_ng" = "yes" ; then
6495 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6496fi
Juan Quintela2358a492009-07-27 16:13:25 +02006497echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006498for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006499 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006500 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006501 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006502 echo "$def=m" >> $config_host_mak ;;
6503 *)
6504 echo "$def=y" >> $config_host_mak ;;
6505 esac
malc0c58ac12008-06-25 21:04:05 +00006506done
Fam Zhengb1149912017-09-07 16:29:13 +08006507echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6508echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6509echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6510echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6511echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006512if test "$audio_pt_int" = "yes" ; then
6513 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6514fi
malcd5631632009-10-10 01:13:41 +04006515if test "$audio_win_int" = "yes" ; then
6516 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6517fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006518echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6519echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006520if test "$vnc" = "yes" ; then
6521 echo "CONFIG_VNC=y" >> $config_host_mak
6522fi
aliguori2f9606b2009-03-06 20:27:28 +00006523if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006524 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006525fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006526if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006527 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006528fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006529if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006530 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006531fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006532if test "$xkbcommon" = "yes" ; then
6533 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6534 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6535fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006536if test "$xfs" = "yes" ; then
6537 echo "CONFIG_XFS=y" >> $config_host_mak
6538fi
Stefan Weil89138852016-05-16 15:10:20 +02006539qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006540echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006541echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006542echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006543echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006544if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006545 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006546fi
Fam Zheng17969262014-02-10 14:48:56 +08006547if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006548 # $shacmd can generate a hash started with digit, which the compiler doesn't
6549 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006550 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006551 echo "CONFIG_MODULES=y" >> $config_host_mak
6552fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006553if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006554 echo "CONFIG_X11=y" >> $config_host_mak
6555 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6556 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6557fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006558if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006559 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006560 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006561 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006562 if test "$sdl_image" = "yes" ; then
6563 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6564 fi
bellard49ecc3f2007-11-07 19:25:15 +00006565fi
6566if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006567 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006568fi
6569if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006570 echo "CONFIG_CURSES=m" >> $config_host_mak
6571 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6572 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006573fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006574if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006575 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006576fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006577if test "$accept4" = "yes" ; then
6578 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6579fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306580if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006581 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306582fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006583if test "$eventfd" = "yes" ; then
6584 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6585fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006586if test "$memfd" = "yes" ; then
6587 echo "CONFIG_MEMFD=y" >> $config_host_mak
6588fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006589if test "$have_usbfs" = "yes" ; then
6590 echo "CONFIG_USBFS=y" >> $config_host_mak
6591fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006592if test "$fallocate" = "yes" ; then
6593 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6594fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006595if test "$fallocate_punch_hole" = "yes" ; then
6596 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6597fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006598if test "$fallocate_zero_range" = "yes" ; then
6599 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6600fi
Kevin Wolfed911432014-09-29 17:12:59 +02006601if test "$posix_fallocate" = "yes" ; then
6602 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6603fi
Peter Maydellc727f472011-01-06 11:05:10 +00006604if test "$sync_file_range" = "yes" ; then
6605 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6606fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006607if test "$fiemap" = "yes" ; then
6608 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6609fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006610if test "$dup3" = "yes" ; then
6611 echo "CONFIG_DUP3=y" >> $config_host_mak
6612fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006613if test "$ppoll" = "yes" ; then
6614 echo "CONFIG_PPOLL=y" >> $config_host_mak
6615fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006616if test "$prctl_pr_set_timerslack" = "yes" ; then
6617 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6618fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006619if test "$epoll" = "yes" ; then
6620 echo "CONFIG_EPOLL=y" >> $config_host_mak
6621fi
6622if test "$epoll_create1" = "yes" ; then
6623 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6624fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006625if test "$sendfile" = "yes" ; then
6626 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6627fi
Riku Voipio51834342014-06-22 11:25:42 +01006628if test "$timerfd" = "yes" ; then
6629 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6630fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006631if test "$setns" = "yes" ; then
6632 echo "CONFIG_SETNS=y" >> $config_host_mak
6633fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006634if test "$clock_adjtime" = "yes" ; then
6635 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6636fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006637if test "$syncfs" = "yes" ; then
6638 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6639fi
aurel323b3f24a2009-04-15 16:12:13 +00006640if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006641 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006642fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006643if test "$inotify1" = "yes" ; then
6644 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6645fi
Peter Maydell401bc052017-09-05 13:19:32 +01006646if test "$sem_timedwait" = "yes" ; then
6647 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6648fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006649if test "$strchrnul" = "yes" ; then
6650 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6651fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006652if test "$byteswap_h" = "yes" ; then
6653 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6654fi
6655if test "$bswap_h" = "yes" ; then
6656 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6657fi
Alexander Graf769ce762009-05-11 17:41:42 +02006658if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006659 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006660 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006661 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006662fi
aurel322e4d9fb2008-04-08 06:01:02 +00006663if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006664 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006665 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006666fi
balrogfb599c92008-09-28 23:49:55 +00006667if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006668 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006669 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006670fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006671if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006672 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006673 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006674 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006675 if test "$gtk_gl" = "yes" ; then
6676 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6677 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006678fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01006679if test "$gio" = "yes" ; then
6680 echo "CONFIG_GIO=y" >> $config_host_mak
6681 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6682 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6683fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006684echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006685if test "$gnutls" = "yes" ; then
6686 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6687fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006688if test "$gcrypt" = "yes" ; then
6689 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006690 if test "$gcrypt_hmac" = "yes" ; then
6691 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6692 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006693fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006694if test "$nettle" = "yes" ; then
6695 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006696 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006697fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006698if test "$tasn1" = "yes" ; then
6699 echo "CONFIG_TASN1=y" >> $config_host_mak
6700fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006701if test "$auth_pam" = "yes" ; then
6702 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6703fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006704if test "$have_ifaddrs_h" = "yes" ; then
6705 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6706fi
Eric Blake6b39b062016-10-11 10:46:23 -05006707if test "$have_broken_size_max" = "yes" ; then
6708 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6709fi
Jan Vesely277abf12016-04-29 13:15:23 -04006710
6711# Work around a system header bug with some kernel/XFS header
6712# versions where they both try to define 'struct fsxattr':
6713# xfs headers will not try to redefine structs from linux headers
6714# if this macro is set.
6715if test "$have_fsxattr" = "yes" ; then
6716 echo "HAVE_FSXATTR=y" >> $config_host_mak
6717fi
Fam Zheng1efad062018-06-01 17:26:43 +08006718if test "$have_copy_file_range" = "yes" ; then
6719 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6720fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006721if test "$vte" = "yes" ; then
6722 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006723 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006724 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006725fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006726if test "$virglrenderer" = "yes" ; then
6727 echo "CONFIG_VIRGL=y" >> $config_host_mak
6728 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6729 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6730fi
aliguorie37630c2009-04-22 15:19:10 +00006731if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006732 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006733 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00006734fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006735if test "$linux_aio" = "yes" ; then
6736 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6737fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006738if test "$attr" = "yes" ; then
6739 echo "CONFIG_ATTR=y" >> $config_host_mak
6740fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006741if test "$libattr" = "yes" ; then
6742 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6743fi
Meador Inge983eef52012-02-24 14:00:42 +05306744if test "$virtfs" = "yes" ; then
6745 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006746fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006747if test "$mpath" = "yes" ; then
6748 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006749 if test "$mpathpersist_new_api" = "yes"; then
6750 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6751 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006752fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006753if test "$vhost_scsi" = "yes" ; then
6754 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6755fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01006756if test "$vhost_net" = "yes" ; then
6757 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6758fi
6759if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01006760 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006761fi
Gonglei042cea22018-03-01 21:46:28 +08006762if test "$vhost_crypto" = "yes" ; then
6763 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6764fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006765if test "$vhost_vsock" = "yes" ; then
6766 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6767fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01006768if test "$vhost_kernel" = "yes" ; then
6769 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6770fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006771if test "$vhost_user" = "yes" ; then
6772 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6773fi
ths77755342008-11-27 15:45:16 +00006774if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006775 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006776fi
aliguoribf9298b2008-12-05 20:05:26 +00006777if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006778 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006779fi
aliguoriceb42de2009-04-07 18:43:28 +00006780if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006781 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006782fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006783if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006784 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006785fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006786if test "$membarrier" = "yes" ; then
6787 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6788fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006789if test "$signalfd" = "yes" ; then
6790 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6791fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00006792if test "$optreset" = "yes" ; then
6793 echo "HAVE_OPTRESET=y" >> $config_host_mak
6794fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006795if test "$tcg" = "yes"; then
6796 echo "CONFIG_TCG=y" >> $config_host_mak
6797 if test "$tcg_interpreter" = "yes" ; then
6798 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6799 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006800fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006801if test "$fdatasync" = "yes" ; then
6802 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6803fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006804if test "$madvise" = "yes" ; then
6805 echo "CONFIG_MADVISE=y" >> $config_host_mak
6806fi
6807if test "$posix_madvise" = "yes" ; then
6808 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6809fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006810if test "$posix_memalign" = "yes" ; then
6811 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6812fi
bellard97a847b2003-08-10 21:36:04 +00006813
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006814if test "$spice" = "yes" ; then
6815 echo "CONFIG_SPICE=y" >> $config_host_mak
6816fi
6817
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006818if test "$smartcard" = "yes" ; then
6819 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006820 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6821 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006822fi
6823
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006824if test "$libusb" = "yes" ; then
6825 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006826 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6827 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006828fi
6829
Hans de Goede69354a82011-07-19 11:04:10 +02006830if test "$usb_redir" = "yes" ; then
6831 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006832 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6833 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006834fi
6835
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006836if test "$opengl" = "yes" ; then
6837 echo "CONFIG_OPENGL=y" >> $config_host_mak
6838 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006839 if test "$opengl_dmabuf" = "yes" ; then
6840 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6841 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006842fi
6843
Yang Zhong5a22ab72017-12-20 21:16:46 +08006844if test "$malloc_trim" = "yes" ; then
6845 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6846fi
6847
Liang Li99f2dbd2016-03-08 13:53:16 +08006848if test "$avx2_opt" = "yes" ; then
6849 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6850fi
6851
qiaonuohan607dacd2014-02-18 14:11:30 +08006852if test "$lzo" = "yes" ; then
6853 echo "CONFIG_LZO=y" >> $config_host_mak
6854fi
6855
6856if test "$snappy" = "yes" ; then
6857 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6858fi
6859
Peter Wu6b383c02015-01-06 18:48:14 +01006860if test "$bzip2" = "yes" ; then
6861 echo "CONFIG_BZIP2=y" >> $config_host_mak
6862 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6863fi
6864
Julio Faracco83bc1f92018-11-05 13:08:04 -02006865if test "$lzfse" = "yes" ; then
6866 echo "CONFIG_LZFSE=y" >> $config_host_mak
6867 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6868fi
6869
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006870if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006871 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006872 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6873 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006874fi
6875
Peter Lieven6542aa92014-02-03 10:26:13 +01006876if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006877 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6878 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006879fi
6880
Eduardo Otubof7945732012-08-14 18:44:05 -03006881if test "$seccomp" = "yes"; then
6882 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006883 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6884 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006885fi
6886
bellard83fb7ad2004-07-05 21:25:26 +00006887# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006888if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006889 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006890fi
6891
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006892if test "$localtime_r" = "yes" ; then
6893 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6894fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006895if test "$qom_cast_debug" = "yes" ; then
6896 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6897fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006898if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006899 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006900 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6901 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006902fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006903
Peter Maydell7c2acc72013-04-08 12:11:27 +01006904echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006905if test "$coroutine_pool" = "yes" ; then
6906 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6907else
6908 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6909fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306910
Peter Lieven7d992e42016-09-27 11:58:45 +02006911if test "$debug_stack_usage" = "yes" ; then
6912 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6913fi
6914
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006915if test "$crypto_afalg" = "yes" ; then
6916 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6917fi
6918
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306919if test "$open_by_handle_at" = "yes" ; then
6920 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6921fi
6922
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306923if test "$linux_magic_h" = "yes" ; then
6924 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6925fi
6926
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006927if test "$pragma_diagnostic_available" = "yes" ; then
6928 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006929fi
6930
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006931if test "$valgrind_h" = "yes" ; then
6932 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6933fi
6934
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006935if test "$have_asan_iface_fiber" = "yes" ; then
6936 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6937fi
6938
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006939if test "$has_environ" = "yes" ; then
6940 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6941fi
6942
Richard Henderson76a347e2012-12-28 14:17:02 -08006943if test "$cpuid_h" = "yes" ; then
6944 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6945fi
6946
Richard Hendersonf5401662013-02-16 12:46:59 -08006947if test "$int128" = "yes" ; then
6948 echo "CONFIG_INT128=y" >> $config_host_mak
6949fi
6950
Richard Henderson7ebee432016-06-29 21:10:59 -07006951if test "$atomic128" = "yes" ; then
6952 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6953fi
6954
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006955if test "$cmpxchg128" = "yes" ; then
6956 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6957fi
6958
Richard Hendersondf79b992016-09-02 12:23:57 -07006959if test "$atomic64" = "yes" ; then
6960 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6961fi
6962
Richard Hendersondb432672017-09-15 14:11:45 -07006963if test "$vector16" = "yes" ; then
6964 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6965fi
6966
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006967if test "$getauxval" = "yes" ; then
6968 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6969fi
6970
Bharata B Raoeb100392012-09-24 14:42:45 +05306971if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006972 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006973 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6974 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306975fi
6976
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006977if test "$glusterfs_xlator_opt" = "yes" ; then
6978 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6979fi
6980
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306981if test "$glusterfs_discard" = "yes" ; then
6982 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6983fi
6984
Niels de Vosdf3a4292017-05-28 12:01:14 +05306985if test "$glusterfs_fallocate" = "yes" ; then
6986 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6987fi
6988
Bharata B Rao7c815372013-12-21 14:51:25 +05306989if test "$glusterfs_zerofill" = "yes" ; then
6990 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6991fi
6992
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01006993if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
6994 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
6995fi
6996
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006997if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006998 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006999 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
7000 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007001fi
7002
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007003if test "$live_block_migration" = "yes" ; then
7004 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7005fi
7006
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007007if test "$tpm" = "yes"; then
7008 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03007009 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007010 if test "$tpm_passthrough" = "yes"; then
7011 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
7012 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03007013 # TPM emulator support?
7014 if test "$tpm_emulator" = "yes"; then
7015 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
7016 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007017fi
7018
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007019echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7020if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007021 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307022fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007023if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007024 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7025 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007026 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007027fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007028if have_backend "log"; then
7029 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02007030fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007031if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007032 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7033fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007034if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007035 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7036 if test "$trace_backend_stap" = "yes" ; then
7037 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7038 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007039fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007040if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007041 if test "$linux" = "yes" ; then
7042 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007043 else
Stewart Smith21684af2014-01-24 12:39:10 +11007044 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007045 fi
7046fi
Paul Durrant0a852412016-08-04 14:44:14 +01007047if have_backend "syslog"; then
7048 if test "$posix_syslog" = "yes" ; then
7049 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7050 else
7051 feature_not_found "syslog(trace backend)" "syslog not available"
7052 fi
7053fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007054echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7055
Michael R. Hines2da776d2013-07-22 10:01:54 -04007056if test "$rdma" = "yes" ; then
7057 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007058 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007059fi
7060
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007061if test "$pvrdma" = "yes" ; then
7062 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7063fi
7064
Laurent Vivier575b22b2016-06-02 22:14:15 +02007065if test "$have_rtnetlink" = "yes" ; then
7066 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7067fi
7068
Klim Kireeved279a02018-01-12 12:01:19 +03007069if test "$libxml2" = "yes" ; then
7070 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7071 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7072 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7073fi
7074
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007075if test "$replication" = "yes" ; then
7076 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7077fi
7078
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007079if test "$have_af_vsock" = "yes" ; then
7080 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7081fi
7082
Christopher Covington4d043512016-12-28 15:04:33 -05007083if test "$have_sysmacros" = "yes" ; then
7084 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7085fi
7086
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007087if test "$have_static_assert" = "yes" ; then
7088 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7089fi
7090
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007091if test "$have_utmpx" = "yes" ; then
7092 echo "HAVE_UTMPX=y" >> $config_host_mak
7093fi
7094
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007095if test "$ivshmem" = "yes" ; then
7096 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7097fi
Richard Hendersone219c492017-09-28 09:01:23 -07007098if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007099 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7100fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007101if test "$debug_mutex" = "yes" ; then
7102 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7103fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007104
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007105# Hold two types of flag:
7106# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7107# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007108# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007109# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007110if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007111 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007112 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7113elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7114 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7115 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007116fi
7117
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007118if test "$vxhs" = "yes" ; then
7119 echo "CONFIG_VXHS=y" >> $config_host_mak
7120 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7121fi
7122
Junyan He17824402018-07-18 15:47:59 +08007123if test "$libpmem" = "yes" ; then
7124 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7125fi
7126
Jeff Cody2f740132018-11-07 07:36:44 +01007127if test "$bochs" = "yes" ; then
7128 echo "CONFIG_BOCHS=y" >> $config_host_mak
7129fi
7130if test "$cloop" = "yes" ; then
7131 echo "CONFIG_CLOOP=y" >> $config_host_mak
7132fi
7133if test "$dmg" = "yes" ; then
7134 echo "CONFIG_DMG=y" >> $config_host_mak
7135fi
7136if test "$qcow1" = "yes" ; then
7137 echo "CONFIG_QCOW1=y" >> $config_host_mak
7138fi
7139if test "$vdi" = "yes" ; then
7140 echo "CONFIG_VDI=y" >> $config_host_mak
7141fi
7142if test "$vvfat" = "yes" ; then
7143 echo "CONFIG_VVFAT=y" >> $config_host_mak
7144fi
7145if test "$qed" = "yes" ; then
7146 echo "CONFIG_QED=y" >> $config_host_mak
7147fi
7148if test "$parallels" = "yes" ; then
7149 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7150fi
7151if test "$sheepdog" = "yes" ; then
7152 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7153fi
7154
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007155if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007156 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007157elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007158 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007159elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007160 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007161elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007162 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007163elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007164 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007165elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007166 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007167else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007168 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007169fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007170QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007171
Juan Quintela98ec69a2009-07-16 18:34:18 +02007172echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007173echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007174echo "MAKE=$make" >> $config_host_mak
7175echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007176echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7177echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007178echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7179echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007180echo "PYTHON=$python" >> $config_host_mak
Cleber Rosa755ee702018-11-09 10:07:07 -05007181echo "PYTHON_VERSION=$python_version" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007182echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007183if $iasl -h > /dev/null 2>&1; then
7184 echo "IASL=$iasl" >> $config_host_mak
7185fi
Juan Quintela804edf22009-07-27 16:12:49 +02007186echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007187echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007188echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007189echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007190echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007191echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007192echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007193echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007194echo "OBJCOPY=$objcopy" >> $config_host_mak
7195echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007196echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007197echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007198echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007199echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007200echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007201echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007202echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007203echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007204if test "$sparse" = "yes" ; then
7205 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007206 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007207 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007208 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7209 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7210fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01007211if test "$cross_prefix" != ""; then
7212 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
7213else
7214 echo "AUTOCONF_HOST := " >> $config_host_mak
7215fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007216echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007217echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007218echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007219echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007220echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007221echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007222echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007223echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007224echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007225echo "DSOSUF=$DSOSUF" >> $config_host_mak
7226echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007227echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007228echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7229echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007230echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007231if test "$gcov" = "yes" ; then
7232 echo "CONFIG_GCOV=y" >> $config_host_mak
7233 echo "GCOV=$gcov_tool" >> $config_host_mak
7234fi
Juan Quintela804edf22009-07-27 16:12:49 +02007235
Alex Bennée51a12b52018-04-04 14:24:39 +01007236if test "$docker" != "no"; then
7237 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7238fi
7239
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007240if test "$libudev" != "no"; then
7241 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7242 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7243fi
7244
Peter Maydell6efd7512011-11-30 11:59:04 +00007245# use included Linux headers
7246if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007247 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007248 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007249 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007250 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007251 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02007252 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01007253 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007254 ;;
7255 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007256 linux_arch=s390
7257 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007258 aarch64)
7259 linux_arch=arm64
7260 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007261 mips64)
7262 linux_arch=mips
7263 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007264 *)
7265 # For most CPUs the kernel architecture name and QEMU CPU name match.
7266 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007267 ;;
7268 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007269 # For non-KVM architectures we will not have asm headers
7270 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7271 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7272 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007273fi
7274
bellard1d14ffa2005-10-30 18:58:22 +00007275for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007276target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007277config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007278target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00007279target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02007280
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007281case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007282 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007283 target_bigendian=yes
7284 ;;
7285esac
bellard97a847b2003-08-10 21:36:04 +00007286target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007287target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007288target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007289target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007290case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007291 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007292 target_softmmu="yes"
7293 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007294 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007295 target_user_only="yes"
7296 target_linux_user="yes"
7297 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007298 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007299 target_user_only="yes"
7300 target_bsd_user="yes"
7301 ;;
pbrook9e407a82007-05-26 16:38:53 +00007302 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007303 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007304 exit 1
7305 ;;
7306esac
ths831b7822007-01-18 20:06:33 +00007307
Alex Bennéed75402b2018-04-04 20:27:05 +01007308target_compiler=""
7309target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007310target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007311
bellard97a847b2003-08-10 21:36:04 +00007312mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007313echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007314
pbrooke5fe0c52006-06-11 13:32:59 +00007315bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007316mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007317interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007318gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007319
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007320TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007321TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007322TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007323
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007324case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007325 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007326 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307327 gdb_xml_files="i386-32bit.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007328 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007329 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007330 ;;
7331 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007332 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007333 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307334 gdb_xml_files="i386-64bit.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007335 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007336 ;;
7337 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007338 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007339 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007340 ;;
7341 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007342 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007343 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007344 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007345 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007346 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007347 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007348 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007349 aarch64|aarch64_be)
7350 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007351 TARGET_BASE_ARCH=arm
7352 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007353 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007354 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007355 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007356 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007357 ;;
aurel322408a522008-04-20 20:19:44 +00007358 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007359 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007360 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007361 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007362 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007363 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007364 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007365 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007366 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007367 ;;
aurel322408a522008-04-20 20:19:44 +00007368 m68k)
aurel322408a522008-04-20 20:19:44 +00007369 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007370 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007371 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007372 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007373 microblaze|microblazeel)
7374 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007375 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007376 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007377 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007378 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007379 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007380 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007381 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007382 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007383 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007384 ;;
7385 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007386 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007387 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007388 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007389 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007390 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007391 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007392 ;;
7393 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007394 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007395 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007396 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007397 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007398 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007399 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007400 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007401 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007402 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007403 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007404 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007405 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007406 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007407 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007408 TARGET_ARCH=openrisc
7409 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007410 ;;
aurel322408a522008-04-20 20:19:44 +00007411 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007412 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007413 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007414 ;;
aurel322408a522008-04-20 20:19:44 +00007415 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007416 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007417 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307418 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007419 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007420 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007421 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007422 ppc64le)
7423 TARGET_ARCH=ppc64
7424 TARGET_BASE_ARCH=ppc
7425 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307426 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007427 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007428 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007429 ;;
aurel322408a522008-04-20 20:19:44 +00007430 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007431 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007432 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007433 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007434 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007435 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007436 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007437 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007438 riscv32)
7439 TARGET_BASE_ARCH=riscv
7440 TARGET_ABI_DIR=riscv
7441 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007442 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007443 ;;
7444 riscv64)
7445 TARGET_BASE_ARCH=riscv
7446 TARGET_ABI_DIR=riscv
7447 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007448 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007449 ;;
aurel322408a522008-04-20 20:19:44 +00007450 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007451 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007452 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007453 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007454 ;;
7455 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007456 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007457 ;;
7458 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007459 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007460 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007461 ;;
7462 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007463 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007464 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007465 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007466 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007467 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007468 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007469 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007470 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007471 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007472 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007473 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007474 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007475 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007476 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007477 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007478 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007479 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007480 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007481 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007482 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007483 xtensa|xtensaeb)
7484 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007485 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007486 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007487 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007488 ;;
aurel322408a522008-04-20 20:19:44 +00007489 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007490 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007491 ;;
7492esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007493# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7494if [ "$TARGET_BASE_ARCH" = "" ]; then
7495 TARGET_BASE_ARCH=$TARGET_ARCH
7496fi
7497
Alex Bennéed75402b2018-04-04 20:27:05 +01007498# Do we have a cross compiler for this target?
7499if has $target_compiler; then
7500
7501 write_c_skeleton
7502
Alex Bennée716a5072018-04-10 12:19:40 +01007503 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007504 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007505 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007506 target_compiler=""
7507 else
7508 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7509 target_compiler_static="n"
7510 fi
7511 else
7512 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7513 target_compiler_static="y"
7514 fi
7515else
7516 target_compiler=""
7517fi
7518
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007519symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7520
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007521upper() {
7522 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7523}
7524
Stefan Weil89138852016-05-16 15:10:20 +02007525target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007526echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007527echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007528echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007529if [ "$TARGET_ABI_DIR" = "" ]; then
7530 TARGET_ABI_DIR=$TARGET_ARCH
7531fi
Juan Quintela25be2102009-10-07 02:41:00 +02007532echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007533if [ "$HOST_VARIANT_DIR" != "" ]; then
7534 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7535fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007536
7537if supported_xen_target $target; then
7538 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007539 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007540 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007541 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007542 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007543else
7544 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007545fi
7546if supported_kvm_target $target; then
7547 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007548 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7549else
7550 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007551fi
7552if supported_hax_target $target; then
7553 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007554fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007555if supported_hvf_target $target; then
7556 echo "CONFIG_HVF=y" >> $config_target_mak
7557fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007558if supported_whpx_target $target; then
7559 echo "CONFIG_WHPX=y" >> $config_target_mak
7560fi
bellardde83cd02003-06-15 20:25:43 +00007561if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007562 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007563fi
7564if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007565 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007566 if test "$mttcg" = "yes" ; then
7567 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7568 fi
bellardde83cd02003-06-15 20:25:43 +00007569fi
bellard997344f2003-10-27 21:10:39 +00007570if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007571 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007572 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007573fi
ths831b7822007-01-18 20:06:33 +00007574if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007575 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007576fi
pbrook56aebc82008-10-11 17:55:29 +00007577list=""
7578if test ! -z "$gdb_xml_files" ; then
7579 for x in $gdb_xml_files; do
7580 list="$list $source_path/gdb-xml/$x"
7581 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007582 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007583fi
bellardde83cd02003-06-15 20:25:43 +00007584
Eric Blakee633a5c2019-02-04 20:39:37 -06007585if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007586 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007587fi
blueswir184778502008-10-26 20:33:16 +00007588if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007589 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007590fi
bellard5b0753e2005-03-01 21:37:28 +00007591
Alex Bennéed75402b2018-04-04 20:27:05 +01007592if test -n "$target_compiler"; then
7593 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7594
7595 if test -n "$target_compiler_static"; then
7596 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7597 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007598
7599 if test -n "$target_compiler_cflags"; then
7600 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7601 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007602fi
7603
Alex Bennée716a5072018-04-10 12:19:40 +01007604
Juan Quintela4afddb52009-08-03 14:46:45 +02007605# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007606
Juan Quintela4afddb52009-08-03 14:46:45 +02007607cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007608ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007609
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007610disas_config() {
7611 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7612 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7613}
7614
Juan Quintela64656022009-08-03 14:46:53 +02007615for i in $ARCH $TARGET_BASE_ARCH ; do
7616 case "$i" in
7617 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007618 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007619 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007620 aarch64)
7621 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007622 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007623 fi
7624 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007625 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007626 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007627 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007628 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007629 fi
Juan Quintela64656022009-08-03 14:46:53 +02007630 ;;
7631 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007632 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007633 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007634 hppa)
7635 disas_config "HPPA"
7636 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007637 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007638 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007639 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007640 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007641 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007642 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007643 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007644 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007645 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007646 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007647 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007648 ;;
7649 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007650 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007651 if test -n "${cxx}"; then
7652 disas_config "NANOMIPS"
7653 fi
Juan Quintela64656022009-08-03 14:46:53 +02007654 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007655 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007656 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007657 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007658 nios2)
7659 disas_config "NIOS2"
7660 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007661 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007662 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007663 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007664 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007665 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007666 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007667 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007668 disas_config "RISCV"
7669 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007670 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007671 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007672 ;;
7673 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007674 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007675 ;;
7676 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007677 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007678 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007679 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007680 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007681 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007682 esac
7683done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007684if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007685 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007686fi
Juan Quintela64656022009-08-03 14:46:53 +02007687
Juan Quintela6ee71262009-08-03 14:46:47 +02007688case "$ARCH" in
7689alpha)
7690 # Ensure there's only a single GP
7691 cflags="-msmall-data $cflags"
7692;;
7693esac
7694
Juan Quintelad02c1db2009-08-03 14:46:50 +02007695if test "$gprof" = "yes" ; then
Philippe Mathieu-Daudé0acf7de2019-01-03 16:09:50 +01007696 echo "TARGET_GPROF=y" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007697 if test "$target_linux_user" = "yes" ; then
7698 cflags="-p $cflags"
7699 ldflags="-p $ldflags"
7700 fi
7701 if test "$target_softmmu" = "yes" ; then
7702 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007703 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007704 fi
7705fi
7706
Eric Blakee633a5c2019-02-04 20:39:37 -06007707if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007708 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007709fi
Juan Quintelafa282482009-07-22 22:37:39 +02007710
Christian Borntraegere9a35912017-08-23 12:16:23 +02007711# Newer kernels on s390 check for an S390_PGSTE program header and
7712# enable the pgste page table extensions in that case. This makes
7713# the vm.allocate_pgste sysctl unnecessary. We enable this program
7714# header if
7715# - we build on s390x
7716# - we build the system emulation for s390x (qemu-system-s390x)
7717# - KVM is enabled
7718# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06007719if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7720 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02007721 if ld_has --s390-pgste ; then
7722 ldflags="-Wl,--s390-pgste $ldflags"
7723 fi
7724fi
7725
Juan Quintela25be2102009-10-07 02:41:00 +02007726echo "LDFLAGS+=$ldflags" >> $config_target_mak
7727echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007728
bellard97a847b2003-08-10 21:36:04 +00007729done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007730
Alex Bennéed75402b2018-04-04 20:27:05 +01007731if test -n "$enabled_cross_compilers"; then
7732 echo
7733 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7734fi
7735
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007736if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007737 echo "config-host.h: subdir-dtc" >> $config_host_mak
7738fi
Richard Hendersone219c492017-09-28 09:01:23 -07007739if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7740 echo "config-host.h: subdir-capstone" >> $config_host_mak
7741fi
7742if test -n "$LIBCAPSTONE"; then
7743 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7744fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007745
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007746if test "$numa" = "yes"; then
7747 echo "CONFIG_NUMA=y" >> $config_host_mak
7748fi
7749
John Snowfd0e6052015-03-25 18:57:39 -04007750if test "$ccache_cpp2" = "yes"; then
7751 echo "export CCACHE_CPP2=y" >> $config_host_mak
7752fi
7753
Peter Maydelle29e5c62018-11-02 11:52:38 +00007754# If we're using a separate build tree, set it up now.
7755# DIRS are directories which we simply mkdir in the build tree;
7756# LINKS are things to symlink back into the source tree
7757# (these can be both files and directories).
7758# Caution: do not add files or directories here using wildcards. This
7759# will result in problems later if a new file matching the wildcard is
7760# added to the source tree -- nothing will cause configure to be rerun
7761# so the build tree will be missing the link back to the new file, and
7762# tests might fail. Prefer to keep the relevant files in their own
7763# directory and symlink the directory instead.
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007764DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
Emanuele Giuseppe Espositofc281c82018-06-13 17:07:21 +02007765DIRS="$DIRS tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007766DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007767DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007768DIRS="$DIRS roms/seabios roms/vgabios"
Philippe Mathieu-Daudéfe07b622018-12-18 12:37:17 +01007769LINKS="Makefile tests/tcg/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007770LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7771LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7772LINKS="$LINKS tests/fp/Makefile"
7773LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7774LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7775LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7776LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7777LINKS="$LINKS pc-bios/qemu-icon.bmp"
7778LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007779LINKS="$LINKS tests/acceptance tests/data"
7780LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05007781LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07007782for bios_file in \
7783 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007784 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007785 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007786 $source_path/pc-bios/*.rom \
7787 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007788 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007789 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007790 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007791 $source_path/pc-bios/palcode-*
7792do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007793 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007794done
7795mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007796for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007797 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007798 symlink "$source_path/$f" "$f"
7799 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007800done
Paul Brook1ad21342009-05-19 16:17:58 +01007801
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007802# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007803for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007804 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007805 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007806 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007807 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007808 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007809 echo "CC=$cc" >> $config_mak
7810 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007811 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007812 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007813 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007814 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007815 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007816done
7817
Max Reitz76c75602014-05-24 23:24:56 +02007818# set up qemu-iotests in this build directory
7819iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007820
7821echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7822echo >> "$iotests_common_env"
7823echo "export PYTHON='$python'" >> "$iotests_common_env"
7824
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007825# Save the configure command line for later reuse.
7826cat <<EOD >config.status
7827#!/bin/sh
7828# Generated by configure.
7829# Run this file to recreate the current configuration.
7830# Compiler output produced by configure, useful for debugging
7831# configure, is in config.log if it exists.
7832EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007833
7834preserve_env() {
7835 envname=$1
7836
7837 eval envval=\$$envname
7838
7839 if test -n "$envval"
7840 then
7841 echo "$envname='$envval'" >> config.status
7842 echo "export $envname" >> config.status
7843 else
7844 echo "unset $envname" >> config.status
7845 fi
7846}
7847
7848# Preserve various env variables that influence what
7849# features/build target configure will detect
7850preserve_env AR
7851preserve_env AS
7852preserve_env CC
7853preserve_env CPP
7854preserve_env CXX
7855preserve_env INSTALL
7856preserve_env LD
7857preserve_env LD_LIBRARY_PATH
7858preserve_env LIBTOOL
7859preserve_env MAKE
7860preserve_env NM
7861preserve_env OBJCOPY
7862preserve_env PATH
7863preserve_env PKG_CONFIG
7864preserve_env PKG_CONFIG_LIBDIR
7865preserve_env PKG_CONFIG_PATH
7866preserve_env PYTHON
7867preserve_env SDL_CONFIG
7868preserve_env SDL2_CONFIG
7869preserve_env SMBD
7870preserve_env STRIP
7871preserve_env WINDRES
7872
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007873printf "exec" >>config.status
7874printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007875echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007876chmod +x config.status
7877
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007878rm -r "$TMPDIR1"