blob: f9177dc479f9d55adbbd8ec28bea4e9c926990bc [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"
409slirp="yes"
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"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600459gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200460gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100461tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100462gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100463nettle=""
464gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800465gcrypt_hmac="no"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100466auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100467vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200468virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800469tpm=""
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100470libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100471live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800472numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800473tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200474jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800475replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700476vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100477bochs="yes"
478cloop="yes"
479dmg="yes"
480qcow1="yes"
481vdi="yes"
482vvfat="yes"
483qed="yes"
484parallels="yes"
485sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300486libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100487docker="no"
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200488debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800489libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800490default_devices="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100491
Alex Bennéed75402b2018-04-04 20:27:05 +0100492# cross compilers defaults, can be overridden with --cross-cc-ARCH
493cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100494cross_cc_aarch64_be="$cross_cc_aarch64"
495cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100496cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100497cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100498cross_cc_i386="i386-pc-linux-gnu-gcc"
499cross_cc_cflags_i386=""
Alex Bennéed75402b2018-04-04 20:27:05 +0100500cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100501cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100502
503enabled_cross_compilers=""
504
Peter Maydell898be3e2017-03-21 14:31:57 +0000505supported_cpu="no"
506supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100507bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800508malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000509
aliguoriac0df512008-12-29 17:14:15 +0000510# parse CC options first
511for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200512 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000513 case "$opt" in
514 --cross-prefix=*) cross_prefix="$optarg"
515 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100516 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000517 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400518 --cxx=*) CXX="$optarg"
519 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100520 --source-path=*) source_path="$optarg"
521 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200522 --cpu=*) cpu="$optarg"
523 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100524 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200525 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100526 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100527 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100528 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100529 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200530 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100531 --enable-debug-info) debug_info="yes"
532 ;;
533 --disable-debug-info) debug_info="no"
534 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100535 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
536 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100537 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
538 eval "cross_cc_cflags_${cc_arch}=\$optarg"
539 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100540 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
541 eval "cross_cc_${cc_arch}=\$optarg"
542 ;;
aliguoriac0df512008-12-29 17:14:15 +0000543 esac
544done
aliguoriac0df512008-12-29 17:14:15 +0000545# OS specific
546# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100547# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000548
Peter Maydelle49d0212012-12-07 15:39:13 +0000549# Preferred compiler:
550# ${CC} (if set)
551# ${cross_prefix}gcc (if cross-prefix specified)
552# system compiler
553if test -z "${CC}${cross_prefix}"; then
554 cc="$host_cc"
555else
556 cc="${CC-${cross_prefix}gcc}"
557fi
558
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400559if test -z "${CXX}${cross_prefix}"; then
560 cxx="c++"
561else
562 cxx="${CXX-${cross_prefix}g++}"
563fi
564
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500565ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700566as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700567ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000568cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500569objcopy="${OBJCOPY-${cross_prefix}objcopy}"
570ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800571ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200572nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500573strip="${STRIP-${cross_prefix}strip}"
574windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300575pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
576query_pkg_config() {
577 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
578}
579pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000580sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000581
Peter Maydell45d285a2013-10-21 21:03:06 +0100582# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
583ARFLAGS="${ARFLAGS-rv}"
584
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200585# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100586# We use -fwrapv to tell the compiler that we require a C dialect where
587# left shift of signed integers is well defined and has the expected
588# 2s-complement style results. (Both clang and gcc agree that it
589# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100590QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400591QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100592QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200593QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200594QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100595if test "$debug_info" = "yes"; then
596 CFLAGS="-g $CFLAGS"
597 LDFLAGS="-g $LDFLAGS"
598fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200599
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100600# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200601source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100602
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300603# running configure in the source tree?
604# we know that's the case if configure is there.
605if test -f "./configure"; then
606 pwd_is_source_path="y"
607else
608 pwd_is_source_path="n"
609fi
610
aliguoriac0df512008-12-29 17:14:15 +0000611check_define() {
612cat > $TMPC <<EOF
613#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000614#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000615#endif
616int main(void) { return 0; }
617EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200618 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000619}
620
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200621check_include() {
622cat > $TMPC <<EOF
623#include <$1>
624int main(void) { return 0; }
625EOF
626 compile_object
627}
628
John Snow93b25862015-03-25 18:57:37 -0400629write_c_skeleton() {
630 cat > $TMPC <<EOF
631int main(void) { return 0; }
632EOF
633}
634
Peter Maydellbbea4052012-08-14 15:35:34 +0100635if check_define __linux__ ; then
636 targetos="Linux"
637elif check_define _WIN32 ; then
638 targetos='MINGW32'
639elif check_define __OpenBSD__ ; then
640 targetos='OpenBSD'
641elif check_define __sun__ ; then
642 targetos='SunOS'
643elif check_define __HAIKU__ ; then
644 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100645elif check_define __FreeBSD__ ; then
646 targetos='FreeBSD'
647elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
648 targetos='GNU/kFreeBSD'
649elif check_define __DragonFly__ ; then
650 targetos='DragonFly'
651elif check_define __NetBSD__; then
652 targetos='NetBSD'
653elif check_define __APPLE__; then
654 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100655else
Peter Maydell951fedf2017-07-13 16:15:32 +0100656 # This is a fatal error, but don't report it yet, because we
657 # might be going to just print the --help text, or it might
658 # be the result of a missing compiler.
659 targetos='bogus'
660 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100661fi
662
663# Some host OSes need non-standard checks for which CPU to use.
664# Note that these checks are broken for cross-compilation: if you're
665# cross-compiling to one of these OSes then you'll need to specify
666# the correct CPU with the --cpu option.
667case $targetos in
668Darwin)
669 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
670 # run 64-bit userspace code.
671 # If the user didn't specify a CPU explicitly and the kernel says this is
672 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
673 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
674 cpu="x86_64"
675 fi
676 ;;
677SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200678 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100679 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
680 cpu="x86_64"
681 fi
682esac
683
Juan Quintela2ff6b912009-08-03 14:45:55 +0200684if test ! -z "$cpu" ; then
685 # command line argument
686 :
687elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000688 cpu="i386"
689elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700690 if check_define __ILP32__ ; then
691 cpu="x32"
692 else
693 cpu="x86_64"
694 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000695elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000696 if check_define __arch64__ ; then
697 cpu="sparc64"
698 else
699 cpu="sparc"
700 fi
malcfdf7ed92009-01-14 18:39:52 +0000701elif check_define _ARCH_PPC ; then
702 if check_define _ARCH_PPC64 ; then
703 cpu="ppc64"
704 else
705 cpu="ppc"
706 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200707elif check_define __mips__ ; then
708 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200709elif check_define __s390__ ; then
710 if check_define __s390x__ ; then
711 cpu="s390x"
712 else
713 cpu="s390"
714 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000715elif check_define __riscv ; then
716 if check_define _LP64 ; then
717 cpu="riscv64"
718 else
719 cpu="riscv32"
720 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100721elif check_define __arm__ ; then
722 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100723elif check_define __aarch64__ ; then
724 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000725else
Stefan Weil89138852016-05-16 15:10:20 +0200726 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000727fi
728
Peter Maydell359bc952011-12-24 13:07:25 +0000729ARCH=
730# Normalise host CPU name and set ARCH.
731# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000732case "$cpu" in
Alistair Francisc4f80542018-12-19 19:20:19 +0000733 ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000734 cpu="$cpu"
735 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100736 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000737 ;;
bellard7d132992003-03-06 23:23:54 +0000738 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000739 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000740 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100741 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000742 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000743 x86_64|amd64)
744 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000745 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100746 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000747 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100748 armv*b|armv*l|arm)
749 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000750 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100751 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000752 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100753 aarch64)
754 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000755 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100756 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100757 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200758 mips*)
759 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000760 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100761 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200762 ;;
blueswir131422552007-04-16 18:27:06 +0000763 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000764 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100765 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100766 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000767 ;;
bellard7d132992003-03-06 23:23:54 +0000768 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000769 # This will result in either an error or falling back to TCI later
770 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000771 ;;
772esac
Peter Maydell359bc952011-12-24 13:07:25 +0000773if test -z "$ARCH"; then
774 ARCH="$cpu"
775fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200776
bellard7d132992003-03-06 23:23:54 +0000777# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200778
Stacey Sonadfc3e92014-06-08 09:57:22 -0700779# host *BSD for user mode
780HOST_VARIANT_DIR=""
781
bellard7d132992003-03-06 23:23:54 +0000782case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000783MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200784 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100785 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100786 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200787 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200788 if check_include dsound.h; then
789 audio_drv_list="dsound"
790 else
791 audio_drv_list=""
792 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000793 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000794;;
ths5c40d2b2007-06-23 16:03:36 +0000795GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100796 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100797 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200798 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000799;;
bellard7d3505c2004-05-12 19:32:15 +0000800FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200801 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100802 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100803 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200804 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100805 # needed for kinfo_getvmmap(3) in libutil.h
806 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500807 # needed for kinfo_getproc
808 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100809 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700810 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000811 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000812;;
blueswir1c5e97232009-03-07 20:06:23 +0000813DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200814 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100815 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100816 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200817 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700818 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000819;;
bellard7d3505c2004-05-12 19:32:15 +0000820NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200821 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100822 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100823 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100824 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200825 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200826 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700827 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200828 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000829;;
830OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200831 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100832 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100833 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200834 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700835 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500836 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000837;;
bellard83fb7ad2004-07-05 21:25:26 +0000838Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200839 bsd="yes"
840 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100841 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500842 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800843 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200844 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200845 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200846 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200847 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200848 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100849 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200850 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200851 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200852 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100853 # Disable attempts to use ObjectiveC features in os/object.h since they
854 # won't work when we're compiling with gcc as a C compiler.
855 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700856 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000857 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000858;;
bellardec530c82006-04-25 22:36:06 +0000859SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200860 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100861 make="${MAKE-gmake}"
862 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400863 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200864 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100865 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200866 fi
867 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000868# needed for CMSG_ macros in sys/socket.h
869 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
870# needed for TIOCWIN* defines in termios.h
871 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200872 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200873 solarisnetlibs="-lsocket -lnsl -lresolv"
874 LIBS="$solarisnetlibs $LIBS"
875 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000876;;
Andreas Färber179cf402010-09-20 00:50:43 +0200877Haiku)
878 haiku="yes"
879 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
880 LIBS="-lposix_error_mapper -lnetwork $LIBS"
881;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000882Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100883 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200884 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200885 linux="yes"
886 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200887 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600888 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000889 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200890 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000891;;
bellard7d132992003-03-06 23:23:54 +0000892esac
893
bellard7d3505c2004-05-12 19:32:15 +0000894if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000895 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200896 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000897 fi
bellard7d3505c2004-05-12 19:32:15 +0000898fi
899
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100900: ${make=${MAKE-make}}
901: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100902: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400903: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100904
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100905# Default objcc to clang if available, otherwise use CC
906if has clang; then
907 objcc=clang
908else
909 objcc="$cc"
910fi
911
Juan Quintela3457a3f2009-08-03 14:46:07 +0200912if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200913 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800914 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100915 # MinGW needs -mthreads for TLS and macro _MT.
916 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100917 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400918 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100919 if compile_prog "" "-liberty" ; then
920 LIBS="-liberty $LIBS"
921 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200922 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200923 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300924 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300925 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200926 bindir="\${prefix}"
927 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200928 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200929 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300930 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200931fi
932
Anthony Liguori487fefd2009-06-11 13:28:25 -0500933werror=""
bellard85aa5182007-11-11 20:17:03 +0000934
bellard7d132992003-03-06 23:23:54 +0000935for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200936 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000937 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000938 --help|-h) show_help=yes
939 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400940 --version|-V) exec cat $source_path/VERSION
941 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000942 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000943 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000944 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000945 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100946 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000947 ;;
aliguoriac0df512008-12-29 17:14:15 +0000948 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000949 ;;
aliguoriac0df512008-12-29 17:14:15 +0000950 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000951 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000952 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000953 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400954 --cxx=*)
955 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200956 --iasl=*) iasl="$optarg"
957 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100958 --objcc=*) objcc="$optarg"
959 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000960 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000961 ;;
pbrook6a882642006-04-17 13:57:12 +0000962 --install=*) install="$optarg"
963 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000964 --python=*) python="$optarg"
965 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000966 --gcov=*) gcov_tool="$optarg"
967 ;;
Brade2d88302011-09-02 16:53:28 -0400968 --smbd=*) smbd="$optarg"
969 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200970 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000971 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100972 --extra-cxxflags=*)
973 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200974 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000975 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100976 --enable-debug-info)
977 ;;
978 --disable-debug-info)
979 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100980 --cross-cc-*)
981 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800982 --enable-modules)
983 modules="yes"
984 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000985 --disable-modules)
986 modules="no"
987 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200988 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000989 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000990 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000991 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200992 --enable-trace-backends=*) trace_backends="$optarg"
993 ;;
994 # XXX: backwards compatibility
995 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100996 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100997 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100998 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +0800999 --with-default-devices) default_devices="yes"
1000 ;;
1001 --without-default-devices) default_devices="no"
1002 ;;
bellard7d132992003-03-06 23:23:54 +00001003 --enable-gprof) gprof="yes"
1004 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001005 --enable-gcov) gcov="yes"
1006 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +01001007 --static)
1008 static="yes"
1009 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001010 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001011 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001012 --mandir=*) mandir="$optarg"
1013 ;;
1014 --bindir=*) bindir="$optarg"
1015 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001016 --libdir=*) libdir="$optarg"
1017 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001018 --libexecdir=*) libexecdir="$optarg"
1019 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001020 --includedir=*) includedir="$optarg"
1021 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001022 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001023 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001024 --with-confsuffix=*) confsuffix="$optarg"
1025 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001026 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001027 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001028 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001029 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001030 --localstatedir=*) local_statedir="$optarg"
1031 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001032 --firmwarepath=*) firmwarepath="$optarg"
1033 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001034 --host=*|--build=*|\
1035 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001036 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001037 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1038 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1039 # These switches are silently ignored, for compatibility with
1040 # autoconf-generated configure scripts. This allows QEMU's
1041 # configure to be used by RPM and similar macros that set
1042 # lots of directory switches by default.
1043 ;;
bellard97a847b2003-08-10 21:36:04 +00001044 --disable-sdl) sdl="no"
1045 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001046 --enable-sdl) sdl="yes"
1047 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001048 --disable-sdl-image) sdl_image="no"
1049 ;;
1050 --enable-sdl-image) sdl_image="yes"
1051 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001052 --disable-qom-cast-debug) qom_cast_debug="no"
1053 ;;
1054 --enable-qom-cast-debug) qom_cast_debug="yes"
1055 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301056 --disable-virtfs) virtfs="no"
1057 ;;
1058 --enable-virtfs) virtfs="yes"
1059 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001060 --disable-mpath) mpath="no"
1061 ;;
1062 --enable-mpath) mpath="yes"
1063 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001064 --disable-vnc) vnc="no"
1065 ;;
1066 --enable-vnc) vnc="yes"
1067 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001068 --oss-lib=*) oss_lib="$optarg"
1069 ;;
malc0c58ac12008-06-25 21:04:05 +00001070 --audio-drv-list=*) audio_drv_list="$optarg"
1071 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001072 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001073 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001074 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001075 ;;
aurel32f8393942009-04-13 18:45:38 +00001076 --enable-debug-tcg) debug_tcg="yes"
1077 ;;
1078 --disable-debug-tcg) debug_tcg="no"
1079 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001080 --enable-debug)
1081 # Enable debugging options that aren't excessively noisy
1082 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001083 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001084 debug="yes"
1085 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001086 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001087 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001088 --enable-sanitizers) sanitizers="yes"
1089 ;;
1090 --disable-sanitizers) sanitizers="no"
1091 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001092 --enable-sparse) sparse="yes"
1093 ;;
1094 --disable-sparse) sparse="no"
1095 ;;
aliguori1625af82009-04-05 17:41:02 +00001096 --disable-strip) strip_opt="no"
1097 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001098 --disable-vnc-sasl) vnc_sasl="no"
1099 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001100 --enable-vnc-sasl) vnc_sasl="yes"
1101 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001102 --disable-vnc-jpeg) vnc_jpeg="no"
1103 ;;
1104 --enable-vnc-jpeg) vnc_jpeg="yes"
1105 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001106 --disable-vnc-png) vnc_png="no"
1107 ;;
1108 --enable-vnc-png) vnc_png="yes"
1109 ;;
bellard443f1372004-06-04 11:13:20 +00001110 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001111 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001112 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001113 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001114 --enable-vde) vde="yes"
1115 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001116 --disable-netmap) netmap="no"
1117 ;;
1118 --enable-netmap) netmap="yes"
1119 ;;
aliguorie37630c2009-04-22 15:19:10 +00001120 --disable-xen) xen="no"
1121 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001122 --enable-xen) xen="yes"
1123 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001124 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1125 ;;
1126 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1127 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001128 --disable-brlapi) brlapi="no"
1129 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001130 --enable-brlapi) brlapi="yes"
1131 ;;
balrogfb599c92008-09-28 23:49:55 +00001132 --disable-bluez) bluez="no"
1133 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001134 --enable-bluez) bluez="yes"
1135 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001136 --disable-kvm) kvm="no"
1137 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001138 --enable-kvm) kvm="yes"
1139 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001140 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001141 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001142 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001143 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001144 --disable-hvf) hvf="no"
1145 ;;
1146 --enable-hvf) hvf="yes"
1147 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001148 --disable-whpx) whpx="no"
1149 ;;
1150 --enable-whpx) whpx="yes"
1151 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001152 --disable-tcg-interpreter) tcg_interpreter="no"
1153 ;;
1154 --enable-tcg-interpreter) tcg_interpreter="yes"
1155 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001156 --disable-cap-ng) cap_ng="no"
1157 ;;
1158 --enable-cap-ng) cap_ng="yes"
1159 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001160 --disable-tcg) tcg="no"
1161 ;;
1162 --enable-tcg) tcg="yes"
1163 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001164 --disable-malloc-trim) malloc_trim="no"
1165 ;;
1166 --enable-malloc-trim) malloc_trim="yes"
1167 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001168 --disable-spice) spice="no"
1169 ;;
1170 --enable-spice) spice="yes"
1171 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001172 --disable-libiscsi) libiscsi="no"
1173 ;;
1174 --enable-libiscsi) libiscsi="yes"
1175 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001176 --disable-libnfs) libnfs="no"
1177 ;;
1178 --enable-libnfs) libnfs="yes"
1179 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001180 --enable-profiler) profiler="yes"
1181 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001182 --disable-cocoa) cocoa="no"
1183 ;;
malcc2de5c92008-06-28 19:13:06 +00001184 --enable-cocoa)
1185 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001186 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001187 ;;
pbrookcad25d62006-03-19 16:31:11 +00001188 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001189 ;;
pbrookcad25d62006-03-19 16:31:11 +00001190 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001191 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001192 --disable-user)
1193 linux_user="no" ;
1194 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001195 ;;
1196 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001197 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001198 ;;
ths831b7822007-01-18 20:06:33 +00001199 --enable-linux-user) linux_user="yes"
1200 ;;
blueswir184778502008-10-26 20:33:16 +00001201 --disable-bsd-user) bsd_user="no"
1202 ;;
1203 --enable-bsd-user) bsd_user="yes"
1204 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001205 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001206 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001207 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001208 ;;
bellard85aa5182007-11-11 20:17:03 +00001209 --enable-werror) werror="yes"
1210 ;;
1211 --disable-werror) werror="no"
1212 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001213 --enable-stack-protector) stack_protector="yes"
1214 ;;
1215 --disable-stack-protector) stack_protector="no"
1216 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001217 --disable-curses) curses="no"
1218 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001219 --enable-curses) curses="yes"
1220 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001221 --disable-curl) curl="no"
1222 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001223 --enable-curl) curl="yes"
1224 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001225 --disable-fdt) fdt="no"
1226 ;;
1227 --enable-fdt) fdt="yes"
1228 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001229 --disable-linux-aio) linux_aio="no"
1230 ;;
1231 --enable-linux-aio) linux_aio="yes"
1232 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001233 --disable-attr) attr="no"
1234 ;;
1235 --enable-attr) attr="yes"
1236 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001237 --disable-membarrier) membarrier="no"
1238 ;;
1239 --enable-membarrier) membarrier="yes"
1240 ;;
ths77755342008-11-27 15:45:16 +00001241 --disable-blobs) blobs="no"
1242 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001243 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001244 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001245 --with-coroutine=*) coroutine="$optarg"
1246 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001247 --disable-coroutine-pool) coroutine_pool="no"
1248 ;;
1249 --enable-coroutine-pool) coroutine_pool="yes"
1250 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001251 --enable-debug-stack-usage) debug_stack_usage="yes"
1252 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001253 --enable-crypto-afalg) crypto_afalg="yes"
1254 ;;
1255 --disable-crypto-afalg) crypto_afalg="no"
1256 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001257 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001258 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001259 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001260 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001261 --disable-vhost-net) vhost_net="no"
1262 ;;
1263 --enable-vhost-net) vhost_net="yes"
1264 ;;
Gonglei042cea22018-03-01 21:46:28 +08001265 --disable-vhost-crypto) vhost_crypto="no"
1266 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001267 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001268 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001269 --disable-vhost-scsi) vhost_scsi="no"
1270 ;;
1271 --enable-vhost-scsi) vhost_scsi="yes"
1272 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001273 --disable-vhost-vsock) vhost_vsock="no"
1274 ;;
1275 --enable-vhost-vsock) vhost_vsock="yes"
1276 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001277 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001278 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001279 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001280 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001281 --disable-rbd) rbd="no"
1282 ;;
1283 --enable-rbd) rbd="yes"
1284 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001285 --disable-xfsctl) xfs="no"
1286 ;;
1287 --enable-xfsctl) xfs="yes"
1288 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001289 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001290 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001291 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001292 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001293 --disable-libusb) libusb="no"
1294 ;;
1295 --enable-libusb) libusb="yes"
1296 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001297 --disable-usb-redir) usb_redir="no"
1298 ;;
1299 --enable-usb-redir) usb_redir="yes"
1300 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001301 --disable-zlib-test) zlib="no"
1302 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001303 --disable-lzo) lzo="no"
1304 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001305 --enable-lzo) lzo="yes"
1306 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001307 --disable-snappy) snappy="no"
1308 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001309 --enable-snappy) snappy="yes"
1310 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001311 --disable-bzip2) bzip2="no"
1312 ;;
1313 --enable-bzip2) bzip2="yes"
1314 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001315 --enable-lzfse) lzfse="yes"
1316 ;;
1317 --disable-lzfse) lzfse="no"
1318 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001319 --enable-guest-agent) guest_agent="yes"
1320 ;;
1321 --disable-guest-agent) guest_agent="no"
1322 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001323 --enable-guest-agent-msi) guest_agent_msi="yes"
1324 ;;
1325 --disable-guest-agent-msi) guest_agent_msi="no"
1326 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001327 --with-vss-sdk) vss_win32_sdk=""
1328 ;;
1329 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1330 ;;
1331 --without-vss-sdk) vss_win32_sdk="no"
1332 ;;
1333 --with-win-sdk) win_sdk=""
1334 ;;
1335 --with-win-sdk=*) win_sdk="$optarg"
1336 ;;
1337 --without-win-sdk) win_sdk="no"
1338 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001339 --enable-tools) want_tools="yes"
1340 ;;
1341 --disable-tools) want_tools="no"
1342 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001343 --enable-seccomp) seccomp="yes"
1344 ;;
1345 --disable-seccomp) seccomp="no"
1346 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301347 --disable-glusterfs) glusterfs="no"
1348 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001349 --disable-avx2) avx2_opt="no"
1350 ;;
1351 --enable-avx2) avx2_opt="yes"
1352 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301353 --enable-glusterfs) glusterfs="yes"
1354 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001355 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1356 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001357 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001358 --enable-vhdx|--disable-vhdx)
1359 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1360 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001361 --enable-uuid|--disable-uuid)
1362 echo "$0: $opt is obsolete, UUID support is always built" >&2
1363 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001364 --disable-gtk) gtk="no"
1365 ;;
1366 --enable-gtk) gtk="yes"
1367 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001368 --tls-priority=*) tls_priority="$optarg"
1369 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001370 --disable-gnutls) gnutls="no"
1371 ;;
1372 --enable-gnutls) gnutls="yes"
1373 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001374 --disable-nettle) nettle="no"
1375 ;;
1376 --enable-nettle) nettle="yes"
1377 ;;
1378 --disable-gcrypt) gcrypt="no"
1379 ;;
1380 --enable-gcrypt) gcrypt="yes"
1381 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001382 --disable-auth-pam) auth_pam="no"
1383 ;;
1384 --enable-auth-pam) auth_pam="yes"
1385 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001386 --enable-rdma) rdma="yes"
1387 ;;
1388 --disable-rdma) rdma="no"
1389 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001390 --enable-pvrdma) pvrdma="yes"
1391 ;;
1392 --disable-pvrdma) pvrdma="no"
1393 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001394 --disable-vte) vte="no"
1395 ;;
1396 --enable-vte) vte="yes"
1397 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001398 --disable-virglrenderer) virglrenderer="no"
1399 ;;
1400 --enable-virglrenderer) virglrenderer="yes"
1401 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001402 --disable-tpm) tpm="no"
1403 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001404 --enable-tpm) tpm="yes"
1405 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001406 --disable-libssh2) libssh2="no"
1407 ;;
1408 --enable-libssh2) libssh2="yes"
1409 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001410 --disable-live-block-migration) live_block_migration="no"
1411 ;;
1412 --enable-live-block-migration) live_block_migration="yes"
1413 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001414 --disable-numa) numa="no"
1415 ;;
1416 --enable-numa) numa="yes"
1417 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001418 --disable-libxml2) libxml2="no"
1419 ;;
1420 --enable-libxml2) libxml2="yes"
1421 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001422 --disable-tcmalloc) tcmalloc="no"
1423 ;;
1424 --enable-tcmalloc) tcmalloc="yes"
1425 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001426 --disable-jemalloc) jemalloc="no"
1427 ;;
1428 --enable-jemalloc) jemalloc="yes"
1429 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001430 --disable-replication) replication="no"
1431 ;;
1432 --enable-replication) replication="yes"
1433 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001434 --disable-vxhs) vxhs="no"
1435 ;;
1436 --enable-vxhs) vxhs="yes"
1437 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001438 --disable-bochs) bochs="no"
1439 ;;
1440 --enable-bochs) bochs="yes"
1441 ;;
1442 --disable-cloop) cloop="no"
1443 ;;
1444 --enable-cloop) cloop="yes"
1445 ;;
1446 --disable-dmg) dmg="no"
1447 ;;
1448 --enable-dmg) dmg="yes"
1449 ;;
1450 --disable-qcow1) qcow1="no"
1451 ;;
1452 --enable-qcow1) qcow1="yes"
1453 ;;
1454 --disable-vdi) vdi="no"
1455 ;;
1456 --enable-vdi) vdi="yes"
1457 ;;
1458 --disable-vvfat) vvfat="no"
1459 ;;
1460 --enable-vvfat) vvfat="yes"
1461 ;;
1462 --disable-qed) qed="no"
1463 ;;
1464 --enable-qed) qed="yes"
1465 ;;
1466 --disable-parallels) parallels="no"
1467 ;;
1468 --enable-parallels) parallels="yes"
1469 ;;
1470 --disable-sheepdog) sheepdog="no"
1471 ;;
1472 --enable-sheepdog) sheepdog="yes"
1473 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001474 --disable-vhost-user) vhost_user="no"
1475 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001476 --enable-vhost-user) vhost_user="yes"
1477 ;;
1478 --disable-vhost-kernel) vhost_kernel="no"
1479 ;;
1480 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001481 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001482 --disable-capstone) capstone="no"
1483 ;;
1484 --enable-capstone) capstone="yes"
1485 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001486 --enable-capstone=git) capstone="git"
1487 ;;
1488 --enable-capstone=system) capstone="system"
1489 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001490 --with-git=*) git="$optarg"
1491 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001492 --enable-git-update) git_update=yes
1493 ;;
1494 --disable-git-update) git_update=no
1495 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001496 --enable-debug-mutex) debug_mutex=yes
1497 ;;
1498 --disable-debug-mutex) debug_mutex=no
1499 ;;
Junyan He17824402018-07-18 15:47:59 +08001500 --enable-libpmem) libpmem=yes
1501 ;;
1502 --disable-libpmem) libpmem=no
1503 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001504 *)
1505 echo "ERROR: unknown option $opt"
1506 echo "Try '$0 --help' for more information"
1507 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001508 ;;
bellard7d132992003-03-06 23:23:54 +00001509 esac
1510done
1511
bellard40293e52008-01-31 11:32:10 +00001512case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001513 ppc)
1514 CPU_CFLAGS="-m32"
1515 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001516 cross_cc_powerpc=$cc
1517 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001518 ;;
1519 ppc64)
1520 CPU_CFLAGS="-m64"
1521 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001522 cross_cc_ppc64=$cc
1523 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001524 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001525 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001526 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1527 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001528 cross_cc_sparc=$cc
1529 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001530 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001531 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001532 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001533 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001534 cross_cc_sparc64=$cc
1535 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001536 ;;
ths76d83bd2007-11-18 21:22:10 +00001537 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001538 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001539 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001540 cross_cc_s390=$cc
1541 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001542 ;;
1543 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001544 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001545 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001546 cross_cc_s390x=$cc
1547 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001548 ;;
bellard40293e52008-01-31 11:32:10 +00001549 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001550 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001551 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001552 cross_cc_i386=$cc
1553 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001554 ;;
1555 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001556 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1557 # If we truly care, we should simply detect this case at
1558 # runtime and generate the fallback to serial emulation.
1559 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001560 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001561 cross_cc_x86_64=$cc
1562 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001563 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001564 x32)
1565 CPU_CFLAGS="-mx32"
1566 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001567 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001568 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001569 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001570 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001571esac
1572
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001573QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001574
Peter Maydellaffc88c2016-06-13 11:32:24 +01001575# For user-mode emulation the host arch has to be one we explicitly
1576# support, even if we're using TCI.
1577if [ "$ARCH" = "unknown" ]; then
1578 bsd_user="no"
1579 linux_user="no"
1580fi
1581
Peter Maydell60e0df22011-05-03 14:50:13 +01001582default_target_list=""
1583
Peter Maydell6e92f822013-05-20 16:16:15 +01001584mak_wilds=""
1585
1586if [ "$softmmu" = "yes" ]; then
1587 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001588fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001589if [ "$linux_user" = "yes" ]; then
1590 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001591fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001592if [ "$bsd_user" = "yes" ]; then
1593 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001594fi
1595
Peter Maydell6e92f822013-05-20 16:16:15 +01001596for config in $mak_wilds; do
1597 default_target_list="${default_target_list} $(basename "$config" .mak)"
1598done
1599
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001600# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001601trace_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 +01001602
pbrookaf5db582006-04-08 14:26:41 +00001603if test x"$show_help" = x"yes" ; then
1604cat << EOF
1605
1606Usage: configure [options]
1607Options: [defaults in brackets after descriptions]
1608
Stefan Weil08fb77e2013-12-18 22:09:39 +01001609Standard options:
1610 --help print this message
1611 --prefix=PREFIX install in PREFIX [$prefix]
1612 --interp-prefix=PREFIX where to find shared libraries, etc.
1613 use %M for cpu name [$interp_prefix]
1614 --target-list=LIST set target list (default: build everything)
1615$(echo Available targets: $default_target_list | \
1616 fold -s -w 53 | sed -e 's/^/ /')
1617
1618Advanced options (experts only):
1619 --source-path=PATH path of source code [$source_path]
1620 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1621 --cc=CC use C compiler CC [$cc]
1622 --iasl=IASL use ACPI compiler IASL [$iasl]
1623 --host-cc=CC use C compiler CC [$host_cc] for code run at
1624 build time
1625 --cxx=CXX use C++ compiler CXX [$cxx]
1626 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1627 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001628 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001629 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001630 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001631 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001632 --make=MAKE use specified make [$make]
1633 --install=INSTALL use specified install [$install]
1634 --python=PYTHON use specified python [$python]
1635 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001636 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001637 --static enable static build [$static]
1638 --mandir=PATH install man pages in PATH
1639 --datadir=PATH install firmware in PATH$confsuffix
1640 --docdir=PATH install documentation in PATH$confsuffix
1641 --bindir=PATH install binaries in PATH
1642 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001643 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001644 --sysconfdir=PATH install config in PATH$confsuffix
1645 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001646 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001647 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001648 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001649 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001650 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001651 --disable-strip disable stripping binaries
1652 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001653 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001654 --audio-drv-list=LIST set audio drivers list:
1655 Available drivers: $audio_possible_drivers
1656 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1657 --block-drv-rw-whitelist=L
1658 set block driver read-write whitelist
1659 (affects only QEMU, not qemu-img)
1660 --block-drv-ro-whitelist=L
1661 set block driver read-only whitelist
1662 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001663 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001664 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001665 --with-trace-file=NAME Full PATH,NAME of file to store traces
1666 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001667 --disable-slirp disable SLIRP userspace network connectivity
1668 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001669 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001670 --oss-lib path to OSS library
1671 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001672 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001673 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001674 --enable-gcov enable test coverage analysis with gcov
1675 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001676 --disable-blobs disable installing provided firmware blobs
1677 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1678 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001679 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001680 --enable-gprof QEMU profiling with gprof
1681 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001682 --enable-debug-stack-usage
1683 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001684
1685Optional features, enabled with --enable-FEATURE and
1686disabled with --disable-FEATURE, default is enabled if available:
1687
1688 system all system emulation targets
1689 user supported user emulation targets
1690 linux-user all linux usermode emulation targets
1691 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001692 docs build documentation
1693 guest-agent build the QEMU Guest Agent
1694 guest-agent-msi build guest agent Windows MSI installation package
1695 pie Position Independent Executables
1696 modules modules support
1697 debug-tcg TCG debugging (default is disabled)
1698 debug-info debugging information
1699 sparse sparse checker
1700
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001701 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001702 nettle nettle cryptography support
1703 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001704 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001705 sdl SDL UI
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001706 sdl_image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001707 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001708 vte vte support for the gtk UI
1709 curses curses UI
1710 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001711 vnc-sasl SASL encryption for VNC server
1712 vnc-jpeg JPEG lossy compression for VNC server
1713 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001714 cocoa Cocoa UI (Mac OS X only)
1715 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001716 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001717 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001718 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001719 brlapi BrlAPI (Braile)
1720 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001721 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001722 fdt fdt device tree
1723 bluez bluez stack connectivity
1724 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001725 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001726 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001727 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001728 rdma Enable RDMA-based migration
1729 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001730 vde support for vde network
1731 netmap support for netmap network
1732 linux-aio Linux AIO support
1733 cap-ng libcap-ng support
1734 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001735 vhost-net vhost-net kernel acceleration support
1736 vhost-vsock virtio sockets device support
1737 vhost-scsi vhost-scsi kernel target support
1738 vhost-crypto vhost-user-crypto backend support
1739 vhost-kernel vhost kernel backend support
1740 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001741 spice spice
1742 rbd rados block device (rbd)
1743 libiscsi iscsi support
1744 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001745 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001746 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001747 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001748 usb-redir usb network redirection support
1749 lzo support of lzo compression library
1750 snappy support of snappy compression library
1751 bzip2 support of bzip2 compression library
1752 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001753 lzfse support of lzfse compression library
1754 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001755 seccomp seccomp support
1756 coroutine-pool coroutine freelist (better performance)
1757 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001758 tpm TPM support
1759 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001760 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001761 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001762 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001763 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001764 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001765 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001766 opengl opengl support
1767 virglrenderer virgl rendering support
1768 xfsctl xfsctl support
1769 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001770 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001771 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001772 bochs bochs image format support
1773 cloop cloop image format support
1774 dmg dmg image format support
1775 qcow1 qcow v1 image format support
1776 vdi vdi image format support
1777 vvfat vvfat image format support
1778 qed qed image format support
1779 parallels parallels image format support
1780 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001781 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001782 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001783 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001784 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001785
1786NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001787EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001788exit 0
pbrookaf5db582006-04-08 14:26:41 +00001789fi
1790
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001791if ! has $python; then
1792 error_exit "Python not found. Use --python=/path/to/python"
1793fi
1794
1795# Note that if the Python conditional here evaluates True we will exit
1796# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001797if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1798 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001799 "Use --python=/path/to/python to specify a supported Python."
1800fi
1801
Cleber Rosa755ee702018-11-09 10:07:07 -05001802# Preserve python version since some functionality is dependent on it
1803python_version=$($python -V 2>&1 | sed -e 's/Python\ //')
1804
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001805# Suppress writing compiled files
1806python="$python -B"
1807
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001808# Check that the C compiler works. Doing this here before testing
1809# the host CPU ensures that we had a valid CC to autodetect the
1810# $cpu var (and we should bail right here if that's not the case).
1811# It also allows the help message to be printed without a CC.
1812write_c_skeleton;
1813if compile_object ; then
1814 : C compiler works ok
1815else
1816 error_exit "\"$cc\" either does not exist or does not work"
1817fi
1818if ! compile_prog ; then
1819 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1820fi
1821
Peter Maydell359bc952011-12-24 13:07:25 +00001822# Now we have handled --enable-tcg-interpreter and know we're not just
1823# printing the help message, bail out if the host CPU isn't supported.
1824if test "$ARCH" = "unknown"; then
1825 if test "$tcg_interpreter" = "yes" ; then
1826 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001827 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001828 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001829 fi
1830fi
1831
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001832# Consult white-list to determine whether to enable werror
1833# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001834if test -z "$werror" ; then
Eric Blakee633a5c2019-02-04 20:39:37 -06001835 if test -d "$source_path/.git" && \
1836 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001837 werror="yes"
1838 else
1839 werror="no"
1840 fi
1841fi
1842
Peter Maydellfb59dab2017-03-28 14:01:52 +01001843if test "$bogus_os" = "yes"; then
1844 # Now that we know that we're not printing the help and that
1845 # the compiler works (so the results of the check_defines we used
1846 # to identify the OS are reliable), if we didn't recognize the
1847 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001848 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001849fi
1850
Thomas Huthefc6c072018-12-03 10:12:32 +01001851# Check whether the compiler matches our minimum requirements:
1852cat > $TMPC << EOF
1853#if defined(__clang_major__) && defined(__clang_minor__)
1854# ifdef __apple_build_version__
1855# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1856# error You need at least XCode Clang v5.1 to compile QEMU
1857# endif
1858# else
1859# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1860# error You need at least Clang v3.4 to compile QEMU
1861# endif
1862# endif
1863#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1864# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1865# error You need at least GCC v4.8 to compile QEMU
1866# endif
1867#else
1868# error You either need GCC or Clang to compiler QEMU
1869#endif
1870int main (void) { return 0; }
1871EOF
1872if ! compile_prog "" "" ; then
1873 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1874fi
1875
Paolo Bonzini8d050952010-12-23 11:43:52 +01001876gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1877gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001878gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001879gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001880gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001881gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001882# Note that we do not add -Werror to gcc_flags here, because that would
1883# enable it for all configure tests. If a configure test failed due
1884# to -Werror this would just silently disable some features,
1885# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001886
1887cc_has_warning_flag() {
1888 write_c_skeleton;
1889
Peter Maydella1d29d62012-10-27 22:19:07 +01001890 # Use the positive sense of the flag when testing for -Wno-wombat
1891 # support (gcc will happily accept the -Wno- form of unknown
1892 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001893 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1894 compile_prog "-Werror $optflag" ""
1895}
1896
1897for flag in $gcc_flags; do
1898 if cc_has_warning_flag $flag ; then
1899 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001900 fi
1901done
1902
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001903if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001904 cat > $TMPC << EOF
1905int main(int argc, char *argv[])
1906{
1907 char arr[64], *p = arr, *c = argv[0];
1908 while (*c) {
1909 *p++ = *c++;
1910 }
1911 return 0;
1912}
1913EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001914 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001915 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001916 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001917 # We need to check both a compile and a link, since some compiler
1918 # setups fail only on a .c->.o compile and some only at link time
1919 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1920 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001921 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001922 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001923 break
1924 fi
1925 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001926 if test "$stack_protector" = yes; then
1927 if test $sp_on = 0; then
1928 error_exit "Stack protector not supported"
1929 fi
1930 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001931fi
1932
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001933# Disable -Wmissing-braces on older compilers that warn even for
1934# the "universal" C zero initializer {0}.
1935cat > $TMPC << EOF
1936struct {
1937 int a[2];
1938} x = {0};
1939EOF
1940if compile_object "-Werror" "" ; then
1941 :
1942else
1943 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1944fi
1945
Thomas Huthd376e9d2018-12-03 11:41:38 +01001946# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001947if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001948 if test "$modules" = "yes" ; then
1949 error_exit "static and modules are mutually incompatible"
1950 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001951 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001952 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001953 else
1954 pie="no"
1955 fi
1956fi
1957
Emilio G. Cota768b7852015-04-29 13:09:02 +02001958# Unconditional check for compiler __thread support
1959 cat > $TMPC << EOF
1960static __thread int tls_var;
1961int main(void) { return tls_var; }
1962EOF
1963
1964if ! compile_prog "-Werror" "" ; then
1965 error_exit "Your compiler does not support the __thread specifier for " \
1966 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1967fi
1968
Avi Kivity40d64442011-11-15 20:12:17 +02001969if test "$pie" = ""; then
1970 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001971 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001972 ;;
1973 *)
1974 pie="no"
1975 ;;
1976 esac
1977fi
1978
1979if test "$pie" != "no" ; then
1980 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001981
1982#ifdef __linux__
1983# define THREAD __thread
1984#else
1985# define THREAD
1986#endif
1987
1988static THREAD int tls_var;
1989
1990int main(void) { return tls_var; }
1991
Avi Kivity40d64442011-11-15 20:12:17 +02001992EOF
1993 if compile_prog "-fPIE -DPIE" "-pie"; then
1994 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1995 LDFLAGS="-pie $LDFLAGS"
1996 pie="yes"
1997 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1998 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1999 fi
2000 else
2001 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002002 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002003 else
2004 echo "Disabling PIE due to missing toolchain support"
2005 pie="no"
2006 fi
2007 fi
Brad46eef332013-12-10 19:49:08 -05002008
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04002009 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05002010 CFLAGS_NOPIE="-fno-pie"
2011 LDFLAGS_NOPIE="-nopie"
2012 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002013fi
2014
Paolo Bonzini09dada42013-04-17 16:26:47 +02002015##########################################
2016# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2017# use i686 as default anyway, but for those that don't, an explicit
2018# specification is necessary
2019
2020if test "$cpu" = "i386"; then
2021 cat > $TMPC << EOF
2022static int sfaa(int *ptr)
2023{
2024 return __sync_fetch_and_and(ptr, 0);
2025}
2026
2027int main(void)
2028{
2029 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002030 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002031 sfaa(&val);
2032 return val;
2033}
2034EOF
2035 if ! compile_prog "" "" ; then
2036 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2037 fi
2038fi
2039
2040#########################################
bellardec530c82006-04-25 22:36:06 +00002041# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002042
bellardec530c82006-04-25 22:36:06 +00002043if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002044 if has $install; then
2045 :
2046 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002047 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2048 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2049 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002050 fi
Stefan Weil89138852016-05-16 15:10:20 +02002051 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002052 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2053 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2054 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002055 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002056 if has ar; then
2057 :
2058 else
bellardec530c82006-04-25 22:36:06 +00002059 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002060 error_exit "No path includes ar" \
2061 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002062 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002063 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002064 fi
ths5fafdf22007-09-16 21:08:06 +00002065fi
bellardec530c82006-04-25 22:36:06 +00002066
Stefan Weilafb63eb2012-09-26 22:04:38 +02002067if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002068 for target in $default_target_list; do
2069 supported_target $target 2>/dev/null && \
2070 target_list="$target_list $target"
2071 done
2072 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002073else
Stefan Weil89138852016-05-16 15:10:20 +02002074 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002075 for target in $target_list; do
2076 # Check that we recognised the target name; this allows a more
2077 # friendly error message than if we let it fall through.
2078 case " $default_target_list " in
2079 *" $target "*)
2080 ;;
2081 *)
2082 error_exit "Unknown target name '$target'"
2083 ;;
2084 esac
2085 supported_target $target || exit 1
2086 done
bellard5327cf42005-01-10 23:18:50 +00002087fi
Peter Maydell25b48332013-05-20 16:16:16 +01002088
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002089# see if system emulation was really requested
2090case " $target_list " in
2091 *"-softmmu "*) softmmu=yes
2092 ;;
2093 *) softmmu=no
2094 ;;
2095esac
bellard5327cf42005-01-10 23:18:50 +00002096
Juan Quintela249247c2009-08-12 18:20:25 +02002097feature_not_found() {
2098 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002099 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002100
Peter Maydell76ad07a2013-04-08 12:11:26 +01002101 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002102 "configure was not able to find it." \
2103 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002104}
2105
bellard7d132992003-03-06 23:23:54 +00002106# ---
2107# big/little endian test
2108cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002109short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2110short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2111extern int foo(short *, short *);
2112int main(int argc, char *argv[]) {
2113 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002114}
2115EOF
2116
Mike Frysinger61cc9192013-06-30 23:30:18 -04002117if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002118 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002119 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002120 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002121 bigendian="no"
2122 else
2123 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002124 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002125else
2126 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002127fi
2128
Juan Quintelab0a47e72009-08-12 18:29:49 +02002129##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002130# cocoa implies not SDL or GTK
2131# (the cocoa UI code currently assumes it is always the active UI
2132# and doesn't interact well with other UI frontend code)
2133if test "$cocoa" = "yes"; then
2134 if test "$sdl" = "yes"; then
2135 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2136 fi
2137 if test "$gtk" = "yes"; then
2138 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2139 fi
2140 gtk=no
2141 sdl=no
2142fi
2143
Eric Blake6b39b062016-10-11 10:46:23 -05002144# Some versions of Mac OS X incorrectly define SIZE_MAX
2145cat > $TMPC << EOF
2146#include <stdint.h>
2147#include <stdio.h>
2148int main(int argc, char *argv[]) {
2149 return printf("%zu", SIZE_MAX);
2150}
2151EOF
2152have_broken_size_max=no
2153if ! compile_object -Werror ; then
2154 have_broken_size_max=yes
2155fi
2156
Peter Maydella30878e2015-08-14 16:10:52 +01002157##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002158# L2TPV3 probe
2159
2160cat > $TMPC <<EOF
2161#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002162#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002163int main(void) { return sizeof(struct mmsghdr); }
2164EOF
2165if compile_prog "" "" ; then
2166 l2tpv3=yes
2167else
2168 l2tpv3=no
2169fi
2170
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002171#########################################
2172# vhost interdependencies and host support
2173
2174# vhost backends
2175test "$vhost_user" = "" && vhost_user=yes
2176if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2177 error_exit "vhost-user isn't available on win32"
2178fi
2179test "$vhost_kernel" = "" && vhost_kernel=$linux
2180if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2181 error_exit "vhost-kernel is only available on Linux"
2182fi
2183
2184# vhost-kernel devices
2185test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2186if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2187 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2188fi
2189test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2190if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2191 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2192fi
2193
2194# vhost-user backends
2195test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2196if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2197 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2198fi
2199test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2200if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2201 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2202fi
2203
2204# OR the vhost-kernel and vhost-user values for simplicity
2205if test "$vhost_net" = ""; then
2206 test "$vhost_net_user" = "yes" && vhost_net=yes
2207 test "$vhost_kernel" = "yes" && vhost_net=yes
2208fi
2209
Gonglei015a33b2014-07-01 20:58:08 +08002210##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002211# MinGW / Mingw-w64 localtime_r/gmtime_r check
2212
2213if test "$mingw32" = "yes"; then
2214 # Some versions of MinGW / Mingw-w64 lack localtime_r
2215 # and gmtime_r entirely.
2216 #
2217 # Some versions of Mingw-w64 define a macro for
2218 # localtime_r/gmtime_r.
2219 #
2220 # Some versions of Mingw-w64 will define functions
2221 # for localtime_r/gmtime_r, but only if you have
2222 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2223 # though, unistd.h and pthread.h both define
2224 # that for you.
2225 #
2226 # So this #undef localtime_r and #include <unistd.h>
2227 # are not in fact redundant.
2228cat > $TMPC << EOF
2229#include <unistd.h>
2230#include <time.h>
2231#undef localtime_r
2232int main(void) { localtime_r(NULL, NULL); return 0; }
2233EOF
2234 if compile_prog "" "" ; then
2235 localtime_r="yes"
2236 else
2237 localtime_r="no"
2238 fi
2239fi
2240
2241##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002242# pkg-config probe
2243
2244if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002245 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002246fi
2247
2248##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002249# NPTL probe
2250
Peter Maydell24cb36a2013-07-16 18:45:00 +01002251if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002252 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002253#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002254#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002255int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002256#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2257#error bork
2258#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002259 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002260}
2261EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002262 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002263 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002264 fi
pbrookbd0c5662008-05-29 14:34:11 +00002265fi
2266
balrogac629222008-10-11 09:56:04 +00002267##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002268# lzo check
2269
2270if test "$lzo" != "no" ; then
2271 cat > $TMPC << EOF
2272#include <lzo/lzo1x.h>
2273int main(void) { lzo_version(); return 0; }
2274EOF
2275 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002276 libs_softmmu="$libs_softmmu -llzo2"
2277 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002278 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002279 if test "$lzo" = "yes"; then
2280 feature_not_found "liblzo2" "Install liblzo2 devel"
2281 fi
2282 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002283 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002284fi
2285
2286##########################################
2287# snappy check
2288
2289if test "$snappy" != "no" ; then
2290 cat > $TMPC << EOF
2291#include <snappy-c.h>
2292int main(void) { snappy_max_compressed_length(4096); return 0; }
2293EOF
2294 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002295 libs_softmmu="$libs_softmmu -lsnappy"
2296 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002297 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002298 if test "$snappy" = "yes"; then
2299 feature_not_found "libsnappy" "Install libsnappy devel"
2300 fi
2301 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002302 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002303fi
2304
2305##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002306# bzip2 check
2307
2308if test "$bzip2" != "no" ; then
2309 cat > $TMPC << EOF
2310#include <bzlib.h>
2311int main(void) { BZ2_bzlibVersion(); return 0; }
2312EOF
2313 if compile_prog "" "-lbz2" ; then
2314 bzip2="yes"
2315 else
2316 if test "$bzip2" = "yes"; then
2317 feature_not_found "libbzip2" "Install libbzip2 devel"
2318 fi
2319 bzip2="no"
2320 fi
2321fi
2322
2323##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002324# lzfse check
2325
2326if test "$lzfse" != "no" ; then
2327 cat > $TMPC << EOF
2328#include <lzfse.h>
2329int main(void) { lzfse_decode_scratch_size(); return 0; }
2330EOF
2331 if compile_prog "" "-llzfse" ; then
2332 lzfse="yes"
2333 else
2334 if test "$lzfse" = "yes"; then
2335 feature_not_found "lzfse" "Install lzfse devel"
2336 fi
2337 lzfse="no"
2338 fi
2339fi
2340
2341##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002342# libseccomp check
2343
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002344libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002345if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002346 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002347 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002348 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002349 arm|aarch64)
2350 libseccomp_minver="2.2.3"
2351 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002352 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002353 libseccomp_minver="2.3.0"
2354 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002355 *)
2356 libseccomp_minver=""
2357 ;;
2358 esac
2359
2360 if test "$libseccomp_minver" != "" &&
2361 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002362 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2363 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002364 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002365 else
Andrew Jones693e5912015-09-30 11:59:18 -04002366 if test "$seccomp" = "yes" ; then
2367 if test "$libseccomp_minver" != "" ; then
2368 feature_not_found "libseccomp" \
2369 "Install libseccomp devel >= $libseccomp_minver"
2370 else
2371 feature_not_found "libseccomp" \
2372 "libseccomp is not supported for host cpu $cpu"
2373 fi
2374 fi
2375 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002376 fi
2377fi
2378##########################################
aliguorie37630c2009-04-22 15:19:10 +00002379# xen probe
2380
Juan Quintelafc321b42009-08-12 18:29:55 +02002381if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002382 # Check whether Xen library path is specified via --extra-ldflags to avoid
2383 # overriding this setting with pkg-config output. If not, try pkg-config
2384 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002385
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002386 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2387 $pkg_config --exists xencontrol ; then
2388 xen_ctrl_version="$(printf '%d%02d%02d' \
2389 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2390 xen=yes
2391 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2392 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002393 if $pkg_config --exists xentoolcore; then
2394 xen_pc="$xen_pc xentoolcore"
2395 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002396 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2397 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002398 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002399
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002400 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002401 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002402
2403 # First we test whether Xen headers and libraries are available.
2404 # If no, we are done and there is no Xen support.
2405 # If yes, more tests are run to detect the Xen version.
2406
2407 # Xen (any)
2408 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002409#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002410int main(void) {
2411 return 0;
2412}
2413EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002414 if ! compile_prog "" "$xen_libs" ; then
2415 # Xen not found
2416 if test "$xen" = "yes" ; then
2417 feature_not_found "xen" "Install xen devel"
2418 fi
2419 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002420
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002421 # Xen unstable
2422 elif
2423 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002424#undef XC_WANT_COMPAT_DEVICEMODEL_API
2425#define __XEN_TOOLS__
2426#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002427#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002428int main(void) {
2429 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002430 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002431
2432 xd = xendevicemodel_open(0, 0);
2433 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2434
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002435 xfmem = xenforeignmemory_open(0, 0);
2436 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2437
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002438 return 0;
2439}
2440EOF
2441 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2442 then
2443 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2444 xen_ctrl_version=41100
2445 xen=yes
2446 elif
2447 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002448#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2449#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002450#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002451int main(void) {
2452 xenforeignmemory_handle *xfmem;
2453
2454 xfmem = xenforeignmemory_open(0, 0);
2455 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002456 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002457
2458 return 0;
2459}
2460EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002461 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002462 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002463 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002464 xen_ctrl_version=41000
2465 xen=yes
2466 elif
2467 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002468#undef XC_WANT_COMPAT_DEVICEMODEL_API
2469#define __XEN_TOOLS__
2470#include <xendevicemodel.h>
2471int main(void) {
2472 xendevicemodel_handle *xd;
2473
2474 xd = xendevicemodel_open(0, 0);
2475 xendevicemodel_close(xd);
2476
2477 return 0;
2478}
2479EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002480 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2481 then
2482 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2483 xen_ctrl_version=40900
2484 xen=yes
2485 elif
2486 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002487/*
2488 * If we have stable libs the we don't want the libxc compat
2489 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002490 *
2491 * Also, check if xengnttab_grant_copy_segment_t is defined and
2492 * grant copy operation is implemented.
2493 */
2494#undef XC_WANT_COMPAT_EVTCHN_API
2495#undef XC_WANT_COMPAT_GNTTAB_API
2496#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2497#include <xenctrl.h>
2498#include <xenstore.h>
2499#include <xenevtchn.h>
2500#include <xengnttab.h>
2501#include <xenforeignmemory.h>
2502#include <stdint.h>
2503#include <xen/hvm/hvm_info_table.h>
2504#if !defined(HVM_MAX_VCPUS)
2505# error HVM_MAX_VCPUS not defined
2506#endif
2507int main(void) {
2508 xc_interface *xc = NULL;
2509 xenforeignmemory_handle *xfmem;
2510 xenevtchn_handle *xe;
2511 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002512 xengnttab_grant_copy_segment_t* seg = NULL;
2513
2514 xs_daemon_open();
2515
2516 xc = xc_interface_open(0, 0, 0);
2517 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2518 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2519 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2520 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002521
2522 xfmem = xenforeignmemory_open(0, 0);
2523 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2524
2525 xe = xenevtchn_open(0, 0);
2526 xenevtchn_fd(xe);
2527
2528 xg = xengnttab_open(0, 0);
2529 xengnttab_grant_copy(xg, 0, seg);
2530
2531 return 0;
2532}
2533EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002534 compile_prog "" "$xen_libs $xen_stable_libs"
2535 then
2536 xen_ctrl_version=40800
2537 xen=yes
2538 elif
2539 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002540/*
2541 * If we have stable libs the we don't want the libxc compat
2542 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002543 */
2544#undef XC_WANT_COMPAT_EVTCHN_API
2545#undef XC_WANT_COMPAT_GNTTAB_API
2546#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2547#include <xenctrl.h>
2548#include <xenstore.h>
2549#include <xenevtchn.h>
2550#include <xengnttab.h>
2551#include <xenforeignmemory.h>
2552#include <stdint.h>
2553#include <xen/hvm/hvm_info_table.h>
2554#if !defined(HVM_MAX_VCPUS)
2555# error HVM_MAX_VCPUS not defined
2556#endif
2557int main(void) {
2558 xc_interface *xc = NULL;
2559 xenforeignmemory_handle *xfmem;
2560 xenevtchn_handle *xe;
2561 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002562
2563 xs_daemon_open();
2564
2565 xc = xc_interface_open(0, 0, 0);
2566 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2567 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2568 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2569 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002570
2571 xfmem = xenforeignmemory_open(0, 0);
2572 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2573
2574 xe = xenevtchn_open(0, 0);
2575 xenevtchn_fd(xe);
2576
2577 xg = xengnttab_open(0, 0);
2578 xengnttab_map_grant_ref(xg, 0, 0, 0);
2579
2580 return 0;
2581}
2582EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002583 compile_prog "" "$xen_libs $xen_stable_libs"
2584 then
2585 xen_ctrl_version=40701
2586 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002587
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002588 # Xen 4.6
2589 elif
2590 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002591#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002592#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002593#include <stdint.h>
2594#include <xen/hvm/hvm_info_table.h>
2595#if !defined(HVM_MAX_VCPUS)
2596# error HVM_MAX_VCPUS not defined
2597#endif
2598int main(void) {
2599 xc_interface *xc;
2600 xs_daemon_open();
2601 xc = xc_interface_open(0, 0, 0);
2602 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2603 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002604 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002605 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002606 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002607 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002608 return 0;
2609}
2610EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002611 compile_prog "" "$xen_libs"
2612 then
2613 xen_ctrl_version=40600
2614 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002615
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002616 # Xen 4.5
2617 elif
2618 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002619#include <xenctrl.h>
2620#include <xenstore.h>
2621#include <stdint.h>
2622#include <xen/hvm/hvm_info_table.h>
2623#if !defined(HVM_MAX_VCPUS)
2624# error HVM_MAX_VCPUS not defined
2625#endif
2626int main(void) {
2627 xc_interface *xc;
2628 xs_daemon_open();
2629 xc = xc_interface_open(0, 0, 0);
2630 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2631 xc_gnttab_open(NULL, 0);
2632 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2633 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002634 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2635 return 0;
2636}
2637EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002638 compile_prog "" "$xen_libs"
2639 then
2640 xen_ctrl_version=40500
2641 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002642
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002643 elif
2644 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002645#include <xenctrl.h>
2646#include <xenstore.h>
2647#include <stdint.h>
2648#include <xen/hvm/hvm_info_table.h>
2649#if !defined(HVM_MAX_VCPUS)
2650# error HVM_MAX_VCPUS not defined
2651#endif
2652int main(void) {
2653 xc_interface *xc;
2654 xs_daemon_open();
2655 xc = xc_interface_open(0, 0, 0);
2656 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2657 xc_gnttab_open(NULL, 0);
2658 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2659 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002660 return 0;
2661}
2662EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002663 compile_prog "" "$xen_libs"
2664 then
2665 xen_ctrl_version=40200
2666 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002667
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002668 else
2669 if test "$xen" = "yes" ; then
2670 feature_not_found "xen (unsupported version)" \
2671 "Install a supported xen (xen 4.2 or newer)"
2672 fi
2673 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002674 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002675
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002676 if test "$xen" = yes; then
2677 if test $xen_ctrl_version -ge 40701 ; then
2678 libs_softmmu="$xen_stable_libs $libs_softmmu"
2679 fi
2680 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002681 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002682 fi
aliguorie37630c2009-04-22 15:19:10 +00002683fi
2684
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002685if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002686 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002687 xen_pci_passthrough=yes
2688 else
2689 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002690 error_exit "User requested feature Xen PCI Passthrough" \
2691 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002692 fi
2693 xen_pci_passthrough=no
2694 fi
2695fi
2696
aliguorie37630c2009-04-22 15:19:10 +00002697##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002698# Windows Hypervisor Platform accelerator (WHPX) check
2699if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002700 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002701 whpx="yes"
2702 else
2703 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002704 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002705 fi
2706 whpx="no"
2707 fi
2708fi
2709
2710##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002711# Sparse probe
2712if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002713 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002714 sparse=yes
2715 else
2716 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002717 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002718 fi
2719 sparse=no
2720 fi
2721fi
2722
2723##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002724# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002725if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002726 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002727 x11_cflags=$($pkg_config --cflags x11)
2728 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002729fi
2730
2731##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002732# GTK probe
2733
2734if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002735 gtkpackage="gtk+-3.0"
2736 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002737 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002738 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002739 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2740 gtk_libs=$($pkg_config --libs $gtkpackage)
2741 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002742 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002743 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002744 gtk_cflags="$gtk_cflags $x11_cflags"
2745 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002746 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002747 gtk="yes"
2748 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002749 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002750 else
2751 gtk="no"
2752 fi
2753fi
2754
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002755
2756##########################################
2757# GNUTLS probe
2758
2759if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002760 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002761 gnutls_cflags=$($pkg_config --cflags gnutls)
2762 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002763 libs_softmmu="$gnutls_libs $libs_softmmu"
2764 libs_tools="$gnutls_libs $libs_tools"
2765 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2766 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002767 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002768 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002769 else
2770 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002771 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002772fi
2773
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002774
2775# If user didn't give a --disable/enable-gcrypt flag,
2776# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002777# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002778if test -z "$gcrypt"
2779then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002780 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002781 then
2782 gcrypt="no"
2783 fi
2784fi
2785
2786# If user didn't give a --disable/enable-nettle flag,
2787# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002788# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002789if test -z "$nettle"
2790then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002791 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002792 then
2793 nettle="no"
2794 fi
2795fi
2796
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002797has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002798 if ! has "libgcrypt-config"
2799 then
2800 return 1
2801 fi
2802
2803 if test -n "$cross_prefix"
2804 then
Stefan Weil89138852016-05-16 15:10:20 +02002805 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002806 if test "$host-" != $cross_prefix
2807 then
2808 return 1
2809 fi
2810 fi
2811
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002812 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2813 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2814
2815 if test $maj != 1 || test $min -lt 5
2816 then
2817 return 1
2818 fi
2819
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002820 return 0
2821}
2822
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002823
2824if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002825 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002826 nettle_cflags=$($pkg_config --cflags nettle)
2827 nettle_libs=$($pkg_config --libs nettle)
2828 nettle_version=$($pkg_config --modversion nettle)
2829 libs_softmmu="$nettle_libs $libs_softmmu"
2830 libs_tools="$nettle_libs $libs_tools"
2831 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2832 nettle="yes"
2833
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002834 if test -z "$gcrypt"; then
2835 gcrypt="no"
2836 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002837 else
2838 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002839 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002840 else
2841 nettle="no"
2842 fi
2843 fi
2844fi
2845
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002846if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002847 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002848 gcrypt_cflags=$(libgcrypt-config --cflags)
2849 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002850 # Debian has remove -lgpg-error from libgcrypt-config
2851 # as it "spreads unnecessary dependencies" which in
2852 # turn breaks static builds...
2853 if test "$static" = "yes"
2854 then
2855 gcrypt_libs="$gcrypt_libs -lgpg-error"
2856 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002857 libs_softmmu="$gcrypt_libs $libs_softmmu"
2858 libs_tools="$gcrypt_libs $libs_tools"
2859 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002860 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002861
2862 cat > $TMPC << EOF
2863#include <gcrypt.h>
2864int main(void) {
2865 gcry_mac_hd_t handle;
2866 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2867 GCRY_MAC_FLAG_SECURE, NULL);
2868 return 0;
2869}
2870EOF
2871 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2872 gcrypt_hmac=yes
2873 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002874 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002875 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002876 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002877 else
2878 gcrypt="no"
2879 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002880 fi
2881fi
2882
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002883
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002884if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2885then
2886 error_exit "Only one of gcrypt & nettle can be enabled"
2887fi
2888
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002889##########################################
2890# libtasn1 - only for the TLS creds/session test suite
2891
2892tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002893tasn1_cflags=""
2894tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002895if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002896 tasn1_cflags=$($pkg_config --cflags libtasn1)
2897 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002898else
2899 tasn1=no
2900fi
2901
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002902
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002903##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002904# PAM probe
2905
2906if test "$auth_pam" != "no"; then
2907 cat > $TMPC <<EOF
2908#include <security/pam_appl.h>
2909#include <stdio.h>
2910int main(void) {
2911 const char *service_name = "qemu";
2912 const char *user = "frank";
2913 const struct pam_conv *pam_conv = NULL;
2914 pam_handle_t *pamh = NULL;
2915 pam_start(service_name, user, pam_conv, &pamh);
2916 return 0;
2917}
2918EOF
2919 if compile_prog "" "-lpam" ; then
2920 auth_pam=yes
2921 else
2922 if test "$auth_pam" = "yes"; then
2923 feature_not_found "PAM" "Install PAM development package"
2924 else
2925 auth_pam=no
2926 fi
2927 fi
2928fi
2929
2930##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002931# getifaddrs (for tests/test-io-channel-socket )
2932
2933have_ifaddrs_h=yes
2934if ! check_include "ifaddrs.h" ; then
2935 have_ifaddrs_h=no
2936fi
2937
2938##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002939# VTE probe
2940
2941if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002942 vteminversion="0.32.0"
2943 if $pkg_config --exists "vte-2.91"; then
2944 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002945 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002946 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002947 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002948 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002949 vte_cflags=$($pkg_config --cflags $vtepackage)
2950 vte_libs=$($pkg_config --libs $vtepackage)
2951 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002952 vte="yes"
2953 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002954 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002955 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002956 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002957 fi
2958fi
2959
2960##########################################
bellard11d9f692004-04-02 20:55:59 +00002961# SDL probe
2962
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002963# Look for sdl configuration program (pkg-config or sdl-config). Try
2964# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002965
Peter Xuc6093a02018-04-10 13:40:34 +08002966sdl_probe ()
2967{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002968 if $pkg_config sdl2 --exists; then
2969 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08002970 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2971 elif has ${sdl_config}; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002972 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08002973 sdlversion=$($sdlconfig --version)
2974 else
2975 if test "$sdl" = "yes" ; then
2976 feature_not_found "sdl" "Install SDL2-devel"
2977 fi
2978 sdl=no
2979 # no need to do the rest
2980 return
2981 fi
2982 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2983 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2984 fi
2985
Juan Quintelaac119f92009-07-27 16:13:15 +02002986 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002987#include <SDL.h>
2988#undef main /* We don't want SDL to override our main() */
2989int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2990EOF
Stefan Weil89138852016-05-16 15:10:20 +02002991 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002992 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002993 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002994 if $pkg_config sdl2 --exists; then
2995 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002996 else
2997 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2998 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002999 else
Stefan Weil89138852016-05-16 15:10:20 +02003000 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003001 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003002 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003003 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003004
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003005 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003006 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003007 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003008 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3009 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003010 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003011 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003012 :
3013 else
3014 sdl=no
3015 fi
3016 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003017 else # sdl not found
3018 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003019 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003020 fi
3021 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003022 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003023}
3024
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003025sdl_image_probe ()
3026{
3027 if test "$sdl_image" != "no" ; then
3028 if $pkg_config SDL2_image --exists; then
3029 if test "$static" = "yes"; then
3030 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3031 else
3032 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3033 fi
3034 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3035 sdl_image=yes
3036
3037 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3038 sdl_libs="$sdl_libs $sdl_image_libs"
3039 else
3040 if test "$sdl_image" = "yes" ; then
3041 feature_not_found "sdl_image" "Install SDL Image devel"
3042 else
3043 sdl_image=no
3044 fi
3045 fi
3046 fi
3047}
3048
Peter Xuc6093a02018-04-10 13:40:34 +08003049if test "$sdl" != "no" ; then
3050 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003051fi
bellard11d9f692004-04-02 20:55:59 +00003052
aliguori5368a422009-03-03 17:37:21 +00003053if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003054 sdl_image_probe
3055else
3056 if test "$sdl_image" = "yes"; then
3057 echo "warning: SDL Image requested, but SDL is not available, disabling"
3058 fi
3059 sdl_image=no
3060fi
3061
3062if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003063 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003064#include <SDL.h>
3065#if defined(SDL_VIDEO_DRIVER_X11)
3066#include <X11/XKBlib.h>
3067#else
3068#error No x11 support
3069#endif
3070int main(void) { return 0; }
3071EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003072 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003073 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003074 sdl_cflags="$sdl_cflags $x11_cflags"
3075 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003076 fi
aliguori5368a422009-03-03 17:37:21 +00003077fi
3078
ths8f28f3f2007-01-05 21:25:54 +00003079##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003080# RDMA needs OpenFabrics libraries
3081if test "$rdma" != "no" ; then
3082 cat > $TMPC <<EOF
3083#include <rdma/rdma_cma.h>
3084int main(void) { return 0; }
3085EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003086 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003087 if compile_prog "" "$rdma_libs" ; then
3088 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003089 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003090 else
3091 if test "$rdma" = "yes" ; then
3092 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003093 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003094 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003095 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003096 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3097 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3098 fi
3099 rdma="no"
3100 fi
3101fi
3102
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003103##########################################
3104# PVRDMA detection
3105
3106cat > $TMPC <<EOF &&
3107#include <sys/mman.h>
3108
3109int
3110main(void)
3111{
3112 char buf = 0;
3113 void *addr = &buf;
3114 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3115
3116 return 0;
3117}
3118EOF
3119
3120if test "$rdma" = "yes" ; then
3121 case "$pvrdma" in
3122 "")
3123 if compile_prog "" ""; then
3124 pvrdma="yes"
3125 else
3126 pvrdma="no"
3127 fi
3128 ;;
3129 "yes")
3130 if ! compile_prog "" ""; then
3131 error_exit "PVRDMA is not supported since mremap is not implemented"
3132 fi
3133 pvrdma="yes"
3134 ;;
3135 "no")
3136 pvrdma="no"
3137 ;;
3138 esac
3139else
3140 if test "$pvrdma" = "yes" ; then
3141 error_exit "PVRDMA requires rdma suppport"
3142 fi
3143 pvrdma="no"
3144fi
ths8d5d2d42007-08-25 01:37:51 +00003145
3146##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003147# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003148if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003149 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003150#include <sasl/sasl.h>
3151#include <stdio.h>
3152int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3153EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003154 # Assuming Cyrus-SASL installed in /usr prefix
3155 vnc_sasl_cflags=""
3156 vnc_sasl_libs="-lsasl2"
3157 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3158 vnc_sasl=yes
3159 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003160 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003161 else
3162 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003163 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003164 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003165 vnc_sasl=no
3166 fi
aliguori2f9606b2009-03-06 20:27:28 +00003167fi
3168
3169##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003170# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003171if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003172cat > $TMPC <<EOF
3173#include <stdio.h>
3174#include <jpeglib.h>
3175int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3176EOF
3177 vnc_jpeg_cflags=""
3178 vnc_jpeg_libs="-ljpeg"
3179 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3180 vnc_jpeg=yes
3181 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003182 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003183 else
3184 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003185 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003186 fi
3187 vnc_jpeg=no
3188 fi
3189fi
3190
3191##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003192# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003193if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003194cat > $TMPC <<EOF
3195//#include <stdio.h>
3196#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003197#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003198int main(void) {
3199 png_structp png_ptr;
3200 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003201 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003202}
3203EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003204 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003205 vnc_png_cflags=$($pkg_config libpng --cflags)
3206 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003207 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003208 vnc_png_cflags=""
3209 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003210 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003211 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3212 vnc_png=yes
3213 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003214 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003215 else
3216 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003217 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003218 fi
3219 vnc_png=no
3220 fi
3221fi
3222
3223##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003224# xkbcommon probe
3225if test "$xkbcommon" != "no" ; then
3226 if $pkg_config xkbcommon --exists; then
3227 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3228 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3229 xkbcommon=yes
3230 else
3231 if test "$xkbcommon" = "yes" ; then
3232 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3233 fi
3234 xkbcommon=no
3235 fi
3236fi
3237
aliguori76655d62009-03-06 20:27:37 +00003238
3239##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003240# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003241if test "$xfs" != "no" ; then
3242 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003243#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003244#include <xfs/xfs.h>
3245int main(void)
3246{
3247 xfsctl(NULL, 0, 0, NULL);
3248 return 0;
3249}
3250EOF
3251 if compile_prog "" "" ; then
3252 xfs="yes"
3253 else
3254 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003255 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003256 fi
3257 xfs=no
3258 fi
3259fi
3260
3261##########################################
ths8a16d272008-07-19 09:56:24 +00003262# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003263if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003264 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003265 cat > $TMPC << EOF
3266#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003267int main(void)
3268{
3269 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003270 char s[] = "";
3271 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003272 return 0;
3273}
ths8a16d272008-07-19 09:56:24 +00003274EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003275 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003276 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003277 else
3278 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003279 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003280 fi
3281 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003282 fi
ths8a16d272008-07-19 09:56:24 +00003283fi
3284
3285##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003286# netmap support probe
3287# Apart from looking for netmap headers, we make sure that the host API version
3288# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3289# a minor/major version number. Minor new features will be marked with values up
3290# to 15, and if something happens that requires a change to the backend we will
3291# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003292if test "$netmap" != "no" ; then
3293 cat > $TMPC << EOF
3294#include <inttypes.h>
3295#include <net/if.h>
3296#include <net/netmap.h>
3297#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003298#if (NETMAP_API < 11) || (NETMAP_API > 15)
3299#error
3300#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003301int main(void) { return 0; }
3302EOF
3303 if compile_prog "" "" ; then
3304 netmap=yes
3305 else
3306 if test "$netmap" = "yes" ; then
3307 feature_not_found "netmap"
3308 fi
3309 netmap=no
3310 fi
3311fi
3312
3313##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003314# libcap-ng library probe
3315if test "$cap_ng" != "no" ; then
3316 cap_libs="-lcap-ng"
3317 cat > $TMPC << EOF
3318#include <cap-ng.h>
3319int main(void)
3320{
3321 capng_capability_to_name(CAPNG_EFFECTIVE);
3322 return 0;
3323}
3324EOF
3325 if compile_prog "" "$cap_libs" ; then
3326 cap_ng=yes
3327 libs_tools="$cap_libs $libs_tools"
3328 else
3329 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003330 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003331 fi
3332 cap_ng=no
3333 fi
3334fi
3335
3336##########################################
malcc2de5c92008-06-28 19:13:06 +00003337# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003338
Stefan Weil89138852016-05-16 15:10:20 +02003339audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003340for drv in $audio_drv_list; do
3341 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003342 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003343 if $pkg_config alsa --exists; then
3344 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003345 if test "$drv" = "try-alsa"; then
3346 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3347 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003348 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003349 if test "$drv" = "try-alsa"; then
3350 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3351 else
3352 error_exit "$drv check failed" \
3353 "Make sure to have the $drv libs and headers installed."
3354 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003355 fi
malcc2de5c92008-06-28 19:13:06 +00003356 ;;
3357
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003358 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003359 if $pkg_config libpulse --exists; then
3360 pulse_libs=$($pkg_config libpulse --libs)
3361 audio_pt_int="yes"
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003362 if test "$drv" = "try-pa"; then
3363 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3364 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003365 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003366 if test "$drv" = "try-pa"; then
3367 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3368 else
3369 error_exit "$drv check failed" \
3370 "Make sure to have the $drv libs and headers installed."
3371 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003372 fi
malcb8e59f12008-07-02 21:03:08 +00003373 ;;
3374
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003375 sdl)
3376 if test "$sdl" = "no"; then
3377 error_exit "sdl not found or disabled, can not use sdl audio driver"
3378 fi
3379 ;;
3380
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003381 try-sdl)
3382 if test "$sdl" = "no"; then
3383 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3384 else
3385 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3386 fi
3387 ;;
3388
Juan Quintela997e6902009-08-03 14:46:29 +02003389 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003390 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003391 ;;
3392
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003393 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003394 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003395 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003396 ;;
3397
3398 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003399 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003400 ;;
3401
malce4c63a62008-07-19 16:15:16 +00003402 *)
malc1c9b2a52008-07-19 16:57:30 +00003403 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003404 error_exit "Unknown driver '$drv' selected" \
3405 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003406 }
3407 ;;
malcc2de5c92008-06-28 19:13:06 +00003408 esac
3409done
ths8f28f3f2007-01-05 21:25:54 +00003410
balrog4d3b6f62008-02-10 16:33:14 +00003411##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003412# BrlAPI probe
3413
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003414if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003415 brlapi_libs="-lbrlapi"
3416 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003417#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003418#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003419int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3420EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003421 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003422 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003423 else
3424 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003425 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003426 fi
3427 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003428 fi
3429fi
aurel322e4d9fb2008-04-08 06:01:02 +00003430
3431##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003432# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003433if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003434 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003435 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3436 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003437 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003438 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003439 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003440 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003441 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003442 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003443#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003444#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003445#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003446int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003447 wchar_t wch = L'w';
3448 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003449 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003450 addwstr(L"wide chars\n");
3451 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003452 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003453 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003454}
balrog4d3b6f62008-02-10 16:33:14 +00003455EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003456 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003457 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003458 # Make sure we get the wide character prototypes
3459 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003460 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003461 for curses_lib in $curses_lib_list; do
3462 unset IFS
3463 if compile_prog "$curses_inc" "$curses_lib" ; then
3464 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003465 break
3466 fi
3467 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003468 if test "$curses_found" = yes ; then
3469 break
3470 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003471 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003472 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003473 if test "$curses_found" = "yes" ; then
3474 curses=yes
3475 else
3476 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003477 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003478 fi
3479 curses=no
3480 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003481fi
balrog4d3b6f62008-02-10 16:33:14 +00003482
blueswir1414f0da2008-08-15 18:20:52 +00003483##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003484# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003485if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003486 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003487 curlconfig="$pkg_config libcurl"
3488 else
3489 curlconfig=curl-config
3490 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003491 cat > $TMPC << EOF
3492#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003493int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003494EOF
Stefan Weil89138852016-05-16 15:10:20 +02003495 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3496 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003497 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003498 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003499 else
3500 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003501 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003502 fi
3503 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003504 fi
3505fi # test "$curl"
3506
3507##########################################
balrogfb599c92008-09-28 23:49:55 +00003508# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003509if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003510 cat > $TMPC << EOF
3511#include <bluetooth/bluetooth.h>
3512int main(void) { return bt_error(0); }
3513EOF
Stefan Weil89138852016-05-16 15:10:20 +02003514 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3515 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003516 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003517 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003518 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003519 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003520 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003521 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003522 fi
balroge820e3f2008-09-30 02:27:44 +00003523 bluez="no"
3524 fi
balrogfb599c92008-09-28 23:49:55 +00003525fi
3526
3527##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003528# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003529
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003530glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003531glib_modules=gthread-2.0
3532if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003533 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003534fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003535
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003536# This workaround is required due to a bug in pkg-config file for glib as it
3537# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3538
Eric Blakee633a5c2019-02-04 20:39:37 -06003539if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003540 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3541fi
3542
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003543for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003544 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003545 glib_cflags=$($pkg_config --cflags $i)
3546 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003547 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003548 LIBS="$glib_libs $LIBS"
3549 libs_qga="$glib_libs $libs_qga"
3550 else
3551 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3552 fi
3553done
3554
Marc-André Lureauf876b762019-02-21 12:07:00 +01003555if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3556 gio=yes
3557 gio_cflags=$($pkg_config --cflags gio-2.0)
3558 gio_libs=$($pkg_config --libs gio-2.0)
3559else
3560 gio=no
3561fi
3562
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003563# Sanity check that the current size_t matches the
3564# size that glib thinks it should be. This catches
3565# problems on multi-arch where people try to build
3566# 32-bit QEMU while pointing at 64-bit glib headers
3567cat > $TMPC <<EOF
3568#include <glib.h>
3569#include <unistd.h>
3570
3571#define QEMU_BUILD_BUG_ON(x) \
3572 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3573
3574int main(void) {
3575 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3576 return 0;
3577}
3578EOF
3579
Stefan Weil5919e032016-04-28 23:33:41 +02003580if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003581 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3582 "You probably need to set PKG_CONFIG_LIBDIR"\
3583 "to point to the right pkg-config files for your"\
3584 "build target"
3585fi
3586
John Snowbbbf2e02015-03-25 18:57:38 -04003587# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3588cat > $TMPC << EOF
3589#include <glib.h>
3590int main(void) { return 0; }
3591EOF
3592if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3593 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3594 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3595 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3596 fi
3597fi
3598
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003599#########################################
3600# zlib check
3601
3602if test "$zlib" != "no" ; then
3603 if $pkg_config --exists zlib; then
3604 zlib_cflags=$($pkg_config --cflags zlib)
3605 zlib_libs=$($pkg_config --libs zlib)
3606 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3607 LIBS="$zlib_libs $LIBS"
3608 else
3609 cat > $TMPC << EOF
3610#include <zlib.h>
3611int main(void) { zlibVersion(); return 0; }
3612EOF
3613 if compile_prog "" "-lz" ; then
3614 LIBS="$LIBS -lz"
3615 else
3616 error_exit "zlib check failed" \
3617 "Make sure to have the zlib libs and headers installed."
3618 fi
3619 fi
3620fi
3621
Fam Zhenge26110c2014-02-10 14:48:57 +08003622##########################################
3623# SHA command probe for modules
3624if test "$modules" = yes; then
3625 shacmd_probe="sha1sum sha1 shasum"
3626 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003627 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003628 shacmd="$c"
3629 break
3630 fi
3631 done
3632 if test "$shacmd" = ""; then
3633 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3634 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003635fi
3636
3637##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003638# pixman support probe
3639
Eric Blakee633a5c2019-02-04 20:39:37 -06003640if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003641 pixman_cflags=
3642 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003643elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003644 pixman_cflags=$($pkg_config --cflags pixman-1)
3645 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003646else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003647 error_exit "pixman >= 0.21.8 not present." \
3648 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003649fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003650
3651##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003652# libmpathpersist probe
3653
3654if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003655 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003656 cat > $TMPC <<EOF
3657#include <libudev.h>
3658#include <mpath_persist.h>
3659unsigned mpath_mx_alloc_len = 1024;
3660int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003661static struct config *multipath_conf;
3662extern struct udev *udev;
3663extern struct config *get_multipath_config(void);
3664extern void put_multipath_config(struct config *conf);
3665struct udev *udev;
3666struct config *get_multipath_config(void) { return multipath_conf; }
3667void put_multipath_config(struct config *conf) { }
3668
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003669int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003670 udev = udev_new();
3671 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003672 return 0;
3673}
3674EOF
3675 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3676 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003677 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003678 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003679 # probe for the old API
3680 cat > $TMPC <<EOF
3681#include <libudev.h>
3682#include <mpath_persist.h>
3683unsigned mpath_mx_alloc_len = 1024;
3684int logsink;
3685int main(void) {
3686 struct udev *udev = udev_new();
3687 mpath_lib_init(udev);
3688 return 0;
3689}
3690EOF
3691 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3692 mpathpersist=yes
3693 mpathpersist_new_api=no
3694 else
3695 mpathpersist=no
3696 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003697 fi
3698else
3699 mpathpersist=no
3700fi
3701
3702##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303703# libcap probe
3704
3705if test "$cap" != "no" ; then
3706 cat > $TMPC <<EOF
3707#include <stdio.h>
3708#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003709int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303710EOF
3711 if compile_prog "" "-lcap" ; then
3712 cap=yes
3713 else
3714 cap=no
3715 fi
3716fi
3717
3718##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003719# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003720PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003721
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003722pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003723cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003724#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003725static void *f(void *p) { return NULL; }
3726int main(void) {
3727 pthread_t thread;
3728 pthread_create(&thread, 0, f, 0);
3729 return 0;
3730}
blueswir1414f0da2008-08-15 18:20:52 +00003731EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003732if compile_prog "" "" ; then
3733 pthread=yes
3734else
3735 for pthread_lib in $PTHREADLIBS_LIST; do
3736 if compile_prog "" "$pthread_lib" ; then
3737 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003738 found=no
3739 for lib_entry in $LIBS; do
3740 if test "$lib_entry" = "$pthread_lib"; then
3741 found=yes
3742 break
3743 fi
3744 done
3745 if test "$found" = "no"; then
3746 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003747 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003748 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003749 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003750 break
3751 fi
3752 done
3753fi
blueswir1414f0da2008-08-15 18:20:52 +00003754
Eric Blakee633a5c2019-02-04 20:39:37 -06003755if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003756 error_exit "pthread check failed" \
3757 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003758fi
3759
Roman Bolshakov479a5742018-12-17 23:26:01 +03003760# check for pthread_setname_np with thread id
3761pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003762cat > $TMPC << EOF
3763#include <pthread.h>
3764
3765static void *f(void *p) { return NULL; }
3766int main(void)
3767{
3768 pthread_t thread;
3769 pthread_create(&thread, 0, f, 0);
3770 pthread_setname_np(thread, "QEMU");
3771 return 0;
3772}
3773EOF
3774if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003775 pthread_setname_np_w_tid=yes
3776fi
3777
3778# check for pthread_setname_np without thread id
3779pthread_setname_np_wo_tid=no
3780cat > $TMPC << EOF
3781#include <pthread.h>
3782
3783static void *f(void *p) { pthread_setname_np("QEMU"); }
3784int main(void)
3785{
3786 pthread_t thread;
3787 pthread_create(&thread, 0, f, 0);
3788 return 0;
3789}
3790EOF
3791if compile_prog "" "$pthread_lib" ; then
3792 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003793fi
3794
aliguoribf9298b2008-12-05 20:05:26 +00003795##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003796# rbd probe
3797if test "$rbd" != "no" ; then
3798 cat > $TMPC <<EOF
3799#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003800#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003801int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003802 rados_t cluster;
3803 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003804 return 0;
3805}
3806EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003807 rbd_libs="-lrbd -lrados"
3808 if compile_prog "" "$rbd_libs" ; then
3809 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003810 else
3811 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003812 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003813 fi
3814 rbd=no
3815 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003816fi
3817
3818##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003819# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003820min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003821if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003822 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003823 libssh2_cflags=$($pkg_config libssh2 --cflags)
3824 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003825 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003826 else
3827 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003828 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003829 fi
3830 libssh2=no
3831 fi
3832fi
3833
3834##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003835# libssh2_sftp_fsync probe
3836
3837if test "$libssh2" = "yes"; then
3838 cat > $TMPC <<EOF
3839#include <stdio.h>
3840#include <libssh2.h>
3841#include <libssh2_sftp.h>
3842int main(void) {
3843 LIBSSH2_SESSION *session;
3844 LIBSSH2_SFTP *sftp;
3845 LIBSSH2_SFTP_HANDLE *sftp_handle;
3846 session = libssh2_session_init ();
3847 sftp = libssh2_sftp_init (session);
3848 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3849 libssh2_sftp_fsync (sftp_handle);
3850 return 0;
3851}
3852EOF
3853 # libssh2_cflags/libssh2_libs defined in previous test.
3854 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3855 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3856 fi
3857fi
3858
3859##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003860# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003861
3862if test "$linux_aio" != "no" ; then
3863 cat > $TMPC <<EOF
3864#include <libaio.h>
3865#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003866#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003867int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3868EOF
3869 if compile_prog "" "-laio" ; then
3870 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003871 else
3872 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003873 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003874 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003875 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003876 fi
3877fi
3878
3879##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08003880# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003881
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08003882if test "$tpm" = ""; then
3883 if test "$mingw32" = "yes"; then
3884 tpm=no
3885 else
3886 tpm=yes
3887 fi
3888elif test "$tpm" = "yes"; then
3889 if test "$mingw32" = "yes" ; then
3890 error_exit "TPM emulation only available on POSIX systems"
3891 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003892fi
3893
3894##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003895# attr probe
3896
3897if test "$attr" != "no" ; then
3898 cat > $TMPC <<EOF
3899#include <stdio.h>
3900#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003901#ifdef CONFIG_LIBATTR
3902#include <attr/xattr.h>
3903#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003904#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003905#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003906int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3907EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003908 if compile_prog "" "" ; then
3909 attr=yes
3910 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003911 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003912 attr=yes
3913 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003914 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003915 else
3916 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003917 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003918 fi
3919 attr=no
3920 fi
3921fi
3922
3923##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003924# iovec probe
3925cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003926#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003927#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003928#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003929int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003930EOF
3931iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003932if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003933 iovec=yes
3934fi
3935
aurel32f652e6a2008-12-16 10:43:48 +00003936##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003937# preadv probe
3938cat > $TMPC <<EOF
3939#include <sys/types.h>
3940#include <sys/uio.h>
3941#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003942int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003943EOF
3944preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003945if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003946 preadv=yes
3947fi
3948
3949##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003950# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003951# fdt support is mandatory for at least some target architectures,
3952# so insist on it if we're building those system emulators.
3953fdt_required=no
3954for target in $target_list; do
3955 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003956 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003957 fdt_required=yes
3958 ;;
3959 esac
3960done
3961
3962if test "$fdt_required" = "yes"; then
3963 if test "$fdt" = "no"; then
3964 error_exit "fdt disabled but some requested targets require it." \
3965 "You can turn off fdt only if you also disable all the system emulation" \
3966 "targets which need it (by specifying a cut down --target-list)."
3967 fi
3968 fdt=yes
3969fi
3970
Juan Quintela2df87df2009-08-12 18:29:54 +02003971if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003972 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003973 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003974 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003975 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003976#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003977#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01003978int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003979EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003980 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003981 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003982 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003983 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003984 # have GIT checkout, so activate dtc submodule
3985 if test -e "${source_path}/.git" ; then
3986 git_submodules="${git_submodules} dtc"
3987 fi
3988 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003989 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003990 mkdir -p dtc
3991 if [ "$pwd_is_source_path" != "y" ] ; then
3992 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3993 symlink "$source_path/dtc/scripts" "dtc/scripts"
3994 fi
3995 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003996 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3997 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003998 elif test "$fdt" = "yes" ; then
3999 # Not a git build & no libfdt found, prompt for system install
4000 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4001 "Please install the DTC (libfdt) devel package"
4002 else
4003 # don't have and don't want
4004 fdt_libs=
4005 fdt=no
4006 fi
aurel32f652e6a2008-12-16 10:43:48 +00004007 fi
4008fi
4009
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004010libs_softmmu="$libs_softmmu $fdt_libs"
4011
Michael Walle20ff0752011-03-07 23:32:39 +01004012##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004013# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004014
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004015if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004016 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004017 if $pkg_config $opengl_pkgs; then
4018 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4019 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004020 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004021 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4022 gtk_gl="yes"
4023 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004024 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004025 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004026 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004027 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004028 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004029 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004030 opengl_libs=""
4031 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004032 fi
4033fi
4034
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004035if test "$opengl" = "yes"; then
4036 cat > $TMPC << EOF
4037#include <epoxy/egl.h>
4038#ifndef EGL_MESA_image_dma_buf_export
4039# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4040#endif
4041int main(void) { return 0; }
4042EOF
4043 if compile_prog "" "" ; then
4044 opengl_dmabuf=yes
4045 fi
4046fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004047
Eric Blakee633a5c2019-02-04 20:39:37 -06004048if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004049 for target in $target_list; do
4050 case $target in
4051 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4052 need_x11=yes
4053 ;;
4054 esac
4055 done
4056fi
4057
Klim Kireeved279a02018-01-12 12:01:19 +03004058##########################################
4059# libxml2 probe
4060if test "$libxml2" != "no" ; then
4061 if $pkg_config --exists libxml-2.0; then
4062 libxml2="yes"
4063 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4064 libxml2_libs=$($pkg_config --libs libxml-2.0)
4065 else
4066 if test "$libxml2" = "yes"; then
4067 feature_not_found "libxml2" "Install libxml2 devel"
4068 fi
4069 libxml2="no"
4070 fi
4071fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004072
Bharata B Raoeb100392012-09-24 14:42:45 +05304073##########################################
4074# glusterfs probe
4075if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004076 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304077 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004078 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4079 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004080 if $pkg_config --atleast-version=4 glusterfs-api; then
4081 glusterfs_xlator_opt="yes"
4082 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004083 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304084 glusterfs_discard="yes"
4085 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304086 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304087 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304088 glusterfs_zerofill="yes"
4089 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304090 else
4091 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004092 feature_not_found "GlusterFS backend support" \
4093 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304094 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304095 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304096 fi
4097fi
4098
aurel3239386ac2009-04-15 19:48:17 +00004099# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004100# emulator. This is done because older glibc versions don't
4101# have syscall stubs for these implemented. In that case we
4102# don't provide them even if kernel supports them.
4103#
4104inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004105cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004106#include <sys/inotify.h>
4107
4108int
4109main(void)
4110{
4111 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004112 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004113}
4114EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004115if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004116 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004117fi
4118
Riku Voipioc05c7a72010-03-26 15:25:11 +00004119inotify1=no
4120cat > $TMPC << EOF
4121#include <sys/inotify.h>
4122
4123int
4124main(void)
4125{
4126 /* try to start inotify */
4127 return inotify_init1(0);
4128}
4129EOF
4130if compile_prog "" "" ; then
4131 inotify1=yes
4132fi
4133
Riku Voipio099d6b02009-05-05 12:10:04 +03004134# check if pipe2 is there
4135pipe2=no
4136cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004137#include <unistd.h>
4138#include <fcntl.h>
4139
4140int main(void)
4141{
4142 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004143 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004144}
4145EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004146if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004147 pipe2=yes
4148fi
4149
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004150# check if accept4 is there
4151accept4=no
4152cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004153#include <sys/socket.h>
4154#include <stddef.h>
4155
4156int main(void)
4157{
4158 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4159 return 0;
4160}
4161EOF
4162if compile_prog "" "" ; then
4163 accept4=yes
4164fi
4165
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304166# check if tee/splice is there. vmsplice was added same time.
4167splice=no
4168cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304169#include <unistd.h>
4170#include <fcntl.h>
4171#include <limits.h>
4172
4173int main(void)
4174{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004175 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304176 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4177 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4178 return 0;
4179}
4180EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004181if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304182 splice=yes
4183fi
4184
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004185##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004186# libnuma probe
4187
4188if test "$numa" != "no" ; then
4189 cat > $TMPC << EOF
4190#include <numa.h>
4191int main(void) { return numa_available(); }
4192EOF
4193
4194 if compile_prog "" "-lnuma" ; then
4195 numa=yes
4196 libs_softmmu="-lnuma $libs_softmmu"
4197 else
4198 if test "$numa" = "yes" ; then
4199 feature_not_found "numa" "install numactl devel"
4200 fi
4201 numa=no
4202 fi
4203fi
4204
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004205if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4206 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4207 exit 1
4208fi
4209
Yang Zhong5a22ab72017-12-20 21:16:46 +08004210# Even if malloc_trim() is available, these non-libc memory allocators
4211# do not support it.
4212if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4213 if test "$malloc_trim" = "yes" ; then
4214 echo "Disabling malloc_trim with non-libc memory allocator"
4215 fi
4216 malloc_trim="no"
4217fi
4218
4219#######################################
4220# malloc_trim
4221
4222if test "$malloc_trim" != "no" ; then
4223 cat > $TMPC << EOF
4224#include <malloc.h>
4225int main(void) { malloc_trim(0); return 0; }
4226EOF
4227 if compile_prog "" "" ; then
4228 malloc_trim="yes"
4229 else
4230 malloc_trim="no"
4231 fi
4232fi
4233
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004234##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004235# tcmalloc probe
4236
4237if test "$tcmalloc" = "yes" ; then
4238 cat > $TMPC << EOF
4239#include <stdlib.h>
4240int main(void) { malloc(1); return 0; }
4241EOF
4242
4243 if compile_prog "" "-ltcmalloc" ; then
4244 LIBS="-ltcmalloc $LIBS"
4245 else
4246 feature_not_found "tcmalloc" "install gperftools devel"
4247 fi
4248fi
4249
4250##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004251# jemalloc probe
4252
4253if test "$jemalloc" = "yes" ; then
4254 cat > $TMPC << EOF
4255#include <stdlib.h>
4256int main(void) { malloc(1); return 0; }
4257EOF
4258
4259 if compile_prog "" "-ljemalloc" ; then
4260 LIBS="-ljemalloc $LIBS"
4261 else
4262 feature_not_found "jemalloc" "install jemalloc devel"
4263 fi
4264fi
4265
4266##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004267# signalfd probe
4268signalfd="no"
4269cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004270#include <unistd.h>
4271#include <sys/syscall.h>
4272#include <signal.h>
4273int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4274EOF
4275
4276if compile_prog "" "" ; then
4277 signalfd=yes
4278fi
4279
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004280# check if optreset global is declared by <getopt.h>
4281optreset="no"
4282cat > $TMPC << EOF
4283#include <getopt.h>
4284int main(void) { return optreset; }
4285EOF
4286
4287if compile_prog "" "" ; then
4288 optreset=yes
4289fi
4290
Riku Voipioc2882b92009-08-12 15:08:24 +03004291# check if eventfd is supported
4292eventfd=no
4293cat > $TMPC << EOF
4294#include <sys/eventfd.h>
4295
4296int main(void)
4297{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004298 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004299}
4300EOF
4301if compile_prog "" "" ; then
4302 eventfd=yes
4303fi
4304
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004305# check if memfd is supported
4306memfd=no
4307cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004308#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004309
4310int main(void)
4311{
4312 return memfd_create("foo", MFD_ALLOW_SEALING);
4313}
4314EOF
4315if compile_prog "" "" ; then
4316 memfd=yes
4317fi
4318
Cortland Tölva955727d2018-10-08 09:35:19 -07004319# check for usbfs
4320have_usbfs=no
4321if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004322 cat > $TMPC << EOF
4323#include <linux/usbdevice_fs.h>
4324
4325#ifndef USBDEVFS_GET_CAPABILITIES
4326#error "USBDEVFS_GET_CAPABILITIES undefined"
4327#endif
4328
4329#ifndef USBDEVFS_DISCONNECT_CLAIM
4330#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4331#endif
4332
4333int main(void)
4334{
4335 return 0;
4336}
4337EOF
4338 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004339 have_usbfs=yes
4340 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004341fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004342
Ulrich Hechtd0927932009-09-17 20:22:14 +03004343# check for fallocate
4344fallocate=no
4345cat > $TMPC << EOF
4346#include <fcntl.h>
4347
4348int main(void)
4349{
4350 fallocate(0, 0, 0, 0);
4351 return 0;
4352}
4353EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004354if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004355 fallocate=yes
4356fi
4357
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004358# check for fallocate hole punching
4359fallocate_punch_hole=no
4360cat > $TMPC << EOF
4361#include <fcntl.h>
4362#include <linux/falloc.h>
4363
4364int main(void)
4365{
4366 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4367 return 0;
4368}
4369EOF
4370if compile_prog "" "" ; then
4371 fallocate_punch_hole=yes
4372fi
4373
Denis V. Lunevb953f072015-01-30 11:42:14 +03004374# check that fallocate supports range zeroing inside the file
4375fallocate_zero_range=no
4376cat > $TMPC << EOF
4377#include <fcntl.h>
4378#include <linux/falloc.h>
4379
4380int main(void)
4381{
4382 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4383 return 0;
4384}
4385EOF
4386if compile_prog "" "" ; then
4387 fallocate_zero_range=yes
4388fi
4389
Kevin Wolfed911432014-09-29 17:12:59 +02004390# check for posix_fallocate
4391posix_fallocate=no
4392cat > $TMPC << EOF
4393#include <fcntl.h>
4394
4395int main(void)
4396{
4397 posix_fallocate(0, 0, 0);
4398 return 0;
4399}
4400EOF
4401if compile_prog "" "" ; then
4402 posix_fallocate=yes
4403fi
4404
Peter Maydellc727f472011-01-06 11:05:10 +00004405# check for sync_file_range
4406sync_file_range=no
4407cat > $TMPC << EOF
4408#include <fcntl.h>
4409
4410int main(void)
4411{
4412 sync_file_range(0, 0, 0, 0);
4413 return 0;
4414}
4415EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004416if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004417 sync_file_range=yes
4418fi
4419
Peter Maydelldace20d2011-01-10 13:11:24 +00004420# check for linux/fiemap.h and FS_IOC_FIEMAP
4421fiemap=no
4422cat > $TMPC << EOF
4423#include <sys/ioctl.h>
4424#include <linux/fs.h>
4425#include <linux/fiemap.h>
4426
4427int main(void)
4428{
4429 ioctl(0, FS_IOC_FIEMAP, 0);
4430 return 0;
4431}
4432EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004433if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004434 fiemap=yes
4435fi
4436
Ulrich Hechtd0927932009-09-17 20:22:14 +03004437# check for dup3
4438dup3=no
4439cat > $TMPC << EOF
4440#include <unistd.h>
4441
4442int main(void)
4443{
4444 dup3(0, 0, 0);
4445 return 0;
4446}
4447EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004448if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004449 dup3=yes
4450fi
4451
Alex Bligh4e0c6522013-08-21 16:02:43 +01004452# check for ppoll support
4453ppoll=no
4454cat > $TMPC << EOF
4455#include <poll.h>
4456
4457int main(void)
4458{
4459 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4460 ppoll(&pfd, 1, 0, 0);
4461 return 0;
4462}
4463EOF
4464if compile_prog "" "" ; then
4465 ppoll=yes
4466fi
4467
Alex Blighcd758dd2013-08-21 16:02:44 +01004468# check for prctl(PR_SET_TIMERSLACK , ... ) support
4469prctl_pr_set_timerslack=no
4470cat > $TMPC << EOF
4471#include <sys/prctl.h>
4472
4473int main(void)
4474{
4475 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4476 return 0;
4477}
4478EOF
4479if compile_prog "" "" ; then
4480 prctl_pr_set_timerslack=yes
4481fi
4482
Peter Maydell3b6edd12011-02-15 18:35:05 +00004483# check for epoll support
4484epoll=no
4485cat > $TMPC << EOF
4486#include <sys/epoll.h>
4487
4488int main(void)
4489{
4490 epoll_create(0);
4491 return 0;
4492}
4493EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004494if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004495 epoll=yes
4496fi
4497
Peter Maydell227f0212016-06-06 19:58:11 +01004498# epoll_create1 is a later addition
4499# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004500epoll_create1=no
4501cat > $TMPC << EOF
4502#include <sys/epoll.h>
4503
4504int main(void)
4505{
Peter Maydell19e83f62011-04-26 16:56:40 +01004506 /* Note that we use epoll_create1 as a value, not as
4507 * a function being called. This is necessary so that on
4508 * old SPARC glibc versions where the function was present in
4509 * the library but not declared in the header file we will
4510 * fail the configure check. (Otherwise we will get a compiler
4511 * warning but not an error, and will proceed to fail the
4512 * qemu compile where we compile with -Werror.)
4513 */
Blue Swirlc075a722012-08-09 20:21:25 +00004514 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004515}
4516EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004517if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004518 epoll_create1=yes
4519fi
4520
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004521# check for sendfile support
4522sendfile=no
4523cat > $TMPC << EOF
4524#include <sys/sendfile.h>
4525
4526int main(void)
4527{
4528 return sendfile(0, 0, 0, 0);
4529}
4530EOF
4531if compile_prog "" "" ; then
4532 sendfile=yes
4533fi
4534
Riku Voipio51834342014-06-22 11:25:42 +01004535# check for timerfd support (glibc 2.8 and newer)
4536timerfd=no
4537cat > $TMPC << EOF
4538#include <sys/timerfd.h>
4539
4540int main(void)
4541{
4542 return(timerfd_create(CLOCK_REALTIME, 0));
4543}
4544EOF
4545if compile_prog "" "" ; then
4546 timerfd=yes
4547fi
4548
Riku Voipio9af5c902014-08-12 15:58:57 +03004549# check for setns and unshare support
4550setns=no
4551cat > $TMPC << EOF
4552#include <sched.h>
4553
4554int main(void)
4555{
4556 int ret;
4557 ret = setns(0, 0);
4558 ret = unshare(0);
4559 return ret;
4560}
4561EOF
4562if compile_prog "" "" ; then
4563 setns=yes
4564fi
4565
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004566# clock_adjtime probe
4567clock_adjtime=no
4568cat > $TMPC <<EOF
4569#include <time.h>
4570
4571int main(void)
4572{
4573 return clock_adjtime(0, 0);
4574}
4575EOF
4576clock_adjtime=no
4577if compile_prog "" "" ; then
4578 clock_adjtime=yes
4579fi
4580
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004581# syncfs probe
4582syncfs=no
4583cat > $TMPC <<EOF
4584#include <unistd.h>
4585
4586int main(void)
4587{
4588 return syncfs(0);
4589}
4590EOF
4591syncfs=no
4592if compile_prog "" "" ; then
4593 syncfs=yes
4594fi
4595
Peter Maydell5f71eac2019-03-07 14:26:46 +00004596# Check we have a new enough version of sphinx-build
4597has_sphinx_build() {
4598 # This is a bit awkward but works: create a trivial document and
4599 # try to run it with our configuration file (which enforces a
4600 # version requirement). This will fail if either
4601 # sphinx-build doesn't exist at all or if it is too old.
4602 mkdir -p "$TMPDIR1/sphinx"
4603 touch "$TMPDIR1/sphinx/index.rst"
4604 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4605}
4606
pbrookcc8ae6d2006-04-23 17:57:59 +00004607# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004608if test "$docs" != "no" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004609 if has makeinfo && has pod2man && has_sphinx_build; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004610 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004611 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004612 if test "$docs" = "yes" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004613 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004614 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004615 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004616 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004617fi
4618
Stefan Weilf514f412009-10-11 12:44:07 +02004619# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004620byteswap_h=no
4621cat > $TMPC << EOF
4622#include <byteswap.h>
4623int main(void) { return bswap_32(0); }
4624EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004625if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004626 byteswap_h=yes
4627fi
4628
Stefan Weil75f13592013-01-05 12:17:38 +01004629# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004630bswap_h=no
4631cat > $TMPC << EOF
4632#include <sys/endian.h>
4633#include <sys/types.h>
4634#include <machine/bswap.h>
4635int main(void) { return bswap32(0); }
4636EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004637if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004638 bswap_h=yes
4639fi
4640
aliguorida93a1f2008-12-12 20:02:52 +00004641##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004642# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004643if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004644 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004645 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004646 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4647 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004648 else
4649 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004650 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004651 fi
4652 libiscsi="no"
4653 fi
4654fi
4655
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004656##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004657# Do we need libm
4658cat > $TMPC << EOF
4659#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004660int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004661EOF
4662if compile_prog "" "" ; then
4663 :
4664elif compile_prog "" "-lm" ; then
4665 LIBS="-lm $LIBS"
4666 libs_qga="-lm $libs_qga"
4667else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004668 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004669fi
4670
4671##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004672# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004673# uClibc provides 2 versions of clock_gettime(), one with realtime
4674# support and one without. This means that the clock_gettime() don't
4675# need -lrt. We still need it for timer_create() so we check for this
4676# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004677cat > $TMPC <<EOF
4678#include <signal.h>
4679#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004680int main(void) {
4681 timer_create(CLOCK_REALTIME, NULL, NULL);
4682 return clock_gettime(CLOCK_REALTIME, NULL);
4683}
aliguorida93a1f2008-12-12 20:02:52 +00004684EOF
4685
Juan Quintela52166aa2009-08-03 14:46:03 +02004686if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004687 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004688# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004689elif compile_prog "" "$pthread_lib -lrt" ; then
4690 LIBS="$LIBS -lrt"
4691 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004692fi
4693
Thomas Huthd99e97e2019-01-17 18:14:08 +01004694# Check whether we need to link libutil for openpty()
4695cat > $TMPC << EOF
4696extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4697int main(void) { return openpty(0, 0, 0, 0, 0); }
4698EOF
4699
4700if ! compile_prog "" "" ; then
4701 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004702 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004703 libs_tools="-lutil $libs_tools"
4704 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004705fi
4706
Blue Swirlde5071c2009-09-12 09:58:46 +00004707##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004708# spice probe
4709if test "$spice" != "no" ; then
4710 cat > $TMPC << EOF
4711#include <spice.h>
4712int main(void) { spice_server_new(); return 0; }
4713EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004714 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4715 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004716 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004717 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004718 compile_prog "$spice_cflags" "$spice_libs" ; then
4719 spice="yes"
4720 libs_softmmu="$libs_softmmu $spice_libs"
4721 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004722 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4723 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004724 else
4725 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004726 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004727 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004728 fi
4729 spice="no"
4730 fi
4731fi
4732
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004733# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004734if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004735 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004736 libcacard_cflags=$($pkg_config --cflags libcacard)
4737 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004738 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004739 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004740 if test "$smartcard" = "yes"; then
4741 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004742 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004743 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004744 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004745fi
4746
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004747# check for libusb
4748if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004749 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004750 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004751 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4752 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004753 else
4754 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004755 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004756 fi
4757 libusb="no"
4758 fi
4759fi
4760
Hans de Goede69354a82011-07-19 11:04:10 +02004761# check for usbredirparser for usb network redirection support
4762if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004763 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004764 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004765 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4766 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004767 else
4768 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004769 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004770 fi
4771 usb_redir="no"
4772 fi
4773fi
4774
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004775##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004776# check if we have VSS SDK headers for win
4777
Eric Blakee633a5c2019-02-04 20:39:37 -06004778if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4779 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004780 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004781 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004782 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4783 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004784 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004785 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4786 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004787 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004788 esac
4789 cat > $TMPC << EOF
4790#define __MIDL_user_allocate_free_DEFINED__
4791#include <inc/win2003/vss.h>
4792int main(void) { return VSS_CTX_BACKUP; }
4793EOF
4794 if compile_prog "$vss_win32_include" "" ; then
4795 guest_agent_with_vss="yes"
4796 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004797 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004798 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004799 else
4800 if test "$vss_win32_sdk" != "" ; then
4801 echo "ERROR: Please download and install Microsoft VSS SDK:"
4802 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4803 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4804 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4805 echo "ERROR: The headers are extracted in the directory \`inc'."
4806 feature_not_found "VSS support"
4807 fi
4808 guest_agent_with_vss="no"
4809 fi
4810fi
4811
4812##########################################
4813# lookup Windows platform SDK (if not specified)
4814# The SDK is needed only to build .tlb (type library) file of guest agent
4815# VSS provider from the source. It is usually unnecessary because the
4816# pre-compiled .tlb file is included.
4817
Eric Blakee633a5c2019-02-04 20:39:37 -06004818if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4819 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004820 if test -z "$win_sdk"; then
4821 programfiles="$PROGRAMFILES"
4822 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4823 if test -n "$programfiles"; then
4824 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4825 else
4826 feature_not_found "Windows SDK"
4827 fi
4828 elif test "$win_sdk" = "no"; then
4829 win_sdk=""
4830 fi
4831fi
4832
4833##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004834# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06004835if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05004836 cat > $TMPC << EOF
4837#include <windows.h>
4838#include <ntddscsi.h>
4839int main(void) {
4840#if !defined(IOCTL_SCSI_GET_ADDRESS)
4841#error Missing required ioctl definitions
4842#endif
4843 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4844 return addr.Lun;
4845}
4846EOF
4847 if compile_prog "" "" ; then
4848 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004849 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004850 fi
4851fi
4852
4853##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004854# virgl renderer probe
4855
4856if test "$virglrenderer" != "no" ; then
4857 cat > $TMPC << EOF
4858#include <virglrenderer.h>
4859int main(void) { virgl_renderer_poll(); return 0; }
4860EOF
4861 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4862 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004863 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004864 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4865 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4866 virglrenderer="yes"
4867 else
4868 if test "$virglrenderer" = "yes" ; then
4869 feature_not_found "virglrenderer"
4870 fi
4871 virglrenderer="no"
4872 fi
4873fi
4874
4875##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004876# capstone
4877
Richard Hendersone219c492017-09-28 09:01:23 -07004878case "$capstone" in
4879 "" | yes)
4880 if $pkg_config capstone; then
4881 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06004882 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004883 capstone=git
4884 elif test -e "${source_path}/capstone/Makefile" ; then
4885 capstone=internal
4886 elif test -z "$capstone" ; then
4887 capstone=no
4888 else
4889 feature_not_found "capstone" "Install capstone devel or git submodule"
4890 fi
4891 ;;
4892
4893 system)
4894 if ! $pkg_config capstone; then
4895 feature_not_found "capstone" "Install capstone devel"
4896 fi
4897 ;;
4898esac
4899
4900case "$capstone" in
4901 git | internal)
4902 if test "$capstone" = git; then
4903 git_submodules="${git_submodules} capstone"
4904 fi
4905 mkdir -p capstone
4906 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4907 if test "$mingw32" = "yes"; then
4908 LIBCAPSTONE=capstone.lib
4909 else
4910 LIBCAPSTONE=libcapstone.a
4911 fi
4912 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4913 ;;
4914
4915 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004916 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4917 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004918 ;;
4919
4920 no)
4921 ;;
4922 *)
4923 error_exit "Unknown state for capstone: $capstone"
4924 ;;
4925esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004926
4927##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004928# check if we have fdatasync
4929
4930fdatasync=no
4931cat > $TMPC << EOF
4932#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004933int main(void) {
4934#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4935return fdatasync(0);
4936#else
Stefan Weile172fe12012-04-06 21:33:20 +02004937#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004938#endif
4939}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004940EOF
4941if compile_prog "" "" ; then
4942 fdatasync=yes
4943fi
4944
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004945##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004946# check if we have madvise
4947
4948madvise=no
4949cat > $TMPC << EOF
4950#include <sys/types.h>
4951#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004952#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004953int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4954EOF
4955if compile_prog "" "" ; then
4956 madvise=yes
4957fi
4958
4959##########################################
4960# check if we have posix_madvise
4961
4962posix_madvise=no
4963cat > $TMPC << EOF
4964#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004965#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004966int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4967EOF
4968if compile_prog "" "" ; then
4969 posix_madvise=yes
4970fi
4971
4972##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004973# check if we have posix_memalign()
4974
4975posix_memalign=no
4976cat > $TMPC << EOF
4977#include <stdlib.h>
4978int main(void) {
4979 void *p;
4980 return posix_memalign(&p, 8, 8);
4981}
4982EOF
4983if compile_prog "" "" ; then
4984 posix_memalign=yes
4985fi
4986
4987##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004988# check if we have posix_syslog
4989
4990posix_syslog=no
4991cat > $TMPC << EOF
4992#include <syslog.h>
4993int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4994EOF
4995if compile_prog "" "" ; then
4996 posix_syslog=yes
4997fi
4998
4999##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005000# check if we have sem_timedwait
5001
5002sem_timedwait=no
5003cat > $TMPC << EOF
5004#include <semaphore.h>
5005int main(void) { return sem_timedwait(0, 0); }
5006EOF
5007if compile_prog "" "" ; then
5008 sem_timedwait=yes
5009fi
5010
5011##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005012# check if we have strchrnul
5013
5014strchrnul=no
5015cat > $TMPC << EOF
5016#include <string.h>
5017int main(void);
5018// Use a haystack that the compiler shouldn't be able to constant fold
5019char *haystack = (char*)&main;
5020int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5021EOF
5022if compile_prog "" "" ; then
5023 strchrnul=yes
5024fi
5025
5026##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005027# check if trace backend exists
5028
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005029$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005030if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005031 error_exit "invalid trace backends" \
5032 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005033fi
5034
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005035##########################################
5036# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005037if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005038 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005039#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005040int main(void) { return 0; }
5041EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005042 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005043 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005044 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005045 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005046 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005047 fi
5048 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005049 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005050 else
5051 urcu_bp_libs="-lurcu-bp"
5052 fi
5053
5054 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5055 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005056 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005057 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005058 fi
5059fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005060
5061##########################################
5062# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005063if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005064 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005065 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005066 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005067 trace_backend_stap="no"
5068 if has 'stap' ; then
5069 trace_backend_stap="yes"
5070 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005071fi
5072
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005073##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005074# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305075
Peter Maydell7c2acc72013-04-08 12:11:27 +01005076# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005077# is sigcontext. On Windows the only valid backend is the Windows
5078# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005079
5080ucontext_works=no
5081if test "$darwin" != "yes"; then
5082 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305083#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005084#ifdef __stub_makecontext
5085#error Ignoring glibc stub makecontext which will always fail
5086#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005087int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305088EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005089 if compile_prog "" "" ; then
5090 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305091 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005092fi
5093
5094if test "$coroutine" = ""; then
5095 if test "$mingw32" = "yes"; then
5096 coroutine=win32
5097 elif test "$ucontext_works" = "yes"; then
5098 coroutine=ucontext
5099 else
5100 coroutine=sigaltstack
5101 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005102else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005103 case $coroutine in
5104 windows)
5105 if test "$mingw32" != "yes"; then
5106 error_exit "'windows' coroutine backend only valid for Windows"
5107 fi
5108 # Unfortunately the user visible backend name doesn't match the
5109 # coroutine-*.c filename for this case, so we have to adjust it here.
5110 coroutine=win32
5111 ;;
5112 ucontext)
5113 if test "$ucontext_works" != "yes"; then
5114 feature_not_found "ucontext"
5115 fi
5116 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005117 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005118 if test "$mingw32" = "yes"; then
5119 error_exit "only the 'windows' coroutine backend is valid for Windows"
5120 fi
5121 ;;
5122 *)
5123 error_exit "unknown coroutine backend $coroutine"
5124 ;;
5125 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305126fi
5127
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005128if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005129 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005130fi
5131
Peter Lieven7d992e42016-09-27 11:58:45 +02005132if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005133 if test "$coroutine_pool" = "yes"; then
5134 echo "WARN: disabling coroutine pool for stack usage debugging"
5135 coroutine_pool=no
5136 fi
5137fi
5138
5139
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305140##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305141# check if we have open_by_handle_at
5142
Stefan Weil4e1797f2012-06-18 22:11:06 +02005143open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305144cat > $TMPC << EOF
5145#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005146#if !defined(AT_EMPTY_PATH)
5147# error missing definition
5148#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005149int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005150#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305151EOF
5152if compile_prog "" "" ; then
5153 open_by_handle_at=yes
5154fi
5155
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305156########################################
5157# check if we have linux/magic.h
5158
5159linux_magic_h=no
5160cat > $TMPC << EOF
5161#include <linux/magic.h>
5162int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005163 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305164}
5165EOF
5166if compile_prog "" "" ; then
5167 linux_magic_h=yes
5168fi
5169
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005170########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005171# check whether we can disable warning option with a pragma (this is needed
5172# to silence warnings in the headers of some versions of external libraries).
5173# This test has to be compiled with -Werror as otherwise an unknown pragma is
5174# only a warning.
5175#
5176# If we can't selectively disable warning in the code, disable -Werror so that
5177# the build doesn't fail anyway.
5178
Peter Maydell06d71fa2012-07-30 16:13:07 +01005179pragma_disable_unused_but_set=no
5180cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005181#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005182#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005183#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005184
Peter Maydell06d71fa2012-07-30 16:13:07 +01005185int main(void) {
5186 return 0;
5187}
5188EOF
5189if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005190 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005191else
5192 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005193fi
5194
5195########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005196# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005197
5198valgrind_h=no
5199cat > $TMPC << EOF
5200#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005201int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005202 return 0;
5203}
5204EOF
5205if compile_prog "" "" ; then
5206 valgrind_h=yes
5207fi
5208
5209########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005210# check if environ is declared
5211
5212has_environ=no
5213cat > $TMPC << EOF
5214#include <unistd.h>
5215int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005216 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005217 return 0;
5218}
5219EOF
5220if compile_prog "" "" ; then
5221 has_environ=yes
5222fi
5223
Richard Henderson76a347e2012-12-28 14:17:02 -08005224########################################
5225# check if cpuid.h is usable.
5226
Richard Henderson76a347e2012-12-28 14:17:02 -08005227cat > $TMPC << EOF
5228#include <cpuid.h>
5229int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005230 unsigned a, b, c, d;
5231 int max = __get_cpuid_max(0, 0);
5232
5233 if (max >= 1) {
5234 __cpuid(1, a, b, c, d);
5235 }
5236
5237 if (max >= 7) {
5238 __cpuid_count(7, 0, a, b, c, d);
5239 }
5240
5241 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005242}
5243EOF
5244if compile_prog "" "" ; then
5245 cpuid_h=yes
5246fi
5247
Richard Henderson5dd89902017-07-18 18:40:18 -10005248##########################################
5249# avx2 optimization requirement check
5250#
5251# There is no point enabling this if cpuid.h is not usable,
5252# since we won't be able to select the new routines.
5253
Eric Blakee633a5c2019-02-04 20:39:37 -06005254if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005255 cat > $TMPC << EOF
5256#pragma GCC push_options
5257#pragma GCC target("avx2")
5258#include <cpuid.h>
5259#include <immintrin.h>
5260static int bar(void *a) {
5261 __m256i x = *(__m256i *)a;
5262 return _mm256_testz_si256(x, x);
5263}
5264int main(int argc, char *argv[]) { return bar(argv[0]); }
5265EOF
5266 if compile_object "" ; then
5267 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005268 else
5269 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005270 fi
5271fi
5272
Richard Hendersonf5401662013-02-16 12:46:59 -08005273########################################
5274# check if __[u]int128_t is usable.
5275
5276int128=no
5277cat > $TMPC << EOF
5278__int128_t a;
5279__uint128_t b;
5280int main (void) {
5281 a = a + b;
5282 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005283 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005284 return 0;
5285}
5286EOF
5287if compile_prog "" "" ; then
5288 int128=yes
5289fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005290
Richard Henderson7ebee432016-06-29 21:10:59 -07005291#########################################
5292# See if 128-bit atomic operations are supported.
5293
5294atomic128=no
5295if test "$int128" = "yes"; then
5296 cat > $TMPC << EOF
5297int main(void)
5298{
5299 unsigned __int128 x = 0, y = 0;
5300 y = __atomic_load_16(&x, 0);
5301 __atomic_store_16(&x, y, 0);
5302 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5303 return 0;
5304}
5305EOF
5306 if compile_prog "" "" ; then
5307 atomic128=yes
5308 fi
5309fi
5310
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005311cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005312if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005313 cat > $TMPC << EOF
5314int main(void)
5315{
5316 unsigned __int128 x = 0, y = 0;
5317 __sync_val_compare_and_swap_16(&x, y, x);
5318 return 0;
5319}
5320EOF
5321 if compile_prog "" "" ; then
5322 cmpxchg128=yes
5323 fi
5324fi
5325
Richard Hendersondf79b992016-09-02 12:23:57 -07005326#########################################
5327# See if 64-bit atomic operations are supported.
5328# Note that without __atomic builtins, we can only
5329# assume atomic loads/stores max at pointer size.
5330
5331cat > $TMPC << EOF
5332#include <stdint.h>
5333int main(void)
5334{
5335 uint64_t x = 0, y = 0;
5336#ifdef __ATOMIC_RELAXED
5337 y = __atomic_load_8(&x, 0);
5338 __atomic_store_8(&x, y, 0);
5339 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5340 __atomic_exchange_8(&x, y, 0);
5341 __atomic_fetch_add_8(&x, y, 0);
5342#else
5343 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5344 __sync_lock_test_and_set(&x, y);
5345 __sync_val_compare_and_swap(&x, y, 0);
5346 __sync_fetch_and_add(&x, y);
5347#endif
5348 return 0;
5349}
5350EOF
5351if compile_prog "" "" ; then
5352 atomic64=yes
5353fi
5354
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005355########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005356# See if 16-byte vector operations are supported.
5357# Even without a vector unit the compiler may expand these.
5358# There is a bug in old GCC for PPC that crashes here.
5359# Unfortunately it's the system compiler for Centos 7.
5360
5361cat > $TMPC << EOF
5362typedef unsigned char U1 __attribute__((vector_size(16)));
5363typedef unsigned short U2 __attribute__((vector_size(16)));
5364typedef unsigned int U4 __attribute__((vector_size(16)));
5365typedef unsigned long long U8 __attribute__((vector_size(16)));
5366typedef signed char S1 __attribute__((vector_size(16)));
5367typedef signed short S2 __attribute__((vector_size(16)));
5368typedef signed int S4 __attribute__((vector_size(16)));
5369typedef signed long long S8 __attribute__((vector_size(16)));
5370static U1 a1, b1;
5371static U2 a2, b2;
5372static U4 a4, b4;
5373static U8 a8, b8;
5374static S1 c1;
5375static S2 c2;
5376static S4 c4;
5377static S8 c8;
5378static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005379void helper(void *d, void *a, int shift, int i);
5380void helper(void *d, void *a, int shift, int i)
5381{
5382 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5383 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5384 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5385 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5386}
Richard Hendersondb432672017-09-15 14:11:45 -07005387int main(void)
5388{
5389 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5390 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5391 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5392 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5393 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5394 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5395 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5396 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5397 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5398 return 0;
5399}
5400EOF
5401
5402vector16=no
5403if compile_prog "" "" ; then
5404 vector16=yes
5405fi
5406
5407########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005408# check if getauxval is available.
5409
5410getauxval=no
5411cat > $TMPC << EOF
5412#include <sys/auxv.h>
5413int main(void) {
5414 return getauxval(AT_HWCAP) == 0;
5415}
5416EOF
5417if compile_prog "" "" ; then
5418 getauxval=yes
5419fi
5420
John Snowfd0e6052015-03-25 18:57:39 -04005421########################################
5422# check if ccache is interfering with
5423# semantic analysis of macros
5424
John Snow5e4dfd32015-10-28 13:56:40 -04005425unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005426ccache_cpp2=no
5427cat > $TMPC << EOF
5428static const int Z = 1;
5429#define fn() ({ Z; })
5430#define TAUT(X) ((X) == Z)
5431#define PAREN(X, Y) (X == Y)
5432#define ID(X) (X)
5433int main(int argc, char *argv[])
5434{
5435 int x = 0, y = 0;
5436 x = ID(x);
5437 x = fn();
5438 fn();
5439 if (PAREN(x, y)) return 0;
5440 if (TAUT(Z)) return 0;
5441 return 0;
5442}
5443EOF
5444
5445if ! compile_object "-Werror"; then
5446 ccache_cpp2=yes
5447fi
5448
John Snowb553a042015-11-03 15:43:42 -05005449#################################################
5450# clang does not support glibc + FORTIFY_SOURCE.
5451
5452if test "$fortify_source" != "no"; then
5453 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5454 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005455 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005456 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005457 fortify_source="no";
5458 else
5459 fortify_source="yes"
5460 fi
5461fi
5462
Fam Zheng1efad062018-06-01 17:26:43 +08005463###############################################
5464# Check if copy_file_range is provided by glibc
5465have_copy_file_range=no
5466cat > $TMPC << EOF
5467#include <unistd.h>
5468int main(void) {
5469 copy_file_range(0, NULL, 0, NULL, 0, 0);
5470 return 0;
5471}
5472EOF
5473if compile_prog "" "" ; then
5474 have_copy_file_range=yes
5475fi
5476
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305477##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005478# check if struct fsxattr is available via linux/fs.h
5479
5480have_fsxattr=no
5481cat > $TMPC << EOF
5482#include <linux/fs.h>
5483struct fsxattr foo;
5484int main(void) {
5485 return 0;
5486}
5487EOF
5488if compile_prog "" "" ; then
5489 have_fsxattr=yes
5490fi
5491
Peter Maydellb66e10e2016-06-08 18:34:32 +01005492##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005493# check for usable membarrier system call
5494if test "$membarrier" = "yes"; then
5495 have_membarrier=no
5496 if test "$mingw32" = "yes" ; then
5497 have_membarrier=yes
5498 elif test "$linux" = "yes" ; then
5499 cat > $TMPC << EOF
5500 #include <linux/membarrier.h>
5501 #include <sys/syscall.h>
5502 #include <unistd.h>
5503 #include <stdlib.h>
5504 int main(void) {
5505 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5506 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5507 exit(0);
5508 }
5509EOF
5510 if compile_prog "" "" ; then
5511 have_membarrier=yes
5512 fi
5513 fi
5514 if test "$have_membarrier" = "no"; then
5515 feature_not_found "membarrier" "membarrier system call not available"
5516 fi
5517else
5518 # Do not enable it by default even for Mingw32, because it doesn't
5519 # work on Wine.
5520 membarrier=no
5521fi
5522
5523##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005524# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005525have_rtnetlink=no
5526cat > $TMPC << EOF
5527#include <linux/rtnetlink.h>
5528int main(void) {
5529 return IFLA_PROTO_DOWN;
5530}
5531EOF
5532if compile_prog "" "" ; then
5533 have_rtnetlink=yes
5534fi
5535
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005536##########################################
5537# check for usable AF_VSOCK environment
5538have_af_vsock=no
5539cat > $TMPC << EOF
5540#include <errno.h>
5541#include <sys/types.h>
5542#include <sys/socket.h>
5543#if !defined(AF_VSOCK)
5544# error missing AF_VSOCK flag
5545#endif
5546#include <linux/vm_sockets.h>
5547int main(void) {
5548 int sock, ret;
5549 struct sockaddr_vm svm;
5550 socklen_t len = sizeof(svm);
5551 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5552 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5553 if ((ret == -1) && (errno == ENOTCONN)) {
5554 return 0;
5555 }
5556 return -1;
5557}
5558EOF
5559if compile_prog "" "" ; then
5560 have_af_vsock=yes
5561fi
5562
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005563##########################################
5564# check for usable AF_ALG environment
5565hava_afalg=no
5566cat > $TMPC << EOF
5567#include <errno.h>
5568#include <sys/types.h>
5569#include <sys/socket.h>
5570#include <linux/if_alg.h>
5571int main(void) {
5572 int sock;
5573 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5574 return sock;
5575}
5576EOF
5577if compile_prog "" "" ; then
5578 have_afalg=yes
5579fi
5580if test "$crypto_afalg" = "yes"
5581then
5582 if test "$have_afalg" != "yes"
5583 then
5584 error_exit "AF_ALG requested but could not be detected"
5585 fi
5586fi
5587
5588
James Clarke6969ec62016-06-06 12:02:50 +01005589#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005590# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005591if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005592 cat > $TMPC << EOF
5593#include <Hypervisor/hv.h>
5594int main() { return 0;}
5595EOF
5596 if ! compile_object ""; then
5597 hvf='no'
5598 else
5599 hvf='yes'
5600 LDFLAGS="-framework Hypervisor $LDFLAGS"
5601 fi
5602fi
5603
5604#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005605# Sparc implicitly links with --relax, which is
5606# incompatible with -r, so --no-relax should be
5607# given. It does no harm to give it on other
5608# platforms too.
5609
5610# Note: the prototype is needed since QEMU_CFLAGS
5611# contains -Wmissing-prototypes
5612cat > $TMPC << EOF
5613extern int foo(void);
5614int foo(void) { return 0; }
5615EOF
5616if ! compile_object ""; then
5617 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5618fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005619for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5620 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5621 LD_REL_FLAGS=$i
5622 break
5623 fi
5624done
5625if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5626 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005627fi
5628
Jan Vesely277abf12016-04-29 13:15:23 -04005629##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005630# check for sysmacros.h
5631
5632have_sysmacros=no
5633cat > $TMPC << EOF
5634#include <sys/sysmacros.h>
5635int main(void) {
5636 return makedev(0, 0);
5637}
5638EOF
5639if compile_prog "" "" ; then
5640 have_sysmacros=yes
5641fi
5642
5643##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005644# Veritas HyperScale block driver VxHS
5645# Check if libvxhs is installed
5646
5647if test "$vxhs" != "no" ; then
5648 cat > $TMPC <<EOF
5649#include <stdint.h>
5650#include <qnio/qnio_api.h>
5651
5652void *vxhs_callback;
5653
5654int main(void) {
5655 iio_init(QNIO_VERSION, vxhs_callback);
5656 return 0;
5657}
5658EOF
5659 vxhs_libs="-lvxhs -lssl"
5660 if compile_prog "" "$vxhs_libs" ; then
5661 vxhs=yes
5662 else
5663 if test "$vxhs" = "yes" ; then
5664 feature_not_found "vxhs block device" "Install libvxhs See github"
5665 fi
5666 vxhs=no
5667 fi
5668fi
5669
5670##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005671# check for _Static_assert()
5672
5673have_static_assert=no
5674cat > $TMPC << EOF
5675_Static_assert(1, "success");
5676int main(void) {
5677 return 0;
5678}
5679EOF
5680if compile_prog "" "" ; then
5681 have_static_assert=yes
5682fi
5683
5684##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005685# check for utmpx.h, it is missing e.g. on OpenBSD
5686
5687have_utmpx=no
5688cat > $TMPC << EOF
5689#include <utmpx.h>
5690struct utmpx user_info;
5691int main(void) {
5692 return 0;
5693}
5694EOF
5695if compile_prog "" "" ; then
5696 have_utmpx=yes
5697fi
5698
5699##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005700# checks for sanitizers
5701
Marc-André Lureau247724c2018-01-16 16:11:51 +01005702have_asan=no
5703have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005704have_asan_iface_h=no
5705have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005706
5707if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005708 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005709 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5710 have_asan=yes
5711 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005712
5713 # we could use a simple skeleton for flags checks, but this also
5714 # detect the static linking issue of ubsan, see also:
5715 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5716 cat > $TMPC << EOF
5717#include <stdlib.h>
5718int main(void) {
5719 void *tmp = malloc(10);
5720 return *(int *)(tmp + 2);
5721}
5722EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005723 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5724 have_ubsan=yes
5725 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005726
5727 if check_include "sanitizer/asan_interface.h" ; then
5728 have_asan_iface_h=yes
5729 fi
5730
5731 cat > $TMPC << EOF
5732#include <sanitizer/asan_interface.h>
5733int main(void) {
5734 __sanitizer_start_switch_fiber(0, 0, 0);
5735 return 0;
5736}
5737EOF
5738 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5739 have_asan_iface_fiber=yes
5740 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005741fi
5742
5743##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005744# Docker and cross-compiler support
5745#
5746# This is specifically for building test
5747# cases for foreign architectures, not
5748# cross-compiling QEMU itself.
5749
5750if has "docker"; then
5751 docker=$($python $source_path/tests/docker/docker.py probe)
5752fi
5753
5754##########################################
Junyan He17824402018-07-18 15:47:59 +08005755# check for libpmem
5756
5757if test "$libpmem" != "no"; then
5758 if $pkg_config --exists "libpmem"; then
5759 libpmem="yes"
5760 libpmem_libs=$($pkg_config --libs libpmem)
5761 libpmem_cflags=$($pkg_config --cflags libpmem)
5762 libs_softmmu="$libs_softmmu $libpmem_libs"
5763 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5764 else
5765 if test "$libpmem" = "yes" ; then
5766 feature_not_found "libpmem" "Install nvml or pmdk"
5767 fi
5768 libpmem="no"
5769 fi
5770fi
5771
5772##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005773# End of CC checks
5774# After here, no more $cc or $ld runs
5775
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005776write_c_skeleton
5777
Blue Swirl1d728c32012-05-01 18:45:39 +00005778if test "$gcov" = "yes" ; then
5779 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5780 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005781elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005782 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005783elif test "$debug" = "no"; then
5784 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005785fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005786
Marc-André Lureau247724c2018-01-16 16:11:51 +01005787if test "$have_asan" = "yes"; then
5788 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005789 if test "$have_asan_iface_h" = "no" ; then
5790 echo "ASAN build enabled, but ASAN header missing." \
5791 "Without code annotation, the report may be inferior."
5792 elif test "$have_asan_iface_fiber" = "no" ; then
5793 echo "ASAN build enabled, but ASAN header is too old." \
5794 "Without code annotation, the report may be inferior."
5795 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005796fi
5797if test "$have_ubsan" = "yes"; then
5798 CFLAGS="-fsanitize=undefined $CFLAGS"
5799fi
5800
Peter Lieven6542aa92014-02-03 10:26:13 +01005801##########################################
5802# Do we have libnfs
5803if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005804 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005805 libnfs="yes"
5806 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005807 else
5808 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005809 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005810 fi
5811 libnfs="no"
5812 fi
5813fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005814
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005815##########################################
5816# Do we have libudev
5817if test "$libudev" != "no" ; then
5818 if $pkg_config libudev && test "$static" != "yes"; then
5819 libudev="yes"
5820 libudev_libs=$($pkg_config --libs libudev)
5821 else
5822 libudev="no"
5823 fi
5824fi
5825
Peter Maydell6ca026c2012-07-18 15:10:18 +01005826# Now we've finished running tests it's OK to add -Werror to the compiler flags
5827if test "$werror" = "yes"; then
5828 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5829fi
5830
Juan Quintelae86ecd42009-08-03 14:45:59 +02005831if test "$solaris" = "no" ; then
5832 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005833 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005834 fi
5835fi
5836
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005837# test if pod2man has --utf8 option
5838if pod2man --help | grep -q utf8; then
5839 POD2MAN="pod2man --utf8"
5840else
5841 POD2MAN="pod2man"
5842fi
5843
Blue Swirl952afb72010-09-19 08:36:34 +00005844# Use ASLR, no-SEH and DEP if available
5845if test "$mingw32" = "yes" ; then
5846 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005847 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005848 LDFLAGS="-Wl,$flag $LDFLAGS"
5849 fi
5850 done
5851fi
5852
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005853qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005854qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005855qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005856qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00005857qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00005858qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005859
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005860# We can only support ivshmem if we have eventfd
5861if [ "$eventfd" = "yes" ]; then
5862 ivshmem=yes
5863fi
5864
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005865tools=""
5866if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005867 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005868 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5869 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005870 fi
5871 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005872 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005873 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03005874 if [ "$curl" = "yes" ]; then
5875 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005876 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005877fi
5878if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005879 if test "$linux" = yes; then
5880 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005881 virtfs=yes
5882 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5883 else
5884 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005885 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305886 fi
Andreas Färber17500372012-05-01 01:12:03 +02005887 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005888 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005889 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5890 mpath=yes
5891 else
5892 if test "$mpath" = yes; then
5893 error_exit "Multipath requires libmpathpersist devel"
5894 fi
5895 mpath=no
5896 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005897 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5898 else
5899 if test "$virtfs" = yes; then
5900 error_exit "VirtFS is supported only on Linux"
5901 fi
5902 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005903 if test "$mpath" = yes; then
5904 error_exit "Multipath is supported only on Linux"
5905 fi
5906 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305907 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005908 if test "$xkbcommon" = "yes"; then
5909 tools="qemu-keymap\$(EXESUF) $tools"
5910 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005911fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005912
5913# Probe for guest agent support/options
5914
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005915if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005916 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005917 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005918 guest_agent=yes
5919 elif [ "$guest_agent" != yes ]; then
5920 guest_agent=no
5921 else
5922 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005923 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005924fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005925
Michael Roth9d6bc272015-08-26 10:49:13 -05005926# Guest agent Window MSI package
5927
5928if test "$guest_agent" != yes; then
5929 if test "$guest_agent_msi" = yes; then
5930 error_exit "MSI guest agent package requires guest agent enabled"
5931 fi
5932 guest_agent_msi=no
5933elif test "$mingw32" != "yes"; then
5934 if test "$guest_agent_msi" = "yes"; then
5935 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5936 fi
5937 guest_agent_msi=no
5938elif ! has wixl; then
5939 if test "$guest_agent_msi" = "yes"; then
5940 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5941 fi
5942 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005943else
5944 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5945 # disabled explicitly
5946 if test "$guest_agent_msi" != "no"; then
5947 guest_agent_msi=yes
5948 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005949fi
5950
Michael Roth1a349042015-08-26 11:14:31 -05005951if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005952 if test "$guest_agent_with_vss" = "yes"; then
5953 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5954 fi
5955
5956 if test "$QEMU_GA_MANUFACTURER" = ""; then
5957 QEMU_GA_MANUFACTURER=QEMU
5958 fi
5959
5960 if test "$QEMU_GA_DISTRO" = ""; then
5961 QEMU_GA_DISTRO=Linux
5962 fi
5963
5964 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005965 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005966 fi
5967
Stefan Weil89138852016-05-16 15:10:20 +02005968 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005969
5970 case "$cpu" in
5971 x86_64)
5972 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5973 ;;
5974 i386)
5975 QEMU_GA_MSI_ARCH="-D Arch=32"
5976 ;;
5977 *)
5978 error_exit "CPU $cpu not supported for building installation package"
5979 ;;
5980 esac
5981fi
5982
Paolo Bonzinica35f782010-05-26 16:08:29 +02005983# Mac OS X ships with a broken assembler
5984roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06005985if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5986 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5987 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005988 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005989 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5990 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5991 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005992 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5993 ld_i386_emulation="$emu"
5994 roms="optionrom"
5995 break
5996 fi
5997 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005998fi
Eric Blakee633a5c2019-02-04 20:39:37 -06005999if test "$cpu" = "ppc64" && test "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11006000 roms="$roms spapr-rtas"
6001fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006002
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006003# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006004if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006005 write_c_skeleton
6006 if compile_prog "-march=z900" ""; then
6007 roms="$roms s390-ccw"
6008 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006009fi
6010
Richard Henderson964c6fa2013-06-21 19:10:16 -07006011# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006012if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006013 textseg_addr=
6014 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006015 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6016 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006017 textseg_addr=0x60000000
6018 ;;
6019 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006020 # A 256M aligned address, high in the address space, with enough
6021 # room for the code_gen_buffer above it before the stack.
6022 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006023 ;;
6024 esac
6025 if [ -n "$textseg_addr" ]; then
6026 cat > $TMPC <<EOF
6027 int main(void) { return 0; }
6028EOF
6029 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6030 if ! compile_prog "" "$textseg_ldflags"; then
6031 # In case ld does not support -Ttext-segment, edit the default linker
6032 # script via sed to set the .text start addr. This is needed on FreeBSD
6033 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006034 if ! $ld --verbose >/dev/null 2>&1; then
6035 error_exit \
6036 "We need to link the QEMU user mode binaries at a" \
6037 "specific text address. Unfortunately your linker" \
6038 "doesn't support either the -Ttext-segment option or" \
6039 "printing the default linker script with --verbose." \
6040 "If you don't want the user mode binaries, pass the" \
6041 "--disable-user option to configure."
6042 fi
6043
Richard Henderson964c6fa2013-06-21 19:10:16 -07006044 $ld --verbose | sed \
6045 -e '1,/==================================================/d' \
6046 -e '/==================================================/,$d' \
6047 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6048 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6049 textseg_ldflags="-Wl,-T../config-host.ld"
6050 fi
6051 fi
6052fi
6053
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006054# Check that the C++ compiler exists and works with the C compiler.
6055# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6056if has $cxx; then
6057 cat > $TMPC <<EOF
6058int c_function(void);
6059int main(void) { return c_function(); }
6060EOF
6061
6062 compile_object
6063
6064 cat > $TMPCXX <<EOF
6065extern "C" {
6066 int c_function(void);
6067}
6068int c_function(void) { return 42; }
6069EOF
6070
6071 update_cxxflags
6072
6073 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6074 # C++ compiler $cxx works ok with C compiler $cc
6075 :
6076 else
6077 echo "C++ compiler $cxx does not work with C compiler $cc"
6078 echo "Disabling C++ specific optional code"
6079 cxx=
6080 fi
6081else
6082 echo "No C++ compiler available; disabling C++ specific optional code"
6083 cxx=
6084fi
6085
Cole Robinson02d34f62016-05-06 14:03:09 -04006086echo_version() {
6087 if test "$1" = "yes" ; then
6088 echo "($2)"
6089 fi
6090}
6091
Jan Kiszka50e12062014-10-02 10:03:55 +02006092# prepend pixman and ftd flags after all config tests are done
6093QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006094QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006095libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006096
bellard43ce4df2003-06-09 19:53:12 +00006097echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006098echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006099echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006100echo "binary directory $(eval echo $bindir)"
6101echo "library directory $(eval echo $libdir)"
6102echo "module directory $(eval echo $qemu_moddir)"
6103echo "libexec directory $(eval echo $libexecdir)"
6104echo "include directory $(eval echo $includedir)"
6105echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006106if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006107echo "local state directory $(eval echo $local_statedir)"
6108echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006109echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006110else
6111echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006112echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006113fi
bellard5a671352003-10-01 00:13:48 +00006114echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006115echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006116echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006117echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006118echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006119echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006120echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006121echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006122echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006123echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006124echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006125echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006126echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006127echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006128echo "python $python ($python_version)"
Brade2d88302011-09-02 16:53:28 -04006129if test "$slirp" = "yes" ; then
6130 echo "smbd $smbd"
6131fi
Fam Zheng17969262014-02-10 14:48:56 +08006132echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006133echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006134echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006135echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006136echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006137echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006138echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006139echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006140echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006141if test "$darwin" = "yes" ; then
6142 echo "Cocoa support $cocoa"
6143fi
Stefan Weil89138852016-05-16 15:10:20 +02006144echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006145echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006146echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006147echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006148echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006149echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006150echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006151echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006152echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006153echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006154echo "PAM $auth_pam"
balrog4d3b6f62008-02-10 16:33:14 +00006155echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006156echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006157echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006158echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006159echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006160echo "Block whitelist (rw) $block_drv_rw_whitelist"
6161echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306162echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006163echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006164echo "VNC support $vnc"
6165if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006166 echo "VNC SASL support $vnc_sasl"
6167 echo "VNC JPEG support $vnc_jpeg"
6168 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006169fi
blueswir131422552007-04-16 18:27:06 +00006170if test -n "$sparc_cpu"; then
6171 echo "Target Sparc Arch $sparc_cpu"
6172fi
aliguorie37630c2009-04-22 15:19:10 +00006173echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006174if test "$xen" = "yes" ; then
6175 echo "xen ctrl version $xen_ctrl_version"
6176fi
aurel322e4d9fb2008-04-08 06:01:02 +00006177echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006178echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006179echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006180echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006181echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006182echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006183echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006184echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006185echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006186echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006187echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006188echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006189echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006190echo "TCG support $tcg"
6191if test "$tcg" = "yes" ; then
6192 echo "TCG debug enabled $debug_tcg"
6193 echo "TCG interpreter $tcg_interpreter"
6194fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006195echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006196echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006197echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006198echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006199echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006200echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006201echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006202echo "madvise $madvise"
6203echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006204echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006205echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006206echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006207echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006208echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006209echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006210echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006211echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006212if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006213echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006214fi
Stefan Weil89138852016-05-16 15:10:20 +02006215echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006216echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006217echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006218echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006219echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006220echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006221echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006222echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006223echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006224echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006225echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006226echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006227echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006228echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006229echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006230echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006231echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006232echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006233echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006234echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306235echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006236echo "gcov $gcov_tool"
6237echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006238echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006239echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006240echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006241echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006242echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006243echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006244echo "lzo support $lzo"
6245echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006246echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006247echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006248echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006249echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006250echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006251echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006252echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006253echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006254echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006255echo "bochs support $bochs"
6256echo "cloop support $cloop"
6257echo "dmg support $dmg"
6258echo "qcow v1 support $qcow1"
6259echo "vdi support $vdi"
6260echo "vvfat support $vvfat"
6261echo "qed support $qed"
6262echo "parallels support $parallels"
6263echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006264echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006265echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006266echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006267echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006268echo "default devices $default_devices"
bellard67b915a2004-03-31 23:37:16 +00006269
Peter Maydell898be3e2017-03-21 14:31:57 +00006270if test "$supported_cpu" = "no"; then
6271 echo
6272 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6273 echo
6274 echo "CPU host architecture $cpu support is not currently maintained."
6275 echo "The QEMU project intends to remove support for this host CPU in"
6276 echo "a future release if nobody volunteers to maintain it and to"
6277 echo "provide a build host for our continuous integration setup."
6278 echo "configure has succeeded and you can continue to build, but"
6279 echo "if you care about QEMU on this platform you should contact"
6280 echo "us upstream at qemu-devel@nongnu.org."
6281fi
6282
6283if test "$supported_os" = "no"; then
6284 echo
6285 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6286 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006287 echo "Host OS $targetos support is not currently maintained."
6288 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006289 echo "a future release if nobody volunteers to maintain it and to"
6290 echo "provide a build host for our continuous integration setup."
6291 echo "configure has succeeded and you can continue to build, but"
6292 echo "if you care about QEMU on this platform you should contact"
6293 echo "us upstream at qemu-devel@nongnu.org."
6294fi
6295
Juan Quintela98ec69a2009-07-16 18:34:18 +02006296config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006297
Stefan Weildbd99ae2013-01-01 18:33:44 +01006298echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6299
Juan Quintela98ec69a2009-07-16 18:34:18 +02006300echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006301echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006302
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006303echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006304echo "prefix=$prefix" >> $config_host_mak
6305echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006306echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006307echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006308echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006309echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006310echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006311echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006312echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006313echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006314echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006315echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006316if test "$mingw32" = "no" ; then
6317 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6318fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006319echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006320echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006321echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006322echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006323echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006324echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006325echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006326echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006327
Juan Quintela98ec69a2009-07-16 18:34:18 +02006328echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006329
Paolo Bonzinif3494742019-01-23 14:56:17 +08006330if test "$default_devices" = "yes" ; then
6331 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6332else
6333 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6334fi
aurel32f8393942009-04-13 18:45:38 +00006335if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006336 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006337fi
aliguori1625af82009-04-05 17:41:02 +00006338if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006339 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006340fi
bellard7d132992003-03-06 23:23:54 +00006341if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006342 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006343fi
bellard67b915a2004-03-31 23:37:16 +00006344if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006345 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006346 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006347 version_major=${rc_version%%.*}
6348 rc_version=${rc_version#*.}
6349 version_minor=${rc_version%%.*}
6350 rc_version=${rc_version#*.}
6351 version_subminor=${rc_version%%.*}
6352 version_micro=0
6353 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6354 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006355 if test "$guest_agent_with_vss" = "yes" ; then
6356 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006357 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006358 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6359 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006360 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006361 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006362 fi
Michael Roth1a349042015-08-26 11:14:31 -05006363 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006364 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006365 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6366 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6367 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6368 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6369 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6370 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6371 fi
pbrook210fa552007-02-27 21:04:49 +00006372else
Juan Quintela35f4df22009-07-27 16:13:07 +02006373 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006374fi
blueswir1128ab2f2008-08-15 18:33:42 +00006375
Mark McLoughlindffcb712009-10-22 17:49:11 +01006376if test "$linux" = "yes" ; then
6377 echo "CONFIG_LINUX=y" >> $config_host_mak
6378fi
6379
bellard83fb7ad2004-07-05 21:25:26 +00006380if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006381 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006382fi
malcb29fe3e2008-11-18 01:42:22 +00006383
bellardec530c82006-04-25 22:36:06 +00006384if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006385 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006386fi
Andreas Färber179cf402010-09-20 00:50:43 +02006387if test "$haiku" = "yes" ; then
6388 echo "CONFIG_HAIKU=y" >> $config_host_mak
6389fi
bellard97a847b2003-08-10 21:36:04 +00006390if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006391 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006392fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006393if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006394 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006395fi
bellardc20709a2004-04-21 23:27:19 +00006396if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006397 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006398 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006399fi
ths8a16d272008-07-19 09:56:24 +00006400if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006401 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006402 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006403fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006404if test "$netmap" = "yes" ; then
6405 echo "CONFIG_NETMAP=y" >> $config_host_mak
6406fi
Gonglei015a33b2014-07-01 20:58:08 +08006407if test "$l2tpv3" = "yes" ; then
6408 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6409fi
Corey Bryant47e98652012-01-26 09:42:26 -05006410if test "$cap_ng" = "yes" ; then
6411 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6412fi
Juan Quintela2358a492009-07-27 16:13:25 +02006413echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006414for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006415 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006416 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006417 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006418 echo "$def=m" >> $config_host_mak ;;
6419 *)
6420 echo "$def=y" >> $config_host_mak ;;
6421 esac
malc0c58ac12008-06-25 21:04:05 +00006422done
Fam Zhengb1149912017-09-07 16:29:13 +08006423echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6424echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6425echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6426echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6427echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006428if test "$audio_pt_int" = "yes" ; then
6429 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6430fi
malcd5631632009-10-10 01:13:41 +04006431if test "$audio_win_int" = "yes" ; then
6432 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6433fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006434echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6435echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006436if test "$vnc" = "yes" ; then
6437 echo "CONFIG_VNC=y" >> $config_host_mak
6438fi
aliguori2f9606b2009-03-06 20:27:28 +00006439if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006440 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006441fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006442if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006443 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006444fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006445if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006446 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006447fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006448if test "$xkbcommon" = "yes" ; then
6449 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6450 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6451fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006452if test "$xfs" = "yes" ; then
6453 echo "CONFIG_XFS=y" >> $config_host_mak
6454fi
Stefan Weil89138852016-05-16 15:10:20 +02006455qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006456echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006457echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006458echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006459echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006460if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006461 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006462fi
Fam Zheng17969262014-02-10 14:48:56 +08006463if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006464 # $shacmd can generate a hash started with digit, which the compiler doesn't
6465 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006466 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006467 echo "CONFIG_MODULES=y" >> $config_host_mak
6468fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006469if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006470 echo "CONFIG_X11=y" >> $config_host_mak
6471 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6472 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6473fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006474if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006475 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006476 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006477 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006478 if test "$sdl_image" = "yes" ; then
6479 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6480 fi
bellard49ecc3f2007-11-07 19:25:15 +00006481fi
6482if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006483 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006484fi
6485if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006486 echo "CONFIG_CURSES=m" >> $config_host_mak
6487 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6488 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006489fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006490if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006491 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006492fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006493if test "$accept4" = "yes" ; then
6494 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6495fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306496if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006497 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306498fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006499if test "$eventfd" = "yes" ; then
6500 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6501fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006502if test "$memfd" = "yes" ; then
6503 echo "CONFIG_MEMFD=y" >> $config_host_mak
6504fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006505if test "$have_usbfs" = "yes" ; then
6506 echo "CONFIG_USBFS=y" >> $config_host_mak
6507fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006508if test "$fallocate" = "yes" ; then
6509 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6510fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006511if test "$fallocate_punch_hole" = "yes" ; then
6512 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6513fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006514if test "$fallocate_zero_range" = "yes" ; then
6515 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6516fi
Kevin Wolfed911432014-09-29 17:12:59 +02006517if test "$posix_fallocate" = "yes" ; then
6518 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6519fi
Peter Maydellc727f472011-01-06 11:05:10 +00006520if test "$sync_file_range" = "yes" ; then
6521 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6522fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006523if test "$fiemap" = "yes" ; then
6524 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6525fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006526if test "$dup3" = "yes" ; then
6527 echo "CONFIG_DUP3=y" >> $config_host_mak
6528fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006529if test "$ppoll" = "yes" ; then
6530 echo "CONFIG_PPOLL=y" >> $config_host_mak
6531fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006532if test "$prctl_pr_set_timerslack" = "yes" ; then
6533 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6534fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006535if test "$epoll" = "yes" ; then
6536 echo "CONFIG_EPOLL=y" >> $config_host_mak
6537fi
6538if test "$epoll_create1" = "yes" ; then
6539 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6540fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006541if test "$sendfile" = "yes" ; then
6542 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6543fi
Riku Voipio51834342014-06-22 11:25:42 +01006544if test "$timerfd" = "yes" ; then
6545 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6546fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006547if test "$setns" = "yes" ; then
6548 echo "CONFIG_SETNS=y" >> $config_host_mak
6549fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006550if test "$clock_adjtime" = "yes" ; then
6551 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6552fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006553if test "$syncfs" = "yes" ; then
6554 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6555fi
aurel323b3f24a2009-04-15 16:12:13 +00006556if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006557 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006558fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006559if test "$inotify1" = "yes" ; then
6560 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6561fi
Peter Maydell401bc052017-09-05 13:19:32 +01006562if test "$sem_timedwait" = "yes" ; then
6563 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6564fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006565if test "$strchrnul" = "yes" ; then
6566 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6567fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006568if test "$byteswap_h" = "yes" ; then
6569 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6570fi
6571if test "$bswap_h" = "yes" ; then
6572 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6573fi
Alexander Graf769ce762009-05-11 17:41:42 +02006574if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006575 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006576 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006577 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006578fi
aurel322e4d9fb2008-04-08 06:01:02 +00006579if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006580 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006581 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006582fi
balrogfb599c92008-09-28 23:49:55 +00006583if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006584 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006585 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006586fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006587if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006588 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006589 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006590 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006591 if test "$gtk_gl" = "yes" ; then
6592 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6593 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006594fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01006595if test "$gio" = "yes" ; then
6596 echo "CONFIG_GIO=y" >> $config_host_mak
6597 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6598 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6599fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006600echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006601if test "$gnutls" = "yes" ; then
6602 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6603fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006604if test "$gcrypt" = "yes" ; then
6605 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006606 if test "$gcrypt_hmac" = "yes" ; then
6607 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6608 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006609fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006610if test "$nettle" = "yes" ; then
6611 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006612 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006613fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006614if test "$tasn1" = "yes" ; then
6615 echo "CONFIG_TASN1=y" >> $config_host_mak
6616fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006617if test "$auth_pam" = "yes" ; then
6618 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6619fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006620if test "$have_ifaddrs_h" = "yes" ; then
6621 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6622fi
Eric Blake6b39b062016-10-11 10:46:23 -05006623if test "$have_broken_size_max" = "yes" ; then
6624 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6625fi
Jan Vesely277abf12016-04-29 13:15:23 -04006626
6627# Work around a system header bug with some kernel/XFS header
6628# versions where they both try to define 'struct fsxattr':
6629# xfs headers will not try to redefine structs from linux headers
6630# if this macro is set.
6631if test "$have_fsxattr" = "yes" ; then
6632 echo "HAVE_FSXATTR=y" >> $config_host_mak
6633fi
Fam Zheng1efad062018-06-01 17:26:43 +08006634if test "$have_copy_file_range" = "yes" ; then
6635 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6636fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006637if test "$vte" = "yes" ; then
6638 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006639 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006640 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006641fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006642if test "$virglrenderer" = "yes" ; then
6643 echo "CONFIG_VIRGL=y" >> $config_host_mak
6644 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6645 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6646fi
aliguorie37630c2009-04-22 15:19:10 +00006647if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006648 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006649 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00006650fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006651if test "$linux_aio" = "yes" ; then
6652 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6653fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006654if test "$attr" = "yes" ; then
6655 echo "CONFIG_ATTR=y" >> $config_host_mak
6656fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006657if test "$libattr" = "yes" ; then
6658 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6659fi
Meador Inge983eef52012-02-24 14:00:42 +05306660if test "$virtfs" = "yes" ; then
6661 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006662fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006663if test "$mpath" = "yes" ; then
6664 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006665 if test "$mpathpersist_new_api" = "yes"; then
6666 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6667 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006668fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006669if test "$vhost_scsi" = "yes" ; then
6670 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6671fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01006672if test "$vhost_net" = "yes" ; then
6673 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6674fi
6675if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01006676 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006677fi
Gonglei042cea22018-03-01 21:46:28 +08006678if test "$vhost_crypto" = "yes" ; then
6679 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6680fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006681if test "$vhost_vsock" = "yes" ; then
6682 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6683fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01006684if test "$vhost_kernel" = "yes" ; then
6685 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6686fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006687if test "$vhost_user" = "yes" ; then
6688 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6689fi
ths77755342008-11-27 15:45:16 +00006690if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006691 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006692fi
aliguoribf9298b2008-12-05 20:05:26 +00006693if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006694 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006695fi
aliguoriceb42de2009-04-07 18:43:28 +00006696if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006697 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006698fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006699if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006700 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006701fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006702if test "$membarrier" = "yes" ; then
6703 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6704fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006705if test "$signalfd" = "yes" ; then
6706 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6707fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00006708if test "$optreset" = "yes" ; then
6709 echo "HAVE_OPTRESET=y" >> $config_host_mak
6710fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006711if test "$tcg" = "yes"; then
6712 echo "CONFIG_TCG=y" >> $config_host_mak
6713 if test "$tcg_interpreter" = "yes" ; then
6714 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6715 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006716fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006717if test "$fdatasync" = "yes" ; then
6718 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6719fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006720if test "$madvise" = "yes" ; then
6721 echo "CONFIG_MADVISE=y" >> $config_host_mak
6722fi
6723if test "$posix_madvise" = "yes" ; then
6724 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6725fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006726if test "$posix_memalign" = "yes" ; then
6727 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6728fi
bellard97a847b2003-08-10 21:36:04 +00006729
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006730if test "$spice" = "yes" ; then
6731 echo "CONFIG_SPICE=y" >> $config_host_mak
6732fi
6733
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006734if test "$smartcard" = "yes" ; then
6735 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006736 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6737 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006738fi
6739
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006740if test "$libusb" = "yes" ; then
6741 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006742 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6743 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006744fi
6745
Hans de Goede69354a82011-07-19 11:04:10 +02006746if test "$usb_redir" = "yes" ; then
6747 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006748 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6749 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006750fi
6751
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006752if test "$opengl" = "yes" ; then
6753 echo "CONFIG_OPENGL=y" >> $config_host_mak
6754 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006755 if test "$opengl_dmabuf" = "yes" ; then
6756 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6757 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006758fi
6759
Yang Zhong5a22ab72017-12-20 21:16:46 +08006760if test "$malloc_trim" = "yes" ; then
6761 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6762fi
6763
Liang Li99f2dbd2016-03-08 13:53:16 +08006764if test "$avx2_opt" = "yes" ; then
6765 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6766fi
6767
qiaonuohan607dacd2014-02-18 14:11:30 +08006768if test "$lzo" = "yes" ; then
6769 echo "CONFIG_LZO=y" >> $config_host_mak
6770fi
6771
6772if test "$snappy" = "yes" ; then
6773 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6774fi
6775
Peter Wu6b383c02015-01-06 18:48:14 +01006776if test "$bzip2" = "yes" ; then
6777 echo "CONFIG_BZIP2=y" >> $config_host_mak
6778 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6779fi
6780
Julio Faracco83bc1f92018-11-05 13:08:04 -02006781if test "$lzfse" = "yes" ; then
6782 echo "CONFIG_LZFSE=y" >> $config_host_mak
6783 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6784fi
6785
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006786if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006787 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006788 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6789 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006790fi
6791
Peter Lieven6542aa92014-02-03 10:26:13 +01006792if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006793 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6794 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006795fi
6796
Eduardo Otubof7945732012-08-14 18:44:05 -03006797if test "$seccomp" = "yes"; then
6798 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006799 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6800 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006801fi
6802
bellard83fb7ad2004-07-05 21:25:26 +00006803# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006804if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006805 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006806fi
6807
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006808if test "$localtime_r" = "yes" ; then
6809 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6810fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006811if test "$qom_cast_debug" = "yes" ; then
6812 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6813fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006814if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006815 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006816 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6817 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006818fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006819
Peter Maydell7c2acc72013-04-08 12:11:27 +01006820echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006821if test "$coroutine_pool" = "yes" ; then
6822 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6823else
6824 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6825fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306826
Peter Lieven7d992e42016-09-27 11:58:45 +02006827if test "$debug_stack_usage" = "yes" ; then
6828 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6829fi
6830
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006831if test "$crypto_afalg" = "yes" ; then
6832 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6833fi
6834
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306835if test "$open_by_handle_at" = "yes" ; then
6836 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6837fi
6838
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306839if test "$linux_magic_h" = "yes" ; then
6840 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6841fi
6842
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006843if test "$pragma_diagnostic_available" = "yes" ; then
6844 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006845fi
6846
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006847if test "$valgrind_h" = "yes" ; then
6848 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6849fi
6850
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006851if test "$have_asan_iface_fiber" = "yes" ; then
6852 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6853fi
6854
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006855if test "$has_environ" = "yes" ; then
6856 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6857fi
6858
Richard Henderson76a347e2012-12-28 14:17:02 -08006859if test "$cpuid_h" = "yes" ; then
6860 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6861fi
6862
Richard Hendersonf5401662013-02-16 12:46:59 -08006863if test "$int128" = "yes" ; then
6864 echo "CONFIG_INT128=y" >> $config_host_mak
6865fi
6866
Richard Henderson7ebee432016-06-29 21:10:59 -07006867if test "$atomic128" = "yes" ; then
6868 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6869fi
6870
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006871if test "$cmpxchg128" = "yes" ; then
6872 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6873fi
6874
Richard Hendersondf79b992016-09-02 12:23:57 -07006875if test "$atomic64" = "yes" ; then
6876 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6877fi
6878
Richard Hendersondb432672017-09-15 14:11:45 -07006879if test "$vector16" = "yes" ; then
6880 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6881fi
6882
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006883if test "$getauxval" = "yes" ; then
6884 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6885fi
6886
Bharata B Raoeb100392012-09-24 14:42:45 +05306887if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006888 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006889 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6890 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306891fi
6892
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006893if test "$glusterfs_xlator_opt" = "yes" ; then
6894 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6895fi
6896
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306897if test "$glusterfs_discard" = "yes" ; then
6898 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6899fi
6900
Niels de Vosdf3a4292017-05-28 12:01:14 +05306901if test "$glusterfs_fallocate" = "yes" ; then
6902 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6903fi
6904
Bharata B Rao7c815372013-12-21 14:51:25 +05306905if test "$glusterfs_zerofill" = "yes" ; then
6906 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6907fi
6908
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006909if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006910 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006911 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6912 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006913fi
6914
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006915if test "$live_block_migration" = "yes" ; then
6916 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6917fi
6918
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006919if test "$tpm" = "yes"; then
6920 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006921 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006922 if test "$tpm_passthrough" = "yes"; then
6923 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6924 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006925 # TPM emulator support?
6926 if test "$tpm_emulator" = "yes"; then
6927 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6928 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006929fi
6930
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006931echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6932if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006933 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306934fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006935if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006936 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6937 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006938 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006939fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006940if have_backend "log"; then
6941 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02006942fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006943if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006944 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6945fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006946if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006947 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6948 if test "$trace_backend_stap" = "yes" ; then
6949 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6950 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006951fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006952if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006953 if test "$linux" = "yes" ; then
6954 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006955 else
Stewart Smith21684af2014-01-24 12:39:10 +11006956 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006957 fi
6958fi
Paul Durrant0a852412016-08-04 14:44:14 +01006959if have_backend "syslog"; then
6960 if test "$posix_syslog" = "yes" ; then
6961 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6962 else
6963 feature_not_found "syslog(trace backend)" "syslog not available"
6964 fi
6965fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006966echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6967
Michael R. Hines2da776d2013-07-22 10:01:54 -04006968if test "$rdma" = "yes" ; then
6969 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006970 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006971fi
6972
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006973if test "$pvrdma" = "yes" ; then
6974 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6975fi
6976
Laurent Vivier575b22b2016-06-02 22:14:15 +02006977if test "$have_rtnetlink" = "yes" ; then
6978 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6979fi
6980
Klim Kireeved279a02018-01-12 12:01:19 +03006981if test "$libxml2" = "yes" ; then
6982 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6983 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6984 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6985fi
6986
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006987if test "$replication" = "yes" ; then
6988 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6989fi
6990
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006991if test "$have_af_vsock" = "yes" ; then
6992 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6993fi
6994
Christopher Covington4d043512016-12-28 15:04:33 -05006995if test "$have_sysmacros" = "yes" ; then
6996 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6997fi
6998
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006999if test "$have_static_assert" = "yes" ; then
7000 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7001fi
7002
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007003if test "$have_utmpx" = "yes" ; then
7004 echo "HAVE_UTMPX=y" >> $config_host_mak
7005fi
7006
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007007if test "$ivshmem" = "yes" ; then
7008 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7009fi
Richard Hendersone219c492017-09-28 09:01:23 -07007010if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007011 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7012fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007013if test "$debug_mutex" = "yes" ; then
7014 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7015fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007016
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007017# Hold two types of flag:
7018# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7019# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007020# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007021# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007022if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007023 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007024 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7025elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7026 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7027 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007028fi
7029
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007030if test "$vxhs" = "yes" ; then
7031 echo "CONFIG_VXHS=y" >> $config_host_mak
7032 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7033fi
7034
Junyan He17824402018-07-18 15:47:59 +08007035if test "$libpmem" = "yes" ; then
7036 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7037fi
7038
Jeff Cody2f740132018-11-07 07:36:44 +01007039if test "$bochs" = "yes" ; then
7040 echo "CONFIG_BOCHS=y" >> $config_host_mak
7041fi
7042if test "$cloop" = "yes" ; then
7043 echo "CONFIG_CLOOP=y" >> $config_host_mak
7044fi
7045if test "$dmg" = "yes" ; then
7046 echo "CONFIG_DMG=y" >> $config_host_mak
7047fi
7048if test "$qcow1" = "yes" ; then
7049 echo "CONFIG_QCOW1=y" >> $config_host_mak
7050fi
7051if test "$vdi" = "yes" ; then
7052 echo "CONFIG_VDI=y" >> $config_host_mak
7053fi
7054if test "$vvfat" = "yes" ; then
7055 echo "CONFIG_VVFAT=y" >> $config_host_mak
7056fi
7057if test "$qed" = "yes" ; then
7058 echo "CONFIG_QED=y" >> $config_host_mak
7059fi
7060if test "$parallels" = "yes" ; then
7061 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7062fi
7063if test "$sheepdog" = "yes" ; then
7064 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7065fi
7066
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007067if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007068 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007069elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007070 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007071elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007072 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007073elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007074 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007075elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007076 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007077elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007078 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007079else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007080 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007081fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007082QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007083
Juan Quintela98ec69a2009-07-16 18:34:18 +02007084echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007085echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007086echo "MAKE=$make" >> $config_host_mak
7087echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007088echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7089echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007090echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7091echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007092echo "PYTHON=$python" >> $config_host_mak
Cleber Rosa755ee702018-11-09 10:07:07 -05007093echo "PYTHON_VERSION=$python_version" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007094echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007095if $iasl -h > /dev/null 2>&1; then
7096 echo "IASL=$iasl" >> $config_host_mak
7097fi
Juan Quintela804edf22009-07-27 16:12:49 +02007098echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007099echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007100echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007101echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007102echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007103echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007104echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007105echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007106echo "OBJCOPY=$objcopy" >> $config_host_mak
7107echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007108echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007109echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007110echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007111echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007112echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007113echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007114echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007115echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007116if test "$sparse" = "yes" ; then
7117 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007118 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007119 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007120 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7121 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7122fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01007123if test "$cross_prefix" != ""; then
7124 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
7125else
7126 echo "AUTOCONF_HOST := " >> $config_host_mak
7127fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007128echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007129echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007130echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007131echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007132echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007133echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007134echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007135echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007136echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007137echo "DSOSUF=$DSOSUF" >> $config_host_mak
7138echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007139echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007140echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7141echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007142echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007143if test "$gcov" = "yes" ; then
7144 echo "CONFIG_GCOV=y" >> $config_host_mak
7145 echo "GCOV=$gcov_tool" >> $config_host_mak
7146fi
Juan Quintela804edf22009-07-27 16:12:49 +02007147
Alex Bennée51a12b52018-04-04 14:24:39 +01007148if test "$docker" != "no"; then
7149 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7150fi
7151
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007152if test "$libudev" != "no"; then
7153 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7154 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7155fi
7156
Peter Maydell6efd7512011-11-30 11:59:04 +00007157# use included Linux headers
7158if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007159 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007160 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007161 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007162 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007163 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02007164 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01007165 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007166 ;;
7167 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007168 linux_arch=s390
7169 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007170 aarch64)
7171 linux_arch=arm64
7172 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007173 mips64)
7174 linux_arch=mips
7175 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007176 *)
7177 # For most CPUs the kernel architecture name and QEMU CPU name match.
7178 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007179 ;;
7180 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007181 # For non-KVM architectures we will not have asm headers
7182 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7183 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7184 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007185fi
7186
bellard1d14ffa2005-10-30 18:58:22 +00007187for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007188target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007189config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007190target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00007191target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02007192
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007193case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007194 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 +02007195 target_bigendian=yes
7196 ;;
7197esac
bellard97a847b2003-08-10 21:36:04 +00007198target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007199target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007200target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007201target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007202case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007203 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007204 target_softmmu="yes"
7205 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007206 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007207 target_user_only="yes"
7208 target_linux_user="yes"
7209 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007210 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007211 target_user_only="yes"
7212 target_bsd_user="yes"
7213 ;;
pbrook9e407a82007-05-26 16:38:53 +00007214 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007215 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007216 exit 1
7217 ;;
7218esac
ths831b7822007-01-18 20:06:33 +00007219
Alex Bennéed75402b2018-04-04 20:27:05 +01007220target_compiler=""
7221target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007222target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007223
bellard97a847b2003-08-10 21:36:04 +00007224mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007225echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007226
pbrooke5fe0c52006-06-11 13:32:59 +00007227bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007228mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007229interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007230gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007231
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007232TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007233TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007234TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007235
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007236case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007237 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007238 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307239 gdb_xml_files="i386-32bit.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007240 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007241 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007242 ;;
7243 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007244 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007245 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307246 gdb_xml_files="i386-64bit.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007247 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007248 ;;
7249 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007250 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007251 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007252 ;;
7253 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007254 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007255 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007256 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007257 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007258 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007259 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007260 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007261 aarch64|aarch64_be)
7262 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007263 TARGET_BASE_ARCH=arm
7264 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007265 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007266 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 +01007267 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007268 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007269 ;;
aurel322408a522008-04-20 20:19:44 +00007270 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007271 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007272 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007273 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007274 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007275 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007276 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007277 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007278 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007279 ;;
aurel322408a522008-04-20 20:19:44 +00007280 m68k)
aurel322408a522008-04-20 20:19:44 +00007281 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007282 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007283 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007284 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007285 microblaze|microblazeel)
7286 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007287 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007288 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007289 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007290 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007291 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007292 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007293 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007294 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007295 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007296 ;;
7297 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007298 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007299 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007300 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007301 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007302 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007303 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007304 ;;
7305 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007306 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007307 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007308 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007309 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007310 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007311 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007312 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007313 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007314 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007315 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007316 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007317 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007318 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007319 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007320 TARGET_ARCH=openrisc
7321 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007322 ;;
aurel322408a522008-04-20 20:19:44 +00007323 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007324 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007325 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007326 ;;
aurel322408a522008-04-20 20:19:44 +00007327 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007328 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007329 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307330 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007331 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 +01007332 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007333 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007334 ppc64le)
7335 TARGET_ARCH=ppc64
7336 TARGET_BASE_ARCH=ppc
7337 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307338 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007339 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 +01007340 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007341 ;;
aurel322408a522008-04-20 20:19:44 +00007342 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007343 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007344 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007345 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007346 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007347 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 +01007348 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007349 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007350 riscv32)
7351 TARGET_BASE_ARCH=riscv
7352 TARGET_ABI_DIR=riscv
7353 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007354 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007355 ;;
7356 riscv64)
7357 TARGET_BASE_ARCH=riscv
7358 TARGET_ABI_DIR=riscv
7359 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007360 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007361 ;;
aurel322408a522008-04-20 20:19:44 +00007362 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007363 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007364 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007365 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007366 ;;
7367 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007368 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007369 ;;
7370 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007371 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007372 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007373 ;;
7374 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007375 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007376 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007377 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007378 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007379 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007380 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007381 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007382 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007383 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 +01007384 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007385 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007386 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007387 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007388 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007389 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007390 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007391 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007392 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007393 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007394 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007395 xtensa|xtensaeb)
7396 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007397 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007398 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007399 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007400 ;;
aurel322408a522008-04-20 20:19:44 +00007401 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007402 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007403 ;;
7404esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007405# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7406if [ "$TARGET_BASE_ARCH" = "" ]; then
7407 TARGET_BASE_ARCH=$TARGET_ARCH
7408fi
7409
Alex Bennéed75402b2018-04-04 20:27:05 +01007410# Do we have a cross compiler for this target?
7411if has $target_compiler; then
7412
7413 write_c_skeleton
7414
Alex Bennée716a5072018-04-10 12:19:40 +01007415 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007416 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007417 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007418 target_compiler=""
7419 else
7420 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7421 target_compiler_static="n"
7422 fi
7423 else
7424 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7425 target_compiler_static="y"
7426 fi
7427else
7428 target_compiler=""
7429fi
7430
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007431symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7432
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007433upper() {
7434 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7435}
7436
Stefan Weil89138852016-05-16 15:10:20 +02007437target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007438echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007439echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007440echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007441if [ "$TARGET_ABI_DIR" = "" ]; then
7442 TARGET_ABI_DIR=$TARGET_ARCH
7443fi
Juan Quintela25be2102009-10-07 02:41:00 +02007444echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007445if [ "$HOST_VARIANT_DIR" != "" ]; then
7446 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7447fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007448
7449if supported_xen_target $target; then
7450 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007451 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007452 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007453 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007454 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007455else
7456 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007457fi
7458if supported_kvm_target $target; then
7459 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007460 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7461else
7462 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007463fi
7464if supported_hax_target $target; then
7465 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007466fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007467if supported_hvf_target $target; then
7468 echo "CONFIG_HVF=y" >> $config_target_mak
7469fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007470if supported_whpx_target $target; then
7471 echo "CONFIG_WHPX=y" >> $config_target_mak
7472fi
bellardde83cd02003-06-15 20:25:43 +00007473if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007474 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007475fi
7476if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007477 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007478 if test "$mttcg" = "yes" ; then
7479 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7480 fi
bellardde83cd02003-06-15 20:25:43 +00007481fi
bellard997344f2003-10-27 21:10:39 +00007482if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007483 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007484 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007485fi
ths831b7822007-01-18 20:06:33 +00007486if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007487 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007488fi
pbrook56aebc82008-10-11 17:55:29 +00007489list=""
7490if test ! -z "$gdb_xml_files" ; then
7491 for x in $gdb_xml_files; do
7492 list="$list $source_path/gdb-xml/$x"
7493 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007494 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007495fi
bellardde83cd02003-06-15 20:25:43 +00007496
Eric Blakee633a5c2019-02-04 20:39:37 -06007497if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007498 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007499fi
blueswir184778502008-10-26 20:33:16 +00007500if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007501 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007502fi
bellard5b0753e2005-03-01 21:37:28 +00007503
Alex Bennéed75402b2018-04-04 20:27:05 +01007504if test -n "$target_compiler"; then
7505 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7506
7507 if test -n "$target_compiler_static"; then
7508 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7509 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007510
7511 if test -n "$target_compiler_cflags"; then
7512 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7513 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007514fi
7515
Alex Bennée716a5072018-04-10 12:19:40 +01007516
Juan Quintela4afddb52009-08-03 14:46:45 +02007517# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007518
Juan Quintela4afddb52009-08-03 14:46:45 +02007519cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007520ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007521
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007522disas_config() {
7523 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7524 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7525}
7526
Juan Quintela64656022009-08-03 14:46:53 +02007527for i in $ARCH $TARGET_BASE_ARCH ; do
7528 case "$i" in
7529 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007530 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007531 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007532 aarch64)
7533 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007534 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007535 fi
7536 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007537 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007538 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007539 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007540 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007541 fi
Juan Quintela64656022009-08-03 14:46:53 +02007542 ;;
7543 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007544 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007545 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007546 hppa)
7547 disas_config "HPPA"
7548 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007549 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007550 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007551 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007552 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007553 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007554 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007555 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007556 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007557 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007558 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007559 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007560 ;;
7561 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007562 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007563 if test -n "${cxx}"; then
7564 disas_config "NANOMIPS"
7565 fi
Juan Quintela64656022009-08-03 14:46:53 +02007566 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007567 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007568 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007569 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007570 nios2)
7571 disas_config "NIOS2"
7572 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007573 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007574 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007575 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007576 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007577 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007578 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007579 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007580 disas_config "RISCV"
7581 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007582 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007583 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007584 ;;
7585 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007586 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007587 ;;
7588 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007589 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007590 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007591 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007592 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007593 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007594 esac
7595done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007596if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007597 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007598fi
Juan Quintela64656022009-08-03 14:46:53 +02007599
Juan Quintela6ee71262009-08-03 14:46:47 +02007600case "$ARCH" in
7601alpha)
7602 # Ensure there's only a single GP
7603 cflags="-msmall-data $cflags"
7604;;
7605esac
7606
Juan Quintelad02c1db2009-08-03 14:46:50 +02007607if test "$gprof" = "yes" ; then
Philippe Mathieu-Daudé0acf7de2019-01-03 16:09:50 +01007608 echo "TARGET_GPROF=y" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007609 if test "$target_linux_user" = "yes" ; then
7610 cflags="-p $cflags"
7611 ldflags="-p $ldflags"
7612 fi
7613 if test "$target_softmmu" = "yes" ; then
7614 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007615 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007616 fi
7617fi
7618
Eric Blakee633a5c2019-02-04 20:39:37 -06007619if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007620 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007621fi
Juan Quintelafa282482009-07-22 22:37:39 +02007622
Christian Borntraegere9a35912017-08-23 12:16:23 +02007623# Newer kernels on s390 check for an S390_PGSTE program header and
7624# enable the pgste page table extensions in that case. This makes
7625# the vm.allocate_pgste sysctl unnecessary. We enable this program
7626# header if
7627# - we build on s390x
7628# - we build the system emulation for s390x (qemu-system-s390x)
7629# - KVM is enabled
7630# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06007631if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7632 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02007633 if ld_has --s390-pgste ; then
7634 ldflags="-Wl,--s390-pgste $ldflags"
7635 fi
7636fi
7637
Juan Quintela25be2102009-10-07 02:41:00 +02007638echo "LDFLAGS+=$ldflags" >> $config_target_mak
7639echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007640
bellard97a847b2003-08-10 21:36:04 +00007641done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007642
Alex Bennéed75402b2018-04-04 20:27:05 +01007643if test -n "$enabled_cross_compilers"; then
7644 echo
7645 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7646fi
7647
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007648if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007649 echo "config-host.h: subdir-dtc" >> $config_host_mak
7650fi
Richard Hendersone219c492017-09-28 09:01:23 -07007651if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7652 echo "config-host.h: subdir-capstone" >> $config_host_mak
7653fi
7654if test -n "$LIBCAPSTONE"; then
7655 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7656fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007657
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007658if test "$numa" = "yes"; then
7659 echo "CONFIG_NUMA=y" >> $config_host_mak
7660fi
7661
John Snowfd0e6052015-03-25 18:57:39 -04007662if test "$ccache_cpp2" = "yes"; then
7663 echo "export CCACHE_CPP2=y" >> $config_host_mak
7664fi
7665
Peter Maydelle29e5c62018-11-02 11:52:38 +00007666# If we're using a separate build tree, set it up now.
7667# DIRS are directories which we simply mkdir in the build tree;
7668# LINKS are things to symlink back into the source tree
7669# (these can be both files and directories).
7670# Caution: do not add files or directories here using wildcards. This
7671# will result in problems later if a new file matching the wildcard is
7672# added to the source tree -- nothing will cause configure to be rerun
7673# so the build tree will be missing the link back to the new file, and
7674# tests might fail. Prefer to keep the relevant files in their own
7675# directory and symlink the directory instead.
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007676DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -05007677DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007678DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007679DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007680DIRS="$DIRS roms/seabios roms/vgabios"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007681LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt"
7682LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7683LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7684LINKS="$LINKS tests/fp/Makefile"
7685LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7686LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7687LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7688LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7689LINKS="$LINKS pc-bios/qemu-icon.bmp"
7690LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007691LINKS="$LINKS tests/acceptance tests/data"
7692LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05007693LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07007694for bios_file in \
7695 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007696 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007697 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007698 $source_path/pc-bios/*.rom \
7699 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007700 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007701 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007702 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007703 $source_path/pc-bios/palcode-*
7704do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007705 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007706done
7707mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007708for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007709 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007710 symlink "$source_path/$f" "$f"
7711 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007712done
Paul Brook1ad21342009-05-19 16:17:58 +01007713
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007714# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007715for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007716 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007717 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007718 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007719 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007720 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007721 echo "CC=$cc" >> $config_mak
7722 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007723 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007724 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007725 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007726 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007727 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007728done
7729
Max Reitz76c75602014-05-24 23:24:56 +02007730# set up qemu-iotests in this build directory
7731iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007732
7733echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7734echo >> "$iotests_common_env"
7735echo "export PYTHON='$python'" >> "$iotests_common_env"
7736
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007737# Save the configure command line for later reuse.
7738cat <<EOD >config.status
7739#!/bin/sh
7740# Generated by configure.
7741# Run this file to recreate the current configuration.
7742# Compiler output produced by configure, useful for debugging
7743# configure, is in config.log if it exists.
7744EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007745
7746preserve_env() {
7747 envname=$1
7748
7749 eval envval=\$$envname
7750
7751 if test -n "$envval"
7752 then
7753 echo "$envname='$envval'" >> config.status
7754 echo "export $envname" >> config.status
7755 else
7756 echo "unset $envname" >> config.status
7757 fi
7758}
7759
7760# Preserve various env variables that influence what
7761# features/build target configure will detect
7762preserve_env AR
7763preserve_env AS
7764preserve_env CC
7765preserve_env CPP
7766preserve_env CXX
7767preserve_env INSTALL
7768preserve_env LD
7769preserve_env LD_LIBRARY_PATH
7770preserve_env LIBTOOL
7771preserve_env MAKE
7772preserve_env NM
7773preserve_env OBJCOPY
7774preserve_env PATH
7775preserve_env PKG_CONFIG
7776preserve_env PKG_CONFIG_LIBDIR
7777preserve_env PKG_CONFIG_PATH
7778preserve_env PYTHON
7779preserve_env SDL_CONFIG
7780preserve_env SDL2_CONFIG
7781preserve_env SMBD
7782preserve_env STRIP
7783preserve_env WINDRES
7784
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007785printf "exec" >>config.status
7786printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007787echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007788chmod +x config.status
7789
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007790rm -r "$TMPDIR1"