blob: 9c49c97cb8eec6974cdfb3ab419d91e08c2195ea [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"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100466vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200467virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400468tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100469libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100470live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800471numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800472tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200473jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800474replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700475vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100476bochs="yes"
477cloop="yes"
478dmg="yes"
479qcow1="yes"
480vdi="yes"
481vvfat="yes"
482qed="yes"
483parallels="yes"
484sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300485libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100486docker="no"
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200487debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800488libpmem=""
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200489libudev="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100490
Alex Bennéed75402b2018-04-04 20:27:05 +0100491# cross compilers defaults, can be overridden with --cross-cc-ARCH
492cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100493cross_cc_aarch64_be="$cross_cc_aarch64"
494cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100495cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100496cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100497cross_cc_i386="i386-pc-linux-gnu-gcc"
498cross_cc_cflags_i386=""
Alex Bennéed75402b2018-04-04 20:27:05 +0100499cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100500cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100501
502enabled_cross_compilers=""
503
Peter Maydell898be3e2017-03-21 14:31:57 +0000504supported_cpu="no"
505supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100506bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800507malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000508
aliguoriac0df512008-12-29 17:14:15 +0000509# parse CC options first
510for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200511 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000512 case "$opt" in
513 --cross-prefix=*) cross_prefix="$optarg"
514 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100515 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000516 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400517 --cxx=*) CXX="$optarg"
518 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100519 --source-path=*) source_path="$optarg"
520 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200521 --cpu=*) cpu="$optarg"
522 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100523 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200524 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100525 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100526 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100527 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100528 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200529 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100530 --enable-debug-info) debug_info="yes"
531 ;;
532 --disable-debug-info) debug_info="no"
533 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100534 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
535 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100536 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
537 eval "cross_cc_cflags_${cc_arch}=\$optarg"
538 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100539 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
540 eval "cross_cc_${cc_arch}=\$optarg"
541 ;;
aliguoriac0df512008-12-29 17:14:15 +0000542 esac
543done
aliguoriac0df512008-12-29 17:14:15 +0000544# OS specific
545# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100546# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000547
Peter Maydelle49d0212012-12-07 15:39:13 +0000548# Preferred compiler:
549# ${CC} (if set)
550# ${cross_prefix}gcc (if cross-prefix specified)
551# system compiler
552if test -z "${CC}${cross_prefix}"; then
553 cc="$host_cc"
554else
555 cc="${CC-${cross_prefix}gcc}"
556fi
557
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400558if test -z "${CXX}${cross_prefix}"; then
559 cxx="c++"
560else
561 cxx="${CXX-${cross_prefix}g++}"
562fi
563
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500564ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700565as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700566ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000567cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500568objcopy="${OBJCOPY-${cross_prefix}objcopy}"
569ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800570ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200571nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500572strip="${STRIP-${cross_prefix}strip}"
573windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300574pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
575query_pkg_config() {
576 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
577}
578pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000579sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000580
Peter Maydell45d285a2013-10-21 21:03:06 +0100581# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
582ARFLAGS="${ARFLAGS-rv}"
583
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200584# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100585# We use -fwrapv to tell the compiler that we require a C dialect where
586# left shift of signed integers is well defined and has the expected
587# 2s-complement style results. (Both clang and gcc agree that it
588# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100589QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400590QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100591QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200592QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200593QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100594if test "$debug_info" = "yes"; then
595 CFLAGS="-g $CFLAGS"
596 LDFLAGS="-g $LDFLAGS"
597fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200598
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100599# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200600source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100601
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300602# running configure in the source tree?
603# we know that's the case if configure is there.
604if test -f "./configure"; then
605 pwd_is_source_path="y"
606else
607 pwd_is_source_path="n"
608fi
609
aliguoriac0df512008-12-29 17:14:15 +0000610check_define() {
611cat > $TMPC <<EOF
612#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000613#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000614#endif
615int main(void) { return 0; }
616EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200617 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000618}
619
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200620check_include() {
621cat > $TMPC <<EOF
622#include <$1>
623int main(void) { return 0; }
624EOF
625 compile_object
626}
627
John Snow93b25862015-03-25 18:57:37 -0400628write_c_skeleton() {
629 cat > $TMPC <<EOF
630int main(void) { return 0; }
631EOF
632}
633
Peter Maydellbbea4052012-08-14 15:35:34 +0100634if check_define __linux__ ; then
635 targetos="Linux"
636elif check_define _WIN32 ; then
637 targetos='MINGW32'
638elif check_define __OpenBSD__ ; then
639 targetos='OpenBSD'
640elif check_define __sun__ ; then
641 targetos='SunOS'
642elif check_define __HAIKU__ ; then
643 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100644elif check_define __FreeBSD__ ; then
645 targetos='FreeBSD'
646elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
647 targetos='GNU/kFreeBSD'
648elif check_define __DragonFly__ ; then
649 targetos='DragonFly'
650elif check_define __NetBSD__; then
651 targetos='NetBSD'
652elif check_define __APPLE__; then
653 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100654else
Peter Maydell951fedf2017-07-13 16:15:32 +0100655 # This is a fatal error, but don't report it yet, because we
656 # might be going to just print the --help text, or it might
657 # be the result of a missing compiler.
658 targetos='bogus'
659 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100660fi
661
662# Some host OSes need non-standard checks for which CPU to use.
663# Note that these checks are broken for cross-compilation: if you're
664# cross-compiling to one of these OSes then you'll need to specify
665# the correct CPU with the --cpu option.
666case $targetos in
667Darwin)
668 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
669 # run 64-bit userspace code.
670 # If the user didn't specify a CPU explicitly and the kernel says this is
671 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
672 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
673 cpu="x86_64"
674 fi
675 ;;
676SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200677 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100678 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
679 cpu="x86_64"
680 fi
681esac
682
Juan Quintela2ff6b912009-08-03 14:45:55 +0200683if test ! -z "$cpu" ; then
684 # command line argument
685 :
686elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000687 cpu="i386"
688elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700689 if check_define __ILP32__ ; then
690 cpu="x32"
691 else
692 cpu="x86_64"
693 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000694elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000695 if check_define __arch64__ ; then
696 cpu="sparc64"
697 else
698 cpu="sparc"
699 fi
malcfdf7ed92009-01-14 18:39:52 +0000700elif check_define _ARCH_PPC ; then
701 if check_define _ARCH_PPC64 ; then
702 cpu="ppc64"
703 else
704 cpu="ppc"
705 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200706elif check_define __mips__ ; then
707 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200708elif check_define __s390__ ; then
709 if check_define __s390x__ ; then
710 cpu="s390x"
711 else
712 cpu="s390"
713 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000714elif check_define __riscv ; then
715 if check_define _LP64 ; then
716 cpu="riscv64"
717 else
718 cpu="riscv32"
719 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100720elif check_define __arm__ ; then
721 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100722elif check_define __aarch64__ ; then
723 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000724else
Stefan Weil89138852016-05-16 15:10:20 +0200725 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000726fi
727
Peter Maydell359bc952011-12-24 13:07:25 +0000728ARCH=
729# Normalise host CPU name and set ARCH.
730# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000731case "$cpu" in
Alistair Francisc4f80542018-12-19 19:20:19 +0000732 ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000733 cpu="$cpu"
734 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100735 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000736 ;;
bellard7d132992003-03-06 23:23:54 +0000737 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000738 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000739 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100740 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000741 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000742 x86_64|amd64)
743 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000744 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100745 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000746 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100747 armv*b|armv*l|arm)
748 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000749 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100750 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000751 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100752 aarch64)
753 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000754 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100755 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100756 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200757 mips*)
758 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000759 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100760 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200761 ;;
blueswir131422552007-04-16 18:27:06 +0000762 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000763 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100764 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100765 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000766 ;;
bellard7d132992003-03-06 23:23:54 +0000767 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000768 # This will result in either an error or falling back to TCI later
769 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000770 ;;
771esac
Peter Maydell359bc952011-12-24 13:07:25 +0000772if test -z "$ARCH"; then
773 ARCH="$cpu"
774fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200775
bellard7d132992003-03-06 23:23:54 +0000776# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200777
Stacey Sonadfc3e92014-06-08 09:57:22 -0700778# host *BSD for user mode
779HOST_VARIANT_DIR=""
780
bellard7d132992003-03-06 23:23:54 +0000781case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000782MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200783 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100784 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100785 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200786 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200787 if check_include dsound.h; then
788 audio_drv_list="dsound"
789 else
790 audio_drv_list=""
791 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000792 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000793;;
ths5c40d2b2007-06-23 16:03:36 +0000794GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100795 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100796 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200797 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000798;;
bellard7d3505c2004-05-12 19:32:15 +0000799FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200800 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100801 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100802 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200803 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100804 # needed for kinfo_getvmmap(3) in libutil.h
805 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500806 # needed for kinfo_getproc
807 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100808 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700809 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000810 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000811;;
blueswir1c5e97232009-03-07 20:06:23 +0000812DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200813 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100814 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100815 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200816 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700817 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000818;;
bellard7d3505c2004-05-12 19:32:15 +0000819NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200820 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100821 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100822 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100823 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200824 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200825 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700826 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200827 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000828;;
829OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200830 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100831 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100832 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200833 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700834 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500835 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000836;;
bellard83fb7ad2004-07-05 21:25:26 +0000837Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200838 bsd="yes"
839 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100840 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500841 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800842 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200843 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200844 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200845 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200846 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200847 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100848 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200849 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200850 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200851 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100852 # Disable attempts to use ObjectiveC features in os/object.h since they
853 # won't work when we're compiling with gcc as a C compiler.
854 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700855 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000856 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000857;;
bellardec530c82006-04-25 22:36:06 +0000858SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200859 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100860 make="${MAKE-gmake}"
861 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400862 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200863 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100864 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200865 fi
866 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000867# needed for CMSG_ macros in sys/socket.h
868 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
869# needed for TIOCWIN* defines in termios.h
870 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200871 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200872 solarisnetlibs="-lsocket -lnsl -lresolv"
873 LIBS="$solarisnetlibs $LIBS"
874 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000875;;
Andreas Färber179cf402010-09-20 00:50:43 +0200876Haiku)
877 haiku="yes"
878 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
879 LIBS="-lposix_error_mapper -lnetwork $LIBS"
880;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000881Linux)
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100882 audio_drv_list="try-pa try-alsa try-sdl oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200883 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200884 linux="yes"
885 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200886 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600887 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000888 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200889 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000890;;
bellard7d132992003-03-06 23:23:54 +0000891esac
892
bellard7d3505c2004-05-12 19:32:15 +0000893if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000894 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200895 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000896 fi
bellard7d3505c2004-05-12 19:32:15 +0000897fi
898
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100899: ${make=${MAKE-make}}
900: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100901: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400902: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100903
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100904# Default objcc to clang if available, otherwise use CC
905if has clang; then
906 objcc=clang
907else
908 objcc="$cc"
909fi
910
Juan Quintela3457a3f2009-08-03 14:46:07 +0200911if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200912 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800913 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100914 # MinGW needs -mthreads for TLS and macro _MT.
915 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100916 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400917 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100918 if compile_prog "" "-liberty" ; then
919 LIBS="-liberty $LIBS"
920 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200921 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200922 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300923 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300924 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200925 bindir="\${prefix}"
926 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200927 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200928 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300929 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200930fi
931
Anthony Liguori487fefd2009-06-11 13:28:25 -0500932werror=""
bellard85aa5182007-11-11 20:17:03 +0000933
bellard7d132992003-03-06 23:23:54 +0000934for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200935 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000936 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000937 --help|-h) show_help=yes
938 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400939 --version|-V) exec cat $source_path/VERSION
940 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000941 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000942 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000943 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000944 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100945 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000946 ;;
aliguoriac0df512008-12-29 17:14:15 +0000947 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000948 ;;
aliguoriac0df512008-12-29 17:14:15 +0000949 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000950 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000951 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000952 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400953 --cxx=*)
954 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200955 --iasl=*) iasl="$optarg"
956 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100957 --objcc=*) objcc="$optarg"
958 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000959 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000960 ;;
pbrook6a882642006-04-17 13:57:12 +0000961 --install=*) install="$optarg"
962 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000963 --python=*) python="$optarg"
964 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000965 --gcov=*) gcov_tool="$optarg"
966 ;;
Brade2d88302011-09-02 16:53:28 -0400967 --smbd=*) smbd="$optarg"
968 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200969 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000970 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100971 --extra-cxxflags=*)
972 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200973 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000974 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100975 --enable-debug-info)
976 ;;
977 --disable-debug-info)
978 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100979 --cross-cc-*)
980 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800981 --enable-modules)
982 modules="yes"
983 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000984 --disable-modules)
985 modules="no"
986 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200987 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000988 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000989 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000990 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200991 --enable-trace-backends=*) trace_backends="$optarg"
992 ;;
993 # XXX: backwards compatibility
994 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100995 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100996 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100997 ;;
bellard7d132992003-03-06 23:23:54 +0000998 --enable-gprof) gprof="yes"
999 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001000 --enable-gcov) gcov="yes"
1001 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +01001002 --static)
1003 static="yes"
1004 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001005 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001006 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001007 --mandir=*) mandir="$optarg"
1008 ;;
1009 --bindir=*) bindir="$optarg"
1010 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001011 --libdir=*) libdir="$optarg"
1012 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001013 --libexecdir=*) libexecdir="$optarg"
1014 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001015 --includedir=*) includedir="$optarg"
1016 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001017 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001018 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001019 --with-confsuffix=*) confsuffix="$optarg"
1020 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001021 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001022 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001023 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001024 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001025 --localstatedir=*) local_statedir="$optarg"
1026 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001027 --firmwarepath=*) firmwarepath="$optarg"
1028 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001029 --host=*|--build=*|\
1030 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001031 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001032 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1033 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1034 # These switches are silently ignored, for compatibility with
1035 # autoconf-generated configure scripts. This allows QEMU's
1036 # configure to be used by RPM and similar macros that set
1037 # lots of directory switches by default.
1038 ;;
bellard97a847b2003-08-10 21:36:04 +00001039 --disable-sdl) sdl="no"
1040 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001041 --enable-sdl) sdl="yes"
1042 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001043 --disable-sdl-image) sdl_image="no"
1044 ;;
1045 --enable-sdl-image) sdl_image="yes"
1046 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001047 --disable-qom-cast-debug) qom_cast_debug="no"
1048 ;;
1049 --enable-qom-cast-debug) qom_cast_debug="yes"
1050 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301051 --disable-virtfs) virtfs="no"
1052 ;;
1053 --enable-virtfs) virtfs="yes"
1054 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001055 --disable-mpath) mpath="no"
1056 ;;
1057 --enable-mpath) mpath="yes"
1058 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001059 --disable-vnc) vnc="no"
1060 ;;
1061 --enable-vnc) vnc="yes"
1062 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001063 --oss-lib=*) oss_lib="$optarg"
1064 ;;
malc0c58ac12008-06-25 21:04:05 +00001065 --audio-drv-list=*) audio_drv_list="$optarg"
1066 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001067 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001068 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001069 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001070 ;;
aurel32f8393942009-04-13 18:45:38 +00001071 --enable-debug-tcg) debug_tcg="yes"
1072 ;;
1073 --disable-debug-tcg) debug_tcg="no"
1074 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001075 --enable-debug)
1076 # Enable debugging options that aren't excessively noisy
1077 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001078 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001079 debug="yes"
1080 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001081 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001082 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001083 --enable-sanitizers) sanitizers="yes"
1084 ;;
1085 --disable-sanitizers) sanitizers="no"
1086 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001087 --enable-sparse) sparse="yes"
1088 ;;
1089 --disable-sparse) sparse="no"
1090 ;;
aliguori1625af82009-04-05 17:41:02 +00001091 --disable-strip) strip_opt="no"
1092 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001093 --disable-vnc-sasl) vnc_sasl="no"
1094 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001095 --enable-vnc-sasl) vnc_sasl="yes"
1096 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001097 --disable-vnc-jpeg) vnc_jpeg="no"
1098 ;;
1099 --enable-vnc-jpeg) vnc_jpeg="yes"
1100 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001101 --disable-vnc-png) vnc_png="no"
1102 ;;
1103 --enable-vnc-png) vnc_png="yes"
1104 ;;
bellard443f1372004-06-04 11:13:20 +00001105 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001106 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001107 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001108 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001109 --enable-vde) vde="yes"
1110 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001111 --disable-netmap) netmap="no"
1112 ;;
1113 --enable-netmap) netmap="yes"
1114 ;;
aliguorie37630c2009-04-22 15:19:10 +00001115 --disable-xen) xen="no"
1116 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001117 --enable-xen) xen="yes"
1118 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001119 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1120 ;;
1121 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1122 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001123 --disable-brlapi) brlapi="no"
1124 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001125 --enable-brlapi) brlapi="yes"
1126 ;;
balrogfb599c92008-09-28 23:49:55 +00001127 --disable-bluez) bluez="no"
1128 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001129 --enable-bluez) bluez="yes"
1130 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001131 --disable-kvm) kvm="no"
1132 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001133 --enable-kvm) kvm="yes"
1134 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001135 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001136 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001137 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001138 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001139 --disable-hvf) hvf="no"
1140 ;;
1141 --enable-hvf) hvf="yes"
1142 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001143 --disable-whpx) whpx="no"
1144 ;;
1145 --enable-whpx) whpx="yes"
1146 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001147 --disable-tcg-interpreter) tcg_interpreter="no"
1148 ;;
1149 --enable-tcg-interpreter) tcg_interpreter="yes"
1150 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001151 --disable-cap-ng) cap_ng="no"
1152 ;;
1153 --enable-cap-ng) cap_ng="yes"
1154 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001155 --disable-tcg) tcg="no"
1156 ;;
1157 --enable-tcg) tcg="yes"
1158 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001159 --disable-malloc-trim) malloc_trim="no"
1160 ;;
1161 --enable-malloc-trim) malloc_trim="yes"
1162 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001163 --disable-spice) spice="no"
1164 ;;
1165 --enable-spice) spice="yes"
1166 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001167 --disable-libiscsi) libiscsi="no"
1168 ;;
1169 --enable-libiscsi) libiscsi="yes"
1170 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001171 --disable-libnfs) libnfs="no"
1172 ;;
1173 --enable-libnfs) libnfs="yes"
1174 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001175 --enable-profiler) profiler="yes"
1176 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001177 --disable-cocoa) cocoa="no"
1178 ;;
malcc2de5c92008-06-28 19:13:06 +00001179 --enable-cocoa)
1180 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001181 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001182 ;;
pbrookcad25d62006-03-19 16:31:11 +00001183 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001184 ;;
pbrookcad25d62006-03-19 16:31:11 +00001185 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001186 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001187 --disable-user)
1188 linux_user="no" ;
1189 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001190 ;;
1191 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001192 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001193 ;;
ths831b7822007-01-18 20:06:33 +00001194 --enable-linux-user) linux_user="yes"
1195 ;;
blueswir184778502008-10-26 20:33:16 +00001196 --disable-bsd-user) bsd_user="no"
1197 ;;
1198 --enable-bsd-user) bsd_user="yes"
1199 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001200 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001201 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001202 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001203 ;;
bellard85aa5182007-11-11 20:17:03 +00001204 --enable-werror) werror="yes"
1205 ;;
1206 --disable-werror) werror="no"
1207 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001208 --enable-stack-protector) stack_protector="yes"
1209 ;;
1210 --disable-stack-protector) stack_protector="no"
1211 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001212 --disable-curses) curses="no"
1213 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001214 --enable-curses) curses="yes"
1215 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001216 --disable-curl) curl="no"
1217 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001218 --enable-curl) curl="yes"
1219 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001220 --disable-fdt) fdt="no"
1221 ;;
1222 --enable-fdt) fdt="yes"
1223 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001224 --disable-linux-aio) linux_aio="no"
1225 ;;
1226 --enable-linux-aio) linux_aio="yes"
1227 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001228 --disable-attr) attr="no"
1229 ;;
1230 --enable-attr) attr="yes"
1231 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001232 --disable-membarrier) membarrier="no"
1233 ;;
1234 --enable-membarrier) membarrier="yes"
1235 ;;
ths77755342008-11-27 15:45:16 +00001236 --disable-blobs) blobs="no"
1237 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001238 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001239 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001240 --with-coroutine=*) coroutine="$optarg"
1241 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001242 --disable-coroutine-pool) coroutine_pool="no"
1243 ;;
1244 --enable-coroutine-pool) coroutine_pool="yes"
1245 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001246 --enable-debug-stack-usage) debug_stack_usage="yes"
1247 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001248 --enable-crypto-afalg) crypto_afalg="yes"
1249 ;;
1250 --disable-crypto-afalg) crypto_afalg="no"
1251 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001252 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001253 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001254 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001255 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001256 --disable-vhost-net) vhost_net="no"
1257 ;;
1258 --enable-vhost-net) vhost_net="yes"
1259 ;;
Gonglei042cea22018-03-01 21:46:28 +08001260 --disable-vhost-crypto) vhost_crypto="no"
1261 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001262 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001263 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001264 --disable-vhost-scsi) vhost_scsi="no"
1265 ;;
1266 --enable-vhost-scsi) vhost_scsi="yes"
1267 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001268 --disable-vhost-vsock) vhost_vsock="no"
1269 ;;
1270 --enable-vhost-vsock) vhost_vsock="yes"
1271 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001272 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001273 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001274 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001275 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001276 --disable-rbd) rbd="no"
1277 ;;
1278 --enable-rbd) rbd="yes"
1279 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001280 --disable-xfsctl) xfs="no"
1281 ;;
1282 --enable-xfsctl) xfs="yes"
1283 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001284 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001285 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001286 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001287 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001288 --disable-libusb) libusb="no"
1289 ;;
1290 --enable-libusb) libusb="yes"
1291 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001292 --disable-usb-redir) usb_redir="no"
1293 ;;
1294 --enable-usb-redir) usb_redir="yes"
1295 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001296 --disable-zlib-test) zlib="no"
1297 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001298 --disable-lzo) lzo="no"
1299 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001300 --enable-lzo) lzo="yes"
1301 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001302 --disable-snappy) snappy="no"
1303 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001304 --enable-snappy) snappy="yes"
1305 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001306 --disable-bzip2) bzip2="no"
1307 ;;
1308 --enable-bzip2) bzip2="yes"
1309 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001310 --enable-lzfse) lzfse="yes"
1311 ;;
1312 --disable-lzfse) lzfse="no"
1313 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001314 --enable-guest-agent) guest_agent="yes"
1315 ;;
1316 --disable-guest-agent) guest_agent="no"
1317 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001318 --enable-guest-agent-msi) guest_agent_msi="yes"
1319 ;;
1320 --disable-guest-agent-msi) guest_agent_msi="no"
1321 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001322 --with-vss-sdk) vss_win32_sdk=""
1323 ;;
1324 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1325 ;;
1326 --without-vss-sdk) vss_win32_sdk="no"
1327 ;;
1328 --with-win-sdk) win_sdk=""
1329 ;;
1330 --with-win-sdk=*) win_sdk="$optarg"
1331 ;;
1332 --without-win-sdk) win_sdk="no"
1333 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001334 --enable-tools) want_tools="yes"
1335 ;;
1336 --disable-tools) want_tools="no"
1337 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001338 --enable-seccomp) seccomp="yes"
1339 ;;
1340 --disable-seccomp) seccomp="no"
1341 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301342 --disable-glusterfs) glusterfs="no"
1343 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001344 --disable-avx2) avx2_opt="no"
1345 ;;
1346 --enable-avx2) avx2_opt="yes"
1347 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301348 --enable-glusterfs) glusterfs="yes"
1349 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001350 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1351 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001352 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001353 --enable-vhdx|--disable-vhdx)
1354 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1355 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001356 --enable-uuid|--disable-uuid)
1357 echo "$0: $opt is obsolete, UUID support is always built" >&2
1358 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001359 --disable-gtk) gtk="no"
1360 ;;
1361 --enable-gtk) gtk="yes"
1362 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001363 --tls-priority=*) tls_priority="$optarg"
1364 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001365 --disable-gnutls) gnutls="no"
1366 ;;
1367 --enable-gnutls) gnutls="yes"
1368 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001369 --disable-nettle) nettle="no"
1370 ;;
1371 --enable-nettle) nettle="yes"
1372 ;;
1373 --disable-gcrypt) gcrypt="no"
1374 ;;
1375 --enable-gcrypt) gcrypt="yes"
1376 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001377 --enable-rdma) rdma="yes"
1378 ;;
1379 --disable-rdma) rdma="no"
1380 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001381 --enable-pvrdma) pvrdma="yes"
1382 ;;
1383 --disable-pvrdma) pvrdma="no"
1384 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001385 --disable-vte) vte="no"
1386 ;;
1387 --enable-vte) vte="yes"
1388 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001389 --disable-virglrenderer) virglrenderer="no"
1390 ;;
1391 --enable-virglrenderer) virglrenderer="yes"
1392 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001393 --disable-tpm) tpm="no"
1394 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001395 --enable-tpm) tpm="yes"
1396 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001397 --disable-libssh2) libssh2="no"
1398 ;;
1399 --enable-libssh2) libssh2="yes"
1400 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001401 --disable-live-block-migration) live_block_migration="no"
1402 ;;
1403 --enable-live-block-migration) live_block_migration="yes"
1404 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001405 --disable-numa) numa="no"
1406 ;;
1407 --enable-numa) numa="yes"
1408 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001409 --disable-libxml2) libxml2="no"
1410 ;;
1411 --enable-libxml2) libxml2="yes"
1412 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001413 --disable-tcmalloc) tcmalloc="no"
1414 ;;
1415 --enable-tcmalloc) tcmalloc="yes"
1416 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001417 --disable-jemalloc) jemalloc="no"
1418 ;;
1419 --enable-jemalloc) jemalloc="yes"
1420 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001421 --disable-replication) replication="no"
1422 ;;
1423 --enable-replication) replication="yes"
1424 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001425 --disable-vxhs) vxhs="no"
1426 ;;
1427 --enable-vxhs) vxhs="yes"
1428 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001429 --disable-bochs) bochs="no"
1430 ;;
1431 --enable-bochs) bochs="yes"
1432 ;;
1433 --disable-cloop) cloop="no"
1434 ;;
1435 --enable-cloop) cloop="yes"
1436 ;;
1437 --disable-dmg) dmg="no"
1438 ;;
1439 --enable-dmg) dmg="yes"
1440 ;;
1441 --disable-qcow1) qcow1="no"
1442 ;;
1443 --enable-qcow1) qcow1="yes"
1444 ;;
1445 --disable-vdi) vdi="no"
1446 ;;
1447 --enable-vdi) vdi="yes"
1448 ;;
1449 --disable-vvfat) vvfat="no"
1450 ;;
1451 --enable-vvfat) vvfat="yes"
1452 ;;
1453 --disable-qed) qed="no"
1454 ;;
1455 --enable-qed) qed="yes"
1456 ;;
1457 --disable-parallels) parallels="no"
1458 ;;
1459 --enable-parallels) parallels="yes"
1460 ;;
1461 --disable-sheepdog) sheepdog="no"
1462 ;;
1463 --enable-sheepdog) sheepdog="yes"
1464 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001465 --disable-vhost-user) vhost_user="no"
1466 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001467 --enable-vhost-user) vhost_user="yes"
1468 ;;
1469 --disable-vhost-kernel) vhost_kernel="no"
1470 ;;
1471 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001472 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001473 --disable-capstone) capstone="no"
1474 ;;
1475 --enable-capstone) capstone="yes"
1476 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001477 --enable-capstone=git) capstone="git"
1478 ;;
1479 --enable-capstone=system) capstone="system"
1480 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001481 --with-git=*) git="$optarg"
1482 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001483 --enable-git-update) git_update=yes
1484 ;;
1485 --disable-git-update) git_update=no
1486 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001487 --enable-debug-mutex) debug_mutex=yes
1488 ;;
1489 --disable-debug-mutex) debug_mutex=no
1490 ;;
Junyan He17824402018-07-18 15:47:59 +08001491 --enable-libpmem) libpmem=yes
1492 ;;
1493 --disable-libpmem) libpmem=no
1494 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001495 *)
1496 echo "ERROR: unknown option $opt"
1497 echo "Try '$0 --help' for more information"
1498 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001499 ;;
bellard7d132992003-03-06 23:23:54 +00001500 esac
1501done
1502
bellard40293e52008-01-31 11:32:10 +00001503case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001504 ppc)
1505 CPU_CFLAGS="-m32"
1506 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001507 cross_cc_powerpc=$cc
1508 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001509 ;;
1510 ppc64)
1511 CPU_CFLAGS="-m64"
1512 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001513 cross_cc_ppc64=$cc
1514 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001515 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001516 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001517 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1518 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001519 cross_cc_sparc=$cc
1520 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001521 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001522 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001523 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001524 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001525 cross_cc_sparc64=$cc
1526 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001527 ;;
ths76d83bd2007-11-18 21:22:10 +00001528 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001529 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001530 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001531 cross_cc_s390=$cc
1532 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001533 ;;
1534 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001535 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001536 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001537 cross_cc_s390x=$cc
1538 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001539 ;;
bellard40293e52008-01-31 11:32:10 +00001540 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001541 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001542 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001543 cross_cc_i386=$cc
1544 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001545 ;;
1546 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001547 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1548 # If we truly care, we should simply detect this case at
1549 # runtime and generate the fallback to serial emulation.
1550 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001551 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001552 cross_cc_x86_64=$cc
1553 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001554 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001555 x32)
1556 CPU_CFLAGS="-mx32"
1557 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001558 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001559 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001560 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001561 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001562esac
1563
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001564QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001565
Peter Maydellaffc88c2016-06-13 11:32:24 +01001566# For user-mode emulation the host arch has to be one we explicitly
1567# support, even if we're using TCI.
1568if [ "$ARCH" = "unknown" ]; then
1569 bsd_user="no"
1570 linux_user="no"
1571fi
1572
Peter Maydell60e0df22011-05-03 14:50:13 +01001573default_target_list=""
1574
Peter Maydell6e92f822013-05-20 16:16:15 +01001575mak_wilds=""
1576
1577if [ "$softmmu" = "yes" ]; then
1578 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001579fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001580if [ "$linux_user" = "yes" ]; then
1581 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001582fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001583if [ "$bsd_user" = "yes" ]; then
1584 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001585fi
1586
Peter Maydell6e92f822013-05-20 16:16:15 +01001587for config in $mak_wilds; do
1588 default_target_list="${default_target_list} $(basename "$config" .mak)"
1589done
1590
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001591# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001592trace_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 +01001593
pbrookaf5db582006-04-08 14:26:41 +00001594if test x"$show_help" = x"yes" ; then
1595cat << EOF
1596
1597Usage: configure [options]
1598Options: [defaults in brackets after descriptions]
1599
Stefan Weil08fb77e2013-12-18 22:09:39 +01001600Standard options:
1601 --help print this message
1602 --prefix=PREFIX install in PREFIX [$prefix]
1603 --interp-prefix=PREFIX where to find shared libraries, etc.
1604 use %M for cpu name [$interp_prefix]
1605 --target-list=LIST set target list (default: build everything)
1606$(echo Available targets: $default_target_list | \
1607 fold -s -w 53 | sed -e 's/^/ /')
1608
1609Advanced options (experts only):
1610 --source-path=PATH path of source code [$source_path]
1611 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1612 --cc=CC use C compiler CC [$cc]
1613 --iasl=IASL use ACPI compiler IASL [$iasl]
1614 --host-cc=CC use C compiler CC [$host_cc] for code run at
1615 build time
1616 --cxx=CXX use C++ compiler CXX [$cxx]
1617 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1618 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001619 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001620 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001621 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001622 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001623 --make=MAKE use specified make [$make]
1624 --install=INSTALL use specified install [$install]
1625 --python=PYTHON use specified python [$python]
1626 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001627 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001628 --static enable static build [$static]
1629 --mandir=PATH install man pages in PATH
1630 --datadir=PATH install firmware in PATH$confsuffix
1631 --docdir=PATH install documentation in PATH$confsuffix
1632 --bindir=PATH install binaries in PATH
1633 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001634 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001635 --sysconfdir=PATH install config in PATH$confsuffix
1636 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001637 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001638 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001639 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001640 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001641 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001642 --disable-strip disable stripping binaries
1643 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001644 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001645 --audio-drv-list=LIST set audio drivers list:
1646 Available drivers: $audio_possible_drivers
1647 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1648 --block-drv-rw-whitelist=L
1649 set block driver read-write whitelist
1650 (affects only QEMU, not qemu-img)
1651 --block-drv-ro-whitelist=L
1652 set block driver read-only whitelist
1653 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001654 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001655 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001656 --with-trace-file=NAME Full PATH,NAME of file to store traces
1657 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001658 --disable-slirp disable SLIRP userspace network connectivity
1659 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001660 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001661 --oss-lib path to OSS library
1662 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001663 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001664 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001665 --enable-gcov enable test coverage analysis with gcov
1666 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001667 --disable-blobs disable installing provided firmware blobs
1668 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1669 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001670 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001671 --enable-gprof QEMU profiling with gprof
1672 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001673 --enable-debug-stack-usage
1674 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001675
1676Optional features, enabled with --enable-FEATURE and
1677disabled with --disable-FEATURE, default is enabled if available:
1678
1679 system all system emulation targets
1680 user supported user emulation targets
1681 linux-user all linux usermode emulation targets
1682 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001683 docs build documentation
1684 guest-agent build the QEMU Guest Agent
1685 guest-agent-msi build guest agent Windows MSI installation package
1686 pie Position Independent Executables
1687 modules modules support
1688 debug-tcg TCG debugging (default is disabled)
1689 debug-info debugging information
1690 sparse sparse checker
1691
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001692 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001693 nettle nettle cryptography support
1694 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001695 sdl SDL UI
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001696 sdl_image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001697 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001698 vte vte support for the gtk UI
1699 curses curses UI
1700 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001701 vnc-sasl SASL encryption for VNC server
1702 vnc-jpeg JPEG lossy compression for VNC server
1703 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001704 cocoa Cocoa UI (Mac OS X only)
1705 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001706 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001707 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001708 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001709 brlapi BrlAPI (Braile)
1710 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001711 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001712 fdt fdt device tree
1713 bluez bluez stack connectivity
1714 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001715 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001716 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001717 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001718 rdma Enable RDMA-based migration
1719 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001720 vde support for vde network
1721 netmap support for netmap network
1722 linux-aio Linux AIO support
1723 cap-ng libcap-ng support
1724 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001725 vhost-net vhost-net kernel acceleration support
1726 vhost-vsock virtio sockets device support
1727 vhost-scsi vhost-scsi kernel target support
1728 vhost-crypto vhost-user-crypto backend support
1729 vhost-kernel vhost kernel backend support
1730 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001731 spice spice
1732 rbd rados block device (rbd)
1733 libiscsi iscsi support
1734 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001735 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001736 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001737 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001738 usb-redir usb network redirection support
1739 lzo support of lzo compression library
1740 snappy support of snappy compression library
1741 bzip2 support of bzip2 compression library
1742 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001743 lzfse support of lzfse compression library
1744 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001745 seccomp seccomp support
1746 coroutine-pool coroutine freelist (better performance)
1747 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001748 tpm TPM support
1749 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001750 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001751 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001752 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001753 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001754 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001755 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001756 opengl opengl support
1757 virglrenderer virgl rendering support
1758 xfsctl xfsctl support
1759 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001760 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001761 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001762 bochs bochs image format support
1763 cloop cloop image format support
1764 dmg dmg image format support
1765 qcow1 qcow v1 image format support
1766 vdi vdi image format support
1767 vvfat vvfat image format support
1768 qed qed image format support
1769 parallels parallels image format support
1770 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001771 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001772 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001773 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001774 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001775
1776NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001777EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001778exit 0
pbrookaf5db582006-04-08 14:26:41 +00001779fi
1780
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001781if ! has $python; then
1782 error_exit "Python not found. Use --python=/path/to/python"
1783fi
1784
1785# Note that if the Python conditional here evaluates True we will exit
1786# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001787if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1788 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001789 "Use --python=/path/to/python to specify a supported Python."
1790fi
1791
Cleber Rosa755ee702018-11-09 10:07:07 -05001792# Preserve python version since some functionality is dependent on it
1793python_version=$($python -V 2>&1 | sed -e 's/Python\ //')
1794
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001795# Suppress writing compiled files
1796python="$python -B"
1797
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001798# Check that the C compiler works. Doing this here before testing
1799# the host CPU ensures that we had a valid CC to autodetect the
1800# $cpu var (and we should bail right here if that's not the case).
1801# It also allows the help message to be printed without a CC.
1802write_c_skeleton;
1803if compile_object ; then
1804 : C compiler works ok
1805else
1806 error_exit "\"$cc\" either does not exist or does not work"
1807fi
1808if ! compile_prog ; then
1809 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1810fi
1811
Peter Maydell359bc952011-12-24 13:07:25 +00001812# Now we have handled --enable-tcg-interpreter and know we're not just
1813# printing the help message, bail out if the host CPU isn't supported.
1814if test "$ARCH" = "unknown"; then
1815 if test "$tcg_interpreter" = "yes" ; then
1816 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001817 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001818 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001819 fi
1820fi
1821
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001822# Consult white-list to determine whether to enable werror
1823# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001824if test -z "$werror" ; then
Eric Blakee633a5c2019-02-04 20:39:37 -06001825 if test -d "$source_path/.git" && \
1826 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001827 werror="yes"
1828 else
1829 werror="no"
1830 fi
1831fi
1832
Peter Maydellfb59dab2017-03-28 14:01:52 +01001833if test "$bogus_os" = "yes"; then
1834 # Now that we know that we're not printing the help and that
1835 # the compiler works (so the results of the check_defines we used
1836 # to identify the OS are reliable), if we didn't recognize the
1837 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001838 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001839fi
1840
Thomas Huthefc6c072018-12-03 10:12:32 +01001841# Check whether the compiler matches our minimum requirements:
1842cat > $TMPC << EOF
1843#if defined(__clang_major__) && defined(__clang_minor__)
1844# ifdef __apple_build_version__
1845# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1846# error You need at least XCode Clang v5.1 to compile QEMU
1847# endif
1848# else
1849# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1850# error You need at least Clang v3.4 to compile QEMU
1851# endif
1852# endif
1853#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1854# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1855# error You need at least GCC v4.8 to compile QEMU
1856# endif
1857#else
1858# error You either need GCC or Clang to compiler QEMU
1859#endif
1860int main (void) { return 0; }
1861EOF
1862if ! compile_prog "" "" ; then
1863 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1864fi
1865
Paolo Bonzini8d050952010-12-23 11:43:52 +01001866gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1867gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001868gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001869gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001870gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001871gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001872# Note that we do not add -Werror to gcc_flags here, because that would
1873# enable it for all configure tests. If a configure test failed due
1874# to -Werror this would just silently disable some features,
1875# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001876
1877cc_has_warning_flag() {
1878 write_c_skeleton;
1879
Peter Maydella1d29d62012-10-27 22:19:07 +01001880 # Use the positive sense of the flag when testing for -Wno-wombat
1881 # support (gcc will happily accept the -Wno- form of unknown
1882 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001883 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1884 compile_prog "-Werror $optflag" ""
1885}
1886
1887for flag in $gcc_flags; do
1888 if cc_has_warning_flag $flag ; then
1889 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001890 fi
1891done
1892
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001893if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001894 cat > $TMPC << EOF
1895int main(int argc, char *argv[])
1896{
1897 char arr[64], *p = arr, *c = argv[0];
1898 while (*c) {
1899 *p++ = *c++;
1900 }
1901 return 0;
1902}
1903EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001904 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001905 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001906 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001907 # We need to check both a compile and a link, since some compiler
1908 # setups fail only on a .c->.o compile and some only at link time
1909 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1910 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001911 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001912 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001913 break
1914 fi
1915 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001916 if test "$stack_protector" = yes; then
1917 if test $sp_on = 0; then
1918 error_exit "Stack protector not supported"
1919 fi
1920 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001921fi
1922
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001923# Disable -Wmissing-braces on older compilers that warn even for
1924# the "universal" C zero initializer {0}.
1925cat > $TMPC << EOF
1926struct {
1927 int a[2];
1928} x = {0};
1929EOF
1930if compile_object "-Werror" "" ; then
1931 :
1932else
1933 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1934fi
1935
Thomas Huthd376e9d2018-12-03 11:41:38 +01001936# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001937if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001938 if test "$modules" = "yes" ; then
1939 error_exit "static and modules are mutually incompatible"
1940 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001941 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001942 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001943 else
1944 pie="no"
1945 fi
1946fi
1947
Emilio G. Cota768b7852015-04-29 13:09:02 +02001948# Unconditional check for compiler __thread support
1949 cat > $TMPC << EOF
1950static __thread int tls_var;
1951int main(void) { return tls_var; }
1952EOF
1953
1954if ! compile_prog "-Werror" "" ; then
1955 error_exit "Your compiler does not support the __thread specifier for " \
1956 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1957fi
1958
Avi Kivity40d64442011-11-15 20:12:17 +02001959if test "$pie" = ""; then
1960 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001961 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001962 ;;
1963 *)
1964 pie="no"
1965 ;;
1966 esac
1967fi
1968
1969if test "$pie" != "no" ; then
1970 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001971
1972#ifdef __linux__
1973# define THREAD __thread
1974#else
1975# define THREAD
1976#endif
1977
1978static THREAD int tls_var;
1979
1980int main(void) { return tls_var; }
1981
Avi Kivity40d64442011-11-15 20:12:17 +02001982EOF
1983 if compile_prog "-fPIE -DPIE" "-pie"; then
1984 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1985 LDFLAGS="-pie $LDFLAGS"
1986 pie="yes"
1987 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1988 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1989 fi
1990 else
1991 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001992 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001993 else
1994 echo "Disabling PIE due to missing toolchain support"
1995 pie="no"
1996 fi
1997 fi
Brad46eef332013-12-10 19:49:08 -05001998
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001999 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05002000 CFLAGS_NOPIE="-fno-pie"
2001 LDFLAGS_NOPIE="-nopie"
2002 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002003fi
2004
Paolo Bonzini09dada42013-04-17 16:26:47 +02002005##########################################
2006# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2007# use i686 as default anyway, but for those that don't, an explicit
2008# specification is necessary
2009
2010if test "$cpu" = "i386"; then
2011 cat > $TMPC << EOF
2012static int sfaa(int *ptr)
2013{
2014 return __sync_fetch_and_and(ptr, 0);
2015}
2016
2017int main(void)
2018{
2019 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002020 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002021 sfaa(&val);
2022 return val;
2023}
2024EOF
2025 if ! compile_prog "" "" ; then
2026 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2027 fi
2028fi
2029
2030#########################################
bellardec530c82006-04-25 22:36:06 +00002031# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002032
bellardec530c82006-04-25 22:36:06 +00002033if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002034 if has $install; then
2035 :
2036 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002037 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2038 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2039 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002040 fi
Stefan Weil89138852016-05-16 15:10:20 +02002041 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002042 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2043 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2044 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002045 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002046 if has ar; then
2047 :
2048 else
bellardec530c82006-04-25 22:36:06 +00002049 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002050 error_exit "No path includes ar" \
2051 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002052 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002053 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002054 fi
ths5fafdf22007-09-16 21:08:06 +00002055fi
bellardec530c82006-04-25 22:36:06 +00002056
Stefan Weilafb63eb2012-09-26 22:04:38 +02002057if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002058 for target in $default_target_list; do
2059 supported_target $target 2>/dev/null && \
2060 target_list="$target_list $target"
2061 done
2062 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002063else
Stefan Weil89138852016-05-16 15:10:20 +02002064 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002065 for target in $target_list; do
2066 # Check that we recognised the target name; this allows a more
2067 # friendly error message than if we let it fall through.
2068 case " $default_target_list " in
2069 *" $target "*)
2070 ;;
2071 *)
2072 error_exit "Unknown target name '$target'"
2073 ;;
2074 esac
2075 supported_target $target || exit 1
2076 done
bellard5327cf42005-01-10 23:18:50 +00002077fi
Peter Maydell25b48332013-05-20 16:16:16 +01002078
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002079# see if system emulation was really requested
2080case " $target_list " in
2081 *"-softmmu "*) softmmu=yes
2082 ;;
2083 *) softmmu=no
2084 ;;
2085esac
bellard5327cf42005-01-10 23:18:50 +00002086
Juan Quintela249247c2009-08-12 18:20:25 +02002087feature_not_found() {
2088 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002089 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002090
Peter Maydell76ad07a2013-04-08 12:11:26 +01002091 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002092 "configure was not able to find it." \
2093 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002094}
2095
bellard7d132992003-03-06 23:23:54 +00002096# ---
2097# big/little endian test
2098cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002099short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2100short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2101extern int foo(short *, short *);
2102int main(int argc, char *argv[]) {
2103 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002104}
2105EOF
2106
Mike Frysinger61cc9192013-06-30 23:30:18 -04002107if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002108 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002109 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002110 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002111 bigendian="no"
2112 else
2113 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002114 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002115else
2116 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002117fi
2118
Juan Quintelab0a47e72009-08-12 18:29:49 +02002119##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002120# cocoa implies not SDL or GTK
2121# (the cocoa UI code currently assumes it is always the active UI
2122# and doesn't interact well with other UI frontend code)
2123if test "$cocoa" = "yes"; then
2124 if test "$sdl" = "yes"; then
2125 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2126 fi
2127 if test "$gtk" = "yes"; then
2128 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2129 fi
2130 gtk=no
2131 sdl=no
2132fi
2133
Eric Blake6b39b062016-10-11 10:46:23 -05002134# Some versions of Mac OS X incorrectly define SIZE_MAX
2135cat > $TMPC << EOF
2136#include <stdint.h>
2137#include <stdio.h>
2138int main(int argc, char *argv[]) {
2139 return printf("%zu", SIZE_MAX);
2140}
2141EOF
2142have_broken_size_max=no
2143if ! compile_object -Werror ; then
2144 have_broken_size_max=yes
2145fi
2146
Peter Maydella30878e2015-08-14 16:10:52 +01002147##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002148# L2TPV3 probe
2149
2150cat > $TMPC <<EOF
2151#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002152#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002153int main(void) { return sizeof(struct mmsghdr); }
2154EOF
2155if compile_prog "" "" ; then
2156 l2tpv3=yes
2157else
2158 l2tpv3=no
2159fi
2160
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002161#########################################
2162# vhost interdependencies and host support
2163
2164# vhost backends
2165test "$vhost_user" = "" && vhost_user=yes
2166if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2167 error_exit "vhost-user isn't available on win32"
2168fi
2169test "$vhost_kernel" = "" && vhost_kernel=$linux
2170if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2171 error_exit "vhost-kernel is only available on Linux"
2172fi
2173
2174# vhost-kernel devices
2175test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2176if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2177 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2178fi
2179test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2180if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2181 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2182fi
2183
2184# vhost-user backends
2185test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2186if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2187 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2188fi
2189test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2190if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2191 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2192fi
2193
2194# OR the vhost-kernel and vhost-user values for simplicity
2195if test "$vhost_net" = ""; then
2196 test "$vhost_net_user" = "yes" && vhost_net=yes
2197 test "$vhost_kernel" = "yes" && vhost_net=yes
2198fi
2199
Gonglei015a33b2014-07-01 20:58:08 +08002200##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002201# MinGW / Mingw-w64 localtime_r/gmtime_r check
2202
2203if test "$mingw32" = "yes"; then
2204 # Some versions of MinGW / Mingw-w64 lack localtime_r
2205 # and gmtime_r entirely.
2206 #
2207 # Some versions of Mingw-w64 define a macro for
2208 # localtime_r/gmtime_r.
2209 #
2210 # Some versions of Mingw-w64 will define functions
2211 # for localtime_r/gmtime_r, but only if you have
2212 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2213 # though, unistd.h and pthread.h both define
2214 # that for you.
2215 #
2216 # So this #undef localtime_r and #include <unistd.h>
2217 # are not in fact redundant.
2218cat > $TMPC << EOF
2219#include <unistd.h>
2220#include <time.h>
2221#undef localtime_r
2222int main(void) { localtime_r(NULL, NULL); return 0; }
2223EOF
2224 if compile_prog "" "" ; then
2225 localtime_r="yes"
2226 else
2227 localtime_r="no"
2228 fi
2229fi
2230
2231##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002232# pkg-config probe
2233
2234if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002235 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002236fi
2237
2238##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002239# NPTL probe
2240
Peter Maydell24cb36a2013-07-16 18:45:00 +01002241if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002242 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002243#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002244#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002245int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002246#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2247#error bork
2248#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002249 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002250}
2251EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002252 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002253 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002254 fi
pbrookbd0c5662008-05-29 14:34:11 +00002255fi
2256
balrogac629222008-10-11 09:56:04 +00002257##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002258# lzo check
2259
2260if test "$lzo" != "no" ; then
2261 cat > $TMPC << EOF
2262#include <lzo/lzo1x.h>
2263int main(void) { lzo_version(); return 0; }
2264EOF
2265 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002266 libs_softmmu="$libs_softmmu -llzo2"
2267 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002268 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002269 if test "$lzo" = "yes"; then
2270 feature_not_found "liblzo2" "Install liblzo2 devel"
2271 fi
2272 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002273 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002274fi
2275
2276##########################################
2277# snappy check
2278
2279if test "$snappy" != "no" ; then
2280 cat > $TMPC << EOF
2281#include <snappy-c.h>
2282int main(void) { snappy_max_compressed_length(4096); return 0; }
2283EOF
2284 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002285 libs_softmmu="$libs_softmmu -lsnappy"
2286 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002287 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002288 if test "$snappy" = "yes"; then
2289 feature_not_found "libsnappy" "Install libsnappy devel"
2290 fi
2291 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002292 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002293fi
2294
2295##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002296# bzip2 check
2297
2298if test "$bzip2" != "no" ; then
2299 cat > $TMPC << EOF
2300#include <bzlib.h>
2301int main(void) { BZ2_bzlibVersion(); return 0; }
2302EOF
2303 if compile_prog "" "-lbz2" ; then
2304 bzip2="yes"
2305 else
2306 if test "$bzip2" = "yes"; then
2307 feature_not_found "libbzip2" "Install libbzip2 devel"
2308 fi
2309 bzip2="no"
2310 fi
2311fi
2312
2313##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002314# lzfse check
2315
2316if test "$lzfse" != "no" ; then
2317 cat > $TMPC << EOF
2318#include <lzfse.h>
2319int main(void) { lzfse_decode_scratch_size(); return 0; }
2320EOF
2321 if compile_prog "" "-llzfse" ; then
2322 lzfse="yes"
2323 else
2324 if test "$lzfse" = "yes"; then
2325 feature_not_found "lzfse" "Install lzfse devel"
2326 fi
2327 lzfse="no"
2328 fi
2329fi
2330
2331##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002332# libseccomp check
2333
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002334libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002335if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002336 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002337 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002338 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002339 arm|aarch64)
2340 libseccomp_minver="2.2.3"
2341 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002342 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002343 libseccomp_minver="2.3.0"
2344 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002345 *)
2346 libseccomp_minver=""
2347 ;;
2348 esac
2349
2350 if test "$libseccomp_minver" != "" &&
2351 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002352 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2353 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002354 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002355 else
Andrew Jones693e5912015-09-30 11:59:18 -04002356 if test "$seccomp" = "yes" ; then
2357 if test "$libseccomp_minver" != "" ; then
2358 feature_not_found "libseccomp" \
2359 "Install libseccomp devel >= $libseccomp_minver"
2360 else
2361 feature_not_found "libseccomp" \
2362 "libseccomp is not supported for host cpu $cpu"
2363 fi
2364 fi
2365 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002366 fi
2367fi
2368##########################################
aliguorie37630c2009-04-22 15:19:10 +00002369# xen probe
2370
Juan Quintelafc321b42009-08-12 18:29:55 +02002371if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002372 # Check whether Xen library path is specified via --extra-ldflags to avoid
2373 # overriding this setting with pkg-config output. If not, try pkg-config
2374 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002375
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002376 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2377 $pkg_config --exists xencontrol ; then
2378 xen_ctrl_version="$(printf '%d%02d%02d' \
2379 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2380 xen=yes
2381 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2382 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002383 if $pkg_config --exists xentoolcore; then
2384 xen_pc="$xen_pc xentoolcore"
2385 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002386 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2387 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002388 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002389
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002390 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002391 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002392
2393 # First we test whether Xen headers and libraries are available.
2394 # If no, we are done and there is no Xen support.
2395 # If yes, more tests are run to detect the Xen version.
2396
2397 # Xen (any)
2398 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002399#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002400int main(void) {
2401 return 0;
2402}
2403EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002404 if ! compile_prog "" "$xen_libs" ; then
2405 # Xen not found
2406 if test "$xen" = "yes" ; then
2407 feature_not_found "xen" "Install xen devel"
2408 fi
2409 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002410
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002411 # Xen unstable
2412 elif
2413 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002414#undef XC_WANT_COMPAT_DEVICEMODEL_API
2415#define __XEN_TOOLS__
2416#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002417#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002418int main(void) {
2419 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002420 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002421
2422 xd = xendevicemodel_open(0, 0);
2423 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2424
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002425 xfmem = xenforeignmemory_open(0, 0);
2426 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2427
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002428 return 0;
2429}
2430EOF
2431 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2432 then
2433 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2434 xen_ctrl_version=41100
2435 xen=yes
2436 elif
2437 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002438#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2439#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002440#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002441int main(void) {
2442 xenforeignmemory_handle *xfmem;
2443
2444 xfmem = xenforeignmemory_open(0, 0);
2445 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002446 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002447
2448 return 0;
2449}
2450EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002451 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002452 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002453 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002454 xen_ctrl_version=41000
2455 xen=yes
2456 elif
2457 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002458#undef XC_WANT_COMPAT_DEVICEMODEL_API
2459#define __XEN_TOOLS__
2460#include <xendevicemodel.h>
2461int main(void) {
2462 xendevicemodel_handle *xd;
2463
2464 xd = xendevicemodel_open(0, 0);
2465 xendevicemodel_close(xd);
2466
2467 return 0;
2468}
2469EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002470 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2471 then
2472 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2473 xen_ctrl_version=40900
2474 xen=yes
2475 elif
2476 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002477/*
2478 * If we have stable libs the we don't want the libxc compat
2479 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002480 *
2481 * Also, check if xengnttab_grant_copy_segment_t is defined and
2482 * grant copy operation is implemented.
2483 */
2484#undef XC_WANT_COMPAT_EVTCHN_API
2485#undef XC_WANT_COMPAT_GNTTAB_API
2486#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2487#include <xenctrl.h>
2488#include <xenstore.h>
2489#include <xenevtchn.h>
2490#include <xengnttab.h>
2491#include <xenforeignmemory.h>
2492#include <stdint.h>
2493#include <xen/hvm/hvm_info_table.h>
2494#if !defined(HVM_MAX_VCPUS)
2495# error HVM_MAX_VCPUS not defined
2496#endif
2497int main(void) {
2498 xc_interface *xc = NULL;
2499 xenforeignmemory_handle *xfmem;
2500 xenevtchn_handle *xe;
2501 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002502 xengnttab_grant_copy_segment_t* seg = NULL;
2503
2504 xs_daemon_open();
2505
2506 xc = xc_interface_open(0, 0, 0);
2507 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2508 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2509 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2510 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002511
2512 xfmem = xenforeignmemory_open(0, 0);
2513 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2514
2515 xe = xenevtchn_open(0, 0);
2516 xenevtchn_fd(xe);
2517
2518 xg = xengnttab_open(0, 0);
2519 xengnttab_grant_copy(xg, 0, seg);
2520
2521 return 0;
2522}
2523EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002524 compile_prog "" "$xen_libs $xen_stable_libs"
2525 then
2526 xen_ctrl_version=40800
2527 xen=yes
2528 elif
2529 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002530/*
2531 * If we have stable libs the we don't want the libxc compat
2532 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002533 */
2534#undef XC_WANT_COMPAT_EVTCHN_API
2535#undef XC_WANT_COMPAT_GNTTAB_API
2536#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2537#include <xenctrl.h>
2538#include <xenstore.h>
2539#include <xenevtchn.h>
2540#include <xengnttab.h>
2541#include <xenforeignmemory.h>
2542#include <stdint.h>
2543#include <xen/hvm/hvm_info_table.h>
2544#if !defined(HVM_MAX_VCPUS)
2545# error HVM_MAX_VCPUS not defined
2546#endif
2547int main(void) {
2548 xc_interface *xc = NULL;
2549 xenforeignmemory_handle *xfmem;
2550 xenevtchn_handle *xe;
2551 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002552
2553 xs_daemon_open();
2554
2555 xc = xc_interface_open(0, 0, 0);
2556 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2557 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2558 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2559 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002560
2561 xfmem = xenforeignmemory_open(0, 0);
2562 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2563
2564 xe = xenevtchn_open(0, 0);
2565 xenevtchn_fd(xe);
2566
2567 xg = xengnttab_open(0, 0);
2568 xengnttab_map_grant_ref(xg, 0, 0, 0);
2569
2570 return 0;
2571}
2572EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002573 compile_prog "" "$xen_libs $xen_stable_libs"
2574 then
2575 xen_ctrl_version=40701
2576 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002577
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002578 # Xen 4.6
2579 elif
2580 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002581#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002582#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002583#include <stdint.h>
2584#include <xen/hvm/hvm_info_table.h>
2585#if !defined(HVM_MAX_VCPUS)
2586# error HVM_MAX_VCPUS not defined
2587#endif
2588int main(void) {
2589 xc_interface *xc;
2590 xs_daemon_open();
2591 xc = xc_interface_open(0, 0, 0);
2592 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2593 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002594 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002595 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002596 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002597 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002598 return 0;
2599}
2600EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002601 compile_prog "" "$xen_libs"
2602 then
2603 xen_ctrl_version=40600
2604 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002605
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002606 # Xen 4.5
2607 elif
2608 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002609#include <xenctrl.h>
2610#include <xenstore.h>
2611#include <stdint.h>
2612#include <xen/hvm/hvm_info_table.h>
2613#if !defined(HVM_MAX_VCPUS)
2614# error HVM_MAX_VCPUS not defined
2615#endif
2616int main(void) {
2617 xc_interface *xc;
2618 xs_daemon_open();
2619 xc = xc_interface_open(0, 0, 0);
2620 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2621 xc_gnttab_open(NULL, 0);
2622 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2623 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002624 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2625 return 0;
2626}
2627EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002628 compile_prog "" "$xen_libs"
2629 then
2630 xen_ctrl_version=40500
2631 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002632
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002633 elif
2634 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002635#include <xenctrl.h>
2636#include <xenstore.h>
2637#include <stdint.h>
2638#include <xen/hvm/hvm_info_table.h>
2639#if !defined(HVM_MAX_VCPUS)
2640# error HVM_MAX_VCPUS not defined
2641#endif
2642int main(void) {
2643 xc_interface *xc;
2644 xs_daemon_open();
2645 xc = xc_interface_open(0, 0, 0);
2646 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2647 xc_gnttab_open(NULL, 0);
2648 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2649 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002650 return 0;
2651}
2652EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002653 compile_prog "" "$xen_libs"
2654 then
2655 xen_ctrl_version=40200
2656 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002657
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002658 else
2659 if test "$xen" = "yes" ; then
2660 feature_not_found "xen (unsupported version)" \
2661 "Install a supported xen (xen 4.2 or newer)"
2662 fi
2663 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002664 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002665
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002666 if test "$xen" = yes; then
2667 if test $xen_ctrl_version -ge 40701 ; then
2668 libs_softmmu="$xen_stable_libs $libs_softmmu"
2669 fi
2670 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002671 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002672 fi
aliguorie37630c2009-04-22 15:19:10 +00002673fi
2674
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002675if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002676 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002677 xen_pci_passthrough=yes
2678 else
2679 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002680 error_exit "User requested feature Xen PCI Passthrough" \
2681 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002682 fi
2683 xen_pci_passthrough=no
2684 fi
2685fi
2686
aliguorie37630c2009-04-22 15:19:10 +00002687##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002688# Windows Hypervisor Platform accelerator (WHPX) check
2689if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002690 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002691 whpx="yes"
2692 else
2693 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002694 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002695 fi
2696 whpx="no"
2697 fi
2698fi
2699
2700##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002701# Sparse probe
2702if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002703 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002704 sparse=yes
2705 else
2706 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002707 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002708 fi
2709 sparse=no
2710 fi
2711fi
2712
2713##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002714# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002715if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002716 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002717 x11_cflags=$($pkg_config --cflags x11)
2718 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002719fi
2720
2721##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002722# GTK probe
2723
2724if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002725 gtkpackage="gtk+-3.0"
2726 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002727 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002728 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002729 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2730 gtk_libs=$($pkg_config --libs $gtkpackage)
2731 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002732 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002733 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002734 gtk_cflags="$gtk_cflags $x11_cflags"
2735 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002736 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002737 gtk="yes"
2738 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002739 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002740 else
2741 gtk="no"
2742 fi
2743fi
2744
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002745
2746##########################################
2747# GNUTLS probe
2748
2749if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002750 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002751 gnutls_cflags=$($pkg_config --cflags gnutls)
2752 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002753 libs_softmmu="$gnutls_libs $libs_softmmu"
2754 libs_tools="$gnutls_libs $libs_tools"
2755 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2756 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002757 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002758 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002759 else
2760 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002761 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002762fi
2763
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002764
2765# If user didn't give a --disable/enable-gcrypt flag,
2766# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002767# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002768if test -z "$gcrypt"
2769then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002770 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002771 then
2772 gcrypt="no"
2773 fi
2774fi
2775
2776# If user didn't give a --disable/enable-nettle flag,
2777# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002778# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002779if test -z "$nettle"
2780then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002781 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002782 then
2783 nettle="no"
2784 fi
2785fi
2786
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002787has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002788 if ! has "libgcrypt-config"
2789 then
2790 return 1
2791 fi
2792
2793 if test -n "$cross_prefix"
2794 then
Stefan Weil89138852016-05-16 15:10:20 +02002795 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002796 if test "$host-" != $cross_prefix
2797 then
2798 return 1
2799 fi
2800 fi
2801
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002802 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2803 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2804
2805 if test $maj != 1 || test $min -lt 5
2806 then
2807 return 1
2808 fi
2809
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002810 return 0
2811}
2812
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002813
2814if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002815 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002816 nettle_cflags=$($pkg_config --cflags nettle)
2817 nettle_libs=$($pkg_config --libs nettle)
2818 nettle_version=$($pkg_config --modversion nettle)
2819 libs_softmmu="$nettle_libs $libs_softmmu"
2820 libs_tools="$nettle_libs $libs_tools"
2821 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2822 nettle="yes"
2823
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002824 if test -z "$gcrypt"; then
2825 gcrypt="no"
2826 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002827 else
2828 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002829 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002830 else
2831 nettle="no"
2832 fi
2833 fi
2834fi
2835
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002836if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002837 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002838 gcrypt_cflags=$(libgcrypt-config --cflags)
2839 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002840 # Debian has remove -lgpg-error from libgcrypt-config
2841 # as it "spreads unnecessary dependencies" which in
2842 # turn breaks static builds...
2843 if test "$static" = "yes"
2844 then
2845 gcrypt_libs="$gcrypt_libs -lgpg-error"
2846 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002847 libs_softmmu="$gcrypt_libs $libs_softmmu"
2848 libs_tools="$gcrypt_libs $libs_tools"
2849 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002850 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002851
2852 cat > $TMPC << EOF
2853#include <gcrypt.h>
2854int main(void) {
2855 gcry_mac_hd_t handle;
2856 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2857 GCRY_MAC_FLAG_SECURE, NULL);
2858 return 0;
2859}
2860EOF
2861 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2862 gcrypt_hmac=yes
2863 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002864 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002865 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002866 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002867 else
2868 gcrypt="no"
2869 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002870 fi
2871fi
2872
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002873
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002874if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2875then
2876 error_exit "Only one of gcrypt & nettle can be enabled"
2877fi
2878
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002879##########################################
2880# libtasn1 - only for the TLS creds/session test suite
2881
2882tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002883tasn1_cflags=""
2884tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002885if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002886 tasn1_cflags=$($pkg_config --cflags libtasn1)
2887 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002888else
2889 tasn1=no
2890fi
2891
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002892
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002893##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002894# getifaddrs (for tests/test-io-channel-socket )
2895
2896have_ifaddrs_h=yes
2897if ! check_include "ifaddrs.h" ; then
2898 have_ifaddrs_h=no
2899fi
2900
2901##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002902# VTE probe
2903
2904if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002905 vteminversion="0.32.0"
2906 if $pkg_config --exists "vte-2.91"; then
2907 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002908 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002909 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002910 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002911 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002912 vte_cflags=$($pkg_config --cflags $vtepackage)
2913 vte_libs=$($pkg_config --libs $vtepackage)
2914 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002915 vte="yes"
2916 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002917 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002918 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002919 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002920 fi
2921fi
2922
2923##########################################
bellard11d9f692004-04-02 20:55:59 +00002924# SDL probe
2925
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002926# Look for sdl configuration program (pkg-config or sdl-config). Try
2927# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002928
Peter Xuc6093a02018-04-10 13:40:34 +08002929sdl_probe ()
2930{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002931 if $pkg_config sdl2 --exists; then
2932 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08002933 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2934 elif has ${sdl_config}; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002935 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08002936 sdlversion=$($sdlconfig --version)
2937 else
2938 if test "$sdl" = "yes" ; then
2939 feature_not_found "sdl" "Install SDL2-devel"
2940 fi
2941 sdl=no
2942 # no need to do the rest
2943 return
2944 fi
2945 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2946 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2947 fi
2948
Juan Quintelaac119f92009-07-27 16:13:15 +02002949 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002950#include <SDL.h>
2951#undef main /* We don't want SDL to override our main() */
2952int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2953EOF
Stefan Weil89138852016-05-16 15:10:20 +02002954 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002955 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002956 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002957 if $pkg_config sdl2 --exists; then
2958 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002959 else
2960 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2961 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002962 else
Stefan Weil89138852016-05-16 15:10:20 +02002963 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002964 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002965 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002966 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00002967
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002968 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06002969 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002970 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002971 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2972 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002973 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002974 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002975 :
2976 else
2977 sdl=no
2978 fi
2979 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002980 else # sdl not found
2981 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002982 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002983 fi
2984 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002985 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08002986}
2987
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00002988sdl_image_probe ()
2989{
2990 if test "$sdl_image" != "no" ; then
2991 if $pkg_config SDL2_image --exists; then
2992 if test "$static" = "yes"; then
2993 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
2994 else
2995 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
2996 fi
2997 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
2998 sdl_image=yes
2999
3000 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3001 sdl_libs="$sdl_libs $sdl_image_libs"
3002 else
3003 if test "$sdl_image" = "yes" ; then
3004 feature_not_found "sdl_image" "Install SDL Image devel"
3005 else
3006 sdl_image=no
3007 fi
3008 fi
3009 fi
3010}
3011
Peter Xuc6093a02018-04-10 13:40:34 +08003012if test "$sdl" != "no" ; then
3013 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003014fi
bellard11d9f692004-04-02 20:55:59 +00003015
aliguori5368a422009-03-03 17:37:21 +00003016if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003017 sdl_image_probe
3018else
3019 if test "$sdl_image" = "yes"; then
3020 echo "warning: SDL Image requested, but SDL is not available, disabling"
3021 fi
3022 sdl_image=no
3023fi
3024
3025if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003026 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003027#include <SDL.h>
3028#if defined(SDL_VIDEO_DRIVER_X11)
3029#include <X11/XKBlib.h>
3030#else
3031#error No x11 support
3032#endif
3033int main(void) { return 0; }
3034EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003035 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003036 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003037 sdl_cflags="$sdl_cflags $x11_cflags"
3038 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003039 fi
aliguori5368a422009-03-03 17:37:21 +00003040fi
3041
ths8f28f3f2007-01-05 21:25:54 +00003042##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003043# RDMA needs OpenFabrics libraries
3044if test "$rdma" != "no" ; then
3045 cat > $TMPC <<EOF
3046#include <rdma/rdma_cma.h>
3047int main(void) { return 0; }
3048EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003049 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003050 if compile_prog "" "$rdma_libs" ; then
3051 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003052 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003053 else
3054 if test "$rdma" = "yes" ; then
3055 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003056 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003057 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003058 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003059 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3060 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3061 fi
3062 rdma="no"
3063 fi
3064fi
3065
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003066##########################################
3067# PVRDMA detection
3068
3069cat > $TMPC <<EOF &&
3070#include <sys/mman.h>
3071
3072int
3073main(void)
3074{
3075 char buf = 0;
3076 void *addr = &buf;
3077 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3078
3079 return 0;
3080}
3081EOF
3082
3083if test "$rdma" = "yes" ; then
3084 case "$pvrdma" in
3085 "")
3086 if compile_prog "" ""; then
3087 pvrdma="yes"
3088 else
3089 pvrdma="no"
3090 fi
3091 ;;
3092 "yes")
3093 if ! compile_prog "" ""; then
3094 error_exit "PVRDMA is not supported since mremap is not implemented"
3095 fi
3096 pvrdma="yes"
3097 ;;
3098 "no")
3099 pvrdma="no"
3100 ;;
3101 esac
3102else
3103 if test "$pvrdma" = "yes" ; then
3104 error_exit "PVRDMA requires rdma suppport"
3105 fi
3106 pvrdma="no"
3107fi
ths8d5d2d42007-08-25 01:37:51 +00003108
3109##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003110# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003111if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003112 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003113#include <sasl/sasl.h>
3114#include <stdio.h>
3115int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3116EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003117 # Assuming Cyrus-SASL installed in /usr prefix
3118 vnc_sasl_cflags=""
3119 vnc_sasl_libs="-lsasl2"
3120 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3121 vnc_sasl=yes
3122 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003123 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003124 else
3125 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003126 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003127 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003128 vnc_sasl=no
3129 fi
aliguori2f9606b2009-03-06 20:27:28 +00003130fi
3131
3132##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003133# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003134if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003135cat > $TMPC <<EOF
3136#include <stdio.h>
3137#include <jpeglib.h>
3138int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3139EOF
3140 vnc_jpeg_cflags=""
3141 vnc_jpeg_libs="-ljpeg"
3142 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3143 vnc_jpeg=yes
3144 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003145 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003146 else
3147 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003148 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003149 fi
3150 vnc_jpeg=no
3151 fi
3152fi
3153
3154##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003155# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003156if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003157cat > $TMPC <<EOF
3158//#include <stdio.h>
3159#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003160#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003161int main(void) {
3162 png_structp png_ptr;
3163 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003164 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003165}
3166EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003167 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003168 vnc_png_cflags=$($pkg_config libpng --cflags)
3169 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003170 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003171 vnc_png_cflags=""
3172 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003173 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003174 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3175 vnc_png=yes
3176 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003177 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003178 else
3179 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003180 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003181 fi
3182 vnc_png=no
3183 fi
3184fi
3185
3186##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003187# xkbcommon probe
3188if test "$xkbcommon" != "no" ; then
3189 if $pkg_config xkbcommon --exists; then
3190 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3191 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3192 xkbcommon=yes
3193 else
3194 if test "$xkbcommon" = "yes" ; then
3195 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3196 fi
3197 xkbcommon=no
3198 fi
3199fi
3200
3201##########################################
aliguori76655d62009-03-06 20:27:37 +00003202# fnmatch() probe, used for ACL routines
3203fnmatch="no"
3204cat > $TMPC << EOF
3205#include <fnmatch.h>
3206int main(void)
3207{
3208 fnmatch("foo", "foo", 0);
3209 return 0;
3210}
3211EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003212if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003213 fnmatch="yes"
3214fi
3215
3216##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003217# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003218if test "$xfs" != "no" ; then
3219 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003220#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003221#include <xfs/xfs.h>
3222int main(void)
3223{
3224 xfsctl(NULL, 0, 0, NULL);
3225 return 0;
3226}
3227EOF
3228 if compile_prog "" "" ; then
3229 xfs="yes"
3230 else
3231 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003232 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003233 fi
3234 xfs=no
3235 fi
3236fi
3237
3238##########################################
ths8a16d272008-07-19 09:56:24 +00003239# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003240if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003241 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003242 cat > $TMPC << EOF
3243#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003244int main(void)
3245{
3246 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003247 char s[] = "";
3248 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003249 return 0;
3250}
ths8a16d272008-07-19 09:56:24 +00003251EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003252 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003253 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003254 else
3255 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003256 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003257 fi
3258 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003259 fi
ths8a16d272008-07-19 09:56:24 +00003260fi
3261
3262##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003263# netmap support probe
3264# Apart from looking for netmap headers, we make sure that the host API version
3265# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3266# a minor/major version number. Minor new features will be marked with values up
3267# to 15, and if something happens that requires a change to the backend we will
3268# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003269if test "$netmap" != "no" ; then
3270 cat > $TMPC << EOF
3271#include <inttypes.h>
3272#include <net/if.h>
3273#include <net/netmap.h>
3274#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003275#if (NETMAP_API < 11) || (NETMAP_API > 15)
3276#error
3277#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003278int main(void) { return 0; }
3279EOF
3280 if compile_prog "" "" ; then
3281 netmap=yes
3282 else
3283 if test "$netmap" = "yes" ; then
3284 feature_not_found "netmap"
3285 fi
3286 netmap=no
3287 fi
3288fi
3289
3290##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003291# libcap-ng library probe
3292if test "$cap_ng" != "no" ; then
3293 cap_libs="-lcap-ng"
3294 cat > $TMPC << EOF
3295#include <cap-ng.h>
3296int main(void)
3297{
3298 capng_capability_to_name(CAPNG_EFFECTIVE);
3299 return 0;
3300}
3301EOF
3302 if compile_prog "" "$cap_libs" ; then
3303 cap_ng=yes
3304 libs_tools="$cap_libs $libs_tools"
3305 else
3306 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003307 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003308 fi
3309 cap_ng=no
3310 fi
3311fi
3312
3313##########################################
malcc2de5c92008-06-28 19:13:06 +00003314# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003315
Stefan Weil89138852016-05-16 15:10:20 +02003316audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003317for drv in $audio_drv_list; do
3318 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003319 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003320 if $pkg_config alsa --exists; then
3321 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003322 if test "$drv" = "try-alsa"; then
3323 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3324 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003325 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003326 if test "$drv" = "try-alsa"; then
3327 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3328 else
3329 error_exit "$drv check failed" \
3330 "Make sure to have the $drv libs and headers installed."
3331 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003332 fi
malcc2de5c92008-06-28 19:13:06 +00003333 ;;
3334
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003335 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003336 if $pkg_config libpulse --exists; then
3337 pulse_libs=$($pkg_config libpulse --libs)
3338 audio_pt_int="yes"
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003339 if test "$drv" = "try-pa"; then
3340 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3341 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003342 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003343 if test "$drv" = "try-pa"; then
3344 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3345 else
3346 error_exit "$drv check failed" \
3347 "Make sure to have the $drv libs and headers installed."
3348 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003349 fi
malcb8e59f12008-07-02 21:03:08 +00003350 ;;
3351
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003352 sdl)
3353 if test "$sdl" = "no"; then
3354 error_exit "sdl not found or disabled, can not use sdl audio driver"
3355 fi
3356 ;;
3357
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003358 try-sdl)
3359 if test "$sdl" = "no"; then
3360 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3361 else
3362 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3363 fi
3364 ;;
3365
Juan Quintela997e6902009-08-03 14:46:29 +02003366 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003367 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003368 ;;
3369
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003370 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003371 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003372 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003373 ;;
3374
3375 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003376 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003377 ;;
3378
malce4c63a62008-07-19 16:15:16 +00003379 *)
malc1c9b2a52008-07-19 16:57:30 +00003380 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003381 error_exit "Unknown driver '$drv' selected" \
3382 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003383 }
3384 ;;
malcc2de5c92008-06-28 19:13:06 +00003385 esac
3386done
ths8f28f3f2007-01-05 21:25:54 +00003387
balrog4d3b6f62008-02-10 16:33:14 +00003388##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003389# BrlAPI probe
3390
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003391if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003392 brlapi_libs="-lbrlapi"
3393 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003394#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003395#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003396int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3397EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003398 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003399 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003400 else
3401 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003402 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003403 fi
3404 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003405 fi
3406fi
aurel322e4d9fb2008-04-08 06:01:02 +00003407
3408##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003409# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003410if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003411 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003412 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3413 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003414 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003415 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003416 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003417 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003418 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003419 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003420#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003421#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003422#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003423int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003424 wchar_t wch = L'w';
3425 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003426 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003427 addwstr(L"wide chars\n");
3428 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003429 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003430 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003431}
balrog4d3b6f62008-02-10 16:33:14 +00003432EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003433 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003434 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003435 # Make sure we get the wide character prototypes
3436 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003437 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003438 for curses_lib in $curses_lib_list; do
3439 unset IFS
3440 if compile_prog "$curses_inc" "$curses_lib" ; then
3441 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003442 break
3443 fi
3444 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003445 if test "$curses_found" = yes ; then
3446 break
3447 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003448 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003449 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003450 if test "$curses_found" = "yes" ; then
3451 curses=yes
3452 else
3453 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003454 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003455 fi
3456 curses=no
3457 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003458fi
balrog4d3b6f62008-02-10 16:33:14 +00003459
blueswir1414f0da2008-08-15 18:20:52 +00003460##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003461# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003462if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003463 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003464 curlconfig="$pkg_config libcurl"
3465 else
3466 curlconfig=curl-config
3467 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003468 cat > $TMPC << EOF
3469#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003470int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003471EOF
Stefan Weil89138852016-05-16 15:10:20 +02003472 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3473 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003474 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003475 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003476 else
3477 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003478 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003479 fi
3480 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003481 fi
3482fi # test "$curl"
3483
3484##########################################
balrogfb599c92008-09-28 23:49:55 +00003485# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003486if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003487 cat > $TMPC << EOF
3488#include <bluetooth/bluetooth.h>
3489int main(void) { return bt_error(0); }
3490EOF
Stefan Weil89138852016-05-16 15:10:20 +02003491 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3492 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003493 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003494 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003495 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003496 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003497 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003498 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003499 fi
balroge820e3f2008-09-30 02:27:44 +00003500 bluez="no"
3501 fi
balrogfb599c92008-09-28 23:49:55 +00003502fi
3503
3504##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003505# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003506
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003507glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003508glib_modules=gthread-2.0
3509if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003510 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003511fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003512
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003513# This workaround is required due to a bug in pkg-config file for glib as it
3514# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3515
Eric Blakee633a5c2019-02-04 20:39:37 -06003516if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003517 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3518fi
3519
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003520for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003521 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003522 glib_cflags=$($pkg_config --cflags $i)
3523 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003524 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003525 LIBS="$glib_libs $LIBS"
3526 libs_qga="$glib_libs $libs_qga"
3527 else
3528 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3529 fi
3530done
3531
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003532# Sanity check that the current size_t matches the
3533# size that glib thinks it should be. This catches
3534# problems on multi-arch where people try to build
3535# 32-bit QEMU while pointing at 64-bit glib headers
3536cat > $TMPC <<EOF
3537#include <glib.h>
3538#include <unistd.h>
3539
3540#define QEMU_BUILD_BUG_ON(x) \
3541 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3542
3543int main(void) {
3544 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3545 return 0;
3546}
3547EOF
3548
Stefan Weil5919e032016-04-28 23:33:41 +02003549if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003550 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3551 "You probably need to set PKG_CONFIG_LIBDIR"\
3552 "to point to the right pkg-config files for your"\
3553 "build target"
3554fi
3555
John Snowbbbf2e02015-03-25 18:57:38 -04003556# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3557cat > $TMPC << EOF
3558#include <glib.h>
3559int main(void) { return 0; }
3560EOF
3561if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3562 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3563 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3564 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3565 fi
3566fi
3567
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003568#########################################
3569# zlib check
3570
3571if test "$zlib" != "no" ; then
3572 if $pkg_config --exists zlib; then
3573 zlib_cflags=$($pkg_config --cflags zlib)
3574 zlib_libs=$($pkg_config --libs zlib)
3575 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3576 LIBS="$zlib_libs $LIBS"
3577 else
3578 cat > $TMPC << EOF
3579#include <zlib.h>
3580int main(void) { zlibVersion(); return 0; }
3581EOF
3582 if compile_prog "" "-lz" ; then
3583 LIBS="$LIBS -lz"
3584 else
3585 error_exit "zlib check failed" \
3586 "Make sure to have the zlib libs and headers installed."
3587 fi
3588 fi
3589fi
3590
Fam Zhenge26110c2014-02-10 14:48:57 +08003591##########################################
3592# SHA command probe for modules
3593if test "$modules" = yes; then
3594 shacmd_probe="sha1sum sha1 shasum"
3595 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003596 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003597 shacmd="$c"
3598 break
3599 fi
3600 done
3601 if test "$shacmd" = ""; then
3602 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3603 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003604fi
3605
3606##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003607# pixman support probe
3608
Eric Blakee633a5c2019-02-04 20:39:37 -06003609if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003610 pixman_cflags=
3611 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003612elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003613 pixman_cflags=$($pkg_config --cflags pixman-1)
3614 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003615else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003616 error_exit "pixman >= 0.21.8 not present." \
3617 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003618fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003619
3620##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003621# libmpathpersist probe
3622
3623if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003624 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003625 cat > $TMPC <<EOF
3626#include <libudev.h>
3627#include <mpath_persist.h>
3628unsigned mpath_mx_alloc_len = 1024;
3629int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003630static struct config *multipath_conf;
3631extern struct udev *udev;
3632extern struct config *get_multipath_config(void);
3633extern void put_multipath_config(struct config *conf);
3634struct udev *udev;
3635struct config *get_multipath_config(void) { return multipath_conf; }
3636void put_multipath_config(struct config *conf) { }
3637
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003638int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003639 udev = udev_new();
3640 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003641 return 0;
3642}
3643EOF
3644 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3645 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003646 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003647 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003648 # probe for the old API
3649 cat > $TMPC <<EOF
3650#include <libudev.h>
3651#include <mpath_persist.h>
3652unsigned mpath_mx_alloc_len = 1024;
3653int logsink;
3654int main(void) {
3655 struct udev *udev = udev_new();
3656 mpath_lib_init(udev);
3657 return 0;
3658}
3659EOF
3660 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3661 mpathpersist=yes
3662 mpathpersist_new_api=no
3663 else
3664 mpathpersist=no
3665 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003666 fi
3667else
3668 mpathpersist=no
3669fi
3670
3671##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303672# libcap probe
3673
3674if test "$cap" != "no" ; then
3675 cat > $TMPC <<EOF
3676#include <stdio.h>
3677#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003678int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303679EOF
3680 if compile_prog "" "-lcap" ; then
3681 cap=yes
3682 else
3683 cap=no
3684 fi
3685fi
3686
3687##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003688# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003689PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003690
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003691pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003692cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003693#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003694static void *f(void *p) { return NULL; }
3695int main(void) {
3696 pthread_t thread;
3697 pthread_create(&thread, 0, f, 0);
3698 return 0;
3699}
blueswir1414f0da2008-08-15 18:20:52 +00003700EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003701if compile_prog "" "" ; then
3702 pthread=yes
3703else
3704 for pthread_lib in $PTHREADLIBS_LIST; do
3705 if compile_prog "" "$pthread_lib" ; then
3706 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003707 found=no
3708 for lib_entry in $LIBS; do
3709 if test "$lib_entry" = "$pthread_lib"; then
3710 found=yes
3711 break
3712 fi
3713 done
3714 if test "$found" = "no"; then
3715 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003716 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003717 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003718 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003719 break
3720 fi
3721 done
3722fi
blueswir1414f0da2008-08-15 18:20:52 +00003723
Eric Blakee633a5c2019-02-04 20:39:37 -06003724if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003725 error_exit "pthread check failed" \
3726 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003727fi
3728
Roman Bolshakov479a5742018-12-17 23:26:01 +03003729# check for pthread_setname_np with thread id
3730pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003731cat > $TMPC << EOF
3732#include <pthread.h>
3733
3734static void *f(void *p) { return NULL; }
3735int main(void)
3736{
3737 pthread_t thread;
3738 pthread_create(&thread, 0, f, 0);
3739 pthread_setname_np(thread, "QEMU");
3740 return 0;
3741}
3742EOF
3743if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003744 pthread_setname_np_w_tid=yes
3745fi
3746
3747# check for pthread_setname_np without thread id
3748pthread_setname_np_wo_tid=no
3749cat > $TMPC << EOF
3750#include <pthread.h>
3751
3752static void *f(void *p) { pthread_setname_np("QEMU"); }
3753int main(void)
3754{
3755 pthread_t thread;
3756 pthread_create(&thread, 0, f, 0);
3757 return 0;
3758}
3759EOF
3760if compile_prog "" "$pthread_lib" ; then
3761 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003762fi
3763
aliguoribf9298b2008-12-05 20:05:26 +00003764##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003765# rbd probe
3766if test "$rbd" != "no" ; then
3767 cat > $TMPC <<EOF
3768#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003769#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003770int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003771 rados_t cluster;
3772 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003773 return 0;
3774}
3775EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003776 rbd_libs="-lrbd -lrados"
3777 if compile_prog "" "$rbd_libs" ; then
3778 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003779 else
3780 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003781 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003782 fi
3783 rbd=no
3784 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003785fi
3786
3787##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003788# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003789min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003790if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003791 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003792 libssh2_cflags=$($pkg_config libssh2 --cflags)
3793 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003794 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003795 else
3796 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003797 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003798 fi
3799 libssh2=no
3800 fi
3801fi
3802
3803##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003804# libssh2_sftp_fsync probe
3805
3806if test "$libssh2" = "yes"; then
3807 cat > $TMPC <<EOF
3808#include <stdio.h>
3809#include <libssh2.h>
3810#include <libssh2_sftp.h>
3811int main(void) {
3812 LIBSSH2_SESSION *session;
3813 LIBSSH2_SFTP *sftp;
3814 LIBSSH2_SFTP_HANDLE *sftp_handle;
3815 session = libssh2_session_init ();
3816 sftp = libssh2_sftp_init (session);
3817 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3818 libssh2_sftp_fsync (sftp_handle);
3819 return 0;
3820}
3821EOF
3822 # libssh2_cflags/libssh2_libs defined in previous test.
3823 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3824 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3825 fi
3826fi
3827
3828##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003829# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003830
3831if test "$linux_aio" != "no" ; then
3832 cat > $TMPC <<EOF
3833#include <libaio.h>
3834#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003835#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003836int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3837EOF
3838 if compile_prog "" "-laio" ; then
3839 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003840 else
3841 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003842 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003843 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003844 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003845 fi
3846fi
3847
3848##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003849# TPM passthrough is only on x86 Linux
3850
Eric Blakee633a5c2019-02-04 20:39:37 -06003851if test "$targetos" = Linux && { test "$cpu" = i386 || test "$cpu" = x86_64; }; then
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003852 tpm_passthrough=$tpm
3853else
3854 tpm_passthrough=no
3855fi
3856
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003857# TPM emulator is for all posix systems
3858if test "$mingw32" != "yes"; then
3859 tpm_emulator=$tpm
3860else
3861 tpm_emulator=no
3862fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003863##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003864# attr probe
3865
3866if test "$attr" != "no" ; then
3867 cat > $TMPC <<EOF
3868#include <stdio.h>
3869#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003870#ifdef CONFIG_LIBATTR
3871#include <attr/xattr.h>
3872#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003873#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003874#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003875int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3876EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003877 if compile_prog "" "" ; then
3878 attr=yes
3879 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003880 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003881 attr=yes
3882 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003883 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003884 else
3885 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003886 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003887 fi
3888 attr=no
3889 fi
3890fi
3891
3892##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003893# iovec probe
3894cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003895#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003896#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003897#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003898int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003899EOF
3900iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003901if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003902 iovec=yes
3903fi
3904
aurel32f652e6a2008-12-16 10:43:48 +00003905##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003906# preadv probe
3907cat > $TMPC <<EOF
3908#include <sys/types.h>
3909#include <sys/uio.h>
3910#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003911int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003912EOF
3913preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003914if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003915 preadv=yes
3916fi
3917
3918##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003919# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003920# fdt support is mandatory for at least some target architectures,
3921# so insist on it if we're building those system emulators.
3922fdt_required=no
3923for target in $target_list; do
3924 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003925 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003926 fdt_required=yes
3927 ;;
3928 esac
3929done
3930
3931if test "$fdt_required" = "yes"; then
3932 if test "$fdt" = "no"; then
3933 error_exit "fdt disabled but some requested targets require it." \
3934 "You can turn off fdt only if you also disable all the system emulation" \
3935 "targets which need it (by specifying a cut down --target-list)."
3936 fi
3937 fdt=yes
3938fi
3939
Juan Quintela2df87df2009-08-12 18:29:54 +02003940if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003941 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003942 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003943 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003944 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003945#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003946#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01003947int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003948EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003949 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003950 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003951 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003952 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003953 # have GIT checkout, so activate dtc submodule
3954 if test -e "${source_path}/.git" ; then
3955 git_submodules="${git_submodules} dtc"
3956 fi
3957 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003958 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003959 mkdir -p dtc
3960 if [ "$pwd_is_source_path" != "y" ] ; then
3961 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3962 symlink "$source_path/dtc/scripts" "dtc/scripts"
3963 fi
3964 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003965 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3966 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003967 elif test "$fdt" = "yes" ; then
3968 # Not a git build & no libfdt found, prompt for system install
3969 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3970 "Please install the DTC (libfdt) devel package"
3971 else
3972 # don't have and don't want
3973 fdt_libs=
3974 fdt=no
3975 fi
aurel32f652e6a2008-12-16 10:43:48 +00003976 fi
3977fi
3978
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003979libs_softmmu="$libs_softmmu $fdt_libs"
3980
Michael Walle20ff0752011-03-07 23:32:39 +01003981##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003982# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003983
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003984if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003985 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003986 if $pkg_config $opengl_pkgs; then
3987 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3988 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003989 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003990 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3991 gtk_gl="yes"
3992 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003993 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003994 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003995 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003996 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003997 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003998 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003999 opengl_libs=""
4000 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004001 fi
4002fi
4003
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004004if test "$opengl" = "yes"; then
4005 cat > $TMPC << EOF
4006#include <epoxy/egl.h>
4007#ifndef EGL_MESA_image_dma_buf_export
4008# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4009#endif
4010int main(void) { return 0; }
4011EOF
4012 if compile_prog "" "" ; then
4013 opengl_dmabuf=yes
4014 fi
4015fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004016
Eric Blakee633a5c2019-02-04 20:39:37 -06004017if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004018 for target in $target_list; do
4019 case $target in
4020 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4021 need_x11=yes
4022 ;;
4023 esac
4024 done
4025fi
4026
Klim Kireeved279a02018-01-12 12:01:19 +03004027##########################################
4028# libxml2 probe
4029if test "$libxml2" != "no" ; then
4030 if $pkg_config --exists libxml-2.0; then
4031 libxml2="yes"
4032 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4033 libxml2_libs=$($pkg_config --libs libxml-2.0)
4034 else
4035 if test "$libxml2" = "yes"; then
4036 feature_not_found "libxml2" "Install libxml2 devel"
4037 fi
4038 libxml2="no"
4039 fi
4040fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004041
Bharata B Raoeb100392012-09-24 14:42:45 +05304042##########################################
4043# glusterfs probe
4044if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004045 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304046 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004047 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4048 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004049 if $pkg_config --atleast-version=4 glusterfs-api; then
4050 glusterfs_xlator_opt="yes"
4051 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004052 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304053 glusterfs_discard="yes"
4054 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304055 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304056 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304057 glusterfs_zerofill="yes"
4058 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304059 else
4060 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004061 feature_not_found "GlusterFS backend support" \
4062 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304063 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304064 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304065 fi
4066fi
4067
aurel3239386ac2009-04-15 19:48:17 +00004068# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004069# emulator. This is done because older glibc versions don't
4070# have syscall stubs for these implemented. In that case we
4071# don't provide them even if kernel supports them.
4072#
4073inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004074cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004075#include <sys/inotify.h>
4076
4077int
4078main(void)
4079{
4080 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004081 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004082}
4083EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004084if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004085 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004086fi
4087
Riku Voipioc05c7a72010-03-26 15:25:11 +00004088inotify1=no
4089cat > $TMPC << EOF
4090#include <sys/inotify.h>
4091
4092int
4093main(void)
4094{
4095 /* try to start inotify */
4096 return inotify_init1(0);
4097}
4098EOF
4099if compile_prog "" "" ; then
4100 inotify1=yes
4101fi
4102
Riku Voipio099d6b02009-05-05 12:10:04 +03004103# check if pipe2 is there
4104pipe2=no
4105cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004106#include <unistd.h>
4107#include <fcntl.h>
4108
4109int main(void)
4110{
4111 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004112 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004113}
4114EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004115if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004116 pipe2=yes
4117fi
4118
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004119# check if accept4 is there
4120accept4=no
4121cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004122#include <sys/socket.h>
4123#include <stddef.h>
4124
4125int main(void)
4126{
4127 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4128 return 0;
4129}
4130EOF
4131if compile_prog "" "" ; then
4132 accept4=yes
4133fi
4134
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304135# check if tee/splice is there. vmsplice was added same time.
4136splice=no
4137cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304138#include <unistd.h>
4139#include <fcntl.h>
4140#include <limits.h>
4141
4142int main(void)
4143{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004144 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304145 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4146 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4147 return 0;
4148}
4149EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004150if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304151 splice=yes
4152fi
4153
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004154##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004155# libnuma probe
4156
4157if test "$numa" != "no" ; then
4158 cat > $TMPC << EOF
4159#include <numa.h>
4160int main(void) { return numa_available(); }
4161EOF
4162
4163 if compile_prog "" "-lnuma" ; then
4164 numa=yes
4165 libs_softmmu="-lnuma $libs_softmmu"
4166 else
4167 if test "$numa" = "yes" ; then
4168 feature_not_found "numa" "install numactl devel"
4169 fi
4170 numa=no
4171 fi
4172fi
4173
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004174if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4175 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4176 exit 1
4177fi
4178
Yang Zhong5a22ab72017-12-20 21:16:46 +08004179# Even if malloc_trim() is available, these non-libc memory allocators
4180# do not support it.
4181if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4182 if test "$malloc_trim" = "yes" ; then
4183 echo "Disabling malloc_trim with non-libc memory allocator"
4184 fi
4185 malloc_trim="no"
4186fi
4187
4188#######################################
4189# malloc_trim
4190
4191if test "$malloc_trim" != "no" ; then
4192 cat > $TMPC << EOF
4193#include <malloc.h>
4194int main(void) { malloc_trim(0); return 0; }
4195EOF
4196 if compile_prog "" "" ; then
4197 malloc_trim="yes"
4198 else
4199 malloc_trim="no"
4200 fi
4201fi
4202
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004203##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004204# tcmalloc probe
4205
4206if test "$tcmalloc" = "yes" ; then
4207 cat > $TMPC << EOF
4208#include <stdlib.h>
4209int main(void) { malloc(1); return 0; }
4210EOF
4211
4212 if compile_prog "" "-ltcmalloc" ; then
4213 LIBS="-ltcmalloc $LIBS"
4214 else
4215 feature_not_found "tcmalloc" "install gperftools devel"
4216 fi
4217fi
4218
4219##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004220# jemalloc probe
4221
4222if test "$jemalloc" = "yes" ; then
4223 cat > $TMPC << EOF
4224#include <stdlib.h>
4225int main(void) { malloc(1); return 0; }
4226EOF
4227
4228 if compile_prog "" "-ljemalloc" ; then
4229 LIBS="-ljemalloc $LIBS"
4230 else
4231 feature_not_found "jemalloc" "install jemalloc devel"
4232 fi
4233fi
4234
4235##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004236# signalfd probe
4237signalfd="no"
4238cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004239#include <unistd.h>
4240#include <sys/syscall.h>
4241#include <signal.h>
4242int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4243EOF
4244
4245if compile_prog "" "" ; then
4246 signalfd=yes
4247fi
4248
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004249# check if optreset global is declared by <getopt.h>
4250optreset="no"
4251cat > $TMPC << EOF
4252#include <getopt.h>
4253int main(void) { return optreset; }
4254EOF
4255
4256if compile_prog "" "" ; then
4257 optreset=yes
4258fi
4259
Riku Voipioc2882b92009-08-12 15:08:24 +03004260# check if eventfd is supported
4261eventfd=no
4262cat > $TMPC << EOF
4263#include <sys/eventfd.h>
4264
4265int main(void)
4266{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004267 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004268}
4269EOF
4270if compile_prog "" "" ; then
4271 eventfd=yes
4272fi
4273
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004274# check if memfd is supported
4275memfd=no
4276cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004277#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004278
4279int main(void)
4280{
4281 return memfd_create("foo", MFD_ALLOW_SEALING);
4282}
4283EOF
4284if compile_prog "" "" ; then
4285 memfd=yes
4286fi
4287
Cortland Tölva955727d2018-10-08 09:35:19 -07004288# check for usbfs
4289have_usbfs=no
4290if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004291 cat > $TMPC << EOF
4292#include <linux/usbdevice_fs.h>
4293
4294#ifndef USBDEVFS_GET_CAPABILITIES
4295#error "USBDEVFS_GET_CAPABILITIES undefined"
4296#endif
4297
4298#ifndef USBDEVFS_DISCONNECT_CLAIM
4299#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4300#endif
4301
4302int main(void)
4303{
4304 return 0;
4305}
4306EOF
4307 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004308 have_usbfs=yes
4309 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004310fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004311
Ulrich Hechtd0927932009-09-17 20:22:14 +03004312# check for fallocate
4313fallocate=no
4314cat > $TMPC << EOF
4315#include <fcntl.h>
4316
4317int main(void)
4318{
4319 fallocate(0, 0, 0, 0);
4320 return 0;
4321}
4322EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004323if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004324 fallocate=yes
4325fi
4326
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004327# check for fallocate hole punching
4328fallocate_punch_hole=no
4329cat > $TMPC << EOF
4330#include <fcntl.h>
4331#include <linux/falloc.h>
4332
4333int main(void)
4334{
4335 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4336 return 0;
4337}
4338EOF
4339if compile_prog "" "" ; then
4340 fallocate_punch_hole=yes
4341fi
4342
Denis V. Lunevb953f072015-01-30 11:42:14 +03004343# check that fallocate supports range zeroing inside the file
4344fallocate_zero_range=no
4345cat > $TMPC << EOF
4346#include <fcntl.h>
4347#include <linux/falloc.h>
4348
4349int main(void)
4350{
4351 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4352 return 0;
4353}
4354EOF
4355if compile_prog "" "" ; then
4356 fallocate_zero_range=yes
4357fi
4358
Kevin Wolfed911432014-09-29 17:12:59 +02004359# check for posix_fallocate
4360posix_fallocate=no
4361cat > $TMPC << EOF
4362#include <fcntl.h>
4363
4364int main(void)
4365{
4366 posix_fallocate(0, 0, 0);
4367 return 0;
4368}
4369EOF
4370if compile_prog "" "" ; then
4371 posix_fallocate=yes
4372fi
4373
Peter Maydellc727f472011-01-06 11:05:10 +00004374# check for sync_file_range
4375sync_file_range=no
4376cat > $TMPC << EOF
4377#include <fcntl.h>
4378
4379int main(void)
4380{
4381 sync_file_range(0, 0, 0, 0);
4382 return 0;
4383}
4384EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004385if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004386 sync_file_range=yes
4387fi
4388
Peter Maydelldace20d2011-01-10 13:11:24 +00004389# check for linux/fiemap.h and FS_IOC_FIEMAP
4390fiemap=no
4391cat > $TMPC << EOF
4392#include <sys/ioctl.h>
4393#include <linux/fs.h>
4394#include <linux/fiemap.h>
4395
4396int main(void)
4397{
4398 ioctl(0, FS_IOC_FIEMAP, 0);
4399 return 0;
4400}
4401EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004402if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004403 fiemap=yes
4404fi
4405
Ulrich Hechtd0927932009-09-17 20:22:14 +03004406# check for dup3
4407dup3=no
4408cat > $TMPC << EOF
4409#include <unistd.h>
4410
4411int main(void)
4412{
4413 dup3(0, 0, 0);
4414 return 0;
4415}
4416EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004417if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004418 dup3=yes
4419fi
4420
Alex Bligh4e0c6522013-08-21 16:02:43 +01004421# check for ppoll support
4422ppoll=no
4423cat > $TMPC << EOF
4424#include <poll.h>
4425
4426int main(void)
4427{
4428 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4429 ppoll(&pfd, 1, 0, 0);
4430 return 0;
4431}
4432EOF
4433if compile_prog "" "" ; then
4434 ppoll=yes
4435fi
4436
Alex Blighcd758dd2013-08-21 16:02:44 +01004437# check for prctl(PR_SET_TIMERSLACK , ... ) support
4438prctl_pr_set_timerslack=no
4439cat > $TMPC << EOF
4440#include <sys/prctl.h>
4441
4442int main(void)
4443{
4444 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4445 return 0;
4446}
4447EOF
4448if compile_prog "" "" ; then
4449 prctl_pr_set_timerslack=yes
4450fi
4451
Peter Maydell3b6edd12011-02-15 18:35:05 +00004452# check for epoll support
4453epoll=no
4454cat > $TMPC << EOF
4455#include <sys/epoll.h>
4456
4457int main(void)
4458{
4459 epoll_create(0);
4460 return 0;
4461}
4462EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004463if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004464 epoll=yes
4465fi
4466
Peter Maydell227f0212016-06-06 19:58:11 +01004467# epoll_create1 is a later addition
4468# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004469epoll_create1=no
4470cat > $TMPC << EOF
4471#include <sys/epoll.h>
4472
4473int main(void)
4474{
Peter Maydell19e83f62011-04-26 16:56:40 +01004475 /* Note that we use epoll_create1 as a value, not as
4476 * a function being called. This is necessary so that on
4477 * old SPARC glibc versions where the function was present in
4478 * the library but not declared in the header file we will
4479 * fail the configure check. (Otherwise we will get a compiler
4480 * warning but not an error, and will proceed to fail the
4481 * qemu compile where we compile with -Werror.)
4482 */
Blue Swirlc075a722012-08-09 20:21:25 +00004483 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004484}
4485EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004486if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004487 epoll_create1=yes
4488fi
4489
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004490# check for sendfile support
4491sendfile=no
4492cat > $TMPC << EOF
4493#include <sys/sendfile.h>
4494
4495int main(void)
4496{
4497 return sendfile(0, 0, 0, 0);
4498}
4499EOF
4500if compile_prog "" "" ; then
4501 sendfile=yes
4502fi
4503
Riku Voipio51834342014-06-22 11:25:42 +01004504# check for timerfd support (glibc 2.8 and newer)
4505timerfd=no
4506cat > $TMPC << EOF
4507#include <sys/timerfd.h>
4508
4509int main(void)
4510{
4511 return(timerfd_create(CLOCK_REALTIME, 0));
4512}
4513EOF
4514if compile_prog "" "" ; then
4515 timerfd=yes
4516fi
4517
Riku Voipio9af5c902014-08-12 15:58:57 +03004518# check for setns and unshare support
4519setns=no
4520cat > $TMPC << EOF
4521#include <sched.h>
4522
4523int main(void)
4524{
4525 int ret;
4526 ret = setns(0, 0);
4527 ret = unshare(0);
4528 return ret;
4529}
4530EOF
4531if compile_prog "" "" ; then
4532 setns=yes
4533fi
4534
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004535# clock_adjtime probe
4536clock_adjtime=no
4537cat > $TMPC <<EOF
4538#include <time.h>
4539
4540int main(void)
4541{
4542 return clock_adjtime(0, 0);
4543}
4544EOF
4545clock_adjtime=no
4546if compile_prog "" "" ; then
4547 clock_adjtime=yes
4548fi
4549
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004550# syncfs probe
4551syncfs=no
4552cat > $TMPC <<EOF
4553#include <unistd.h>
4554
4555int main(void)
4556{
4557 return syncfs(0);
4558}
4559EOF
4560syncfs=no
4561if compile_prog "" "" ; then
4562 syncfs=yes
4563fi
4564
pbrookcc8ae6d2006-04-23 17:57:59 +00004565# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004566if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004567 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004568 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004569 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004570 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004571 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004572 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004573 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004574 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004575fi
4576
Stefan Weilf514f412009-10-11 12:44:07 +02004577# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004578byteswap_h=no
4579cat > $TMPC << EOF
4580#include <byteswap.h>
4581int main(void) { return bswap_32(0); }
4582EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004583if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004584 byteswap_h=yes
4585fi
4586
Stefan Weil75f13592013-01-05 12:17:38 +01004587# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004588bswap_h=no
4589cat > $TMPC << EOF
4590#include <sys/endian.h>
4591#include <sys/types.h>
4592#include <machine/bswap.h>
4593int main(void) { return bswap32(0); }
4594EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004595if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004596 bswap_h=yes
4597fi
4598
aliguorida93a1f2008-12-12 20:02:52 +00004599##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004600# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004601if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004602 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004603 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004604 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4605 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004606 else
4607 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004608 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004609 fi
4610 libiscsi="no"
4611 fi
4612fi
4613
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004614##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004615# Do we need libm
4616cat > $TMPC << EOF
4617#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004618int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004619EOF
4620if compile_prog "" "" ; then
4621 :
4622elif compile_prog "" "-lm" ; then
4623 LIBS="-lm $LIBS"
4624 libs_qga="-lm $libs_qga"
4625else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004626 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004627fi
4628
4629##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004630# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004631# uClibc provides 2 versions of clock_gettime(), one with realtime
4632# support and one without. This means that the clock_gettime() don't
4633# need -lrt. We still need it for timer_create() so we check for this
4634# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004635cat > $TMPC <<EOF
4636#include <signal.h>
4637#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004638int main(void) {
4639 timer_create(CLOCK_REALTIME, NULL, NULL);
4640 return clock_gettime(CLOCK_REALTIME, NULL);
4641}
aliguorida93a1f2008-12-12 20:02:52 +00004642EOF
4643
Juan Quintela52166aa2009-08-03 14:46:03 +02004644if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004645 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004646# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004647elif compile_prog "" "$pthread_lib -lrt" ; then
4648 LIBS="$LIBS -lrt"
4649 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004650fi
4651
Thomas Huthd99e97e2019-01-17 18:14:08 +01004652# Check whether we need to link libutil for openpty()
4653cat > $TMPC << EOF
4654extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4655int main(void) { return openpty(0, 0, 0, 0, 0); }
4656EOF
4657
4658if ! compile_prog "" "" ; then
4659 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004660 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004661 libs_tools="-lutil $libs_tools"
4662 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004663fi
4664
Blue Swirlde5071c2009-09-12 09:58:46 +00004665##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004666# spice probe
4667if test "$spice" != "no" ; then
4668 cat > $TMPC << EOF
4669#include <spice.h>
4670int main(void) { spice_server_new(); return 0; }
4671EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004672 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4673 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004674 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004675 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004676 compile_prog "$spice_cflags" "$spice_libs" ; then
4677 spice="yes"
4678 libs_softmmu="$libs_softmmu $spice_libs"
4679 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004680 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4681 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004682 else
4683 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004684 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004685 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004686 fi
4687 spice="no"
4688 fi
4689fi
4690
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004691# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004692if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004693 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004694 libcacard_cflags=$($pkg_config --cflags libcacard)
4695 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004696 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004697 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004698 if test "$smartcard" = "yes"; then
4699 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004700 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004701 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004702 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004703fi
4704
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004705# check for libusb
4706if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004707 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004708 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004709 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4710 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004711 else
4712 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004713 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004714 fi
4715 libusb="no"
4716 fi
4717fi
4718
Hans de Goede69354a82011-07-19 11:04:10 +02004719# check for usbredirparser for usb network redirection support
4720if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004721 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004722 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004723 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4724 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004725 else
4726 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004727 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004728 fi
4729 usb_redir="no"
4730 fi
4731fi
4732
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004733##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004734# check if we have VSS SDK headers for win
4735
Eric Blakee633a5c2019-02-04 20:39:37 -06004736if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4737 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004738 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004739 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004740 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4741 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004742 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004743 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4744 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004745 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004746 esac
4747 cat > $TMPC << EOF
4748#define __MIDL_user_allocate_free_DEFINED__
4749#include <inc/win2003/vss.h>
4750int main(void) { return VSS_CTX_BACKUP; }
4751EOF
4752 if compile_prog "$vss_win32_include" "" ; then
4753 guest_agent_with_vss="yes"
4754 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004755 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004756 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004757 else
4758 if test "$vss_win32_sdk" != "" ; then
4759 echo "ERROR: Please download and install Microsoft VSS SDK:"
4760 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4761 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4762 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4763 echo "ERROR: The headers are extracted in the directory \`inc'."
4764 feature_not_found "VSS support"
4765 fi
4766 guest_agent_with_vss="no"
4767 fi
4768fi
4769
4770##########################################
4771# lookup Windows platform SDK (if not specified)
4772# The SDK is needed only to build .tlb (type library) file of guest agent
4773# VSS provider from the source. It is usually unnecessary because the
4774# pre-compiled .tlb file is included.
4775
Eric Blakee633a5c2019-02-04 20:39:37 -06004776if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4777 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004778 if test -z "$win_sdk"; then
4779 programfiles="$PROGRAMFILES"
4780 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4781 if test -n "$programfiles"; then
4782 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4783 else
4784 feature_not_found "Windows SDK"
4785 fi
4786 elif test "$win_sdk" = "no"; then
4787 win_sdk=""
4788 fi
4789fi
4790
4791##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004792# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06004793if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05004794 cat > $TMPC << EOF
4795#include <windows.h>
4796#include <ntddscsi.h>
4797int main(void) {
4798#if !defined(IOCTL_SCSI_GET_ADDRESS)
4799#error Missing required ioctl definitions
4800#endif
4801 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4802 return addr.Lun;
4803}
4804EOF
4805 if compile_prog "" "" ; then
4806 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004807 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004808 fi
4809fi
4810
4811##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004812# virgl renderer probe
4813
4814if test "$virglrenderer" != "no" ; then
4815 cat > $TMPC << EOF
4816#include <virglrenderer.h>
4817int main(void) { virgl_renderer_poll(); return 0; }
4818EOF
4819 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4820 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004821 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004822 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4823 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4824 virglrenderer="yes"
4825 else
4826 if test "$virglrenderer" = "yes" ; then
4827 feature_not_found "virglrenderer"
4828 fi
4829 virglrenderer="no"
4830 fi
4831fi
4832
4833##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004834# capstone
4835
Richard Hendersone219c492017-09-28 09:01:23 -07004836case "$capstone" in
4837 "" | yes)
4838 if $pkg_config capstone; then
4839 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06004840 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004841 capstone=git
4842 elif test -e "${source_path}/capstone/Makefile" ; then
4843 capstone=internal
4844 elif test -z "$capstone" ; then
4845 capstone=no
4846 else
4847 feature_not_found "capstone" "Install capstone devel or git submodule"
4848 fi
4849 ;;
4850
4851 system)
4852 if ! $pkg_config capstone; then
4853 feature_not_found "capstone" "Install capstone devel"
4854 fi
4855 ;;
4856esac
4857
4858case "$capstone" in
4859 git | internal)
4860 if test "$capstone" = git; then
4861 git_submodules="${git_submodules} capstone"
4862 fi
4863 mkdir -p capstone
4864 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4865 if test "$mingw32" = "yes"; then
4866 LIBCAPSTONE=capstone.lib
4867 else
4868 LIBCAPSTONE=libcapstone.a
4869 fi
4870 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4871 ;;
4872
4873 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004874 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4875 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004876 ;;
4877
4878 no)
4879 ;;
4880 *)
4881 error_exit "Unknown state for capstone: $capstone"
4882 ;;
4883esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004884
4885##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004886# check if we have fdatasync
4887
4888fdatasync=no
4889cat > $TMPC << EOF
4890#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004891int main(void) {
4892#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4893return fdatasync(0);
4894#else
Stefan Weile172fe12012-04-06 21:33:20 +02004895#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004896#endif
4897}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004898EOF
4899if compile_prog "" "" ; then
4900 fdatasync=yes
4901fi
4902
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004903##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004904# check if we have madvise
4905
4906madvise=no
4907cat > $TMPC << EOF
4908#include <sys/types.h>
4909#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004910#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004911int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4912EOF
4913if compile_prog "" "" ; then
4914 madvise=yes
4915fi
4916
4917##########################################
4918# check if we have posix_madvise
4919
4920posix_madvise=no
4921cat > $TMPC << EOF
4922#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004923#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004924int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4925EOF
4926if compile_prog "" "" ; then
4927 posix_madvise=yes
4928fi
4929
4930##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004931# check if we have posix_memalign()
4932
4933posix_memalign=no
4934cat > $TMPC << EOF
4935#include <stdlib.h>
4936int main(void) {
4937 void *p;
4938 return posix_memalign(&p, 8, 8);
4939}
4940EOF
4941if compile_prog "" "" ; then
4942 posix_memalign=yes
4943fi
4944
4945##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004946# check if we have posix_syslog
4947
4948posix_syslog=no
4949cat > $TMPC << EOF
4950#include <syslog.h>
4951int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4952EOF
4953if compile_prog "" "" ; then
4954 posix_syslog=yes
4955fi
4956
4957##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004958# check if we have sem_timedwait
4959
4960sem_timedwait=no
4961cat > $TMPC << EOF
4962#include <semaphore.h>
4963int main(void) { return sem_timedwait(0, 0); }
4964EOF
4965if compile_prog "" "" ; then
4966 sem_timedwait=yes
4967fi
4968
4969##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004970# check if we have strchrnul
4971
4972strchrnul=no
4973cat > $TMPC << EOF
4974#include <string.h>
4975int main(void);
4976// Use a haystack that the compiler shouldn't be able to constant fold
4977char *haystack = (char*)&main;
4978int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4979EOF
4980if compile_prog "" "" ; then
4981 strchrnul=yes
4982fi
4983
4984##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004985# check if trace backend exists
4986
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004987$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004988if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004989 error_exit "invalid trace backends" \
4990 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004991fi
4992
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004993##########################################
4994# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004995if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004996 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004997#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004998int main(void) { return 0; }
4999EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005000 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005001 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005002 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005003 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005004 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005005 fi
5006 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005007 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005008 else
5009 urcu_bp_libs="-lurcu-bp"
5010 fi
5011
5012 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5013 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005014 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005015 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005016 fi
5017fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005018
5019##########################################
5020# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005021if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005022 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005023 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005024 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005025 trace_backend_stap="no"
5026 if has 'stap' ; then
5027 trace_backend_stap="yes"
5028 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005029fi
5030
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005031##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005032# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305033
Peter Maydell7c2acc72013-04-08 12:11:27 +01005034# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005035# is sigcontext. On Windows the only valid backend is the Windows
5036# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005037
5038ucontext_works=no
5039if test "$darwin" != "yes"; then
5040 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305041#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005042#ifdef __stub_makecontext
5043#error Ignoring glibc stub makecontext which will always fail
5044#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005045int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305046EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005047 if compile_prog "" "" ; then
5048 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305049 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005050fi
5051
5052if test "$coroutine" = ""; then
5053 if test "$mingw32" = "yes"; then
5054 coroutine=win32
5055 elif test "$ucontext_works" = "yes"; then
5056 coroutine=ucontext
5057 else
5058 coroutine=sigaltstack
5059 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005060else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005061 case $coroutine in
5062 windows)
5063 if test "$mingw32" != "yes"; then
5064 error_exit "'windows' coroutine backend only valid for Windows"
5065 fi
5066 # Unfortunately the user visible backend name doesn't match the
5067 # coroutine-*.c filename for this case, so we have to adjust it here.
5068 coroutine=win32
5069 ;;
5070 ucontext)
5071 if test "$ucontext_works" != "yes"; then
5072 feature_not_found "ucontext"
5073 fi
5074 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005075 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005076 if test "$mingw32" = "yes"; then
5077 error_exit "only the 'windows' coroutine backend is valid for Windows"
5078 fi
5079 ;;
5080 *)
5081 error_exit "unknown coroutine backend $coroutine"
5082 ;;
5083 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305084fi
5085
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005086if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005087 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005088fi
5089
Peter Lieven7d992e42016-09-27 11:58:45 +02005090if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005091 if test "$coroutine_pool" = "yes"; then
5092 echo "WARN: disabling coroutine pool for stack usage debugging"
5093 coroutine_pool=no
5094 fi
5095fi
5096
5097
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305098##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305099# check if we have open_by_handle_at
5100
Stefan Weil4e1797f2012-06-18 22:11:06 +02005101open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305102cat > $TMPC << EOF
5103#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005104#if !defined(AT_EMPTY_PATH)
5105# error missing definition
5106#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005107int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005108#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305109EOF
5110if compile_prog "" "" ; then
5111 open_by_handle_at=yes
5112fi
5113
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305114########################################
5115# check if we have linux/magic.h
5116
5117linux_magic_h=no
5118cat > $TMPC << EOF
5119#include <linux/magic.h>
5120int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005121 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305122}
5123EOF
5124if compile_prog "" "" ; then
5125 linux_magic_h=yes
5126fi
5127
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005128########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005129# check whether we can disable warning option with a pragma (this is needed
5130# to silence warnings in the headers of some versions of external libraries).
5131# This test has to be compiled with -Werror as otherwise an unknown pragma is
5132# only a warning.
5133#
5134# If we can't selectively disable warning in the code, disable -Werror so that
5135# the build doesn't fail anyway.
5136
Peter Maydell06d71fa2012-07-30 16:13:07 +01005137pragma_disable_unused_but_set=no
5138cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005139#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005140#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005141#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005142
Peter Maydell06d71fa2012-07-30 16:13:07 +01005143int main(void) {
5144 return 0;
5145}
5146EOF
5147if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005148 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005149else
5150 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005151fi
5152
5153########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005154# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005155
5156valgrind_h=no
5157cat > $TMPC << EOF
5158#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005159int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005160 return 0;
5161}
5162EOF
5163if compile_prog "" "" ; then
5164 valgrind_h=yes
5165fi
5166
5167########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005168# check if environ is declared
5169
5170has_environ=no
5171cat > $TMPC << EOF
5172#include <unistd.h>
5173int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005174 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005175 return 0;
5176}
5177EOF
5178if compile_prog "" "" ; then
5179 has_environ=yes
5180fi
5181
Richard Henderson76a347e2012-12-28 14:17:02 -08005182########################################
5183# check if cpuid.h is usable.
5184
Richard Henderson76a347e2012-12-28 14:17:02 -08005185cat > $TMPC << EOF
5186#include <cpuid.h>
5187int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005188 unsigned a, b, c, d;
5189 int max = __get_cpuid_max(0, 0);
5190
5191 if (max >= 1) {
5192 __cpuid(1, a, b, c, d);
5193 }
5194
5195 if (max >= 7) {
5196 __cpuid_count(7, 0, a, b, c, d);
5197 }
5198
5199 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005200}
5201EOF
5202if compile_prog "" "" ; then
5203 cpuid_h=yes
5204fi
5205
Richard Henderson5dd89902017-07-18 18:40:18 -10005206##########################################
5207# avx2 optimization requirement check
5208#
5209# There is no point enabling this if cpuid.h is not usable,
5210# since we won't be able to select the new routines.
5211
Eric Blakee633a5c2019-02-04 20:39:37 -06005212if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005213 cat > $TMPC << EOF
5214#pragma GCC push_options
5215#pragma GCC target("avx2")
5216#include <cpuid.h>
5217#include <immintrin.h>
5218static int bar(void *a) {
5219 __m256i x = *(__m256i *)a;
5220 return _mm256_testz_si256(x, x);
5221}
5222int main(int argc, char *argv[]) { return bar(argv[0]); }
5223EOF
5224 if compile_object "" ; then
5225 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005226 else
5227 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005228 fi
5229fi
5230
Richard Hendersonf5401662013-02-16 12:46:59 -08005231########################################
5232# check if __[u]int128_t is usable.
5233
5234int128=no
5235cat > $TMPC << EOF
5236__int128_t a;
5237__uint128_t b;
5238int main (void) {
5239 a = a + b;
5240 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005241 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005242 return 0;
5243}
5244EOF
5245if compile_prog "" "" ; then
5246 int128=yes
5247fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005248
Richard Henderson7ebee432016-06-29 21:10:59 -07005249#########################################
5250# See if 128-bit atomic operations are supported.
5251
5252atomic128=no
5253if test "$int128" = "yes"; then
5254 cat > $TMPC << EOF
5255int main(void)
5256{
5257 unsigned __int128 x = 0, y = 0;
5258 y = __atomic_load_16(&x, 0);
5259 __atomic_store_16(&x, y, 0);
5260 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5261 return 0;
5262}
5263EOF
5264 if compile_prog "" "" ; then
5265 atomic128=yes
5266 fi
5267fi
5268
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005269cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005270if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005271 cat > $TMPC << EOF
5272int main(void)
5273{
5274 unsigned __int128 x = 0, y = 0;
5275 __sync_val_compare_and_swap_16(&x, y, x);
5276 return 0;
5277}
5278EOF
5279 if compile_prog "" "" ; then
5280 cmpxchg128=yes
5281 fi
5282fi
5283
Richard Hendersondf79b992016-09-02 12:23:57 -07005284#########################################
5285# See if 64-bit atomic operations are supported.
5286# Note that without __atomic builtins, we can only
5287# assume atomic loads/stores max at pointer size.
5288
5289cat > $TMPC << EOF
5290#include <stdint.h>
5291int main(void)
5292{
5293 uint64_t x = 0, y = 0;
5294#ifdef __ATOMIC_RELAXED
5295 y = __atomic_load_8(&x, 0);
5296 __atomic_store_8(&x, y, 0);
5297 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5298 __atomic_exchange_8(&x, y, 0);
5299 __atomic_fetch_add_8(&x, y, 0);
5300#else
5301 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5302 __sync_lock_test_and_set(&x, y);
5303 __sync_val_compare_and_swap(&x, y, 0);
5304 __sync_fetch_and_add(&x, y);
5305#endif
5306 return 0;
5307}
5308EOF
5309if compile_prog "" "" ; then
5310 atomic64=yes
5311fi
5312
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005313########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005314# See if 16-byte vector operations are supported.
5315# Even without a vector unit the compiler may expand these.
5316# There is a bug in old GCC for PPC that crashes here.
5317# Unfortunately it's the system compiler for Centos 7.
5318
5319cat > $TMPC << EOF
5320typedef unsigned char U1 __attribute__((vector_size(16)));
5321typedef unsigned short U2 __attribute__((vector_size(16)));
5322typedef unsigned int U4 __attribute__((vector_size(16)));
5323typedef unsigned long long U8 __attribute__((vector_size(16)));
5324typedef signed char S1 __attribute__((vector_size(16)));
5325typedef signed short S2 __attribute__((vector_size(16)));
5326typedef signed int S4 __attribute__((vector_size(16)));
5327typedef signed long long S8 __attribute__((vector_size(16)));
5328static U1 a1, b1;
5329static U2 a2, b2;
5330static U4 a4, b4;
5331static U8 a8, b8;
5332static S1 c1;
5333static S2 c2;
5334static S4 c4;
5335static S8 c8;
5336static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005337void helper(void *d, void *a, int shift, int i);
5338void helper(void *d, void *a, int shift, int i)
5339{
5340 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5341 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5342 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5343 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5344}
Richard Hendersondb432672017-09-15 14:11:45 -07005345int main(void)
5346{
5347 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5348 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5349 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5350 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5351 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5352 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5353 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5354 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5355 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5356 return 0;
5357}
5358EOF
5359
5360vector16=no
5361if compile_prog "" "" ; then
5362 vector16=yes
5363fi
5364
5365########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005366# check if getauxval is available.
5367
5368getauxval=no
5369cat > $TMPC << EOF
5370#include <sys/auxv.h>
5371int main(void) {
5372 return getauxval(AT_HWCAP) == 0;
5373}
5374EOF
5375if compile_prog "" "" ; then
5376 getauxval=yes
5377fi
5378
John Snowfd0e6052015-03-25 18:57:39 -04005379########################################
5380# check if ccache is interfering with
5381# semantic analysis of macros
5382
John Snow5e4dfd32015-10-28 13:56:40 -04005383unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005384ccache_cpp2=no
5385cat > $TMPC << EOF
5386static const int Z = 1;
5387#define fn() ({ Z; })
5388#define TAUT(X) ((X) == Z)
5389#define PAREN(X, Y) (X == Y)
5390#define ID(X) (X)
5391int main(int argc, char *argv[])
5392{
5393 int x = 0, y = 0;
5394 x = ID(x);
5395 x = fn();
5396 fn();
5397 if (PAREN(x, y)) return 0;
5398 if (TAUT(Z)) return 0;
5399 return 0;
5400}
5401EOF
5402
5403if ! compile_object "-Werror"; then
5404 ccache_cpp2=yes
5405fi
5406
John Snowb553a042015-11-03 15:43:42 -05005407#################################################
5408# clang does not support glibc + FORTIFY_SOURCE.
5409
5410if test "$fortify_source" != "no"; then
5411 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5412 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005413 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005414 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005415 fortify_source="no";
5416 else
5417 fortify_source="yes"
5418 fi
5419fi
5420
Fam Zheng1efad062018-06-01 17:26:43 +08005421###############################################
5422# Check if copy_file_range is provided by glibc
5423have_copy_file_range=no
5424cat > $TMPC << EOF
5425#include <unistd.h>
5426int main(void) {
5427 copy_file_range(0, NULL, 0, NULL, 0, 0);
5428 return 0;
5429}
5430EOF
5431if compile_prog "" "" ; then
5432 have_copy_file_range=yes
5433fi
5434
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305435##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005436# check if struct fsxattr is available via linux/fs.h
5437
5438have_fsxattr=no
5439cat > $TMPC << EOF
5440#include <linux/fs.h>
5441struct fsxattr foo;
5442int main(void) {
5443 return 0;
5444}
5445EOF
5446if compile_prog "" "" ; then
5447 have_fsxattr=yes
5448fi
5449
Peter Maydellb66e10e2016-06-08 18:34:32 +01005450##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005451# check for usable membarrier system call
5452if test "$membarrier" = "yes"; then
5453 have_membarrier=no
5454 if test "$mingw32" = "yes" ; then
5455 have_membarrier=yes
5456 elif test "$linux" = "yes" ; then
5457 cat > $TMPC << EOF
5458 #include <linux/membarrier.h>
5459 #include <sys/syscall.h>
5460 #include <unistd.h>
5461 #include <stdlib.h>
5462 int main(void) {
5463 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5464 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5465 exit(0);
5466 }
5467EOF
5468 if compile_prog "" "" ; then
5469 have_membarrier=yes
5470 fi
5471 fi
5472 if test "$have_membarrier" = "no"; then
5473 feature_not_found "membarrier" "membarrier system call not available"
5474 fi
5475else
5476 # Do not enable it by default even for Mingw32, because it doesn't
5477 # work on Wine.
5478 membarrier=no
5479fi
5480
5481##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005482# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005483have_rtnetlink=no
5484cat > $TMPC << EOF
5485#include <linux/rtnetlink.h>
5486int main(void) {
5487 return IFLA_PROTO_DOWN;
5488}
5489EOF
5490if compile_prog "" "" ; then
5491 have_rtnetlink=yes
5492fi
5493
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005494##########################################
5495# check for usable AF_VSOCK environment
5496have_af_vsock=no
5497cat > $TMPC << EOF
5498#include <errno.h>
5499#include <sys/types.h>
5500#include <sys/socket.h>
5501#if !defined(AF_VSOCK)
5502# error missing AF_VSOCK flag
5503#endif
5504#include <linux/vm_sockets.h>
5505int main(void) {
5506 int sock, ret;
5507 struct sockaddr_vm svm;
5508 socklen_t len = sizeof(svm);
5509 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5510 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5511 if ((ret == -1) && (errno == ENOTCONN)) {
5512 return 0;
5513 }
5514 return -1;
5515}
5516EOF
5517if compile_prog "" "" ; then
5518 have_af_vsock=yes
5519fi
5520
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005521##########################################
5522# check for usable AF_ALG environment
5523hava_afalg=no
5524cat > $TMPC << EOF
5525#include <errno.h>
5526#include <sys/types.h>
5527#include <sys/socket.h>
5528#include <linux/if_alg.h>
5529int main(void) {
5530 int sock;
5531 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5532 return sock;
5533}
5534EOF
5535if compile_prog "" "" ; then
5536 have_afalg=yes
5537fi
5538if test "$crypto_afalg" = "yes"
5539then
5540 if test "$have_afalg" != "yes"
5541 then
5542 error_exit "AF_ALG requested but could not be detected"
5543 fi
5544fi
5545
5546
James Clarke6969ec62016-06-06 12:02:50 +01005547#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005548# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005549if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005550 cat > $TMPC << EOF
5551#include <Hypervisor/hv.h>
5552int main() { return 0;}
5553EOF
5554 if ! compile_object ""; then
5555 hvf='no'
5556 else
5557 hvf='yes'
5558 LDFLAGS="-framework Hypervisor $LDFLAGS"
5559 fi
5560fi
5561
5562#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005563# Sparc implicitly links with --relax, which is
5564# incompatible with -r, so --no-relax should be
5565# given. It does no harm to give it on other
5566# platforms too.
5567
5568# Note: the prototype is needed since QEMU_CFLAGS
5569# contains -Wmissing-prototypes
5570cat > $TMPC << EOF
5571extern int foo(void);
5572int foo(void) { return 0; }
5573EOF
5574if ! compile_object ""; then
5575 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5576fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005577for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5578 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5579 LD_REL_FLAGS=$i
5580 break
5581 fi
5582done
5583if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5584 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005585fi
5586
Jan Vesely277abf12016-04-29 13:15:23 -04005587##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005588# check for sysmacros.h
5589
5590have_sysmacros=no
5591cat > $TMPC << EOF
5592#include <sys/sysmacros.h>
5593int main(void) {
5594 return makedev(0, 0);
5595}
5596EOF
5597if compile_prog "" "" ; then
5598 have_sysmacros=yes
5599fi
5600
5601##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005602# Veritas HyperScale block driver VxHS
5603# Check if libvxhs is installed
5604
5605if test "$vxhs" != "no" ; then
5606 cat > $TMPC <<EOF
5607#include <stdint.h>
5608#include <qnio/qnio_api.h>
5609
5610void *vxhs_callback;
5611
5612int main(void) {
5613 iio_init(QNIO_VERSION, vxhs_callback);
5614 return 0;
5615}
5616EOF
5617 vxhs_libs="-lvxhs -lssl"
5618 if compile_prog "" "$vxhs_libs" ; then
5619 vxhs=yes
5620 else
5621 if test "$vxhs" = "yes" ; then
5622 feature_not_found "vxhs block device" "Install libvxhs See github"
5623 fi
5624 vxhs=no
5625 fi
5626fi
5627
5628##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005629# check for _Static_assert()
5630
5631have_static_assert=no
5632cat > $TMPC << EOF
5633_Static_assert(1, "success");
5634int main(void) {
5635 return 0;
5636}
5637EOF
5638if compile_prog "" "" ; then
5639 have_static_assert=yes
5640fi
5641
5642##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005643# check for utmpx.h, it is missing e.g. on OpenBSD
5644
5645have_utmpx=no
5646cat > $TMPC << EOF
5647#include <utmpx.h>
5648struct utmpx user_info;
5649int main(void) {
5650 return 0;
5651}
5652EOF
5653if compile_prog "" "" ; then
5654 have_utmpx=yes
5655fi
5656
5657##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005658# checks for sanitizers
5659
Marc-André Lureau247724c2018-01-16 16:11:51 +01005660have_asan=no
5661have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005662have_asan_iface_h=no
5663have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005664
5665if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005666 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005667 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5668 have_asan=yes
5669 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005670
5671 # we could use a simple skeleton for flags checks, but this also
5672 # detect the static linking issue of ubsan, see also:
5673 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5674 cat > $TMPC << EOF
5675#include <stdlib.h>
5676int main(void) {
5677 void *tmp = malloc(10);
5678 return *(int *)(tmp + 2);
5679}
5680EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005681 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5682 have_ubsan=yes
5683 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005684
5685 if check_include "sanitizer/asan_interface.h" ; then
5686 have_asan_iface_h=yes
5687 fi
5688
5689 cat > $TMPC << EOF
5690#include <sanitizer/asan_interface.h>
5691int main(void) {
5692 __sanitizer_start_switch_fiber(0, 0, 0);
5693 return 0;
5694}
5695EOF
5696 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5697 have_asan_iface_fiber=yes
5698 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005699fi
5700
5701##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005702# Docker and cross-compiler support
5703#
5704# This is specifically for building test
5705# cases for foreign architectures, not
5706# cross-compiling QEMU itself.
5707
5708if has "docker"; then
5709 docker=$($python $source_path/tests/docker/docker.py probe)
5710fi
5711
5712##########################################
Junyan He17824402018-07-18 15:47:59 +08005713# check for libpmem
5714
5715if test "$libpmem" != "no"; then
5716 if $pkg_config --exists "libpmem"; then
5717 libpmem="yes"
5718 libpmem_libs=$($pkg_config --libs libpmem)
5719 libpmem_cflags=$($pkg_config --cflags libpmem)
5720 libs_softmmu="$libs_softmmu $libpmem_libs"
5721 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5722 else
5723 if test "$libpmem" = "yes" ; then
5724 feature_not_found "libpmem" "Install nvml or pmdk"
5725 fi
5726 libpmem="no"
5727 fi
5728fi
5729
5730##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005731# End of CC checks
5732# After here, no more $cc or $ld runs
5733
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005734write_c_skeleton
5735
Blue Swirl1d728c32012-05-01 18:45:39 +00005736if test "$gcov" = "yes" ; then
5737 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5738 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005739elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005740 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005741elif test "$debug" = "no"; then
5742 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005743fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005744
Marc-André Lureau247724c2018-01-16 16:11:51 +01005745if test "$have_asan" = "yes"; then
5746 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005747 if test "$have_asan_iface_h" = "no" ; then
5748 echo "ASAN build enabled, but ASAN header missing." \
5749 "Without code annotation, the report may be inferior."
5750 elif test "$have_asan_iface_fiber" = "no" ; then
5751 echo "ASAN build enabled, but ASAN header is too old." \
5752 "Without code annotation, the report may be inferior."
5753 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005754fi
5755if test "$have_ubsan" = "yes"; then
5756 CFLAGS="-fsanitize=undefined $CFLAGS"
5757fi
5758
Peter Lieven6542aa92014-02-03 10:26:13 +01005759##########################################
5760# Do we have libnfs
5761if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005762 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005763 libnfs="yes"
5764 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005765 else
5766 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005767 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005768 fi
5769 libnfs="no"
5770 fi
5771fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005772
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005773##########################################
5774# Do we have libudev
5775if test "$libudev" != "no" ; then
5776 if $pkg_config libudev && test "$static" != "yes"; then
5777 libudev="yes"
5778 libudev_libs=$($pkg_config --libs libudev)
5779 else
5780 libudev="no"
5781 fi
5782fi
5783
Peter Maydell6ca026c2012-07-18 15:10:18 +01005784# Now we've finished running tests it's OK to add -Werror to the compiler flags
5785if test "$werror" = "yes"; then
5786 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5787fi
5788
Juan Quintelae86ecd42009-08-03 14:45:59 +02005789if test "$solaris" = "no" ; then
5790 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005791 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005792 fi
5793fi
5794
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005795# test if pod2man has --utf8 option
5796if pod2man --help | grep -q utf8; then
5797 POD2MAN="pod2man --utf8"
5798else
5799 POD2MAN="pod2man"
5800fi
5801
Blue Swirl952afb72010-09-19 08:36:34 +00005802# Use ASLR, no-SEH and DEP if available
5803if test "$mingw32" = "yes" ; then
5804 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005805 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005806 LDFLAGS="-Wl,$flag $LDFLAGS"
5807 fi
5808 done
5809fi
5810
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005811qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005812qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005813qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005814qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00005815qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00005816qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005817
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005818# We can only support ivshmem if we have eventfd
5819if [ "$eventfd" = "yes" ]; then
5820 ivshmem=yes
5821fi
5822
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005823tools=""
5824if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005825 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005826 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5827 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005828 fi
5829 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005830 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005831 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03005832 if [ "$curl" = "yes" ]; then
5833 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005834 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005835fi
5836if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005837 if test "$linux" = yes; then
5838 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005839 virtfs=yes
5840 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5841 else
5842 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005843 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305844 fi
Andreas Färber17500372012-05-01 01:12:03 +02005845 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005846 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005847 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5848 mpath=yes
5849 else
5850 if test "$mpath" = yes; then
5851 error_exit "Multipath requires libmpathpersist devel"
5852 fi
5853 mpath=no
5854 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005855 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5856 else
5857 if test "$virtfs" = yes; then
5858 error_exit "VirtFS is supported only on Linux"
5859 fi
5860 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005861 if test "$mpath" = yes; then
5862 error_exit "Multipath is supported only on Linux"
5863 fi
5864 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305865 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005866 if test "$xkbcommon" = "yes"; then
5867 tools="qemu-keymap\$(EXESUF) $tools"
5868 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005869fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005870
5871# Probe for guest agent support/options
5872
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005873if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005874 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005875 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005876 guest_agent=yes
5877 elif [ "$guest_agent" != yes ]; then
5878 guest_agent=no
5879 else
5880 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005881 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005882fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005883
Michael Roth9d6bc272015-08-26 10:49:13 -05005884# Guest agent Window MSI package
5885
5886if test "$guest_agent" != yes; then
5887 if test "$guest_agent_msi" = yes; then
5888 error_exit "MSI guest agent package requires guest agent enabled"
5889 fi
5890 guest_agent_msi=no
5891elif test "$mingw32" != "yes"; then
5892 if test "$guest_agent_msi" = "yes"; then
5893 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5894 fi
5895 guest_agent_msi=no
5896elif ! has wixl; then
5897 if test "$guest_agent_msi" = "yes"; then
5898 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5899 fi
5900 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005901else
5902 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5903 # disabled explicitly
5904 if test "$guest_agent_msi" != "no"; then
5905 guest_agent_msi=yes
5906 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005907fi
5908
Michael Roth1a349042015-08-26 11:14:31 -05005909if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005910 if test "$guest_agent_with_vss" = "yes"; then
5911 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5912 fi
5913
5914 if test "$QEMU_GA_MANUFACTURER" = ""; then
5915 QEMU_GA_MANUFACTURER=QEMU
5916 fi
5917
5918 if test "$QEMU_GA_DISTRO" = ""; then
5919 QEMU_GA_DISTRO=Linux
5920 fi
5921
5922 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005923 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005924 fi
5925
Stefan Weil89138852016-05-16 15:10:20 +02005926 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005927
5928 case "$cpu" in
5929 x86_64)
5930 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5931 ;;
5932 i386)
5933 QEMU_GA_MSI_ARCH="-D Arch=32"
5934 ;;
5935 *)
5936 error_exit "CPU $cpu not supported for building installation package"
5937 ;;
5938 esac
5939fi
5940
Paolo Bonzinica35f782010-05-26 16:08:29 +02005941# Mac OS X ships with a broken assembler
5942roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06005943if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5944 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5945 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005946 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005947 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5948 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5949 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005950 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5951 ld_i386_emulation="$emu"
5952 roms="optionrom"
5953 break
5954 fi
5955 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005956fi
Eric Blakee633a5c2019-02-04 20:39:37 -06005957if test "$cpu" = "ppc64" && test "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005958 roms="$roms spapr-rtas"
5959fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005960
Thomas Huth2e33c3f2019-01-14 13:52:26 +01005961# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00005962if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01005963 write_c_skeleton
5964 if compile_prog "-march=z900" ""; then
5965 roms="$roms s390-ccw"
5966 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00005967fi
5968
Richard Henderson964c6fa2013-06-21 19:10:16 -07005969# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005970if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005971 textseg_addr=
5972 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005973 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5974 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005975 textseg_addr=0x60000000
5976 ;;
5977 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005978 # A 256M aligned address, high in the address space, with enough
5979 # room for the code_gen_buffer above it before the stack.
5980 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005981 ;;
5982 esac
5983 if [ -n "$textseg_addr" ]; then
5984 cat > $TMPC <<EOF
5985 int main(void) { return 0; }
5986EOF
5987 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5988 if ! compile_prog "" "$textseg_ldflags"; then
5989 # In case ld does not support -Ttext-segment, edit the default linker
5990 # script via sed to set the .text start addr. This is needed on FreeBSD
5991 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005992 if ! $ld --verbose >/dev/null 2>&1; then
5993 error_exit \
5994 "We need to link the QEMU user mode binaries at a" \
5995 "specific text address. Unfortunately your linker" \
5996 "doesn't support either the -Ttext-segment option or" \
5997 "printing the default linker script with --verbose." \
5998 "If you don't want the user mode binaries, pass the" \
5999 "--disable-user option to configure."
6000 fi
6001
Richard Henderson964c6fa2013-06-21 19:10:16 -07006002 $ld --verbose | sed \
6003 -e '1,/==================================================/d' \
6004 -e '/==================================================/,$d' \
6005 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6006 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6007 textseg_ldflags="-Wl,-T../config-host.ld"
6008 fi
6009 fi
6010fi
6011
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006012# Check that the C++ compiler exists and works with the C compiler.
6013# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6014if has $cxx; then
6015 cat > $TMPC <<EOF
6016int c_function(void);
6017int main(void) { return c_function(); }
6018EOF
6019
6020 compile_object
6021
6022 cat > $TMPCXX <<EOF
6023extern "C" {
6024 int c_function(void);
6025}
6026int c_function(void) { return 42; }
6027EOF
6028
6029 update_cxxflags
6030
6031 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6032 # C++ compiler $cxx works ok with C compiler $cc
6033 :
6034 else
6035 echo "C++ compiler $cxx does not work with C compiler $cc"
6036 echo "Disabling C++ specific optional code"
6037 cxx=
6038 fi
6039else
6040 echo "No C++ compiler available; disabling C++ specific optional code"
6041 cxx=
6042fi
6043
Cole Robinson02d34f62016-05-06 14:03:09 -04006044echo_version() {
6045 if test "$1" = "yes" ; then
6046 echo "($2)"
6047 fi
6048}
6049
Jan Kiszka50e12062014-10-02 10:03:55 +02006050# prepend pixman and ftd flags after all config tests are done
6051QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006052QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006053libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006054
bellard43ce4df2003-06-09 19:53:12 +00006055echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006056echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006057echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006058echo "binary directory $(eval echo $bindir)"
6059echo "library directory $(eval echo $libdir)"
6060echo "module directory $(eval echo $qemu_moddir)"
6061echo "libexec directory $(eval echo $libexecdir)"
6062echo "include directory $(eval echo $includedir)"
6063echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006064if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006065echo "local state directory $(eval echo $local_statedir)"
6066echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006067echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006068else
6069echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006070echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006071fi
bellard5a671352003-10-01 00:13:48 +00006072echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006073echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006074echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006075echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006076echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006077echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006078echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006079echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006080echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006081echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006082echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006083echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006084echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006085echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006086echo "python $python ($python_version)"
Brade2d88302011-09-02 16:53:28 -04006087if test "$slirp" = "yes" ; then
6088 echo "smbd $smbd"
6089fi
Fam Zheng17969262014-02-10 14:48:56 +08006090echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006091echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006092echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006093echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006094echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006095echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006096echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006097echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006098echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006099if test "$darwin" = "yes" ; then
6100 echo "Cocoa support $cocoa"
6101fi
Stefan Weil89138852016-05-16 15:10:20 +02006102echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006103echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006104echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006105echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006106echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006107echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006108echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006109echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006110echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006111echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00006112echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006113echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006114echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006115echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006116echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006117echo "Block whitelist (rw) $block_drv_rw_whitelist"
6118echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306119echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006120echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006121echo "VNC support $vnc"
6122if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006123 echo "VNC SASL support $vnc_sasl"
6124 echo "VNC JPEG support $vnc_jpeg"
6125 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006126fi
blueswir131422552007-04-16 18:27:06 +00006127if test -n "$sparc_cpu"; then
6128 echo "Target Sparc Arch $sparc_cpu"
6129fi
aliguorie37630c2009-04-22 15:19:10 +00006130echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006131if test "$xen" = "yes" ; then
6132 echo "xen ctrl version $xen_ctrl_version"
6133fi
aurel322e4d9fb2008-04-08 06:01:02 +00006134echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006135echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006136echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006137echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006138echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006139echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006140echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006141echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006142echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006143echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006144echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006145echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006146echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006147echo "TCG support $tcg"
6148if test "$tcg" = "yes" ; then
6149 echo "TCG debug enabled $debug_tcg"
6150 echo "TCG interpreter $tcg_interpreter"
6151fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006152echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006153echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006154echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006155echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006156echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006157echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006158echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006159echo "madvise $madvise"
6160echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006161echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006162echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006163echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006164echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006165echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006166echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006167echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006168echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006169if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006170echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006171fi
Stefan Weil89138852016-05-16 15:10:20 +02006172echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006173echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006174echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006175echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006176echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006177echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006178echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006179echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006180echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006181echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006182echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006183echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006184echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006185echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006186echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006187echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006188echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006189echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006190echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006191echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306192echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006193echo "gcov $gcov_tool"
6194echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006195echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006196echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006197echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006198echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006199echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006200echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006201echo "lzo support $lzo"
6202echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006203echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006204echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006205echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006206echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006207echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006208echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006209echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006210echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006211echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006212echo "bochs support $bochs"
6213echo "cloop support $cloop"
6214echo "dmg support $dmg"
6215echo "qcow v1 support $qcow1"
6216echo "vdi support $vdi"
6217echo "vvfat support $vvfat"
6218echo "qed support $qed"
6219echo "parallels support $parallels"
6220echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006221echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006222echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006223echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006224echo "libudev $libudev"
bellard67b915a2004-03-31 23:37:16 +00006225
Peter Maydell898be3e2017-03-21 14:31:57 +00006226if test "$supported_cpu" = "no"; then
6227 echo
6228 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6229 echo
6230 echo "CPU host architecture $cpu support is not currently maintained."
6231 echo "The QEMU project intends to remove support for this host CPU in"
6232 echo "a future release if nobody volunteers to maintain it and to"
6233 echo "provide a build host for our continuous integration setup."
6234 echo "configure has succeeded and you can continue to build, but"
6235 echo "if you care about QEMU on this platform you should contact"
6236 echo "us upstream at qemu-devel@nongnu.org."
6237fi
6238
6239if test "$supported_os" = "no"; then
6240 echo
6241 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6242 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006243 echo "Host OS $targetos support is not currently maintained."
6244 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006245 echo "a future release if nobody volunteers to maintain it and to"
6246 echo "provide a build host for our continuous integration setup."
6247 echo "configure has succeeded and you can continue to build, but"
6248 echo "if you care about QEMU on this platform you should contact"
6249 echo "us upstream at qemu-devel@nongnu.org."
6250fi
6251
Juan Quintela98ec69a2009-07-16 18:34:18 +02006252config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006253
Stefan Weildbd99ae2013-01-01 18:33:44 +01006254echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6255
Juan Quintela98ec69a2009-07-16 18:34:18 +02006256echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006257echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006258
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006259echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006260echo "prefix=$prefix" >> $config_host_mak
6261echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006262echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006263echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006264echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006265echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006266echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006267echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006268echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006269echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006270echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006271echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006272if test "$mingw32" = "no" ; then
6273 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6274fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006275echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006276echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006277echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006278echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006279echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006280echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006281echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006282echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006283
Juan Quintela98ec69a2009-07-16 18:34:18 +02006284echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006285
aurel32f8393942009-04-13 18:45:38 +00006286if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006287 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006288fi
aliguori1625af82009-04-05 17:41:02 +00006289if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006290 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006291fi
bellard7d132992003-03-06 23:23:54 +00006292if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006293 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006294fi
bellard67b915a2004-03-31 23:37:16 +00006295if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006296 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006297 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006298 version_major=${rc_version%%.*}
6299 rc_version=${rc_version#*.}
6300 version_minor=${rc_version%%.*}
6301 rc_version=${rc_version#*.}
6302 version_subminor=${rc_version%%.*}
6303 version_micro=0
6304 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6305 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006306 if test "$guest_agent_with_vss" = "yes" ; then
6307 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006308 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006309 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6310 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006311 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006312 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006313 fi
Michael Roth1a349042015-08-26 11:14:31 -05006314 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006315 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006316 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6317 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6318 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6319 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6320 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6321 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6322 fi
pbrook210fa552007-02-27 21:04:49 +00006323else
Juan Quintela35f4df22009-07-27 16:13:07 +02006324 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006325fi
blueswir1128ab2f2008-08-15 18:33:42 +00006326
Mark McLoughlindffcb712009-10-22 17:49:11 +01006327if test "$linux" = "yes" ; then
6328 echo "CONFIG_LINUX=y" >> $config_host_mak
6329fi
6330
bellard83fb7ad2004-07-05 21:25:26 +00006331if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006332 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006333fi
malcb29fe3e2008-11-18 01:42:22 +00006334
bellardec530c82006-04-25 22:36:06 +00006335if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006336 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006337fi
Andreas Färber179cf402010-09-20 00:50:43 +02006338if test "$haiku" = "yes" ; then
6339 echo "CONFIG_HAIKU=y" >> $config_host_mak
6340fi
bellard97a847b2003-08-10 21:36:04 +00006341if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006342 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006343fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006344if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006345 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006346fi
bellardc20709a2004-04-21 23:27:19 +00006347if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006348 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006349 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006350fi
ths8a16d272008-07-19 09:56:24 +00006351if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006352 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006353 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006354fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006355if test "$netmap" = "yes" ; then
6356 echo "CONFIG_NETMAP=y" >> $config_host_mak
6357fi
Gonglei015a33b2014-07-01 20:58:08 +08006358if test "$l2tpv3" = "yes" ; then
6359 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6360fi
Corey Bryant47e98652012-01-26 09:42:26 -05006361if test "$cap_ng" = "yes" ; then
6362 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6363fi
Juan Quintela2358a492009-07-27 16:13:25 +02006364echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006365for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006366 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006367 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006368 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006369 echo "$def=m" >> $config_host_mak ;;
6370 *)
6371 echo "$def=y" >> $config_host_mak ;;
6372 esac
malc0c58ac12008-06-25 21:04:05 +00006373done
Fam Zhengb1149912017-09-07 16:29:13 +08006374echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6375echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6376echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6377echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6378echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006379if test "$audio_pt_int" = "yes" ; then
6380 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6381fi
malcd5631632009-10-10 01:13:41 +04006382if test "$audio_win_int" = "yes" ; then
6383 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6384fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006385echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6386echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006387if test "$vnc" = "yes" ; then
6388 echo "CONFIG_VNC=y" >> $config_host_mak
6389fi
aliguori2f9606b2009-03-06 20:27:28 +00006390if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006391 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006392fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006393if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006394 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006395fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006396if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006397 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006398fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006399if test "$xkbcommon" = "yes" ; then
6400 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6401 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6402fi
aliguori76655d62009-03-06 20:27:37 +00006403if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006404 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006405fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006406if test "$xfs" = "yes" ; then
6407 echo "CONFIG_XFS=y" >> $config_host_mak
6408fi
Stefan Weil89138852016-05-16 15:10:20 +02006409qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006410echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006411echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006412echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006413echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006414if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006415 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006416fi
Fam Zheng17969262014-02-10 14:48:56 +08006417if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006418 # $shacmd can generate a hash started with digit, which the compiler doesn't
6419 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006420 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006421 echo "CONFIG_MODULES=y" >> $config_host_mak
6422fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006423if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006424 echo "CONFIG_X11=y" >> $config_host_mak
6425 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6426 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6427fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006428if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006429 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006430 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006431 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006432 if test "$sdl_image" = "yes" ; then
6433 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6434 fi
bellard49ecc3f2007-11-07 19:25:15 +00006435fi
6436if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006437 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006438fi
6439if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006440 echo "CONFIG_CURSES=m" >> $config_host_mak
6441 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6442 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006443fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006444if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006445 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006446fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006447if test "$accept4" = "yes" ; then
6448 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6449fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306450if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006451 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306452fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006453if test "$eventfd" = "yes" ; then
6454 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6455fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006456if test "$memfd" = "yes" ; then
6457 echo "CONFIG_MEMFD=y" >> $config_host_mak
6458fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006459if test "$have_usbfs" = "yes" ; then
6460 echo "CONFIG_USBFS=y" >> $config_host_mak
6461fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006462if test "$fallocate" = "yes" ; then
6463 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6464fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006465if test "$fallocate_punch_hole" = "yes" ; then
6466 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6467fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006468if test "$fallocate_zero_range" = "yes" ; then
6469 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6470fi
Kevin Wolfed911432014-09-29 17:12:59 +02006471if test "$posix_fallocate" = "yes" ; then
6472 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6473fi
Peter Maydellc727f472011-01-06 11:05:10 +00006474if test "$sync_file_range" = "yes" ; then
6475 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6476fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006477if test "$fiemap" = "yes" ; then
6478 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6479fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006480if test "$dup3" = "yes" ; then
6481 echo "CONFIG_DUP3=y" >> $config_host_mak
6482fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006483if test "$ppoll" = "yes" ; then
6484 echo "CONFIG_PPOLL=y" >> $config_host_mak
6485fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006486if test "$prctl_pr_set_timerslack" = "yes" ; then
6487 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6488fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006489if test "$epoll" = "yes" ; then
6490 echo "CONFIG_EPOLL=y" >> $config_host_mak
6491fi
6492if test "$epoll_create1" = "yes" ; then
6493 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6494fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006495if test "$sendfile" = "yes" ; then
6496 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6497fi
Riku Voipio51834342014-06-22 11:25:42 +01006498if test "$timerfd" = "yes" ; then
6499 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6500fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006501if test "$setns" = "yes" ; then
6502 echo "CONFIG_SETNS=y" >> $config_host_mak
6503fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006504if test "$clock_adjtime" = "yes" ; then
6505 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6506fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006507if test "$syncfs" = "yes" ; then
6508 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6509fi
aurel323b3f24a2009-04-15 16:12:13 +00006510if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006511 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006512fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006513if test "$inotify1" = "yes" ; then
6514 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6515fi
Peter Maydell401bc052017-09-05 13:19:32 +01006516if test "$sem_timedwait" = "yes" ; then
6517 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6518fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006519if test "$strchrnul" = "yes" ; then
6520 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6521fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006522if test "$byteswap_h" = "yes" ; then
6523 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6524fi
6525if test "$bswap_h" = "yes" ; then
6526 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6527fi
Alexander Graf769ce762009-05-11 17:41:42 +02006528if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006529 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006530 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006531 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006532fi
aurel322e4d9fb2008-04-08 06:01:02 +00006533if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006534 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006535 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006536fi
balrogfb599c92008-09-28 23:49:55 +00006537if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006538 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006539 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006540fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006541if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006542 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006543 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006544 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006545 if test "$gtk_gl" = "yes" ; then
6546 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6547 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006548fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006549echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006550if test "$gnutls" = "yes" ; then
6551 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6552fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006553if test "$gcrypt" = "yes" ; then
6554 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006555 if test "$gcrypt_hmac" = "yes" ; then
6556 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6557 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006558fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006559if test "$nettle" = "yes" ; then
6560 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006561 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006562fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006563if test "$tasn1" = "yes" ; then
6564 echo "CONFIG_TASN1=y" >> $config_host_mak
6565fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006566if test "$have_ifaddrs_h" = "yes" ; then
6567 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6568fi
Eric Blake6b39b062016-10-11 10:46:23 -05006569if test "$have_broken_size_max" = "yes" ; then
6570 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6571fi
Jan Vesely277abf12016-04-29 13:15:23 -04006572
6573# Work around a system header bug with some kernel/XFS header
6574# versions where they both try to define 'struct fsxattr':
6575# xfs headers will not try to redefine structs from linux headers
6576# if this macro is set.
6577if test "$have_fsxattr" = "yes" ; then
6578 echo "HAVE_FSXATTR=y" >> $config_host_mak
6579fi
Fam Zheng1efad062018-06-01 17:26:43 +08006580if test "$have_copy_file_range" = "yes" ; then
6581 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6582fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006583if test "$vte" = "yes" ; then
6584 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006585 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006586 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006587fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006588if test "$virglrenderer" = "yes" ; then
6589 echo "CONFIG_VIRGL=y" >> $config_host_mak
6590 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6591 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6592fi
aliguorie37630c2009-04-22 15:19:10 +00006593if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006594 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006595 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00006596fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006597if test "$linux_aio" = "yes" ; then
6598 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6599fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006600if test "$attr" = "yes" ; then
6601 echo "CONFIG_ATTR=y" >> $config_host_mak
6602fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006603if test "$libattr" = "yes" ; then
6604 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6605fi
Meador Inge983eef52012-02-24 14:00:42 +05306606if test "$virtfs" = "yes" ; then
6607 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006608fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006609if test "$mpath" = "yes" ; then
6610 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006611 if test "$mpathpersist_new_api" = "yes"; then
6612 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6613 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006614fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006615if test "$vhost_scsi" = "yes" ; then
6616 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6617fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01006618if test "$vhost_net" = "yes" ; then
6619 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6620fi
6621if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01006622 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006623fi
Gonglei042cea22018-03-01 21:46:28 +08006624if test "$vhost_crypto" = "yes" ; then
6625 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6626fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006627if test "$vhost_vsock" = "yes" ; then
6628 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6629fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01006630if test "$vhost_kernel" = "yes" ; then
6631 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6632fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006633if test "$vhost_user" = "yes" ; then
6634 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6635fi
ths77755342008-11-27 15:45:16 +00006636if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006637 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006638fi
aliguoribf9298b2008-12-05 20:05:26 +00006639if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006640 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006641fi
aliguoriceb42de2009-04-07 18:43:28 +00006642if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006643 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006644fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006645if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006646 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006647fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006648if test "$membarrier" = "yes" ; then
6649 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6650fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006651if test "$signalfd" = "yes" ; then
6652 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6653fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00006654if test "$optreset" = "yes" ; then
6655 echo "HAVE_OPTRESET=y" >> $config_host_mak
6656fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006657if test "$tcg" = "yes"; then
6658 echo "CONFIG_TCG=y" >> $config_host_mak
6659 if test "$tcg_interpreter" = "yes" ; then
6660 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6661 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006662fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006663if test "$fdatasync" = "yes" ; then
6664 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6665fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006666if test "$madvise" = "yes" ; then
6667 echo "CONFIG_MADVISE=y" >> $config_host_mak
6668fi
6669if test "$posix_madvise" = "yes" ; then
6670 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6671fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006672if test "$posix_memalign" = "yes" ; then
6673 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6674fi
bellard97a847b2003-08-10 21:36:04 +00006675
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006676if test "$spice" = "yes" ; then
6677 echo "CONFIG_SPICE=y" >> $config_host_mak
6678fi
6679
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006680if test "$smartcard" = "yes" ; then
6681 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006682 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6683 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006684fi
6685
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006686if test "$libusb" = "yes" ; then
6687 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006688 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6689 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006690fi
6691
Hans de Goede69354a82011-07-19 11:04:10 +02006692if test "$usb_redir" = "yes" ; then
6693 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006694 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6695 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006696fi
6697
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006698if test "$opengl" = "yes" ; then
6699 echo "CONFIG_OPENGL=y" >> $config_host_mak
6700 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006701 if test "$opengl_dmabuf" = "yes" ; then
6702 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6703 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006704fi
6705
Yang Zhong5a22ab72017-12-20 21:16:46 +08006706if test "$malloc_trim" = "yes" ; then
6707 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6708fi
6709
Liang Li99f2dbd2016-03-08 13:53:16 +08006710if test "$avx2_opt" = "yes" ; then
6711 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6712fi
6713
qiaonuohan607dacd2014-02-18 14:11:30 +08006714if test "$lzo" = "yes" ; then
6715 echo "CONFIG_LZO=y" >> $config_host_mak
6716fi
6717
6718if test "$snappy" = "yes" ; then
6719 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6720fi
6721
Peter Wu6b383c02015-01-06 18:48:14 +01006722if test "$bzip2" = "yes" ; then
6723 echo "CONFIG_BZIP2=y" >> $config_host_mak
6724 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6725fi
6726
Julio Faracco83bc1f92018-11-05 13:08:04 -02006727if test "$lzfse" = "yes" ; then
6728 echo "CONFIG_LZFSE=y" >> $config_host_mak
6729 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6730fi
6731
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006732if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006733 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006734 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6735 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006736fi
6737
Peter Lieven6542aa92014-02-03 10:26:13 +01006738if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006739 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6740 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006741fi
6742
Eduardo Otubof7945732012-08-14 18:44:05 -03006743if test "$seccomp" = "yes"; then
6744 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006745 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6746 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006747fi
6748
bellard83fb7ad2004-07-05 21:25:26 +00006749# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006750if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006751 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006752fi
6753
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006754if test "$localtime_r" = "yes" ; then
6755 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6756fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006757if test "$qom_cast_debug" = "yes" ; then
6758 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6759fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006760if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006761 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006762 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6763 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006764fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006765
Peter Maydell7c2acc72013-04-08 12:11:27 +01006766echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006767if test "$coroutine_pool" = "yes" ; then
6768 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6769else
6770 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6771fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306772
Peter Lieven7d992e42016-09-27 11:58:45 +02006773if test "$debug_stack_usage" = "yes" ; then
6774 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6775fi
6776
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006777if test "$crypto_afalg" = "yes" ; then
6778 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6779fi
6780
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306781if test "$open_by_handle_at" = "yes" ; then
6782 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6783fi
6784
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306785if test "$linux_magic_h" = "yes" ; then
6786 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6787fi
6788
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006789if test "$pragma_diagnostic_available" = "yes" ; then
6790 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006791fi
6792
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006793if test "$valgrind_h" = "yes" ; then
6794 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6795fi
6796
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006797if test "$have_asan_iface_fiber" = "yes" ; then
6798 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6799fi
6800
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006801if test "$has_environ" = "yes" ; then
6802 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6803fi
6804
Richard Henderson76a347e2012-12-28 14:17:02 -08006805if test "$cpuid_h" = "yes" ; then
6806 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6807fi
6808
Richard Hendersonf5401662013-02-16 12:46:59 -08006809if test "$int128" = "yes" ; then
6810 echo "CONFIG_INT128=y" >> $config_host_mak
6811fi
6812
Richard Henderson7ebee432016-06-29 21:10:59 -07006813if test "$atomic128" = "yes" ; then
6814 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6815fi
6816
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006817if test "$cmpxchg128" = "yes" ; then
6818 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6819fi
6820
Richard Hendersondf79b992016-09-02 12:23:57 -07006821if test "$atomic64" = "yes" ; then
6822 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6823fi
6824
Richard Hendersondb432672017-09-15 14:11:45 -07006825if test "$vector16" = "yes" ; then
6826 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6827fi
6828
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006829if test "$getauxval" = "yes" ; then
6830 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6831fi
6832
Bharata B Raoeb100392012-09-24 14:42:45 +05306833if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006834 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006835 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6836 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306837fi
6838
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006839if test "$glusterfs_xlator_opt" = "yes" ; then
6840 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6841fi
6842
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306843if test "$glusterfs_discard" = "yes" ; then
6844 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6845fi
6846
Niels de Vosdf3a4292017-05-28 12:01:14 +05306847if test "$glusterfs_fallocate" = "yes" ; then
6848 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6849fi
6850
Bharata B Rao7c815372013-12-21 14:51:25 +05306851if test "$glusterfs_zerofill" = "yes" ; then
6852 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6853fi
6854
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006855if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006856 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006857 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6858 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006859fi
6860
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006861if test "$live_block_migration" = "yes" ; then
6862 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6863fi
6864
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006865if test "$tpm" = "yes"; then
6866 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006867 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006868 if test "$tpm_passthrough" = "yes"; then
6869 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6870 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006871 # TPM emulator support?
6872 if test "$tpm_emulator" = "yes"; then
6873 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6874 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006875fi
6876
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006877echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6878if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006879 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306880fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006881if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006882 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6883 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006884 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006885fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006886if have_backend "log"; then
6887 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02006888fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006889if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006890 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6891fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006892if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006893 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6894 if test "$trace_backend_stap" = "yes" ; then
6895 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6896 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006897fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006898if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006899 if test "$linux" = "yes" ; then
6900 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006901 else
Stewart Smith21684af2014-01-24 12:39:10 +11006902 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006903 fi
6904fi
Paul Durrant0a852412016-08-04 14:44:14 +01006905if have_backend "syslog"; then
6906 if test "$posix_syslog" = "yes" ; then
6907 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6908 else
6909 feature_not_found "syslog(trace backend)" "syslog not available"
6910 fi
6911fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006912echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6913
Michael R. Hines2da776d2013-07-22 10:01:54 -04006914if test "$rdma" = "yes" ; then
6915 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006916 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006917fi
6918
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006919if test "$pvrdma" = "yes" ; then
6920 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6921fi
6922
Laurent Vivier575b22b2016-06-02 22:14:15 +02006923if test "$have_rtnetlink" = "yes" ; then
6924 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6925fi
6926
Klim Kireeved279a02018-01-12 12:01:19 +03006927if test "$libxml2" = "yes" ; then
6928 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6929 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6930 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6931fi
6932
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006933if test "$replication" = "yes" ; then
6934 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6935fi
6936
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006937if test "$have_af_vsock" = "yes" ; then
6938 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6939fi
6940
Christopher Covington4d043512016-12-28 15:04:33 -05006941if test "$have_sysmacros" = "yes" ; then
6942 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6943fi
6944
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006945if test "$have_static_assert" = "yes" ; then
6946 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6947fi
6948
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006949if test "$have_utmpx" = "yes" ; then
6950 echo "HAVE_UTMPX=y" >> $config_host_mak
6951fi
6952
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006953if test "$ivshmem" = "yes" ; then
6954 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6955fi
Richard Hendersone219c492017-09-28 09:01:23 -07006956if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006957 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6958fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006959if test "$debug_mutex" = "yes" ; then
6960 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6961fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006962
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006963# Hold two types of flag:
6964# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6965# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03006966# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006967# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03006968if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006969 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03006970 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6971elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6972 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6973 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006974fi
6975
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006976if test "$vxhs" = "yes" ; then
6977 echo "CONFIG_VXHS=y" >> $config_host_mak
6978 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6979fi
6980
Junyan He17824402018-07-18 15:47:59 +08006981if test "$libpmem" = "yes" ; then
6982 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6983fi
6984
Jeff Cody2f740132018-11-07 07:36:44 +01006985if test "$bochs" = "yes" ; then
6986 echo "CONFIG_BOCHS=y" >> $config_host_mak
6987fi
6988if test "$cloop" = "yes" ; then
6989 echo "CONFIG_CLOOP=y" >> $config_host_mak
6990fi
6991if test "$dmg" = "yes" ; then
6992 echo "CONFIG_DMG=y" >> $config_host_mak
6993fi
6994if test "$qcow1" = "yes" ; then
6995 echo "CONFIG_QCOW1=y" >> $config_host_mak
6996fi
6997if test "$vdi" = "yes" ; then
6998 echo "CONFIG_VDI=y" >> $config_host_mak
6999fi
7000if test "$vvfat" = "yes" ; then
7001 echo "CONFIG_VVFAT=y" >> $config_host_mak
7002fi
7003if test "$qed" = "yes" ; then
7004 echo "CONFIG_QED=y" >> $config_host_mak
7005fi
7006if test "$parallels" = "yes" ; then
7007 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7008fi
7009if test "$sheepdog" = "yes" ; then
7010 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7011fi
7012
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007013if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007014 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007015elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007016 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007017elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007018 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007019elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007020 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007021elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007022 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007023elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007024 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007025else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007026 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007027fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007028QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007029
Juan Quintela98ec69a2009-07-16 18:34:18 +02007030echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007031echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007032echo "MAKE=$make" >> $config_host_mak
7033echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007034echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7035echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007036echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7037echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007038echo "PYTHON=$python" >> $config_host_mak
Cleber Rosa755ee702018-11-09 10:07:07 -05007039echo "PYTHON_VERSION=$python_version" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007040echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007041if $iasl -h > /dev/null 2>&1; then
7042 echo "IASL=$iasl" >> $config_host_mak
7043fi
Juan Quintela804edf22009-07-27 16:12:49 +02007044echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007045echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007046echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007047echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007048echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007049echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007050echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007051echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007052echo "OBJCOPY=$objcopy" >> $config_host_mak
7053echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007054echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007055echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007056echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007057echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007058echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007059echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007060echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007061echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007062if test "$sparse" = "yes" ; then
7063 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007064 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007065 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007066 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7067 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7068fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01007069if test "$cross_prefix" != ""; then
7070 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
7071else
7072 echo "AUTOCONF_HOST := " >> $config_host_mak
7073fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007074echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007075echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007076echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007077echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007078echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007079echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007080echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007081echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007082echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007083echo "DSOSUF=$DSOSUF" >> $config_host_mak
7084echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007085echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007086echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7087echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007088echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007089if test "$gcov" = "yes" ; then
7090 echo "CONFIG_GCOV=y" >> $config_host_mak
7091 echo "GCOV=$gcov_tool" >> $config_host_mak
7092fi
Juan Quintela804edf22009-07-27 16:12:49 +02007093
Alex Bennée51a12b52018-04-04 14:24:39 +01007094if test "$docker" != "no"; then
7095 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7096fi
7097
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007098if test "$libudev" != "no"; then
7099 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7100 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7101fi
7102
Peter Maydell6efd7512011-11-30 11:59:04 +00007103# use included Linux headers
7104if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007105 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007106 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007107 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007108 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007109 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02007110 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01007111 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007112 ;;
7113 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007114 linux_arch=s390
7115 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007116 aarch64)
7117 linux_arch=arm64
7118 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007119 mips64)
7120 linux_arch=mips
7121 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007122 *)
7123 # For most CPUs the kernel architecture name and QEMU CPU name match.
7124 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007125 ;;
7126 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007127 # For non-KVM architectures we will not have asm headers
7128 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7129 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7130 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007131fi
7132
bellard1d14ffa2005-10-30 18:58:22 +00007133for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007134target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007135config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007136target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00007137target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02007138
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007139case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007140 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 +02007141 target_bigendian=yes
7142 ;;
7143esac
bellard97a847b2003-08-10 21:36:04 +00007144target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007145target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007146target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007147target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007148case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007149 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007150 target_softmmu="yes"
7151 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007152 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007153 target_user_only="yes"
7154 target_linux_user="yes"
7155 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007156 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007157 target_user_only="yes"
7158 target_bsd_user="yes"
7159 ;;
pbrook9e407a82007-05-26 16:38:53 +00007160 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007161 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007162 exit 1
7163 ;;
7164esac
ths831b7822007-01-18 20:06:33 +00007165
Alex Bennéed75402b2018-04-04 20:27:05 +01007166target_compiler=""
7167target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007168target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007169
bellard97a847b2003-08-10 21:36:04 +00007170mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007171echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007172
pbrooke5fe0c52006-06-11 13:32:59 +00007173bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007174mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007175interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007176gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007177
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007178TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007179TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007180TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007181
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007182case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007183 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007184 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307185 gdb_xml_files="i386-32bit.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007186 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007187 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007188 ;;
7189 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007190 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007191 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307192 gdb_xml_files="i386-64bit.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007193 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007194 ;;
7195 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007196 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007197 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007198 ;;
7199 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007200 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007201 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007202 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007203 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007204 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007205 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007206 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007207 aarch64|aarch64_be)
7208 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007209 TARGET_BASE_ARCH=arm
7210 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007211 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007212 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 +01007213 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007214 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007215 ;;
aurel322408a522008-04-20 20:19:44 +00007216 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007217 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007218 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007219 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007220 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007221 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007222 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007223 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007224 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007225 ;;
aurel322408a522008-04-20 20:19:44 +00007226 m68k)
aurel322408a522008-04-20 20:19:44 +00007227 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007228 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007229 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007230 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007231 microblaze|microblazeel)
7232 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007233 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007234 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007235 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007236 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007237 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007238 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007239 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007240 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007241 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007242 ;;
7243 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007244 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007245 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007246 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007247 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007248 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007249 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007250 ;;
7251 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007252 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007253 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007254 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007255 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007256 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007257 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007258 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007259 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007260 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007261 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007262 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007263 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007264 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007265 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007266 TARGET_ARCH=openrisc
7267 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007268 ;;
aurel322408a522008-04-20 20:19:44 +00007269 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007270 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007271 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007272 ;;
aurel322408a522008-04-20 20:19:44 +00007273 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007274 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007275 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307276 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007277 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 +01007278 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007279 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007280 ppc64le)
7281 TARGET_ARCH=ppc64
7282 TARGET_BASE_ARCH=ppc
7283 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307284 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007285 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 +01007286 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007287 ;;
aurel322408a522008-04-20 20:19:44 +00007288 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007289 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007290 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007291 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007292 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007293 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 +01007294 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007295 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007296 riscv32)
7297 TARGET_BASE_ARCH=riscv
7298 TARGET_ABI_DIR=riscv
7299 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007300 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007301 ;;
7302 riscv64)
7303 TARGET_BASE_ARCH=riscv
7304 TARGET_ABI_DIR=riscv
7305 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007306 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007307 ;;
aurel322408a522008-04-20 20:19:44 +00007308 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007309 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007310 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007311 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007312 ;;
7313 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007314 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007315 ;;
7316 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007317 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007318 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007319 ;;
7320 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007321 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007322 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007323 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007324 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007325 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007326 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007327 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007328 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007329 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 +01007330 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007331 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007332 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007333 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007334 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007335 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007336 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007337 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007338 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007339 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007340 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007341 xtensa|xtensaeb)
7342 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007343 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007344 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007345 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007346 ;;
aurel322408a522008-04-20 20:19:44 +00007347 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007348 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007349 ;;
7350esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007351# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7352if [ "$TARGET_BASE_ARCH" = "" ]; then
7353 TARGET_BASE_ARCH=$TARGET_ARCH
7354fi
7355
Alex Bennéed75402b2018-04-04 20:27:05 +01007356# Do we have a cross compiler for this target?
7357if has $target_compiler; then
7358
7359 write_c_skeleton
7360
Alex Bennée716a5072018-04-10 12:19:40 +01007361 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007362 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007363 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007364 target_compiler=""
7365 else
7366 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7367 target_compiler_static="n"
7368 fi
7369 else
7370 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7371 target_compiler_static="y"
7372 fi
7373else
7374 target_compiler=""
7375fi
7376
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007377symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7378
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007379upper() {
7380 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7381}
7382
Stefan Weil89138852016-05-16 15:10:20 +02007383target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007384echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007385echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007386echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007387if [ "$TARGET_ABI_DIR" = "" ]; then
7388 TARGET_ABI_DIR=$TARGET_ARCH
7389fi
Juan Quintela25be2102009-10-07 02:41:00 +02007390echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007391if [ "$HOST_VARIANT_DIR" != "" ]; then
7392 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7393fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007394
7395if supported_xen_target $target; then
7396 echo "CONFIG_XEN=y" >> $config_target_mak
7397 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007398 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007399 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007400fi
7401if supported_kvm_target $target; then
7402 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007403fi
7404if supported_hax_target $target; then
7405 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007406fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007407if supported_hvf_target $target; then
7408 echo "CONFIG_HVF=y" >> $config_target_mak
7409fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007410if supported_whpx_target $target; then
7411 echo "CONFIG_WHPX=y" >> $config_target_mak
7412fi
bellardde83cd02003-06-15 20:25:43 +00007413if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007414 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007415fi
7416if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007417 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007418 if test "$mttcg" = "yes" ; then
7419 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7420 fi
bellardde83cd02003-06-15 20:25:43 +00007421fi
bellard997344f2003-10-27 21:10:39 +00007422if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007423 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007424 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007425fi
ths831b7822007-01-18 20:06:33 +00007426if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007427 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007428fi
pbrook56aebc82008-10-11 17:55:29 +00007429list=""
7430if test ! -z "$gdb_xml_files" ; then
7431 for x in $gdb_xml_files; do
7432 list="$list $source_path/gdb-xml/$x"
7433 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007434 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007435fi
bellardde83cd02003-06-15 20:25:43 +00007436
Eric Blakee633a5c2019-02-04 20:39:37 -06007437if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007438 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007439fi
blueswir184778502008-10-26 20:33:16 +00007440if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007441 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007442fi
bellard5b0753e2005-03-01 21:37:28 +00007443
Alex Bennéed75402b2018-04-04 20:27:05 +01007444if test -n "$target_compiler"; then
7445 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7446
7447 if test -n "$target_compiler_static"; then
7448 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7449 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007450
7451 if test -n "$target_compiler_cflags"; then
7452 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7453 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007454fi
7455
Alex Bennée716a5072018-04-10 12:19:40 +01007456
Juan Quintela4afddb52009-08-03 14:46:45 +02007457# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007458
Juan Quintela4afddb52009-08-03 14:46:45 +02007459cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007460ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007461
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007462disas_config() {
7463 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7464 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7465}
7466
Juan Quintela64656022009-08-03 14:46:53 +02007467for i in $ARCH $TARGET_BASE_ARCH ; do
7468 case "$i" in
7469 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007470 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007471 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007472 aarch64)
7473 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007474 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007475 fi
7476 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007477 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007478 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007479 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007480 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007481 fi
Juan Quintela64656022009-08-03 14:46:53 +02007482 ;;
7483 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007484 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007485 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007486 hppa)
7487 disas_config "HPPA"
7488 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007489 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007490 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007491 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007492 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007493 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007494 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007495 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007496 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007497 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007498 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007499 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007500 ;;
7501 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007502 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007503 if test -n "${cxx}"; then
7504 disas_config "NANOMIPS"
7505 fi
Juan Quintela64656022009-08-03 14:46:53 +02007506 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007507 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007508 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007509 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007510 nios2)
7511 disas_config "NIOS2"
7512 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007513 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007514 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007515 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007516 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007517 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007518 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007519 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007520 disas_config "RISCV"
7521 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007522 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007523 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007524 ;;
7525 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007526 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007527 ;;
7528 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007529 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007530 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007531 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007532 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007533 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007534 esac
7535done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007536if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007537 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007538fi
Juan Quintela64656022009-08-03 14:46:53 +02007539
Juan Quintela6ee71262009-08-03 14:46:47 +02007540case "$ARCH" in
7541alpha)
7542 # Ensure there's only a single GP
7543 cflags="-msmall-data $cflags"
7544;;
7545esac
7546
Juan Quintelad02c1db2009-08-03 14:46:50 +02007547if test "$gprof" = "yes" ; then
Philippe Mathieu-Daudé0acf7de2019-01-03 16:09:50 +01007548 echo "TARGET_GPROF=y" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007549 if test "$target_linux_user" = "yes" ; then
7550 cflags="-p $cflags"
7551 ldflags="-p $ldflags"
7552 fi
7553 if test "$target_softmmu" = "yes" ; then
7554 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007555 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007556 fi
7557fi
7558
Eric Blakee633a5c2019-02-04 20:39:37 -06007559if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007560 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007561fi
Juan Quintelafa282482009-07-22 22:37:39 +02007562
Christian Borntraegere9a35912017-08-23 12:16:23 +02007563# Newer kernels on s390 check for an S390_PGSTE program header and
7564# enable the pgste page table extensions in that case. This makes
7565# the vm.allocate_pgste sysctl unnecessary. We enable this program
7566# header if
7567# - we build on s390x
7568# - we build the system emulation for s390x (qemu-system-s390x)
7569# - KVM is enabled
7570# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06007571if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7572 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02007573 if ld_has --s390-pgste ; then
7574 ldflags="-Wl,--s390-pgste $ldflags"
7575 fi
7576fi
7577
Juan Quintela25be2102009-10-07 02:41:00 +02007578echo "LDFLAGS+=$ldflags" >> $config_target_mak
7579echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007580
bellard97a847b2003-08-10 21:36:04 +00007581done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007582
Alex Bennéed75402b2018-04-04 20:27:05 +01007583if test -n "$enabled_cross_compilers"; then
7584 echo
7585 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7586fi
7587
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007588if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007589 echo "config-host.h: subdir-dtc" >> $config_host_mak
7590fi
Richard Hendersone219c492017-09-28 09:01:23 -07007591if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7592 echo "config-host.h: subdir-capstone" >> $config_host_mak
7593fi
7594if test -n "$LIBCAPSTONE"; then
7595 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7596fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007597
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007598if test "$numa" = "yes"; then
7599 echo "CONFIG_NUMA=y" >> $config_host_mak
7600fi
7601
John Snowfd0e6052015-03-25 18:57:39 -04007602if test "$ccache_cpp2" = "yes"; then
7603 echo "export CCACHE_CPP2=y" >> $config_host_mak
7604fi
7605
Peter Maydelle29e5c62018-11-02 11:52:38 +00007606# If we're using a separate build tree, set it up now.
7607# DIRS are directories which we simply mkdir in the build tree;
7608# LINKS are things to symlink back into the source tree
7609# (these can be both files and directories).
7610# Caution: do not add files or directories here using wildcards. This
7611# will result in problems later if a new file matching the wildcard is
7612# added to the source tree -- nothing will cause configure to be rerun
7613# so the build tree will be missing the link back to the new file, and
7614# tests might fail. Prefer to keep the relevant files in their own
7615# directory and symlink the directory instead.
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007616DIRS="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 -05007617DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007618DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007619DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007620DIRS="$DIRS roms/seabios roms/vgabios"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007621LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt"
7622LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7623LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7624LINKS="$LINKS tests/fp/Makefile"
7625LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7626LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7627LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7628LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7629LINKS="$LINKS pc-bios/qemu-icon.bmp"
7630LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007631LINKS="$LINKS tests/acceptance tests/data"
7632LINKS="$LINKS tests/qemu-iotests/check"
Richard Henderson753d11f2011-06-24 11:58:37 -07007633for bios_file in \
7634 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007635 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007636 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007637 $source_path/pc-bios/*.rom \
7638 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007639 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007640 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007641 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007642 $source_path/pc-bios/palcode-*
7643do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007644 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007645done
7646mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007647for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007648 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007649 symlink "$source_path/$f" "$f"
7650 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007651done
Paul Brook1ad21342009-05-19 16:17:58 +01007652
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007653# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007654for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007655 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007656 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007657 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007658 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007659 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007660 echo "CC=$cc" >> $config_mak
7661 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007662 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007663 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007664 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007665 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007666 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007667done
7668
Max Reitz76c75602014-05-24 23:24:56 +02007669# set up qemu-iotests in this build directory
7670iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007671
7672echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7673echo >> "$iotests_common_env"
7674echo "export PYTHON='$python'" >> "$iotests_common_env"
7675
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007676# Save the configure command line for later reuse.
7677cat <<EOD >config.status
7678#!/bin/sh
7679# Generated by configure.
7680# Run this file to recreate the current configuration.
7681# Compiler output produced by configure, useful for debugging
7682# configure, is in config.log if it exists.
7683EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007684
7685preserve_env() {
7686 envname=$1
7687
7688 eval envval=\$$envname
7689
7690 if test -n "$envval"
7691 then
7692 echo "$envname='$envval'" >> config.status
7693 echo "export $envname" >> config.status
7694 else
7695 echo "unset $envname" >> config.status
7696 fi
7697}
7698
7699# Preserve various env variables that influence what
7700# features/build target configure will detect
7701preserve_env AR
7702preserve_env AS
7703preserve_env CC
7704preserve_env CPP
7705preserve_env CXX
7706preserve_env INSTALL
7707preserve_env LD
7708preserve_env LD_LIBRARY_PATH
7709preserve_env LIBTOOL
7710preserve_env MAKE
7711preserve_env NM
7712preserve_env OBJCOPY
7713preserve_env PATH
7714preserve_env PKG_CONFIG
7715preserve_env PKG_CONFIG_LIBDIR
7716preserve_env PKG_CONFIG_PATH
7717preserve_env PYTHON
7718preserve_env SDL_CONFIG
7719preserve_env SDL2_CONFIG
7720preserve_env SMBD
7721preserve_env STRIP
7722preserve_env WINDRES
7723
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007724printf "exec" >>config.status
7725printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007726echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007727chmod +x config.status
7728
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007729rm -r "$TMPDIR1"