blob: 05d72f1c565bf76555a3a8959d01c7c7389f393c [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=""
Bradd41a75a2011-07-26 23:11:26 -0400371vhost_net="no"
Gonglei042cea22018-03-01 21:46:28 +0800372vhost_crypto="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000373vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100374vhost_vsock="no"
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"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200785 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200786 if check_include dsound.h; then
787 audio_drv_list="dsound"
788 else
789 audio_drv_list=""
790 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000791 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000792;;
ths5c40d2b2007-06-23 16:03:36 +0000793GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100794 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100795 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200796 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000797;;
bellard7d3505c2004-05-12 19:32:15 +0000798FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200799 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100800 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100801 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200802 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100803 # needed for kinfo_getvmmap(3) in libutil.h
804 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500805 # needed for kinfo_getproc
806 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100807 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700808 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000809 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000810;;
blueswir1c5e97232009-03-07 20:06:23 +0000811DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200812 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100813 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100814 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200815 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700816 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000817;;
bellard7d3505c2004-05-12 19:32:15 +0000818NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200819 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100820 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100821 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100822 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200823 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200824 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700825 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200826 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000827;;
828OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200829 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100830 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100831 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200832 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700833 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500834 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000835;;
bellard83fb7ad2004-07-05 21:25:26 +0000836Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200837 bsd="yes"
838 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100839 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500840 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800841 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200842 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200843 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200844 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200845 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200846 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100847 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200848 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200849 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200850 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100851 # Disable attempts to use ObjectiveC features in os/object.h since they
852 # won't work when we're compiling with gcc as a C compiler.
853 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700854 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000855 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000856;;
bellardec530c82006-04-25 22:36:06 +0000857SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200858 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100859 make="${MAKE-gmake}"
860 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400861 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200862 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100863 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200864 fi
865 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000866# needed for CMSG_ macros in sys/socket.h
867 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
868# needed for TIOCWIN* defines in termios.h
869 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200870 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200871 solarisnetlibs="-lsocket -lnsl -lresolv"
872 LIBS="$solarisnetlibs $LIBS"
873 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000874;;
Andreas Färber179cf402010-09-20 00:50:43 +0200875Haiku)
876 haiku="yes"
877 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
878 LIBS="-lposix_error_mapper -lnetwork $LIBS"
879;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000880Linux)
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100881 audio_drv_list="try-pa try-alsa try-sdl oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200882 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200883 linux="yes"
884 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200885 kvm="yes"
886 vhost_net="yes"
Gonglei042cea22018-03-01 21:46:28 +0800887 vhost_crypto="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000888 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100889 vhost_vsock="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600890 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000891 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200892 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000893;;
bellard7d132992003-03-06 23:23:54 +0000894esac
895
bellard7d3505c2004-05-12 19:32:15 +0000896if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000897 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200898 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000899 fi
bellard7d3505c2004-05-12 19:32:15 +0000900fi
901
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100902: ${make=${MAKE-make}}
903: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100904: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400905: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100906
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100907# Default objcc to clang if available, otherwise use CC
908if has clang; then
909 objcc=clang
910else
911 objcc="$cc"
912fi
913
Juan Quintela3457a3f2009-08-03 14:46:07 +0200914if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200915 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800916 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100917 # MinGW needs -mthreads for TLS and macro _MT.
918 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100919 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400920 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100921 if compile_prog "" "-liberty" ; then
922 LIBS="-liberty $LIBS"
923 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200924 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200925 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300926 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300927 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200928 bindir="\${prefix}"
929 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200930 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200931 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300932 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200933fi
934
Anthony Liguori487fefd2009-06-11 13:28:25 -0500935werror=""
bellard85aa5182007-11-11 20:17:03 +0000936
bellard7d132992003-03-06 23:23:54 +0000937for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200938 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000939 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000940 --help|-h) show_help=yes
941 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400942 --version|-V) exec cat $source_path/VERSION
943 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000944 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000945 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000946 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000947 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100948 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000949 ;;
aliguoriac0df512008-12-29 17:14:15 +0000950 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000951 ;;
aliguoriac0df512008-12-29 17:14:15 +0000952 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000953 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000954 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000955 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400956 --cxx=*)
957 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200958 --iasl=*) iasl="$optarg"
959 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100960 --objcc=*) objcc="$optarg"
961 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000962 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000963 ;;
pbrook6a882642006-04-17 13:57:12 +0000964 --install=*) install="$optarg"
965 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000966 --python=*) python="$optarg"
967 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000968 --gcov=*) gcov_tool="$optarg"
969 ;;
Brade2d88302011-09-02 16:53:28 -0400970 --smbd=*) smbd="$optarg"
971 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200972 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000973 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100974 --extra-cxxflags=*)
975 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200976 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000977 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100978 --enable-debug-info)
979 ;;
980 --disable-debug-info)
981 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100982 --cross-cc-*)
983 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800984 --enable-modules)
985 modules="yes"
986 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000987 --disable-modules)
988 modules="no"
989 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200990 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000991 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000992 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000993 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +0200994 --enable-trace-backends=*) trace_backends="$optarg"
995 ;;
996 # XXX: backwards compatibility
997 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100998 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100999 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001000 ;;
bellard7d132992003-03-06 23:23:54 +00001001 --enable-gprof) gprof="yes"
1002 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001003 --enable-gcov) gcov="yes"
1004 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +01001005 --static)
1006 static="yes"
1007 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001008 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001009 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001010 --mandir=*) mandir="$optarg"
1011 ;;
1012 --bindir=*) bindir="$optarg"
1013 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001014 --libdir=*) libdir="$optarg"
1015 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001016 --libexecdir=*) libexecdir="$optarg"
1017 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001018 --includedir=*) includedir="$optarg"
1019 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001020 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001021 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001022 --with-confsuffix=*) confsuffix="$optarg"
1023 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001024 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001025 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001026 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001027 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001028 --localstatedir=*) local_statedir="$optarg"
1029 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001030 --firmwarepath=*) firmwarepath="$optarg"
1031 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001032 --host=*|--build=*|\
1033 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001034 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001035 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1036 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1037 # These switches are silently ignored, for compatibility with
1038 # autoconf-generated configure scripts. This allows QEMU's
1039 # configure to be used by RPM and similar macros that set
1040 # lots of directory switches by default.
1041 ;;
bellard97a847b2003-08-10 21:36:04 +00001042 --disable-sdl) sdl="no"
1043 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001044 --enable-sdl) sdl="yes"
1045 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001046 --disable-sdl-image) sdl_image="no"
1047 ;;
1048 --enable-sdl-image) sdl_image="yes"
1049 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001050 --disable-qom-cast-debug) qom_cast_debug="no"
1051 ;;
1052 --enable-qom-cast-debug) qom_cast_debug="yes"
1053 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301054 --disable-virtfs) virtfs="no"
1055 ;;
1056 --enable-virtfs) virtfs="yes"
1057 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001058 --disable-mpath) mpath="no"
1059 ;;
1060 --enable-mpath) mpath="yes"
1061 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001062 --disable-vnc) vnc="no"
1063 ;;
1064 --enable-vnc) vnc="yes"
1065 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001066 --oss-lib=*) oss_lib="$optarg"
1067 ;;
malc0c58ac12008-06-25 21:04:05 +00001068 --audio-drv-list=*) audio_drv_list="$optarg"
1069 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001070 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001071 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001072 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001073 ;;
aurel32f8393942009-04-13 18:45:38 +00001074 --enable-debug-tcg) debug_tcg="yes"
1075 ;;
1076 --disable-debug-tcg) debug_tcg="no"
1077 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001078 --enable-debug)
1079 # Enable debugging options that aren't excessively noisy
1080 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001081 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001082 debug="yes"
1083 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001084 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001085 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001086 --enable-sanitizers) sanitizers="yes"
1087 ;;
1088 --disable-sanitizers) sanitizers="no"
1089 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001090 --enable-sparse) sparse="yes"
1091 ;;
1092 --disable-sparse) sparse="no"
1093 ;;
aliguori1625af82009-04-05 17:41:02 +00001094 --disable-strip) strip_opt="no"
1095 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001096 --disable-vnc-sasl) vnc_sasl="no"
1097 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001098 --enable-vnc-sasl) vnc_sasl="yes"
1099 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001100 --disable-vnc-jpeg) vnc_jpeg="no"
1101 ;;
1102 --enable-vnc-jpeg) vnc_jpeg="yes"
1103 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001104 --disable-vnc-png) vnc_png="no"
1105 ;;
1106 --enable-vnc-png) vnc_png="yes"
1107 ;;
bellard443f1372004-06-04 11:13:20 +00001108 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001109 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001110 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001111 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001112 --enable-vde) vde="yes"
1113 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001114 --disable-netmap) netmap="no"
1115 ;;
1116 --enable-netmap) netmap="yes"
1117 ;;
aliguorie37630c2009-04-22 15:19:10 +00001118 --disable-xen) xen="no"
1119 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001120 --enable-xen) xen="yes"
1121 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001122 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1123 ;;
1124 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1125 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001126 --disable-brlapi) brlapi="no"
1127 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001128 --enable-brlapi) brlapi="yes"
1129 ;;
balrogfb599c92008-09-28 23:49:55 +00001130 --disable-bluez) bluez="no"
1131 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001132 --enable-bluez) bluez="yes"
1133 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001134 --disable-kvm) kvm="no"
1135 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001136 --enable-kvm) kvm="yes"
1137 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001138 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001139 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001140 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001141 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001142 --disable-hvf) hvf="no"
1143 ;;
1144 --enable-hvf) hvf="yes"
1145 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001146 --disable-whpx) whpx="no"
1147 ;;
1148 --enable-whpx) whpx="yes"
1149 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001150 --disable-tcg-interpreter) tcg_interpreter="no"
1151 ;;
1152 --enable-tcg-interpreter) tcg_interpreter="yes"
1153 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001154 --disable-cap-ng) cap_ng="no"
1155 ;;
1156 --enable-cap-ng) cap_ng="yes"
1157 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001158 --disable-tcg) tcg="no"
1159 ;;
1160 --enable-tcg) tcg="yes"
1161 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001162 --disable-malloc-trim) malloc_trim="no"
1163 ;;
1164 --enable-malloc-trim) malloc_trim="yes"
1165 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001166 --disable-spice) spice="no"
1167 ;;
1168 --enable-spice) spice="yes"
1169 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001170 --disable-libiscsi) libiscsi="no"
1171 ;;
1172 --enable-libiscsi) libiscsi="yes"
1173 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001174 --disable-libnfs) libnfs="no"
1175 ;;
1176 --enable-libnfs) libnfs="yes"
1177 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001178 --enable-profiler) profiler="yes"
1179 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001180 --disable-cocoa) cocoa="no"
1181 ;;
malcc2de5c92008-06-28 19:13:06 +00001182 --enable-cocoa)
1183 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001184 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001185 ;;
pbrookcad25d62006-03-19 16:31:11 +00001186 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001187 ;;
pbrookcad25d62006-03-19 16:31:11 +00001188 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001189 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001190 --disable-user)
1191 linux_user="no" ;
1192 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001193 ;;
1194 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001195 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001196 ;;
ths831b7822007-01-18 20:06:33 +00001197 --enable-linux-user) linux_user="yes"
1198 ;;
blueswir184778502008-10-26 20:33:16 +00001199 --disable-bsd-user) bsd_user="no"
1200 ;;
1201 --enable-bsd-user) bsd_user="yes"
1202 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001203 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001204 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001205 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001206 ;;
bellard85aa5182007-11-11 20:17:03 +00001207 --enable-werror) werror="yes"
1208 ;;
1209 --disable-werror) werror="no"
1210 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001211 --enable-stack-protector) stack_protector="yes"
1212 ;;
1213 --disable-stack-protector) stack_protector="no"
1214 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001215 --disable-curses) curses="no"
1216 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001217 --enable-curses) curses="yes"
1218 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001219 --disable-curl) curl="no"
1220 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001221 --enable-curl) curl="yes"
1222 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001223 --disable-fdt) fdt="no"
1224 ;;
1225 --enable-fdt) fdt="yes"
1226 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001227 --disable-linux-aio) linux_aio="no"
1228 ;;
1229 --enable-linux-aio) linux_aio="yes"
1230 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001231 --disable-attr) attr="no"
1232 ;;
1233 --enable-attr) attr="yes"
1234 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001235 --disable-membarrier) membarrier="no"
1236 ;;
1237 --enable-membarrier) membarrier="yes"
1238 ;;
ths77755342008-11-27 15:45:16 +00001239 --disable-blobs) blobs="no"
1240 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001241 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001242 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001243 --with-coroutine=*) coroutine="$optarg"
1244 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001245 --disable-coroutine-pool) coroutine_pool="no"
1246 ;;
1247 --enable-coroutine-pool) coroutine_pool="yes"
1248 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001249 --enable-debug-stack-usage) debug_stack_usage="yes"
1250 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001251 --enable-crypto-afalg) crypto_afalg="yes"
1252 ;;
1253 --disable-crypto-afalg) crypto_afalg="no"
1254 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001255 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001256 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001257 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001258 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001259 --disable-vhost-net) vhost_net="no"
1260 ;;
1261 --enable-vhost-net) vhost_net="yes"
1262 ;;
Gonglei042cea22018-03-01 21:46:28 +08001263 --disable-vhost-crypto) vhost_crypto="no"
1264 ;;
1265 --enable-vhost-crypto)
1266 vhost_crypto="yes"
1267 if test "$mingw32" = "yes"; then
1268 error_exit "vhost-crypto isn't available on win32"
1269 fi
1270 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001271 --disable-vhost-scsi) vhost_scsi="no"
1272 ;;
1273 --enable-vhost-scsi) vhost_scsi="yes"
1274 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001275 --disable-vhost-vsock) vhost_vsock="no"
1276 ;;
1277 --enable-vhost-vsock) vhost_vsock="yes"
1278 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001279 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001280 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001281 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001282 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001283 --disable-rbd) rbd="no"
1284 ;;
1285 --enable-rbd) rbd="yes"
1286 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001287 --disable-xfsctl) xfs="no"
1288 ;;
1289 --enable-xfsctl) xfs="yes"
1290 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001291 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001292 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001293 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001294 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001295 --disable-libusb) libusb="no"
1296 ;;
1297 --enable-libusb) libusb="yes"
1298 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001299 --disable-usb-redir) usb_redir="no"
1300 ;;
1301 --enable-usb-redir) usb_redir="yes"
1302 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001303 --disable-zlib-test) zlib="no"
1304 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001305 --disable-lzo) lzo="no"
1306 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001307 --enable-lzo) lzo="yes"
1308 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001309 --disable-snappy) snappy="no"
1310 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001311 --enable-snappy) snappy="yes"
1312 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001313 --disable-bzip2) bzip2="no"
1314 ;;
1315 --enable-bzip2) bzip2="yes"
1316 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001317 --enable-lzfse) lzfse="yes"
1318 ;;
1319 --disable-lzfse) lzfse="no"
1320 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001321 --enable-guest-agent) guest_agent="yes"
1322 ;;
1323 --disable-guest-agent) guest_agent="no"
1324 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001325 --enable-guest-agent-msi) guest_agent_msi="yes"
1326 ;;
1327 --disable-guest-agent-msi) guest_agent_msi="no"
1328 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001329 --with-vss-sdk) vss_win32_sdk=""
1330 ;;
1331 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1332 ;;
1333 --without-vss-sdk) vss_win32_sdk="no"
1334 ;;
1335 --with-win-sdk) win_sdk=""
1336 ;;
1337 --with-win-sdk=*) win_sdk="$optarg"
1338 ;;
1339 --without-win-sdk) win_sdk="no"
1340 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001341 --enable-tools) want_tools="yes"
1342 ;;
1343 --disable-tools) want_tools="no"
1344 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001345 --enable-seccomp) seccomp="yes"
1346 ;;
1347 --disable-seccomp) seccomp="no"
1348 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301349 --disable-glusterfs) glusterfs="no"
1350 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001351 --disable-avx2) avx2_opt="no"
1352 ;;
1353 --enable-avx2) avx2_opt="yes"
1354 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301355 --enable-glusterfs) glusterfs="yes"
1356 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001357 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1358 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001359 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001360 --enable-vhdx|--disable-vhdx)
1361 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1362 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001363 --enable-uuid|--disable-uuid)
1364 echo "$0: $opt is obsolete, UUID support is always built" >&2
1365 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001366 --disable-gtk) gtk="no"
1367 ;;
1368 --enable-gtk) gtk="yes"
1369 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001370 --tls-priority=*) tls_priority="$optarg"
1371 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001372 --disable-gnutls) gnutls="no"
1373 ;;
1374 --enable-gnutls) gnutls="yes"
1375 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001376 --disable-nettle) nettle="no"
1377 ;;
1378 --enable-nettle) nettle="yes"
1379 ;;
1380 --disable-gcrypt) gcrypt="no"
1381 ;;
1382 --enable-gcrypt) gcrypt="yes"
1383 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001384 --enable-rdma) rdma="yes"
1385 ;;
1386 --disable-rdma) rdma="no"
1387 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001388 --enable-pvrdma) pvrdma="yes"
1389 ;;
1390 --disable-pvrdma) pvrdma="no"
1391 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001392 --disable-vte) vte="no"
1393 ;;
1394 --enable-vte) vte="yes"
1395 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001396 --disable-virglrenderer) virglrenderer="no"
1397 ;;
1398 --enable-virglrenderer) virglrenderer="yes"
1399 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001400 --disable-tpm) tpm="no"
1401 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001402 --enable-tpm) tpm="yes"
1403 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001404 --disable-libssh2) libssh2="no"
1405 ;;
1406 --enable-libssh2) libssh2="yes"
1407 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001408 --disable-live-block-migration) live_block_migration="no"
1409 ;;
1410 --enable-live-block-migration) live_block_migration="yes"
1411 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001412 --disable-numa) numa="no"
1413 ;;
1414 --enable-numa) numa="yes"
1415 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001416 --disable-libxml2) libxml2="no"
1417 ;;
1418 --enable-libxml2) libxml2="yes"
1419 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001420 --disable-tcmalloc) tcmalloc="no"
1421 ;;
1422 --enable-tcmalloc) tcmalloc="yes"
1423 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001424 --disable-jemalloc) jemalloc="no"
1425 ;;
1426 --enable-jemalloc) jemalloc="yes"
1427 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001428 --disable-replication) replication="no"
1429 ;;
1430 --enable-replication) replication="yes"
1431 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001432 --disable-vxhs) vxhs="no"
1433 ;;
1434 --enable-vxhs) vxhs="yes"
1435 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001436 --disable-bochs) bochs="no"
1437 ;;
1438 --enable-bochs) bochs="yes"
1439 ;;
1440 --disable-cloop) cloop="no"
1441 ;;
1442 --enable-cloop) cloop="yes"
1443 ;;
1444 --disable-dmg) dmg="no"
1445 ;;
1446 --enable-dmg) dmg="yes"
1447 ;;
1448 --disable-qcow1) qcow1="no"
1449 ;;
1450 --enable-qcow1) qcow1="yes"
1451 ;;
1452 --disable-vdi) vdi="no"
1453 ;;
1454 --enable-vdi) vdi="yes"
1455 ;;
1456 --disable-vvfat) vvfat="no"
1457 ;;
1458 --enable-vvfat) vvfat="yes"
1459 ;;
1460 --disable-qed) qed="no"
1461 ;;
1462 --enable-qed) qed="yes"
1463 ;;
1464 --disable-parallels) parallels="no"
1465 ;;
1466 --enable-parallels) parallels="yes"
1467 ;;
1468 --disable-sheepdog) sheepdog="no"
1469 ;;
1470 --enable-sheepdog) sheepdog="yes"
1471 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001472 --disable-vhost-user) vhost_user="no"
1473 ;;
1474 --enable-vhost-user)
1475 vhost_user="yes"
1476 if test "$mingw32" = "yes"; then
1477 error_exit "vhost-user isn't available on win32"
1478 fi
1479 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001480 --disable-capstone) capstone="no"
1481 ;;
1482 --enable-capstone) capstone="yes"
1483 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001484 --enable-capstone=git) capstone="git"
1485 ;;
1486 --enable-capstone=system) capstone="system"
1487 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001488 --with-git=*) git="$optarg"
1489 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001490 --enable-git-update) git_update=yes
1491 ;;
1492 --disable-git-update) git_update=no
1493 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001494 --enable-debug-mutex) debug_mutex=yes
1495 ;;
1496 --disable-debug-mutex) debug_mutex=no
1497 ;;
Junyan He17824402018-07-18 15:47:59 +08001498 --enable-libpmem) libpmem=yes
1499 ;;
1500 --disable-libpmem) libpmem=no
1501 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001502 *)
1503 echo "ERROR: unknown option $opt"
1504 echo "Try '$0 --help' for more information"
1505 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001506 ;;
bellard7d132992003-03-06 23:23:54 +00001507 esac
1508done
1509
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001510if test "$vhost_user" = ""; then
1511 if test "$mingw32" = "yes"; then
1512 vhost_user="no"
1513 else
1514 vhost_user="yes"
1515 fi
1516fi
1517
bellard40293e52008-01-31 11:32:10 +00001518case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001519 ppc)
1520 CPU_CFLAGS="-m32"
1521 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001522 cross_cc_powerpc=$cc
1523 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001524 ;;
1525 ppc64)
1526 CPU_CFLAGS="-m64"
1527 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001528 cross_cc_ppc64=$cc
1529 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001530 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001531 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001532 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1533 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001534 cross_cc_sparc=$cc
1535 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001536 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001537 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001538 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001539 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001540 cross_cc_sparc64=$cc
1541 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001542 ;;
ths76d83bd2007-11-18 21:22:10 +00001543 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001544 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001545 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001546 cross_cc_s390=$cc
1547 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001548 ;;
1549 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001550 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001551 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001552 cross_cc_s390x=$cc
1553 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001554 ;;
bellard40293e52008-01-31 11:32:10 +00001555 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001556 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001557 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001558 cross_cc_i386=$cc
1559 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001560 ;;
1561 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001562 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1563 # If we truly care, we should simply detect this case at
1564 # runtime and generate the fallback to serial emulation.
1565 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001566 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001567 cross_cc_x86_64=$cc
1568 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001569 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001570 x32)
1571 CPU_CFLAGS="-mx32"
1572 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001573 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001574 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001575 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001576 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001577esac
1578
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001579QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001580
Peter Maydellaffc88c2016-06-13 11:32:24 +01001581# For user-mode emulation the host arch has to be one we explicitly
1582# support, even if we're using TCI.
1583if [ "$ARCH" = "unknown" ]; then
1584 bsd_user="no"
1585 linux_user="no"
1586fi
1587
Peter Maydell60e0df22011-05-03 14:50:13 +01001588default_target_list=""
1589
Peter Maydell6e92f822013-05-20 16:16:15 +01001590mak_wilds=""
1591
1592if [ "$softmmu" = "yes" ]; then
1593 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001594fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001595if [ "$linux_user" = "yes" ]; then
1596 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001597fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001598if [ "$bsd_user" = "yes" ]; then
1599 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001600fi
1601
Peter Maydell6e92f822013-05-20 16:16:15 +01001602for config in $mak_wilds; do
1603 default_target_list="${default_target_list} $(basename "$config" .mak)"
1604done
1605
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001606# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001607trace_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 +01001608
pbrookaf5db582006-04-08 14:26:41 +00001609if test x"$show_help" = x"yes" ; then
1610cat << EOF
1611
1612Usage: configure [options]
1613Options: [defaults in brackets after descriptions]
1614
Stefan Weil08fb77e2013-12-18 22:09:39 +01001615Standard options:
1616 --help print this message
1617 --prefix=PREFIX install in PREFIX [$prefix]
1618 --interp-prefix=PREFIX where to find shared libraries, etc.
1619 use %M for cpu name [$interp_prefix]
1620 --target-list=LIST set target list (default: build everything)
1621$(echo Available targets: $default_target_list | \
1622 fold -s -w 53 | sed -e 's/^/ /')
1623
1624Advanced options (experts only):
1625 --source-path=PATH path of source code [$source_path]
1626 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1627 --cc=CC use C compiler CC [$cc]
1628 --iasl=IASL use ACPI compiler IASL [$iasl]
1629 --host-cc=CC use C compiler CC [$host_cc] for code run at
1630 build time
1631 --cxx=CXX use C++ compiler CXX [$cxx]
1632 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1633 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001634 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001635 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001636 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001637 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001638 --make=MAKE use specified make [$make]
1639 --install=INSTALL use specified install [$install]
1640 --python=PYTHON use specified python [$python]
1641 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001642 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001643 --static enable static build [$static]
1644 --mandir=PATH install man pages in PATH
1645 --datadir=PATH install firmware in PATH$confsuffix
1646 --docdir=PATH install documentation in PATH$confsuffix
1647 --bindir=PATH install binaries in PATH
1648 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001649 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001650 --sysconfdir=PATH install config in PATH$confsuffix
1651 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001652 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001653 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001654 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001655 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001656 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001657 --disable-strip disable stripping binaries
1658 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001659 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001660 --audio-drv-list=LIST set audio drivers list:
1661 Available drivers: $audio_possible_drivers
1662 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1663 --block-drv-rw-whitelist=L
1664 set block driver read-write whitelist
1665 (affects only QEMU, not qemu-img)
1666 --block-drv-ro-whitelist=L
1667 set block driver read-only whitelist
1668 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001669 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001670 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001671 --with-trace-file=NAME Full PATH,NAME of file to store traces
1672 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001673 --disable-slirp disable SLIRP userspace network connectivity
1674 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001675 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001676 --oss-lib path to OSS library
1677 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001678 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001679 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001680 --enable-gcov enable test coverage analysis with gcov
1681 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001682 --disable-blobs disable installing provided firmware blobs
1683 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1684 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001685 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001686 --enable-gprof QEMU profiling with gprof
1687 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001688 --enable-debug-stack-usage
1689 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001690
1691Optional features, enabled with --enable-FEATURE and
1692disabled with --disable-FEATURE, default is enabled if available:
1693
1694 system all system emulation targets
1695 user supported user emulation targets
1696 linux-user all linux usermode emulation targets
1697 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001698 docs build documentation
1699 guest-agent build the QEMU Guest Agent
1700 guest-agent-msi build guest agent Windows MSI installation package
1701 pie Position Independent Executables
1702 modules modules support
1703 debug-tcg TCG debugging (default is disabled)
1704 debug-info debugging information
1705 sparse sparse checker
1706
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001707 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001708 nettle nettle cryptography support
1709 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001710 sdl SDL UI
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001711 sdl_image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001712 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001713 vte vte support for the gtk UI
1714 curses curses UI
1715 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001716 vnc-sasl SASL encryption for VNC server
1717 vnc-jpeg JPEG lossy compression for VNC server
1718 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001719 cocoa Cocoa UI (Mac OS X only)
1720 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001721 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001722 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001723 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001724 brlapi BrlAPI (Braile)
1725 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001726 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001727 fdt fdt device tree
1728 bluez bluez stack connectivity
1729 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001730 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001731 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001732 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001733 rdma Enable RDMA-based migration
1734 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001735 vde support for vde network
1736 netmap support for netmap network
1737 linux-aio Linux AIO support
1738 cap-ng libcap-ng support
1739 attr attr and xattr support
1740 vhost-net vhost-net acceleration support
Gonglei042cea22018-03-01 21:46:28 +08001741 vhost-crypto vhost-crypto acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001742 spice spice
1743 rbd rados block device (rbd)
1744 libiscsi iscsi support
1745 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001746 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001747 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001748 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001749 usb-redir usb network redirection support
1750 lzo support of lzo compression library
1751 snappy support of snappy compression library
1752 bzip2 support of bzip2 compression library
1753 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001754 lzfse support of lzfse compression library
1755 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001756 seccomp seccomp support
1757 coroutine-pool coroutine freelist (better performance)
1758 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001759 tpm TPM support
1760 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001761 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001762 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001763 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001764 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001765 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001766 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001767 vhost-vsock virtio sockets device support
1768 opengl opengl support
1769 virglrenderer virgl rendering support
1770 xfsctl xfsctl support
1771 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001772 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001773 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001774 bochs bochs image format support
1775 cloop cloop image format support
1776 dmg dmg image format support
1777 qcow1 qcow v1 image format support
1778 vdi vdi image format support
1779 vvfat vvfat image format support
1780 qed qed image format support
1781 parallels parallels image format support
1782 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001783 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001784 vhost-user vhost-user support
Richard Henderson8ca80762017-09-14 09:41:12 -07001785 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001786 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001787 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001788
1789NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001790EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001791exit 0
pbrookaf5db582006-04-08 14:26:41 +00001792fi
1793
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001794if ! has $python; then
1795 error_exit "Python not found. Use --python=/path/to/python"
1796fi
1797
1798# Note that if the Python conditional here evaluates True we will exit
1799# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001800if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1801 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001802 "Use --python=/path/to/python to specify a supported Python."
1803fi
1804
Cleber Rosa755ee702018-11-09 10:07:07 -05001805# Preserve python version since some functionality is dependent on it
1806python_version=$($python -V 2>&1 | sed -e 's/Python\ //')
1807
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001808# Suppress writing compiled files
1809python="$python -B"
1810
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001811# Check that the C compiler works. Doing this here before testing
1812# the host CPU ensures that we had a valid CC to autodetect the
1813# $cpu var (and we should bail right here if that's not the case).
1814# It also allows the help message to be printed without a CC.
1815write_c_skeleton;
1816if compile_object ; then
1817 : C compiler works ok
1818else
1819 error_exit "\"$cc\" either does not exist or does not work"
1820fi
1821if ! compile_prog ; then
1822 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1823fi
1824
Peter Maydell359bc952011-12-24 13:07:25 +00001825# Now we have handled --enable-tcg-interpreter and know we're not just
1826# printing the help message, bail out if the host CPU isn't supported.
1827if test "$ARCH" = "unknown"; then
1828 if test "$tcg_interpreter" = "yes" ; then
1829 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001830 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001831 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001832 fi
1833fi
1834
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001835# Consult white-list to determine whether to enable werror
1836# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001837if test -z "$werror" ; then
Eric Blakee633a5c2019-02-04 20:39:37 -06001838 if test -d "$source_path/.git" && \
1839 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001840 werror="yes"
1841 else
1842 werror="no"
1843 fi
1844fi
1845
Peter Maydellfb59dab2017-03-28 14:01:52 +01001846if test "$bogus_os" = "yes"; then
1847 # Now that we know that we're not printing the help and that
1848 # the compiler works (so the results of the check_defines we used
1849 # to identify the OS are reliable), if we didn't recognize the
1850 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001851 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001852fi
1853
Thomas Huthefc6c072018-12-03 10:12:32 +01001854# Check whether the compiler matches our minimum requirements:
1855cat > $TMPC << EOF
1856#if defined(__clang_major__) && defined(__clang_minor__)
1857# ifdef __apple_build_version__
1858# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1859# error You need at least XCode Clang v5.1 to compile QEMU
1860# endif
1861# else
1862# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1863# error You need at least Clang v3.4 to compile QEMU
1864# endif
1865# endif
1866#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1867# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1868# error You need at least GCC v4.8 to compile QEMU
1869# endif
1870#else
1871# error You either need GCC or Clang to compiler QEMU
1872#endif
1873int main (void) { return 0; }
1874EOF
1875if ! compile_prog "" "" ; then
1876 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1877fi
1878
Paolo Bonzini8d050952010-12-23 11:43:52 +01001879gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1880gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001881gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001882gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001883gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001884gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001885# Note that we do not add -Werror to gcc_flags here, because that would
1886# enable it for all configure tests. If a configure test failed due
1887# to -Werror this would just silently disable some features,
1888# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001889
1890cc_has_warning_flag() {
1891 write_c_skeleton;
1892
Peter Maydella1d29d62012-10-27 22:19:07 +01001893 # Use the positive sense of the flag when testing for -Wno-wombat
1894 # support (gcc will happily accept the -Wno- form of unknown
1895 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001896 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1897 compile_prog "-Werror $optflag" ""
1898}
1899
1900for flag in $gcc_flags; do
1901 if cc_has_warning_flag $flag ; then
1902 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001903 fi
1904done
1905
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001906if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001907 cat > $TMPC << EOF
1908int main(int argc, char *argv[])
1909{
1910 char arr[64], *p = arr, *c = argv[0];
1911 while (*c) {
1912 *p++ = *c++;
1913 }
1914 return 0;
1915}
1916EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001917 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001918 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001919 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001920 # We need to check both a compile and a link, since some compiler
1921 # setups fail only on a .c->.o compile and some only at link time
1922 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1923 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001924 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001925 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001926 break
1927 fi
1928 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001929 if test "$stack_protector" = yes; then
1930 if test $sp_on = 0; then
1931 error_exit "Stack protector not supported"
1932 fi
1933 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001934fi
1935
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001936# Disable -Wmissing-braces on older compilers that warn even for
1937# the "universal" C zero initializer {0}.
1938cat > $TMPC << EOF
1939struct {
1940 int a[2];
1941} x = {0};
1942EOF
1943if compile_object "-Werror" "" ; then
1944 :
1945else
1946 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1947fi
1948
Thomas Huthd376e9d2018-12-03 11:41:38 +01001949# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001950if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001951 if test "$modules" = "yes" ; then
1952 error_exit "static and modules are mutually incompatible"
1953 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001954 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001955 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001956 else
1957 pie="no"
1958 fi
1959fi
1960
Emilio G. Cota768b7852015-04-29 13:09:02 +02001961# Unconditional check for compiler __thread support
1962 cat > $TMPC << EOF
1963static __thread int tls_var;
1964int main(void) { return tls_var; }
1965EOF
1966
1967if ! compile_prog "-Werror" "" ; then
1968 error_exit "Your compiler does not support the __thread specifier for " \
1969 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1970fi
1971
Avi Kivity40d64442011-11-15 20:12:17 +02001972if test "$pie" = ""; then
1973 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001974 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001975 ;;
1976 *)
1977 pie="no"
1978 ;;
1979 esac
1980fi
1981
1982if test "$pie" != "no" ; then
1983 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001984
1985#ifdef __linux__
1986# define THREAD __thread
1987#else
1988# define THREAD
1989#endif
1990
1991static THREAD int tls_var;
1992
1993int main(void) { return tls_var; }
1994
Avi Kivity40d64442011-11-15 20:12:17 +02001995EOF
1996 if compile_prog "-fPIE -DPIE" "-pie"; then
1997 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1998 LDFLAGS="-pie $LDFLAGS"
1999 pie="yes"
2000 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2001 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2002 fi
2003 else
2004 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002005 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002006 else
2007 echo "Disabling PIE due to missing toolchain support"
2008 pie="no"
2009 fi
2010 fi
Brad46eef332013-12-10 19:49:08 -05002011
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04002012 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05002013 CFLAGS_NOPIE="-fno-pie"
2014 LDFLAGS_NOPIE="-nopie"
2015 fi
Avi Kivity40d64442011-11-15 20:12:17 +02002016fi
2017
Paolo Bonzini09dada42013-04-17 16:26:47 +02002018##########################################
2019# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2020# use i686 as default anyway, but for those that don't, an explicit
2021# specification is necessary
2022
2023if test "$cpu" = "i386"; then
2024 cat > $TMPC << EOF
2025static int sfaa(int *ptr)
2026{
2027 return __sync_fetch_and_and(ptr, 0);
2028}
2029
2030int main(void)
2031{
2032 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002033 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002034 sfaa(&val);
2035 return val;
2036}
2037EOF
2038 if ! compile_prog "" "" ; then
2039 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2040 fi
2041fi
2042
2043#########################################
bellardec530c82006-04-25 22:36:06 +00002044# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002045
bellardec530c82006-04-25 22:36:06 +00002046if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002047 if has $install; then
2048 :
2049 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002050 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2051 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2052 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002053 fi
Stefan Weil89138852016-05-16 15:10:20 +02002054 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002055 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2056 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2057 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002058 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002059 if has ar; then
2060 :
2061 else
bellardec530c82006-04-25 22:36:06 +00002062 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002063 error_exit "No path includes ar" \
2064 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002065 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002066 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002067 fi
ths5fafdf22007-09-16 21:08:06 +00002068fi
bellardec530c82006-04-25 22:36:06 +00002069
Stefan Weilafb63eb2012-09-26 22:04:38 +02002070if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002071 for target in $default_target_list; do
2072 supported_target $target 2>/dev/null && \
2073 target_list="$target_list $target"
2074 done
2075 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002076else
Stefan Weil89138852016-05-16 15:10:20 +02002077 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002078 for target in $target_list; do
2079 # Check that we recognised the target name; this allows a more
2080 # friendly error message than if we let it fall through.
2081 case " $default_target_list " in
2082 *" $target "*)
2083 ;;
2084 *)
2085 error_exit "Unknown target name '$target'"
2086 ;;
2087 esac
2088 supported_target $target || exit 1
2089 done
bellard5327cf42005-01-10 23:18:50 +00002090fi
Peter Maydell25b48332013-05-20 16:16:16 +01002091
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002092# see if system emulation was really requested
2093case " $target_list " in
2094 *"-softmmu "*) softmmu=yes
2095 ;;
2096 *) softmmu=no
2097 ;;
2098esac
bellard5327cf42005-01-10 23:18:50 +00002099
Juan Quintela249247c2009-08-12 18:20:25 +02002100feature_not_found() {
2101 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002102 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002103
Peter Maydell76ad07a2013-04-08 12:11:26 +01002104 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002105 "configure was not able to find it." \
2106 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002107}
2108
bellard7d132992003-03-06 23:23:54 +00002109# ---
2110# big/little endian test
2111cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002112short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2113short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2114extern int foo(short *, short *);
2115int main(int argc, char *argv[]) {
2116 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002117}
2118EOF
2119
Mike Frysinger61cc9192013-06-30 23:30:18 -04002120if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002121 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002122 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002123 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002124 bigendian="no"
2125 else
2126 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002127 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002128else
2129 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002130fi
2131
Juan Quintelab0a47e72009-08-12 18:29:49 +02002132##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002133# cocoa implies not SDL or GTK
2134# (the cocoa UI code currently assumes it is always the active UI
2135# and doesn't interact well with other UI frontend code)
2136if test "$cocoa" = "yes"; then
2137 if test "$sdl" = "yes"; then
2138 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2139 fi
2140 if test "$gtk" = "yes"; then
2141 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2142 fi
2143 gtk=no
2144 sdl=no
2145fi
2146
Eric Blake6b39b062016-10-11 10:46:23 -05002147# Some versions of Mac OS X incorrectly define SIZE_MAX
2148cat > $TMPC << EOF
2149#include <stdint.h>
2150#include <stdio.h>
2151int main(int argc, char *argv[]) {
2152 return printf("%zu", SIZE_MAX);
2153}
2154EOF
2155have_broken_size_max=no
2156if ! compile_object -Werror ; then
2157 have_broken_size_max=yes
2158fi
2159
Peter Maydella30878e2015-08-14 16:10:52 +01002160##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002161# L2TPV3 probe
2162
2163cat > $TMPC <<EOF
2164#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002165#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002166int main(void) { return sizeof(struct mmsghdr); }
2167EOF
2168if compile_prog "" "" ; then
2169 l2tpv3=yes
2170else
2171 l2tpv3=no
2172fi
2173
2174##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002175# MinGW / Mingw-w64 localtime_r/gmtime_r check
2176
2177if test "$mingw32" = "yes"; then
2178 # Some versions of MinGW / Mingw-w64 lack localtime_r
2179 # and gmtime_r entirely.
2180 #
2181 # Some versions of Mingw-w64 define a macro for
2182 # localtime_r/gmtime_r.
2183 #
2184 # Some versions of Mingw-w64 will define functions
2185 # for localtime_r/gmtime_r, but only if you have
2186 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2187 # though, unistd.h and pthread.h both define
2188 # that for you.
2189 #
2190 # So this #undef localtime_r and #include <unistd.h>
2191 # are not in fact redundant.
2192cat > $TMPC << EOF
2193#include <unistd.h>
2194#include <time.h>
2195#undef localtime_r
2196int main(void) { localtime_r(NULL, NULL); return 0; }
2197EOF
2198 if compile_prog "" "" ; then
2199 localtime_r="yes"
2200 else
2201 localtime_r="no"
2202 fi
2203fi
2204
2205##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002206# pkg-config probe
2207
2208if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002209 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002210fi
2211
2212##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002213# NPTL probe
2214
Peter Maydell24cb36a2013-07-16 18:45:00 +01002215if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002216 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002217#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002218#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002219int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002220#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2221#error bork
2222#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002223 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002224}
2225EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002226 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002227 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002228 fi
pbrookbd0c5662008-05-29 14:34:11 +00002229fi
2230
balrogac629222008-10-11 09:56:04 +00002231##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002232# lzo check
2233
2234if test "$lzo" != "no" ; then
2235 cat > $TMPC << EOF
2236#include <lzo/lzo1x.h>
2237int main(void) { lzo_version(); return 0; }
2238EOF
2239 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002240 libs_softmmu="$libs_softmmu -llzo2"
2241 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002242 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002243 if test "$lzo" = "yes"; then
2244 feature_not_found "liblzo2" "Install liblzo2 devel"
2245 fi
2246 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002247 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002248fi
2249
2250##########################################
2251# snappy check
2252
2253if test "$snappy" != "no" ; then
2254 cat > $TMPC << EOF
2255#include <snappy-c.h>
2256int main(void) { snappy_max_compressed_length(4096); return 0; }
2257EOF
2258 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002259 libs_softmmu="$libs_softmmu -lsnappy"
2260 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002261 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002262 if test "$snappy" = "yes"; then
2263 feature_not_found "libsnappy" "Install libsnappy devel"
2264 fi
2265 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002266 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002267fi
2268
2269##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002270# bzip2 check
2271
2272if test "$bzip2" != "no" ; then
2273 cat > $TMPC << EOF
2274#include <bzlib.h>
2275int main(void) { BZ2_bzlibVersion(); return 0; }
2276EOF
2277 if compile_prog "" "-lbz2" ; then
2278 bzip2="yes"
2279 else
2280 if test "$bzip2" = "yes"; then
2281 feature_not_found "libbzip2" "Install libbzip2 devel"
2282 fi
2283 bzip2="no"
2284 fi
2285fi
2286
2287##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002288# lzfse check
2289
2290if test "$lzfse" != "no" ; then
2291 cat > $TMPC << EOF
2292#include <lzfse.h>
2293int main(void) { lzfse_decode_scratch_size(); return 0; }
2294EOF
2295 if compile_prog "" "-llzfse" ; then
2296 lzfse="yes"
2297 else
2298 if test "$lzfse" = "yes"; then
2299 feature_not_found "lzfse" "Install lzfse devel"
2300 fi
2301 lzfse="no"
2302 fi
2303fi
2304
2305##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002306# libseccomp check
2307
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002308libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002309if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002310 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002311 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002312 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002313 arm|aarch64)
2314 libseccomp_minver="2.2.3"
2315 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002316 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002317 libseccomp_minver="2.3.0"
2318 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002319 *)
2320 libseccomp_minver=""
2321 ;;
2322 esac
2323
2324 if test "$libseccomp_minver" != "" &&
2325 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002326 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2327 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002328 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002329 else
Andrew Jones693e5912015-09-30 11:59:18 -04002330 if test "$seccomp" = "yes" ; then
2331 if test "$libseccomp_minver" != "" ; then
2332 feature_not_found "libseccomp" \
2333 "Install libseccomp devel >= $libseccomp_minver"
2334 else
2335 feature_not_found "libseccomp" \
2336 "libseccomp is not supported for host cpu $cpu"
2337 fi
2338 fi
2339 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002340 fi
2341fi
2342##########################################
aliguorie37630c2009-04-22 15:19:10 +00002343# xen probe
2344
Juan Quintelafc321b42009-08-12 18:29:55 +02002345if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002346 # Check whether Xen library path is specified via --extra-ldflags to avoid
2347 # overriding this setting with pkg-config output. If not, try pkg-config
2348 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002349
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002350 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2351 $pkg_config --exists xencontrol ; then
2352 xen_ctrl_version="$(printf '%d%02d%02d' \
2353 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2354 xen=yes
2355 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2356 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002357 if $pkg_config --exists xentoolcore; then
2358 xen_pc="$xen_pc xentoolcore"
2359 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002360 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2361 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002362 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002363
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002364 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002365 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002366
2367 # First we test whether Xen headers and libraries are available.
2368 # If no, we are done and there is no Xen support.
2369 # If yes, more tests are run to detect the Xen version.
2370
2371 # Xen (any)
2372 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002373#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002374int main(void) {
2375 return 0;
2376}
2377EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002378 if ! compile_prog "" "$xen_libs" ; then
2379 # Xen not found
2380 if test "$xen" = "yes" ; then
2381 feature_not_found "xen" "Install xen devel"
2382 fi
2383 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002384
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002385 # Xen unstable
2386 elif
2387 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002388#undef XC_WANT_COMPAT_DEVICEMODEL_API
2389#define __XEN_TOOLS__
2390#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002391#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002392int main(void) {
2393 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002394 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002395
2396 xd = xendevicemodel_open(0, 0);
2397 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2398
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002399 xfmem = xenforeignmemory_open(0, 0);
2400 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2401
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002402 return 0;
2403}
2404EOF
2405 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2406 then
2407 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2408 xen_ctrl_version=41100
2409 xen=yes
2410 elif
2411 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002412#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2413#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002414#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002415int main(void) {
2416 xenforeignmemory_handle *xfmem;
2417
2418 xfmem = xenforeignmemory_open(0, 0);
2419 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002420 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002421
2422 return 0;
2423}
2424EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002425 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002426 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002427 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002428 xen_ctrl_version=41000
2429 xen=yes
2430 elif
2431 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002432#undef XC_WANT_COMPAT_DEVICEMODEL_API
2433#define __XEN_TOOLS__
2434#include <xendevicemodel.h>
2435int main(void) {
2436 xendevicemodel_handle *xd;
2437
2438 xd = xendevicemodel_open(0, 0);
2439 xendevicemodel_close(xd);
2440
2441 return 0;
2442}
2443EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002444 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2445 then
2446 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2447 xen_ctrl_version=40900
2448 xen=yes
2449 elif
2450 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002451/*
2452 * If we have stable libs the we don't want the libxc compat
2453 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002454 *
2455 * Also, check if xengnttab_grant_copy_segment_t is defined and
2456 * grant copy operation is implemented.
2457 */
2458#undef XC_WANT_COMPAT_EVTCHN_API
2459#undef XC_WANT_COMPAT_GNTTAB_API
2460#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2461#include <xenctrl.h>
2462#include <xenstore.h>
2463#include <xenevtchn.h>
2464#include <xengnttab.h>
2465#include <xenforeignmemory.h>
2466#include <stdint.h>
2467#include <xen/hvm/hvm_info_table.h>
2468#if !defined(HVM_MAX_VCPUS)
2469# error HVM_MAX_VCPUS not defined
2470#endif
2471int main(void) {
2472 xc_interface *xc = NULL;
2473 xenforeignmemory_handle *xfmem;
2474 xenevtchn_handle *xe;
2475 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002476 xengnttab_grant_copy_segment_t* seg = NULL;
2477
2478 xs_daemon_open();
2479
2480 xc = xc_interface_open(0, 0, 0);
2481 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2482 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2483 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2484 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002485
2486 xfmem = xenforeignmemory_open(0, 0);
2487 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2488
2489 xe = xenevtchn_open(0, 0);
2490 xenevtchn_fd(xe);
2491
2492 xg = xengnttab_open(0, 0);
2493 xengnttab_grant_copy(xg, 0, seg);
2494
2495 return 0;
2496}
2497EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002498 compile_prog "" "$xen_libs $xen_stable_libs"
2499 then
2500 xen_ctrl_version=40800
2501 xen=yes
2502 elif
2503 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002504/*
2505 * If we have stable libs the we don't want the libxc compat
2506 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002507 */
2508#undef XC_WANT_COMPAT_EVTCHN_API
2509#undef XC_WANT_COMPAT_GNTTAB_API
2510#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2511#include <xenctrl.h>
2512#include <xenstore.h>
2513#include <xenevtchn.h>
2514#include <xengnttab.h>
2515#include <xenforeignmemory.h>
2516#include <stdint.h>
2517#include <xen/hvm/hvm_info_table.h>
2518#if !defined(HVM_MAX_VCPUS)
2519# error HVM_MAX_VCPUS not defined
2520#endif
2521int main(void) {
2522 xc_interface *xc = NULL;
2523 xenforeignmemory_handle *xfmem;
2524 xenevtchn_handle *xe;
2525 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002526
2527 xs_daemon_open();
2528
2529 xc = xc_interface_open(0, 0, 0);
2530 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2531 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2532 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2533 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002534
2535 xfmem = xenforeignmemory_open(0, 0);
2536 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2537
2538 xe = xenevtchn_open(0, 0);
2539 xenevtchn_fd(xe);
2540
2541 xg = xengnttab_open(0, 0);
2542 xengnttab_map_grant_ref(xg, 0, 0, 0);
2543
2544 return 0;
2545}
2546EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002547 compile_prog "" "$xen_libs $xen_stable_libs"
2548 then
2549 xen_ctrl_version=40701
2550 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002551
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002552 # Xen 4.6
2553 elif
2554 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002555#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002556#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002557#include <stdint.h>
2558#include <xen/hvm/hvm_info_table.h>
2559#if !defined(HVM_MAX_VCPUS)
2560# error HVM_MAX_VCPUS not defined
2561#endif
2562int main(void) {
2563 xc_interface *xc;
2564 xs_daemon_open();
2565 xc = xc_interface_open(0, 0, 0);
2566 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2567 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002568 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002569 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002570 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002571 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002572 return 0;
2573}
2574EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002575 compile_prog "" "$xen_libs"
2576 then
2577 xen_ctrl_version=40600
2578 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002579
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002580 # Xen 4.5
2581 elif
2582 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002583#include <xenctrl.h>
2584#include <xenstore.h>
2585#include <stdint.h>
2586#include <xen/hvm/hvm_info_table.h>
2587#if !defined(HVM_MAX_VCPUS)
2588# error HVM_MAX_VCPUS not defined
2589#endif
2590int main(void) {
2591 xc_interface *xc;
2592 xs_daemon_open();
2593 xc = xc_interface_open(0, 0, 0);
2594 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2595 xc_gnttab_open(NULL, 0);
2596 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2597 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002598 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2599 return 0;
2600}
2601EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002602 compile_prog "" "$xen_libs"
2603 then
2604 xen_ctrl_version=40500
2605 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002606
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002607 elif
2608 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002609#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);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002624 return 0;
2625}
2626EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002627 compile_prog "" "$xen_libs"
2628 then
2629 xen_ctrl_version=40200
2630 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002631
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002632 else
2633 if test "$xen" = "yes" ; then
2634 feature_not_found "xen (unsupported version)" \
2635 "Install a supported xen (xen 4.2 or newer)"
2636 fi
2637 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002638 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002639
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002640 if test "$xen" = yes; then
2641 if test $xen_ctrl_version -ge 40701 ; then
2642 libs_softmmu="$xen_stable_libs $libs_softmmu"
2643 fi
2644 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002645 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002646 fi
aliguorie37630c2009-04-22 15:19:10 +00002647fi
2648
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002649if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002650 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002651 xen_pci_passthrough=yes
2652 else
2653 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002654 error_exit "User requested feature Xen PCI Passthrough" \
2655 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002656 fi
2657 xen_pci_passthrough=no
2658 fi
2659fi
2660
aliguorie37630c2009-04-22 15:19:10 +00002661##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002662# Windows Hypervisor Platform accelerator (WHPX) check
2663if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002664 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002665 whpx="yes"
2666 else
2667 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002668 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002669 fi
2670 whpx="no"
2671 fi
2672fi
2673
2674##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002675# Sparse probe
2676if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002677 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002678 sparse=yes
2679 else
2680 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002681 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002682 fi
2683 sparse=no
2684 fi
2685fi
2686
2687##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002688# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002689if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002690 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002691 x11_cflags=$($pkg_config --cflags x11)
2692 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002693fi
2694
2695##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002696# GTK probe
2697
2698if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002699 gtkpackage="gtk+-3.0"
2700 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002701 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002702 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002703 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2704 gtk_libs=$($pkg_config --libs $gtkpackage)
2705 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002706 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002707 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002708 gtk_cflags="$gtk_cflags $x11_cflags"
2709 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002710 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002711 gtk="yes"
2712 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002713 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002714 else
2715 gtk="no"
2716 fi
2717fi
2718
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002719
2720##########################################
2721# GNUTLS probe
2722
2723if test "$gnutls" != "no"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002724 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002725 gnutls_cflags=$($pkg_config --cflags gnutls)
2726 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002727 libs_softmmu="$gnutls_libs $libs_softmmu"
2728 libs_tools="$gnutls_libs $libs_tools"
2729 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2730 gnutls="yes"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002731 elif test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002732 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002733 else
2734 gnutls="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002735 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002736fi
2737
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002738
2739# If user didn't give a --disable/enable-gcrypt flag,
2740# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002741# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002742if test -z "$gcrypt"
2743then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002744 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002745 then
2746 gcrypt="no"
2747 fi
2748fi
2749
2750# If user didn't give a --disable/enable-nettle flag,
2751# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002752# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002753if test -z "$nettle"
2754then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002755 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002756 then
2757 nettle="no"
2758 fi
2759fi
2760
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002761has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002762 if ! has "libgcrypt-config"
2763 then
2764 return 1
2765 fi
2766
2767 if test -n "$cross_prefix"
2768 then
Stefan Weil89138852016-05-16 15:10:20 +02002769 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002770 if test "$host-" != $cross_prefix
2771 then
2772 return 1
2773 fi
2774 fi
2775
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002776 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2777 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2778
2779 if test $maj != 1 || test $min -lt 5
2780 then
2781 return 1
2782 fi
2783
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002784 return 0
2785}
2786
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002787
2788if test "$nettle" != "no"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002789 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002790 nettle_cflags=$($pkg_config --cflags nettle)
2791 nettle_libs=$($pkg_config --libs nettle)
2792 nettle_version=$($pkg_config --modversion nettle)
2793 libs_softmmu="$nettle_libs $libs_softmmu"
2794 libs_tools="$nettle_libs $libs_tools"
2795 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2796 nettle="yes"
2797
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002798 if test -z "$gcrypt"; then
2799 gcrypt="no"
2800 fi
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002801 else
2802 if test "$nettle" = "yes"; then
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002803 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002804 else
2805 nettle="no"
2806 fi
2807 fi
2808fi
2809
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002810if test "$gcrypt" != "no"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002811 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002812 gcrypt_cflags=$(libgcrypt-config --cflags)
2813 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002814 # Debian has remove -lgpg-error from libgcrypt-config
2815 # as it "spreads unnecessary dependencies" which in
2816 # turn breaks static builds...
2817 if test "$static" = "yes"
2818 then
2819 gcrypt_libs="$gcrypt_libs -lgpg-error"
2820 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002821 libs_softmmu="$gcrypt_libs $libs_softmmu"
2822 libs_tools="$gcrypt_libs $libs_tools"
2823 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002824 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002825
2826 cat > $TMPC << EOF
2827#include <gcrypt.h>
2828int main(void) {
2829 gcry_mac_hd_t handle;
2830 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2831 GCRY_MAC_FLAG_SECURE, NULL);
2832 return 0;
2833}
2834EOF
2835 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2836 gcrypt_hmac=yes
2837 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002838 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002839 if test "$gcrypt" = "yes"; then
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002840 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002841 else
2842 gcrypt="no"
2843 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002844 fi
2845fi
2846
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002847
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002848if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2849then
2850 error_exit "Only one of gcrypt & nettle can be enabled"
2851fi
2852
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002853##########################################
2854# libtasn1 - only for the TLS creds/session test suite
2855
2856tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002857tasn1_cflags=""
2858tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002859if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002860 tasn1_cflags=$($pkg_config --cflags libtasn1)
2861 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002862else
2863 tasn1=no
2864fi
2865
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002866
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002867##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002868# getifaddrs (for tests/test-io-channel-socket )
2869
2870have_ifaddrs_h=yes
2871if ! check_include "ifaddrs.h" ; then
2872 have_ifaddrs_h=no
2873fi
2874
2875##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002876# VTE probe
2877
2878if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002879 vteminversion="0.32.0"
2880 if $pkg_config --exists "vte-2.91"; then
2881 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002882 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002883 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002884 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002885 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002886 vte_cflags=$($pkg_config --cflags $vtepackage)
2887 vte_libs=$($pkg_config --libs $vtepackage)
2888 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002889 vte="yes"
2890 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002891 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002892 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002893 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002894 fi
2895fi
2896
2897##########################################
bellard11d9f692004-04-02 20:55:59 +00002898# SDL probe
2899
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002900# Look for sdl configuration program (pkg-config or sdl-config). Try
2901# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002902
Peter Xuc6093a02018-04-10 13:40:34 +08002903sdl_probe ()
2904{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002905 if $pkg_config sdl2 --exists; then
2906 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08002907 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2908 elif has ${sdl_config}; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002909 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08002910 sdlversion=$($sdlconfig --version)
2911 else
2912 if test "$sdl" = "yes" ; then
2913 feature_not_found "sdl" "Install SDL2-devel"
2914 fi
2915 sdl=no
2916 # no need to do the rest
2917 return
2918 fi
2919 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2920 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2921 fi
2922
Juan Quintelaac119f92009-07-27 16:13:15 +02002923 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002924#include <SDL.h>
2925#undef main /* We don't want SDL to override our main() */
2926int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2927EOF
Stefan Weil89138852016-05-16 15:10:20 +02002928 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002929 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002930 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002931 if $pkg_config sdl2 --exists; then
2932 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002933 else
2934 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2935 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002936 else
Stefan Weil89138852016-05-16 15:10:20 +02002937 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002938 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002939 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002940 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00002941
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002942 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06002943 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002944 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002945 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2946 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002947 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002948 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002949 :
2950 else
2951 sdl=no
2952 fi
2953 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002954 else # sdl not found
2955 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002956 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002957 fi
2958 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002959 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08002960}
2961
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00002962sdl_image_probe ()
2963{
2964 if test "$sdl_image" != "no" ; then
2965 if $pkg_config SDL2_image --exists; then
2966 if test "$static" = "yes"; then
2967 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
2968 else
2969 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
2970 fi
2971 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
2972 sdl_image=yes
2973
2974 sdl_cflags="$sdl_cflags $sdl_image_cflags"
2975 sdl_libs="$sdl_libs $sdl_image_libs"
2976 else
2977 if test "$sdl_image" = "yes" ; then
2978 feature_not_found "sdl_image" "Install SDL Image devel"
2979 else
2980 sdl_image=no
2981 fi
2982 fi
2983 fi
2984}
2985
Peter Xuc6093a02018-04-10 13:40:34 +08002986if test "$sdl" != "no" ; then
2987 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02002988fi
bellard11d9f692004-04-02 20:55:59 +00002989
aliguori5368a422009-03-03 17:37:21 +00002990if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00002991 sdl_image_probe
2992else
2993 if test "$sdl_image" = "yes"; then
2994 echo "warning: SDL Image requested, but SDL is not available, disabling"
2995 fi
2996 sdl_image=no
2997fi
2998
2999if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003000 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003001#include <SDL.h>
3002#if defined(SDL_VIDEO_DRIVER_X11)
3003#include <X11/XKBlib.h>
3004#else
3005#error No x11 support
3006#endif
3007int main(void) { return 0; }
3008EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003009 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003010 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003011 sdl_cflags="$sdl_cflags $x11_cflags"
3012 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003013 fi
aliguori5368a422009-03-03 17:37:21 +00003014fi
3015
ths8f28f3f2007-01-05 21:25:54 +00003016##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003017# RDMA needs OpenFabrics libraries
3018if test "$rdma" != "no" ; then
3019 cat > $TMPC <<EOF
3020#include <rdma/rdma_cma.h>
3021int main(void) { return 0; }
3022EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003023 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003024 if compile_prog "" "$rdma_libs" ; then
3025 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003026 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003027 else
3028 if test "$rdma" = "yes" ; then
3029 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003030 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003031 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003032 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003033 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3034 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3035 fi
3036 rdma="no"
3037 fi
3038fi
3039
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003040##########################################
3041# PVRDMA detection
3042
3043cat > $TMPC <<EOF &&
3044#include <sys/mman.h>
3045
3046int
3047main(void)
3048{
3049 char buf = 0;
3050 void *addr = &buf;
3051 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3052
3053 return 0;
3054}
3055EOF
3056
3057if test "$rdma" = "yes" ; then
3058 case "$pvrdma" in
3059 "")
3060 if compile_prog "" ""; then
3061 pvrdma="yes"
3062 else
3063 pvrdma="no"
3064 fi
3065 ;;
3066 "yes")
3067 if ! compile_prog "" ""; then
3068 error_exit "PVRDMA is not supported since mremap is not implemented"
3069 fi
3070 pvrdma="yes"
3071 ;;
3072 "no")
3073 pvrdma="no"
3074 ;;
3075 esac
3076else
3077 if test "$pvrdma" = "yes" ; then
3078 error_exit "PVRDMA requires rdma suppport"
3079 fi
3080 pvrdma="no"
3081fi
ths8d5d2d42007-08-25 01:37:51 +00003082
3083##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003084# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003085if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003086 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003087#include <sasl/sasl.h>
3088#include <stdio.h>
3089int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3090EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003091 # Assuming Cyrus-SASL installed in /usr prefix
3092 vnc_sasl_cflags=""
3093 vnc_sasl_libs="-lsasl2"
3094 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3095 vnc_sasl=yes
3096 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003097 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003098 else
3099 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003100 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003101 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003102 vnc_sasl=no
3103 fi
aliguori2f9606b2009-03-06 20:27:28 +00003104fi
3105
3106##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003107# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003108if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003109cat > $TMPC <<EOF
3110#include <stdio.h>
3111#include <jpeglib.h>
3112int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3113EOF
3114 vnc_jpeg_cflags=""
3115 vnc_jpeg_libs="-ljpeg"
3116 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3117 vnc_jpeg=yes
3118 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003119 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003120 else
3121 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003122 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003123 fi
3124 vnc_jpeg=no
3125 fi
3126fi
3127
3128##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003129# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003130if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003131cat > $TMPC <<EOF
3132//#include <stdio.h>
3133#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003134#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003135int main(void) {
3136 png_structp png_ptr;
3137 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003138 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003139}
3140EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003141 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003142 vnc_png_cflags=$($pkg_config libpng --cflags)
3143 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003144 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003145 vnc_png_cflags=""
3146 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003147 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003148 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3149 vnc_png=yes
3150 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003151 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003152 else
3153 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003154 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003155 fi
3156 vnc_png=no
3157 fi
3158fi
3159
3160##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003161# xkbcommon probe
3162if test "$xkbcommon" != "no" ; then
3163 if $pkg_config xkbcommon --exists; then
3164 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3165 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3166 xkbcommon=yes
3167 else
3168 if test "$xkbcommon" = "yes" ; then
3169 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3170 fi
3171 xkbcommon=no
3172 fi
3173fi
3174
3175##########################################
aliguori76655d62009-03-06 20:27:37 +00003176# fnmatch() probe, used for ACL routines
3177fnmatch="no"
3178cat > $TMPC << EOF
3179#include <fnmatch.h>
3180int main(void)
3181{
3182 fnmatch("foo", "foo", 0);
3183 return 0;
3184}
3185EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003186if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003187 fnmatch="yes"
3188fi
3189
3190##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003191# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003192if test "$xfs" != "no" ; then
3193 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003194#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003195#include <xfs/xfs.h>
3196int main(void)
3197{
3198 xfsctl(NULL, 0, 0, NULL);
3199 return 0;
3200}
3201EOF
3202 if compile_prog "" "" ; then
3203 xfs="yes"
3204 else
3205 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003206 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003207 fi
3208 xfs=no
3209 fi
3210fi
3211
3212##########################################
ths8a16d272008-07-19 09:56:24 +00003213# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003214if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003215 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003216 cat > $TMPC << EOF
3217#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003218int main(void)
3219{
3220 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003221 char s[] = "";
3222 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003223 return 0;
3224}
ths8a16d272008-07-19 09:56:24 +00003225EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003226 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003227 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003228 else
3229 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003230 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003231 fi
3232 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003233 fi
ths8a16d272008-07-19 09:56:24 +00003234fi
3235
3236##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003237# netmap support probe
3238# Apart from looking for netmap headers, we make sure that the host API version
3239# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3240# a minor/major version number. Minor new features will be marked with values up
3241# to 15, and if something happens that requires a change to the backend we will
3242# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003243if test "$netmap" != "no" ; then
3244 cat > $TMPC << EOF
3245#include <inttypes.h>
3246#include <net/if.h>
3247#include <net/netmap.h>
3248#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003249#if (NETMAP_API < 11) || (NETMAP_API > 15)
3250#error
3251#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003252int main(void) { return 0; }
3253EOF
3254 if compile_prog "" "" ; then
3255 netmap=yes
3256 else
3257 if test "$netmap" = "yes" ; then
3258 feature_not_found "netmap"
3259 fi
3260 netmap=no
3261 fi
3262fi
3263
3264##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003265# libcap-ng library probe
3266if test "$cap_ng" != "no" ; then
3267 cap_libs="-lcap-ng"
3268 cat > $TMPC << EOF
3269#include <cap-ng.h>
3270int main(void)
3271{
3272 capng_capability_to_name(CAPNG_EFFECTIVE);
3273 return 0;
3274}
3275EOF
3276 if compile_prog "" "$cap_libs" ; then
3277 cap_ng=yes
3278 libs_tools="$cap_libs $libs_tools"
3279 else
3280 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003281 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003282 fi
3283 cap_ng=no
3284 fi
3285fi
3286
3287##########################################
malcc2de5c92008-06-28 19:13:06 +00003288# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003289
Stefan Weil89138852016-05-16 15:10:20 +02003290audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003291for drv in $audio_drv_list; do
3292 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003293 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003294 if $pkg_config alsa --exists; then
3295 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003296 if test "$drv" = "try-alsa"; then
3297 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3298 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003299 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003300 if test "$drv" = "try-alsa"; then
3301 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3302 else
3303 error_exit "$drv check failed" \
3304 "Make sure to have the $drv libs and headers installed."
3305 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003306 fi
malcc2de5c92008-06-28 19:13:06 +00003307 ;;
3308
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003309 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003310 if $pkg_config libpulse --exists; then
3311 pulse_libs=$($pkg_config libpulse --libs)
3312 audio_pt_int="yes"
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003313 if test "$drv" = "try-pa"; then
3314 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3315 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003316 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003317 if test "$drv" = "try-pa"; then
3318 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3319 else
3320 error_exit "$drv check failed" \
3321 "Make sure to have the $drv libs and headers installed."
3322 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003323 fi
malcb8e59f12008-07-02 21:03:08 +00003324 ;;
3325
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003326 sdl)
3327 if test "$sdl" = "no"; then
3328 error_exit "sdl not found or disabled, can not use sdl audio driver"
3329 fi
3330 ;;
3331
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003332 try-sdl)
3333 if test "$sdl" = "no"; then
3334 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3335 else
3336 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3337 fi
3338 ;;
3339
Juan Quintela997e6902009-08-03 14:46:29 +02003340 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003341 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003342 ;;
3343
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003344 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003345 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003346 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003347 ;;
3348
3349 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003350 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003351 ;;
3352
malce4c63a62008-07-19 16:15:16 +00003353 *)
malc1c9b2a52008-07-19 16:57:30 +00003354 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003355 error_exit "Unknown driver '$drv' selected" \
3356 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003357 }
3358 ;;
malcc2de5c92008-06-28 19:13:06 +00003359 esac
3360done
ths8f28f3f2007-01-05 21:25:54 +00003361
balrog4d3b6f62008-02-10 16:33:14 +00003362##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003363# BrlAPI probe
3364
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003365if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003366 brlapi_libs="-lbrlapi"
3367 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003368#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003369#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003370int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3371EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003372 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003373 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003374 else
3375 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003376 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003377 fi
3378 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003379 fi
3380fi
aurel322e4d9fb2008-04-08 06:01:02 +00003381
3382##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003383# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003384if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003385 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003386 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3387 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003388 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003389 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003390 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003391 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003392 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003393 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003394#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003395#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003396#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003397int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003398 wchar_t wch = L'w';
3399 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003400 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003401 addwstr(L"wide chars\n");
3402 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003403 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003404 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003405}
balrog4d3b6f62008-02-10 16:33:14 +00003406EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003407 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003408 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003409 # Make sure we get the wide character prototypes
3410 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003411 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003412 for curses_lib in $curses_lib_list; do
3413 unset IFS
3414 if compile_prog "$curses_inc" "$curses_lib" ; then
3415 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003416 break
3417 fi
3418 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003419 if test "$curses_found" = yes ; then
3420 break
3421 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003422 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003423 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003424 if test "$curses_found" = "yes" ; then
3425 curses=yes
3426 else
3427 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003428 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003429 fi
3430 curses=no
3431 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003432fi
balrog4d3b6f62008-02-10 16:33:14 +00003433
blueswir1414f0da2008-08-15 18:20:52 +00003434##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003435# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003436if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003437 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003438 curlconfig="$pkg_config libcurl"
3439 else
3440 curlconfig=curl-config
3441 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003442 cat > $TMPC << EOF
3443#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003444int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003445EOF
Stefan Weil89138852016-05-16 15:10:20 +02003446 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3447 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003448 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003449 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003450 else
3451 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003452 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003453 fi
3454 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003455 fi
3456fi # test "$curl"
3457
3458##########################################
balrogfb599c92008-09-28 23:49:55 +00003459# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003460if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003461 cat > $TMPC << EOF
3462#include <bluetooth/bluetooth.h>
3463int main(void) { return bt_error(0); }
3464EOF
Stefan Weil89138852016-05-16 15:10:20 +02003465 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3466 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003467 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003468 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003469 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003470 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003471 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003472 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003473 fi
balroge820e3f2008-09-30 02:27:44 +00003474 bluez="no"
3475 fi
balrogfb599c92008-09-28 23:49:55 +00003476fi
3477
3478##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003479# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003480
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003481glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003482glib_modules=gthread-2.0
3483if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003484 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003485fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003486
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003487# This workaround is required due to a bug in pkg-config file for glib as it
3488# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3489
Eric Blakee633a5c2019-02-04 20:39:37 -06003490if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003491 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3492fi
3493
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003494for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003495 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003496 glib_cflags=$($pkg_config --cflags $i)
3497 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003498 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003499 LIBS="$glib_libs $LIBS"
3500 libs_qga="$glib_libs $libs_qga"
3501 else
3502 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3503 fi
3504done
3505
Marc-André Lureauf876b762019-02-21 12:07:00 +01003506if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3507 gio=yes
3508 gio_cflags=$($pkg_config --cflags gio-2.0)
3509 gio_libs=$($pkg_config --libs gio-2.0)
3510else
3511 gio=no
3512fi
3513
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003514# Sanity check that the current size_t matches the
3515# size that glib thinks it should be. This catches
3516# problems on multi-arch where people try to build
3517# 32-bit QEMU while pointing at 64-bit glib headers
3518cat > $TMPC <<EOF
3519#include <glib.h>
3520#include <unistd.h>
3521
3522#define QEMU_BUILD_BUG_ON(x) \
3523 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3524
3525int main(void) {
3526 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3527 return 0;
3528}
3529EOF
3530
Stefan Weil5919e032016-04-28 23:33:41 +02003531if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003532 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3533 "You probably need to set PKG_CONFIG_LIBDIR"\
3534 "to point to the right pkg-config files for your"\
3535 "build target"
3536fi
3537
John Snowbbbf2e02015-03-25 18:57:38 -04003538# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3539cat > $TMPC << EOF
3540#include <glib.h>
3541int main(void) { return 0; }
3542EOF
3543if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3544 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3545 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3546 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3547 fi
3548fi
3549
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003550#########################################
3551# zlib check
3552
3553if test "$zlib" != "no" ; then
3554 if $pkg_config --exists zlib; then
3555 zlib_cflags=$($pkg_config --cflags zlib)
3556 zlib_libs=$($pkg_config --libs zlib)
3557 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3558 LIBS="$zlib_libs $LIBS"
3559 else
3560 cat > $TMPC << EOF
3561#include <zlib.h>
3562int main(void) { zlibVersion(); return 0; }
3563EOF
3564 if compile_prog "" "-lz" ; then
3565 LIBS="$LIBS -lz"
3566 else
3567 error_exit "zlib check failed" \
3568 "Make sure to have the zlib libs and headers installed."
3569 fi
3570 fi
3571fi
3572
Fam Zhenge26110c2014-02-10 14:48:57 +08003573##########################################
3574# SHA command probe for modules
3575if test "$modules" = yes; then
3576 shacmd_probe="sha1sum sha1 shasum"
3577 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003578 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003579 shacmd="$c"
3580 break
3581 fi
3582 done
3583 if test "$shacmd" = ""; then
3584 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3585 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003586fi
3587
3588##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003589# pixman support probe
3590
Eric Blakee633a5c2019-02-04 20:39:37 -06003591if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003592 pixman_cflags=
3593 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003594elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003595 pixman_cflags=$($pkg_config --cflags pixman-1)
3596 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003597else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003598 error_exit "pixman >= 0.21.8 not present." \
3599 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003600fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003601
3602##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003603# libmpathpersist probe
3604
3605if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003606 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003607 cat > $TMPC <<EOF
3608#include <libudev.h>
3609#include <mpath_persist.h>
3610unsigned mpath_mx_alloc_len = 1024;
3611int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003612static struct config *multipath_conf;
3613extern struct udev *udev;
3614extern struct config *get_multipath_config(void);
3615extern void put_multipath_config(struct config *conf);
3616struct udev *udev;
3617struct config *get_multipath_config(void) { return multipath_conf; }
3618void put_multipath_config(struct config *conf) { }
3619
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003620int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003621 udev = udev_new();
3622 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003623 return 0;
3624}
3625EOF
3626 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3627 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003628 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003629 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003630 # probe for the old API
3631 cat > $TMPC <<EOF
3632#include <libudev.h>
3633#include <mpath_persist.h>
3634unsigned mpath_mx_alloc_len = 1024;
3635int logsink;
3636int main(void) {
3637 struct udev *udev = udev_new();
3638 mpath_lib_init(udev);
3639 return 0;
3640}
3641EOF
3642 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3643 mpathpersist=yes
3644 mpathpersist_new_api=no
3645 else
3646 mpathpersist=no
3647 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003648 fi
3649else
3650 mpathpersist=no
3651fi
3652
3653##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303654# libcap probe
3655
3656if test "$cap" != "no" ; then
3657 cat > $TMPC <<EOF
3658#include <stdio.h>
3659#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003660int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303661EOF
3662 if compile_prog "" "-lcap" ; then
3663 cap=yes
3664 else
3665 cap=no
3666 fi
3667fi
3668
3669##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003670# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003671PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003672
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003673pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003674cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003675#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003676static void *f(void *p) { return NULL; }
3677int main(void) {
3678 pthread_t thread;
3679 pthread_create(&thread, 0, f, 0);
3680 return 0;
3681}
blueswir1414f0da2008-08-15 18:20:52 +00003682EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003683if compile_prog "" "" ; then
3684 pthread=yes
3685else
3686 for pthread_lib in $PTHREADLIBS_LIST; do
3687 if compile_prog "" "$pthread_lib" ; then
3688 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003689 found=no
3690 for lib_entry in $LIBS; do
3691 if test "$lib_entry" = "$pthread_lib"; then
3692 found=yes
3693 break
3694 fi
3695 done
3696 if test "$found" = "no"; then
3697 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003698 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003699 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003700 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003701 break
3702 fi
3703 done
3704fi
blueswir1414f0da2008-08-15 18:20:52 +00003705
Eric Blakee633a5c2019-02-04 20:39:37 -06003706if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003707 error_exit "pthread check failed" \
3708 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003709fi
3710
Roman Bolshakov479a5742018-12-17 23:26:01 +03003711# check for pthread_setname_np with thread id
3712pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003713cat > $TMPC << EOF
3714#include <pthread.h>
3715
3716static void *f(void *p) { return NULL; }
3717int main(void)
3718{
3719 pthread_t thread;
3720 pthread_create(&thread, 0, f, 0);
3721 pthread_setname_np(thread, "QEMU");
3722 return 0;
3723}
3724EOF
3725if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003726 pthread_setname_np_w_tid=yes
3727fi
3728
3729# check for pthread_setname_np without thread id
3730pthread_setname_np_wo_tid=no
3731cat > $TMPC << EOF
3732#include <pthread.h>
3733
3734static void *f(void *p) { pthread_setname_np("QEMU"); }
3735int main(void)
3736{
3737 pthread_t thread;
3738 pthread_create(&thread, 0, f, 0);
3739 return 0;
3740}
3741EOF
3742if compile_prog "" "$pthread_lib" ; then
3743 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003744fi
3745
aliguoribf9298b2008-12-05 20:05:26 +00003746##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003747# rbd probe
3748if test "$rbd" != "no" ; then
3749 cat > $TMPC <<EOF
3750#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003751#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003752int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003753 rados_t cluster;
3754 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003755 return 0;
3756}
3757EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003758 rbd_libs="-lrbd -lrados"
3759 if compile_prog "" "$rbd_libs" ; then
3760 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003761 else
3762 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003763 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003764 fi
3765 rbd=no
3766 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003767fi
3768
3769##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003770# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003771min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003772if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003773 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003774 libssh2_cflags=$($pkg_config libssh2 --cflags)
3775 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003776 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003777 else
3778 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003779 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003780 fi
3781 libssh2=no
3782 fi
3783fi
3784
3785##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003786# libssh2_sftp_fsync probe
3787
3788if test "$libssh2" = "yes"; then
3789 cat > $TMPC <<EOF
3790#include <stdio.h>
3791#include <libssh2.h>
3792#include <libssh2_sftp.h>
3793int main(void) {
3794 LIBSSH2_SESSION *session;
3795 LIBSSH2_SFTP *sftp;
3796 LIBSSH2_SFTP_HANDLE *sftp_handle;
3797 session = libssh2_session_init ();
3798 sftp = libssh2_sftp_init (session);
3799 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3800 libssh2_sftp_fsync (sftp_handle);
3801 return 0;
3802}
3803EOF
3804 # libssh2_cflags/libssh2_libs defined in previous test.
3805 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3806 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3807 fi
3808fi
3809
3810##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003811# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003812
3813if test "$linux_aio" != "no" ; then
3814 cat > $TMPC <<EOF
3815#include <libaio.h>
3816#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003817#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003818int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3819EOF
3820 if compile_prog "" "-laio" ; then
3821 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003822 else
3823 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003824 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003825 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003826 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003827 fi
3828fi
3829
3830##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003831# TPM passthrough is only on x86 Linux
3832
Eric Blakee633a5c2019-02-04 20:39:37 -06003833if test "$targetos" = Linux && { test "$cpu" = i386 || test "$cpu" = x86_64; }; then
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003834 tpm_passthrough=$tpm
3835else
3836 tpm_passthrough=no
3837fi
3838
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003839# TPM emulator is for all posix systems
3840if test "$mingw32" != "yes"; then
3841 tpm_emulator=$tpm
3842else
3843 tpm_emulator=no
3844fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003845##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003846# attr probe
3847
3848if test "$attr" != "no" ; then
3849 cat > $TMPC <<EOF
3850#include <stdio.h>
3851#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003852#ifdef CONFIG_LIBATTR
3853#include <attr/xattr.h>
3854#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003855#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003856#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003857int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3858EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003859 if compile_prog "" "" ; then
3860 attr=yes
3861 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003862 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003863 attr=yes
3864 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003865 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003866 else
3867 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003868 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003869 fi
3870 attr=no
3871 fi
3872fi
3873
3874##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003875# iovec probe
3876cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003877#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003878#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003879#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003880int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003881EOF
3882iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003883if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003884 iovec=yes
3885fi
3886
aurel32f652e6a2008-12-16 10:43:48 +00003887##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003888# preadv probe
3889cat > $TMPC <<EOF
3890#include <sys/types.h>
3891#include <sys/uio.h>
3892#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003893int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003894EOF
3895preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003896if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003897 preadv=yes
3898fi
3899
3900##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003901# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003902# fdt support is mandatory for at least some target architectures,
3903# so insist on it if we're building those system emulators.
3904fdt_required=no
3905for target in $target_list; do
3906 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003907 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003908 fdt_required=yes
3909 ;;
3910 esac
3911done
3912
3913if test "$fdt_required" = "yes"; then
3914 if test "$fdt" = "no"; then
3915 error_exit "fdt disabled but some requested targets require it." \
3916 "You can turn off fdt only if you also disable all the system emulation" \
3917 "targets which need it (by specifying a cut down --target-list)."
3918 fi
3919 fdt=yes
3920fi
3921
Juan Quintela2df87df2009-08-12 18:29:54 +02003922if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003923 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003924 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003925 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003926 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003927#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003928#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01003929int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003930EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003931 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003932 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003933 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003934 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003935 # have GIT checkout, so activate dtc submodule
3936 if test -e "${source_path}/.git" ; then
3937 git_submodules="${git_submodules} dtc"
3938 fi
3939 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003940 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003941 mkdir -p dtc
3942 if [ "$pwd_is_source_path" != "y" ] ; then
3943 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3944 symlink "$source_path/dtc/scripts" "dtc/scripts"
3945 fi
3946 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003947 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3948 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003949 elif test "$fdt" = "yes" ; then
3950 # Not a git build & no libfdt found, prompt for system install
3951 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3952 "Please install the DTC (libfdt) devel package"
3953 else
3954 # don't have and don't want
3955 fdt_libs=
3956 fdt=no
3957 fi
aurel32f652e6a2008-12-16 10:43:48 +00003958 fi
3959fi
3960
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003961libs_softmmu="$libs_softmmu $fdt_libs"
3962
Michael Walle20ff0752011-03-07 23:32:39 +01003963##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003964# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003965
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003966if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003967 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003968 if $pkg_config $opengl_pkgs; then
3969 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3970 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003971 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003972 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3973 gtk_gl="yes"
3974 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003975 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003976 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003977 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003978 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003979 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003980 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003981 opengl_libs=""
3982 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003983 fi
3984fi
3985
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003986if test "$opengl" = "yes"; then
3987 cat > $TMPC << EOF
3988#include <epoxy/egl.h>
3989#ifndef EGL_MESA_image_dma_buf_export
3990# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3991#endif
3992int main(void) { return 0; }
3993EOF
3994 if compile_prog "" "" ; then
3995 opengl_dmabuf=yes
3996 fi
3997fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003998
Eric Blakee633a5c2019-02-04 20:39:37 -06003999if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004000 for target in $target_list; do
4001 case $target in
4002 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4003 need_x11=yes
4004 ;;
4005 esac
4006 done
4007fi
4008
Klim Kireeved279a02018-01-12 12:01:19 +03004009##########################################
4010# libxml2 probe
4011if test "$libxml2" != "no" ; then
4012 if $pkg_config --exists libxml-2.0; then
4013 libxml2="yes"
4014 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4015 libxml2_libs=$($pkg_config --libs libxml-2.0)
4016 else
4017 if test "$libxml2" = "yes"; then
4018 feature_not_found "libxml2" "Install libxml2 devel"
4019 fi
4020 libxml2="no"
4021 fi
4022fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004023
Bharata B Raoeb100392012-09-24 14:42:45 +05304024##########################################
4025# glusterfs probe
4026if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004027 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304028 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004029 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4030 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004031 if $pkg_config --atleast-version=4 glusterfs-api; then
4032 glusterfs_xlator_opt="yes"
4033 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004034 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304035 glusterfs_discard="yes"
4036 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304037 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304038 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304039 glusterfs_zerofill="yes"
4040 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304041 else
4042 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004043 feature_not_found "GlusterFS backend support" \
4044 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304045 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304046 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304047 fi
4048fi
4049
aurel3239386ac2009-04-15 19:48:17 +00004050# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004051# emulator. This is done because older glibc versions don't
4052# have syscall stubs for these implemented. In that case we
4053# don't provide them even if kernel supports them.
4054#
4055inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004056cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004057#include <sys/inotify.h>
4058
4059int
4060main(void)
4061{
4062 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004063 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004064}
4065EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004066if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004067 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004068fi
4069
Riku Voipioc05c7a72010-03-26 15:25:11 +00004070inotify1=no
4071cat > $TMPC << EOF
4072#include <sys/inotify.h>
4073
4074int
4075main(void)
4076{
4077 /* try to start inotify */
4078 return inotify_init1(0);
4079}
4080EOF
4081if compile_prog "" "" ; then
4082 inotify1=yes
4083fi
4084
Riku Voipio099d6b02009-05-05 12:10:04 +03004085# check if pipe2 is there
4086pipe2=no
4087cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004088#include <unistd.h>
4089#include <fcntl.h>
4090
4091int main(void)
4092{
4093 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004094 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004095}
4096EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004097if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004098 pipe2=yes
4099fi
4100
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004101# check if accept4 is there
4102accept4=no
4103cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004104#include <sys/socket.h>
4105#include <stddef.h>
4106
4107int main(void)
4108{
4109 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4110 return 0;
4111}
4112EOF
4113if compile_prog "" "" ; then
4114 accept4=yes
4115fi
4116
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304117# check if tee/splice is there. vmsplice was added same time.
4118splice=no
4119cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304120#include <unistd.h>
4121#include <fcntl.h>
4122#include <limits.h>
4123
4124int main(void)
4125{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004126 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304127 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4128 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4129 return 0;
4130}
4131EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004132if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304133 splice=yes
4134fi
4135
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004136##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004137# libnuma probe
4138
4139if test "$numa" != "no" ; then
4140 cat > $TMPC << EOF
4141#include <numa.h>
4142int main(void) { return numa_available(); }
4143EOF
4144
4145 if compile_prog "" "-lnuma" ; then
4146 numa=yes
4147 libs_softmmu="-lnuma $libs_softmmu"
4148 else
4149 if test "$numa" = "yes" ; then
4150 feature_not_found "numa" "install numactl devel"
4151 fi
4152 numa=no
4153 fi
4154fi
4155
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004156if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4157 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4158 exit 1
4159fi
4160
Yang Zhong5a22ab72017-12-20 21:16:46 +08004161# Even if malloc_trim() is available, these non-libc memory allocators
4162# do not support it.
4163if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4164 if test "$malloc_trim" = "yes" ; then
4165 echo "Disabling malloc_trim with non-libc memory allocator"
4166 fi
4167 malloc_trim="no"
4168fi
4169
4170#######################################
4171# malloc_trim
4172
4173if test "$malloc_trim" != "no" ; then
4174 cat > $TMPC << EOF
4175#include <malloc.h>
4176int main(void) { malloc_trim(0); return 0; }
4177EOF
4178 if compile_prog "" "" ; then
4179 malloc_trim="yes"
4180 else
4181 malloc_trim="no"
4182 fi
4183fi
4184
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004185##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004186# tcmalloc probe
4187
4188if test "$tcmalloc" = "yes" ; then
4189 cat > $TMPC << EOF
4190#include <stdlib.h>
4191int main(void) { malloc(1); return 0; }
4192EOF
4193
4194 if compile_prog "" "-ltcmalloc" ; then
4195 LIBS="-ltcmalloc $LIBS"
4196 else
4197 feature_not_found "tcmalloc" "install gperftools devel"
4198 fi
4199fi
4200
4201##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004202# jemalloc probe
4203
4204if test "$jemalloc" = "yes" ; then
4205 cat > $TMPC << EOF
4206#include <stdlib.h>
4207int main(void) { malloc(1); return 0; }
4208EOF
4209
4210 if compile_prog "" "-ljemalloc" ; then
4211 LIBS="-ljemalloc $LIBS"
4212 else
4213 feature_not_found "jemalloc" "install jemalloc devel"
4214 fi
4215fi
4216
4217##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004218# signalfd probe
4219signalfd="no"
4220cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004221#include <unistd.h>
4222#include <sys/syscall.h>
4223#include <signal.h>
4224int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4225EOF
4226
4227if compile_prog "" "" ; then
4228 signalfd=yes
4229fi
4230
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004231# check if optreset global is declared by <getopt.h>
4232optreset="no"
4233cat > $TMPC << EOF
4234#include <getopt.h>
4235int main(void) { return optreset; }
4236EOF
4237
4238if compile_prog "" "" ; then
4239 optreset=yes
4240fi
4241
Riku Voipioc2882b92009-08-12 15:08:24 +03004242# check if eventfd is supported
4243eventfd=no
4244cat > $TMPC << EOF
4245#include <sys/eventfd.h>
4246
4247int main(void)
4248{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004249 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004250}
4251EOF
4252if compile_prog "" "" ; then
4253 eventfd=yes
4254fi
4255
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004256# check if memfd is supported
4257memfd=no
4258cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004259#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004260
4261int main(void)
4262{
4263 return memfd_create("foo", MFD_ALLOW_SEALING);
4264}
4265EOF
4266if compile_prog "" "" ; then
4267 memfd=yes
4268fi
4269
Cortland Tölva955727d2018-10-08 09:35:19 -07004270# check for usbfs
4271have_usbfs=no
4272if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004273 cat > $TMPC << EOF
4274#include <linux/usbdevice_fs.h>
4275
4276#ifndef USBDEVFS_GET_CAPABILITIES
4277#error "USBDEVFS_GET_CAPABILITIES undefined"
4278#endif
4279
4280#ifndef USBDEVFS_DISCONNECT_CLAIM
4281#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4282#endif
4283
4284int main(void)
4285{
4286 return 0;
4287}
4288EOF
4289 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004290 have_usbfs=yes
4291 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004292fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004293
Ulrich Hechtd0927932009-09-17 20:22:14 +03004294# check for fallocate
4295fallocate=no
4296cat > $TMPC << EOF
4297#include <fcntl.h>
4298
4299int main(void)
4300{
4301 fallocate(0, 0, 0, 0);
4302 return 0;
4303}
4304EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004305if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004306 fallocate=yes
4307fi
4308
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004309# check for fallocate hole punching
4310fallocate_punch_hole=no
4311cat > $TMPC << EOF
4312#include <fcntl.h>
4313#include <linux/falloc.h>
4314
4315int main(void)
4316{
4317 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4318 return 0;
4319}
4320EOF
4321if compile_prog "" "" ; then
4322 fallocate_punch_hole=yes
4323fi
4324
Denis V. Lunevb953f072015-01-30 11:42:14 +03004325# check that fallocate supports range zeroing inside the file
4326fallocate_zero_range=no
4327cat > $TMPC << EOF
4328#include <fcntl.h>
4329#include <linux/falloc.h>
4330
4331int main(void)
4332{
4333 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4334 return 0;
4335}
4336EOF
4337if compile_prog "" "" ; then
4338 fallocate_zero_range=yes
4339fi
4340
Kevin Wolfed911432014-09-29 17:12:59 +02004341# check for posix_fallocate
4342posix_fallocate=no
4343cat > $TMPC << EOF
4344#include <fcntl.h>
4345
4346int main(void)
4347{
4348 posix_fallocate(0, 0, 0);
4349 return 0;
4350}
4351EOF
4352if compile_prog "" "" ; then
4353 posix_fallocate=yes
4354fi
4355
Peter Maydellc727f472011-01-06 11:05:10 +00004356# check for sync_file_range
4357sync_file_range=no
4358cat > $TMPC << EOF
4359#include <fcntl.h>
4360
4361int main(void)
4362{
4363 sync_file_range(0, 0, 0, 0);
4364 return 0;
4365}
4366EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004367if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004368 sync_file_range=yes
4369fi
4370
Peter Maydelldace20d2011-01-10 13:11:24 +00004371# check for linux/fiemap.h and FS_IOC_FIEMAP
4372fiemap=no
4373cat > $TMPC << EOF
4374#include <sys/ioctl.h>
4375#include <linux/fs.h>
4376#include <linux/fiemap.h>
4377
4378int main(void)
4379{
4380 ioctl(0, FS_IOC_FIEMAP, 0);
4381 return 0;
4382}
4383EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004384if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004385 fiemap=yes
4386fi
4387
Ulrich Hechtd0927932009-09-17 20:22:14 +03004388# check for dup3
4389dup3=no
4390cat > $TMPC << EOF
4391#include <unistd.h>
4392
4393int main(void)
4394{
4395 dup3(0, 0, 0);
4396 return 0;
4397}
4398EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004399if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004400 dup3=yes
4401fi
4402
Alex Bligh4e0c6522013-08-21 16:02:43 +01004403# check for ppoll support
4404ppoll=no
4405cat > $TMPC << EOF
4406#include <poll.h>
4407
4408int main(void)
4409{
4410 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4411 ppoll(&pfd, 1, 0, 0);
4412 return 0;
4413}
4414EOF
4415if compile_prog "" "" ; then
4416 ppoll=yes
4417fi
4418
Alex Blighcd758dd2013-08-21 16:02:44 +01004419# check for prctl(PR_SET_TIMERSLACK , ... ) support
4420prctl_pr_set_timerslack=no
4421cat > $TMPC << EOF
4422#include <sys/prctl.h>
4423
4424int main(void)
4425{
4426 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4427 return 0;
4428}
4429EOF
4430if compile_prog "" "" ; then
4431 prctl_pr_set_timerslack=yes
4432fi
4433
Peter Maydell3b6edd12011-02-15 18:35:05 +00004434# check for epoll support
4435epoll=no
4436cat > $TMPC << EOF
4437#include <sys/epoll.h>
4438
4439int main(void)
4440{
4441 epoll_create(0);
4442 return 0;
4443}
4444EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004445if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004446 epoll=yes
4447fi
4448
Peter Maydell227f0212016-06-06 19:58:11 +01004449# epoll_create1 is a later addition
4450# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004451epoll_create1=no
4452cat > $TMPC << EOF
4453#include <sys/epoll.h>
4454
4455int main(void)
4456{
Peter Maydell19e83f62011-04-26 16:56:40 +01004457 /* Note that we use epoll_create1 as a value, not as
4458 * a function being called. This is necessary so that on
4459 * old SPARC glibc versions where the function was present in
4460 * the library but not declared in the header file we will
4461 * fail the configure check. (Otherwise we will get a compiler
4462 * warning but not an error, and will proceed to fail the
4463 * qemu compile where we compile with -Werror.)
4464 */
Blue Swirlc075a722012-08-09 20:21:25 +00004465 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004466}
4467EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004468if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004469 epoll_create1=yes
4470fi
4471
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004472# check for sendfile support
4473sendfile=no
4474cat > $TMPC << EOF
4475#include <sys/sendfile.h>
4476
4477int main(void)
4478{
4479 return sendfile(0, 0, 0, 0);
4480}
4481EOF
4482if compile_prog "" "" ; then
4483 sendfile=yes
4484fi
4485
Riku Voipio51834342014-06-22 11:25:42 +01004486# check for timerfd support (glibc 2.8 and newer)
4487timerfd=no
4488cat > $TMPC << EOF
4489#include <sys/timerfd.h>
4490
4491int main(void)
4492{
4493 return(timerfd_create(CLOCK_REALTIME, 0));
4494}
4495EOF
4496if compile_prog "" "" ; then
4497 timerfd=yes
4498fi
4499
Riku Voipio9af5c902014-08-12 15:58:57 +03004500# check for setns and unshare support
4501setns=no
4502cat > $TMPC << EOF
4503#include <sched.h>
4504
4505int main(void)
4506{
4507 int ret;
4508 ret = setns(0, 0);
4509 ret = unshare(0);
4510 return ret;
4511}
4512EOF
4513if compile_prog "" "" ; then
4514 setns=yes
4515fi
4516
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004517# clock_adjtime probe
4518clock_adjtime=no
4519cat > $TMPC <<EOF
4520#include <time.h>
4521
4522int main(void)
4523{
4524 return clock_adjtime(0, 0);
4525}
4526EOF
4527clock_adjtime=no
4528if compile_prog "" "" ; then
4529 clock_adjtime=yes
4530fi
4531
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004532# syncfs probe
4533syncfs=no
4534cat > $TMPC <<EOF
4535#include <unistd.h>
4536
4537int main(void)
4538{
4539 return syncfs(0);
4540}
4541EOF
4542syncfs=no
4543if compile_prog "" "" ; then
4544 syncfs=yes
4545fi
4546
pbrookcc8ae6d2006-04-23 17:57:59 +00004547# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004548if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004549 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004550 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004551 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004552 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004553 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004554 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004555 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004556 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004557fi
4558
Stefan Weilf514f412009-10-11 12:44:07 +02004559# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004560byteswap_h=no
4561cat > $TMPC << EOF
4562#include <byteswap.h>
4563int main(void) { return bswap_32(0); }
4564EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004565if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004566 byteswap_h=yes
4567fi
4568
Stefan Weil75f13592013-01-05 12:17:38 +01004569# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004570bswap_h=no
4571cat > $TMPC << EOF
4572#include <sys/endian.h>
4573#include <sys/types.h>
4574#include <machine/bswap.h>
4575int main(void) { return bswap32(0); }
4576EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004577if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004578 bswap_h=yes
4579fi
4580
aliguorida93a1f2008-12-12 20:02:52 +00004581##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004582# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004583if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004584 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004585 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004586 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4587 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004588 else
4589 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004590 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004591 fi
4592 libiscsi="no"
4593 fi
4594fi
4595
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004596##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004597# Do we need libm
4598cat > $TMPC << EOF
4599#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004600int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004601EOF
4602if compile_prog "" "" ; then
4603 :
4604elif compile_prog "" "-lm" ; then
4605 LIBS="-lm $LIBS"
4606 libs_qga="-lm $libs_qga"
4607else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004608 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004609fi
4610
4611##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004612# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004613# uClibc provides 2 versions of clock_gettime(), one with realtime
4614# support and one without. This means that the clock_gettime() don't
4615# need -lrt. We still need it for timer_create() so we check for this
4616# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004617cat > $TMPC <<EOF
4618#include <signal.h>
4619#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004620int main(void) {
4621 timer_create(CLOCK_REALTIME, NULL, NULL);
4622 return clock_gettime(CLOCK_REALTIME, NULL);
4623}
aliguorida93a1f2008-12-12 20:02:52 +00004624EOF
4625
Juan Quintela52166aa2009-08-03 14:46:03 +02004626if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004627 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004628# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004629elif compile_prog "" "$pthread_lib -lrt" ; then
4630 LIBS="$LIBS -lrt"
4631 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004632fi
4633
Thomas Huthd99e97e2019-01-17 18:14:08 +01004634# Check whether we need to link libutil for openpty()
4635cat > $TMPC << EOF
4636extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4637int main(void) { return openpty(0, 0, 0, 0, 0); }
4638EOF
4639
4640if ! compile_prog "" "" ; then
4641 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004642 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004643 libs_tools="-lutil $libs_tools"
4644 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004645fi
4646
Blue Swirlde5071c2009-09-12 09:58:46 +00004647##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004648# spice probe
4649if test "$spice" != "no" ; then
4650 cat > $TMPC << EOF
4651#include <spice.h>
4652int main(void) { spice_server_new(); return 0; }
4653EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004654 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4655 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004656 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004657 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004658 compile_prog "$spice_cflags" "$spice_libs" ; then
4659 spice="yes"
4660 libs_softmmu="$libs_softmmu $spice_libs"
4661 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004662 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4663 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004664 else
4665 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004666 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004667 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004668 fi
4669 spice="no"
4670 fi
4671fi
4672
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004673# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004674if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004675 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004676 libcacard_cflags=$($pkg_config --cflags libcacard)
4677 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004678 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004679 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004680 if test "$smartcard" = "yes"; then
4681 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004682 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004683 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004684 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004685fi
4686
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004687# check for libusb
4688if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004689 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004690 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004691 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4692 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004693 else
4694 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004695 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004696 fi
4697 libusb="no"
4698 fi
4699fi
4700
Hans de Goede69354a82011-07-19 11:04:10 +02004701# check for usbredirparser for usb network redirection support
4702if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004703 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004704 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004705 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4706 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004707 else
4708 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004709 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004710 fi
4711 usb_redir="no"
4712 fi
4713fi
4714
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004715##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004716# check if we have VSS SDK headers for win
4717
Eric Blakee633a5c2019-02-04 20:39:37 -06004718if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4719 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004720 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004721 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004722 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4723 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004724 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004725 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4726 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004727 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004728 esac
4729 cat > $TMPC << EOF
4730#define __MIDL_user_allocate_free_DEFINED__
4731#include <inc/win2003/vss.h>
4732int main(void) { return VSS_CTX_BACKUP; }
4733EOF
4734 if compile_prog "$vss_win32_include" "" ; then
4735 guest_agent_with_vss="yes"
4736 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004737 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004738 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004739 else
4740 if test "$vss_win32_sdk" != "" ; then
4741 echo "ERROR: Please download and install Microsoft VSS SDK:"
4742 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4743 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4744 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4745 echo "ERROR: The headers are extracted in the directory \`inc'."
4746 feature_not_found "VSS support"
4747 fi
4748 guest_agent_with_vss="no"
4749 fi
4750fi
4751
4752##########################################
4753# lookup Windows platform SDK (if not specified)
4754# The SDK is needed only to build .tlb (type library) file of guest agent
4755# VSS provider from the source. It is usually unnecessary because the
4756# pre-compiled .tlb file is included.
4757
Eric Blakee633a5c2019-02-04 20:39:37 -06004758if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4759 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004760 if test -z "$win_sdk"; then
4761 programfiles="$PROGRAMFILES"
4762 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4763 if test -n "$programfiles"; then
4764 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4765 else
4766 feature_not_found "Windows SDK"
4767 fi
4768 elif test "$win_sdk" = "no"; then
4769 win_sdk=""
4770 fi
4771fi
4772
4773##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004774# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06004775if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05004776 cat > $TMPC << EOF
4777#include <windows.h>
4778#include <ntddscsi.h>
4779int main(void) {
4780#if !defined(IOCTL_SCSI_GET_ADDRESS)
4781#error Missing required ioctl definitions
4782#endif
4783 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4784 return addr.Lun;
4785}
4786EOF
4787 if compile_prog "" "" ; then
4788 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004789 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004790 fi
4791fi
4792
4793##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004794# virgl renderer probe
4795
4796if test "$virglrenderer" != "no" ; then
4797 cat > $TMPC << EOF
4798#include <virglrenderer.h>
4799int main(void) { virgl_renderer_poll(); return 0; }
4800EOF
4801 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4802 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004803 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004804 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4805 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4806 virglrenderer="yes"
4807 else
4808 if test "$virglrenderer" = "yes" ; then
4809 feature_not_found "virglrenderer"
4810 fi
4811 virglrenderer="no"
4812 fi
4813fi
4814
4815##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004816# capstone
4817
Richard Hendersone219c492017-09-28 09:01:23 -07004818case "$capstone" in
4819 "" | yes)
4820 if $pkg_config capstone; then
4821 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06004822 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004823 capstone=git
4824 elif test -e "${source_path}/capstone/Makefile" ; then
4825 capstone=internal
4826 elif test -z "$capstone" ; then
4827 capstone=no
4828 else
4829 feature_not_found "capstone" "Install capstone devel or git submodule"
4830 fi
4831 ;;
4832
4833 system)
4834 if ! $pkg_config capstone; then
4835 feature_not_found "capstone" "Install capstone devel"
4836 fi
4837 ;;
4838esac
4839
4840case "$capstone" in
4841 git | internal)
4842 if test "$capstone" = git; then
4843 git_submodules="${git_submodules} capstone"
4844 fi
4845 mkdir -p capstone
4846 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4847 if test "$mingw32" = "yes"; then
4848 LIBCAPSTONE=capstone.lib
4849 else
4850 LIBCAPSTONE=libcapstone.a
4851 fi
4852 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4853 ;;
4854
4855 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004856 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4857 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004858 ;;
4859
4860 no)
4861 ;;
4862 *)
4863 error_exit "Unknown state for capstone: $capstone"
4864 ;;
4865esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004866
4867##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004868# check if we have fdatasync
4869
4870fdatasync=no
4871cat > $TMPC << EOF
4872#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004873int main(void) {
4874#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4875return fdatasync(0);
4876#else
Stefan Weile172fe12012-04-06 21:33:20 +02004877#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004878#endif
4879}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004880EOF
4881if compile_prog "" "" ; then
4882 fdatasync=yes
4883fi
4884
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004885##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004886# check if we have madvise
4887
4888madvise=no
4889cat > $TMPC << EOF
4890#include <sys/types.h>
4891#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004892#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004893int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4894EOF
4895if compile_prog "" "" ; then
4896 madvise=yes
4897fi
4898
4899##########################################
4900# check if we have posix_madvise
4901
4902posix_madvise=no
4903cat > $TMPC << EOF
4904#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004905#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004906int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4907EOF
4908if compile_prog "" "" ; then
4909 posix_madvise=yes
4910fi
4911
4912##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004913# check if we have posix_memalign()
4914
4915posix_memalign=no
4916cat > $TMPC << EOF
4917#include <stdlib.h>
4918int main(void) {
4919 void *p;
4920 return posix_memalign(&p, 8, 8);
4921}
4922EOF
4923if compile_prog "" "" ; then
4924 posix_memalign=yes
4925fi
4926
4927##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004928# check if we have posix_syslog
4929
4930posix_syslog=no
4931cat > $TMPC << EOF
4932#include <syslog.h>
4933int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4934EOF
4935if compile_prog "" "" ; then
4936 posix_syslog=yes
4937fi
4938
4939##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004940# check if we have sem_timedwait
4941
4942sem_timedwait=no
4943cat > $TMPC << EOF
4944#include <semaphore.h>
4945int main(void) { return sem_timedwait(0, 0); }
4946EOF
4947if compile_prog "" "" ; then
4948 sem_timedwait=yes
4949fi
4950
4951##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004952# check if we have strchrnul
4953
4954strchrnul=no
4955cat > $TMPC << EOF
4956#include <string.h>
4957int main(void);
4958// Use a haystack that the compiler shouldn't be able to constant fold
4959char *haystack = (char*)&main;
4960int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4961EOF
4962if compile_prog "" "" ; then
4963 strchrnul=yes
4964fi
4965
4966##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004967# check if trace backend exists
4968
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004969$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004970if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004971 error_exit "invalid trace backends" \
4972 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004973fi
4974
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004975##########################################
4976# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02004977if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004978 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004979#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004980int main(void) { return 0; }
4981EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004982 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004983 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004984 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004985 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004986 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004987 fi
4988 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004989 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004990 else
4991 urcu_bp_libs="-lurcu-bp"
4992 fi
4993
4994 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4995 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004996 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004997 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004998 fi
4999fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005000
5001##########################################
5002# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005003if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005004 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005005 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005006 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005007 trace_backend_stap="no"
5008 if has 'stap' ; then
5009 trace_backend_stap="yes"
5010 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005011fi
5012
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005013##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005014# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305015
Peter Maydell7c2acc72013-04-08 12:11:27 +01005016# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005017# is sigcontext. On Windows the only valid backend is the Windows
5018# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005019
5020ucontext_works=no
5021if test "$darwin" != "yes"; then
5022 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305023#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005024#ifdef __stub_makecontext
5025#error Ignoring glibc stub makecontext which will always fail
5026#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005027int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305028EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005029 if compile_prog "" "" ; then
5030 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305031 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005032fi
5033
5034if test "$coroutine" = ""; then
5035 if test "$mingw32" = "yes"; then
5036 coroutine=win32
5037 elif test "$ucontext_works" = "yes"; then
5038 coroutine=ucontext
5039 else
5040 coroutine=sigaltstack
5041 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005042else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005043 case $coroutine in
5044 windows)
5045 if test "$mingw32" != "yes"; then
5046 error_exit "'windows' coroutine backend only valid for Windows"
5047 fi
5048 # Unfortunately the user visible backend name doesn't match the
5049 # coroutine-*.c filename for this case, so we have to adjust it here.
5050 coroutine=win32
5051 ;;
5052 ucontext)
5053 if test "$ucontext_works" != "yes"; then
5054 feature_not_found "ucontext"
5055 fi
5056 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005057 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005058 if test "$mingw32" = "yes"; then
5059 error_exit "only the 'windows' coroutine backend is valid for Windows"
5060 fi
5061 ;;
5062 *)
5063 error_exit "unknown coroutine backend $coroutine"
5064 ;;
5065 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305066fi
5067
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005068if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005069 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005070fi
5071
Peter Lieven7d992e42016-09-27 11:58:45 +02005072if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005073 if test "$coroutine_pool" = "yes"; then
5074 echo "WARN: disabling coroutine pool for stack usage debugging"
5075 coroutine_pool=no
5076 fi
5077fi
5078
5079
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305080##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305081# check if we have open_by_handle_at
5082
Stefan Weil4e1797f2012-06-18 22:11:06 +02005083open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305084cat > $TMPC << EOF
5085#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005086#if !defined(AT_EMPTY_PATH)
5087# error missing definition
5088#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005089int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005090#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305091EOF
5092if compile_prog "" "" ; then
5093 open_by_handle_at=yes
5094fi
5095
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305096########################################
5097# check if we have linux/magic.h
5098
5099linux_magic_h=no
5100cat > $TMPC << EOF
5101#include <linux/magic.h>
5102int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005103 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305104}
5105EOF
5106if compile_prog "" "" ; then
5107 linux_magic_h=yes
5108fi
5109
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005110########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005111# check whether we can disable warning option with a pragma (this is needed
5112# to silence warnings in the headers of some versions of external libraries).
5113# This test has to be compiled with -Werror as otherwise an unknown pragma is
5114# only a warning.
5115#
5116# If we can't selectively disable warning in the code, disable -Werror so that
5117# the build doesn't fail anyway.
5118
Peter Maydell06d71fa2012-07-30 16:13:07 +01005119pragma_disable_unused_but_set=no
5120cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005121#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005122#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005123#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005124
Peter Maydell06d71fa2012-07-30 16:13:07 +01005125int main(void) {
5126 return 0;
5127}
5128EOF
5129if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005130 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005131else
5132 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005133fi
5134
5135########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005136# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005137
5138valgrind_h=no
5139cat > $TMPC << EOF
5140#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005141int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005142 return 0;
5143}
5144EOF
5145if compile_prog "" "" ; then
5146 valgrind_h=yes
5147fi
5148
5149########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005150# check if environ is declared
5151
5152has_environ=no
5153cat > $TMPC << EOF
5154#include <unistd.h>
5155int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005156 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005157 return 0;
5158}
5159EOF
5160if compile_prog "" "" ; then
5161 has_environ=yes
5162fi
5163
Richard Henderson76a347e2012-12-28 14:17:02 -08005164########################################
5165# check if cpuid.h is usable.
5166
Richard Henderson76a347e2012-12-28 14:17:02 -08005167cat > $TMPC << EOF
5168#include <cpuid.h>
5169int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005170 unsigned a, b, c, d;
5171 int max = __get_cpuid_max(0, 0);
5172
5173 if (max >= 1) {
5174 __cpuid(1, a, b, c, d);
5175 }
5176
5177 if (max >= 7) {
5178 __cpuid_count(7, 0, a, b, c, d);
5179 }
5180
5181 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005182}
5183EOF
5184if compile_prog "" "" ; then
5185 cpuid_h=yes
5186fi
5187
Richard Henderson5dd89902017-07-18 18:40:18 -10005188##########################################
5189# avx2 optimization requirement check
5190#
5191# There is no point enabling this if cpuid.h is not usable,
5192# since we won't be able to select the new routines.
5193
Eric Blakee633a5c2019-02-04 20:39:37 -06005194if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005195 cat > $TMPC << EOF
5196#pragma GCC push_options
5197#pragma GCC target("avx2")
5198#include <cpuid.h>
5199#include <immintrin.h>
5200static int bar(void *a) {
5201 __m256i x = *(__m256i *)a;
5202 return _mm256_testz_si256(x, x);
5203}
5204int main(int argc, char *argv[]) { return bar(argv[0]); }
5205EOF
5206 if compile_object "" ; then
5207 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005208 else
5209 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005210 fi
5211fi
5212
Richard Hendersonf5401662013-02-16 12:46:59 -08005213########################################
5214# check if __[u]int128_t is usable.
5215
5216int128=no
5217cat > $TMPC << EOF
5218__int128_t a;
5219__uint128_t b;
5220int main (void) {
5221 a = a + b;
5222 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005223 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005224 return 0;
5225}
5226EOF
5227if compile_prog "" "" ; then
5228 int128=yes
5229fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005230
Richard Henderson7ebee432016-06-29 21:10:59 -07005231#########################################
5232# See if 128-bit atomic operations are supported.
5233
5234atomic128=no
5235if test "$int128" = "yes"; then
5236 cat > $TMPC << EOF
5237int main(void)
5238{
5239 unsigned __int128 x = 0, y = 0;
5240 y = __atomic_load_16(&x, 0);
5241 __atomic_store_16(&x, y, 0);
5242 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5243 return 0;
5244}
5245EOF
5246 if compile_prog "" "" ; then
5247 atomic128=yes
5248 fi
5249fi
5250
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005251cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005252if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005253 cat > $TMPC << EOF
5254int main(void)
5255{
5256 unsigned __int128 x = 0, y = 0;
5257 __sync_val_compare_and_swap_16(&x, y, x);
5258 return 0;
5259}
5260EOF
5261 if compile_prog "" "" ; then
5262 cmpxchg128=yes
5263 fi
5264fi
5265
Richard Hendersondf79b992016-09-02 12:23:57 -07005266#########################################
5267# See if 64-bit atomic operations are supported.
5268# Note that without __atomic builtins, we can only
5269# assume atomic loads/stores max at pointer size.
5270
5271cat > $TMPC << EOF
5272#include <stdint.h>
5273int main(void)
5274{
5275 uint64_t x = 0, y = 0;
5276#ifdef __ATOMIC_RELAXED
5277 y = __atomic_load_8(&x, 0);
5278 __atomic_store_8(&x, y, 0);
5279 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5280 __atomic_exchange_8(&x, y, 0);
5281 __atomic_fetch_add_8(&x, y, 0);
5282#else
5283 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5284 __sync_lock_test_and_set(&x, y);
5285 __sync_val_compare_and_swap(&x, y, 0);
5286 __sync_fetch_and_add(&x, y);
5287#endif
5288 return 0;
5289}
5290EOF
5291if compile_prog "" "" ; then
5292 atomic64=yes
5293fi
5294
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005295########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005296# See if 16-byte vector operations are supported.
5297# Even without a vector unit the compiler may expand these.
5298# There is a bug in old GCC for PPC that crashes here.
5299# Unfortunately it's the system compiler for Centos 7.
5300
5301cat > $TMPC << EOF
5302typedef unsigned char U1 __attribute__((vector_size(16)));
5303typedef unsigned short U2 __attribute__((vector_size(16)));
5304typedef unsigned int U4 __attribute__((vector_size(16)));
5305typedef unsigned long long U8 __attribute__((vector_size(16)));
5306typedef signed char S1 __attribute__((vector_size(16)));
5307typedef signed short S2 __attribute__((vector_size(16)));
5308typedef signed int S4 __attribute__((vector_size(16)));
5309typedef signed long long S8 __attribute__((vector_size(16)));
5310static U1 a1, b1;
5311static U2 a2, b2;
5312static U4 a4, b4;
5313static U8 a8, b8;
5314static S1 c1;
5315static S2 c2;
5316static S4 c4;
5317static S8 c8;
5318static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005319void helper(void *d, void *a, int shift, int i);
5320void helper(void *d, void *a, int shift, int i)
5321{
5322 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5323 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5324 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5325 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5326}
Richard Hendersondb432672017-09-15 14:11:45 -07005327int main(void)
5328{
5329 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5330 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5331 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5332 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5333 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5334 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5335 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5336 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5337 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5338 return 0;
5339}
5340EOF
5341
5342vector16=no
5343if compile_prog "" "" ; then
5344 vector16=yes
5345fi
5346
5347########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005348# check if getauxval is available.
5349
5350getauxval=no
5351cat > $TMPC << EOF
5352#include <sys/auxv.h>
5353int main(void) {
5354 return getauxval(AT_HWCAP) == 0;
5355}
5356EOF
5357if compile_prog "" "" ; then
5358 getauxval=yes
5359fi
5360
John Snowfd0e6052015-03-25 18:57:39 -04005361########################################
5362# check if ccache is interfering with
5363# semantic analysis of macros
5364
John Snow5e4dfd32015-10-28 13:56:40 -04005365unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005366ccache_cpp2=no
5367cat > $TMPC << EOF
5368static const int Z = 1;
5369#define fn() ({ Z; })
5370#define TAUT(X) ((X) == Z)
5371#define PAREN(X, Y) (X == Y)
5372#define ID(X) (X)
5373int main(int argc, char *argv[])
5374{
5375 int x = 0, y = 0;
5376 x = ID(x);
5377 x = fn();
5378 fn();
5379 if (PAREN(x, y)) return 0;
5380 if (TAUT(Z)) return 0;
5381 return 0;
5382}
5383EOF
5384
5385if ! compile_object "-Werror"; then
5386 ccache_cpp2=yes
5387fi
5388
John Snowb553a042015-11-03 15:43:42 -05005389#################################################
5390# clang does not support glibc + FORTIFY_SOURCE.
5391
5392if test "$fortify_source" != "no"; then
5393 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5394 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005395 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005396 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005397 fortify_source="no";
5398 else
5399 fortify_source="yes"
5400 fi
5401fi
5402
Fam Zheng1efad062018-06-01 17:26:43 +08005403###############################################
5404# Check if copy_file_range is provided by glibc
5405have_copy_file_range=no
5406cat > $TMPC << EOF
5407#include <unistd.h>
5408int main(void) {
5409 copy_file_range(0, NULL, 0, NULL, 0, 0);
5410 return 0;
5411}
5412EOF
5413if compile_prog "" "" ; then
5414 have_copy_file_range=yes
5415fi
5416
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305417##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005418# check if struct fsxattr is available via linux/fs.h
5419
5420have_fsxattr=no
5421cat > $TMPC << EOF
5422#include <linux/fs.h>
5423struct fsxattr foo;
5424int main(void) {
5425 return 0;
5426}
5427EOF
5428if compile_prog "" "" ; then
5429 have_fsxattr=yes
5430fi
5431
Peter Maydellb66e10e2016-06-08 18:34:32 +01005432##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005433# check for usable membarrier system call
5434if test "$membarrier" = "yes"; then
5435 have_membarrier=no
5436 if test "$mingw32" = "yes" ; then
5437 have_membarrier=yes
5438 elif test "$linux" = "yes" ; then
5439 cat > $TMPC << EOF
5440 #include <linux/membarrier.h>
5441 #include <sys/syscall.h>
5442 #include <unistd.h>
5443 #include <stdlib.h>
5444 int main(void) {
5445 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5446 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5447 exit(0);
5448 }
5449EOF
5450 if compile_prog "" "" ; then
5451 have_membarrier=yes
5452 fi
5453 fi
5454 if test "$have_membarrier" = "no"; then
5455 feature_not_found "membarrier" "membarrier system call not available"
5456 fi
5457else
5458 # Do not enable it by default even for Mingw32, because it doesn't
5459 # work on Wine.
5460 membarrier=no
5461fi
5462
5463##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005464# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005465have_rtnetlink=no
5466cat > $TMPC << EOF
5467#include <linux/rtnetlink.h>
5468int main(void) {
5469 return IFLA_PROTO_DOWN;
5470}
5471EOF
5472if compile_prog "" "" ; then
5473 have_rtnetlink=yes
5474fi
5475
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005476##########################################
5477# check for usable AF_VSOCK environment
5478have_af_vsock=no
5479cat > $TMPC << EOF
5480#include <errno.h>
5481#include <sys/types.h>
5482#include <sys/socket.h>
5483#if !defined(AF_VSOCK)
5484# error missing AF_VSOCK flag
5485#endif
5486#include <linux/vm_sockets.h>
5487int main(void) {
5488 int sock, ret;
5489 struct sockaddr_vm svm;
5490 socklen_t len = sizeof(svm);
5491 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5492 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5493 if ((ret == -1) && (errno == ENOTCONN)) {
5494 return 0;
5495 }
5496 return -1;
5497}
5498EOF
5499if compile_prog "" "" ; then
5500 have_af_vsock=yes
5501fi
5502
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005503##########################################
5504# check for usable AF_ALG environment
5505hava_afalg=no
5506cat > $TMPC << EOF
5507#include <errno.h>
5508#include <sys/types.h>
5509#include <sys/socket.h>
5510#include <linux/if_alg.h>
5511int main(void) {
5512 int sock;
5513 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5514 return sock;
5515}
5516EOF
5517if compile_prog "" "" ; then
5518 have_afalg=yes
5519fi
5520if test "$crypto_afalg" = "yes"
5521then
5522 if test "$have_afalg" != "yes"
5523 then
5524 error_exit "AF_ALG requested but could not be detected"
5525 fi
5526fi
5527
5528
James Clarke6969ec62016-06-06 12:02:50 +01005529#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005530# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005531if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005532 cat > $TMPC << EOF
5533#include <Hypervisor/hv.h>
5534int main() { return 0;}
5535EOF
5536 if ! compile_object ""; then
5537 hvf='no'
5538 else
5539 hvf='yes'
5540 LDFLAGS="-framework Hypervisor $LDFLAGS"
5541 fi
5542fi
5543
5544#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005545# Sparc implicitly links with --relax, which is
5546# incompatible with -r, so --no-relax should be
5547# given. It does no harm to give it on other
5548# platforms too.
5549
5550# Note: the prototype is needed since QEMU_CFLAGS
5551# contains -Wmissing-prototypes
5552cat > $TMPC << EOF
5553extern int foo(void);
5554int foo(void) { return 0; }
5555EOF
5556if ! compile_object ""; then
5557 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5558fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005559for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5560 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5561 LD_REL_FLAGS=$i
5562 break
5563 fi
5564done
5565if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5566 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005567fi
5568
Jan Vesely277abf12016-04-29 13:15:23 -04005569##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005570# check for sysmacros.h
5571
5572have_sysmacros=no
5573cat > $TMPC << EOF
5574#include <sys/sysmacros.h>
5575int main(void) {
5576 return makedev(0, 0);
5577}
5578EOF
5579if compile_prog "" "" ; then
5580 have_sysmacros=yes
5581fi
5582
5583##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005584# Veritas HyperScale block driver VxHS
5585# Check if libvxhs is installed
5586
5587if test "$vxhs" != "no" ; then
5588 cat > $TMPC <<EOF
5589#include <stdint.h>
5590#include <qnio/qnio_api.h>
5591
5592void *vxhs_callback;
5593
5594int main(void) {
5595 iio_init(QNIO_VERSION, vxhs_callback);
5596 return 0;
5597}
5598EOF
5599 vxhs_libs="-lvxhs -lssl"
5600 if compile_prog "" "$vxhs_libs" ; then
5601 vxhs=yes
5602 else
5603 if test "$vxhs" = "yes" ; then
5604 feature_not_found "vxhs block device" "Install libvxhs See github"
5605 fi
5606 vxhs=no
5607 fi
5608fi
5609
5610##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005611# check for _Static_assert()
5612
5613have_static_assert=no
5614cat > $TMPC << EOF
5615_Static_assert(1, "success");
5616int main(void) {
5617 return 0;
5618}
5619EOF
5620if compile_prog "" "" ; then
5621 have_static_assert=yes
5622fi
5623
5624##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005625# check for utmpx.h, it is missing e.g. on OpenBSD
5626
5627have_utmpx=no
5628cat > $TMPC << EOF
5629#include <utmpx.h>
5630struct utmpx user_info;
5631int main(void) {
5632 return 0;
5633}
5634EOF
5635if compile_prog "" "" ; then
5636 have_utmpx=yes
5637fi
5638
5639##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005640# checks for sanitizers
5641
Marc-André Lureau247724c2018-01-16 16:11:51 +01005642have_asan=no
5643have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005644have_asan_iface_h=no
5645have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005646
5647if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005648 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005649 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5650 have_asan=yes
5651 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005652
5653 # we could use a simple skeleton for flags checks, but this also
5654 # detect the static linking issue of ubsan, see also:
5655 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5656 cat > $TMPC << EOF
5657#include <stdlib.h>
5658int main(void) {
5659 void *tmp = malloc(10);
5660 return *(int *)(tmp + 2);
5661}
5662EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005663 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5664 have_ubsan=yes
5665 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005666
5667 if check_include "sanitizer/asan_interface.h" ; then
5668 have_asan_iface_h=yes
5669 fi
5670
5671 cat > $TMPC << EOF
5672#include <sanitizer/asan_interface.h>
5673int main(void) {
5674 __sanitizer_start_switch_fiber(0, 0, 0);
5675 return 0;
5676}
5677EOF
5678 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5679 have_asan_iface_fiber=yes
5680 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005681fi
5682
5683##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005684# Docker and cross-compiler support
5685#
5686# This is specifically for building test
5687# cases for foreign architectures, not
5688# cross-compiling QEMU itself.
5689
5690if has "docker"; then
5691 docker=$($python $source_path/tests/docker/docker.py probe)
5692fi
5693
5694##########################################
Junyan He17824402018-07-18 15:47:59 +08005695# check for libpmem
5696
5697if test "$libpmem" != "no"; then
5698 if $pkg_config --exists "libpmem"; then
5699 libpmem="yes"
5700 libpmem_libs=$($pkg_config --libs libpmem)
5701 libpmem_cflags=$($pkg_config --cflags libpmem)
5702 libs_softmmu="$libs_softmmu $libpmem_libs"
5703 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5704 else
5705 if test "$libpmem" = "yes" ; then
5706 feature_not_found "libpmem" "Install nvml or pmdk"
5707 fi
5708 libpmem="no"
5709 fi
5710fi
5711
5712##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005713# End of CC checks
5714# After here, no more $cc or $ld runs
5715
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005716write_c_skeleton
5717
Blue Swirl1d728c32012-05-01 18:45:39 +00005718if test "$gcov" = "yes" ; then
5719 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5720 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005721elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005722 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005723elif test "$debug" = "no"; then
5724 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005725fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005726
Marc-André Lureau247724c2018-01-16 16:11:51 +01005727if test "$have_asan" = "yes"; then
5728 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005729 if test "$have_asan_iface_h" = "no" ; then
5730 echo "ASAN build enabled, but ASAN header missing." \
5731 "Without code annotation, the report may be inferior."
5732 elif test "$have_asan_iface_fiber" = "no" ; then
5733 echo "ASAN build enabled, but ASAN header is too old." \
5734 "Without code annotation, the report may be inferior."
5735 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005736fi
5737if test "$have_ubsan" = "yes"; then
5738 CFLAGS="-fsanitize=undefined $CFLAGS"
5739fi
5740
Peter Lieven6542aa92014-02-03 10:26:13 +01005741##########################################
5742# Do we have libnfs
5743if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005744 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005745 libnfs="yes"
5746 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005747 else
5748 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005749 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005750 fi
5751 libnfs="no"
5752 fi
5753fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005754
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005755##########################################
5756# Do we have libudev
5757if test "$libudev" != "no" ; then
5758 if $pkg_config libudev && test "$static" != "yes"; then
5759 libudev="yes"
5760 libudev_libs=$($pkg_config --libs libudev)
5761 else
5762 libudev="no"
5763 fi
5764fi
5765
Peter Maydell6ca026c2012-07-18 15:10:18 +01005766# Now we've finished running tests it's OK to add -Werror to the compiler flags
5767if test "$werror" = "yes"; then
5768 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5769fi
5770
Juan Quintelae86ecd42009-08-03 14:45:59 +02005771if test "$solaris" = "no" ; then
5772 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005773 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005774 fi
5775fi
5776
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005777# test if pod2man has --utf8 option
5778if pod2man --help | grep -q utf8; then
5779 POD2MAN="pod2man --utf8"
5780else
5781 POD2MAN="pod2man"
5782fi
5783
Blue Swirl952afb72010-09-19 08:36:34 +00005784# Use ASLR, no-SEH and DEP if available
5785if test "$mingw32" = "yes" ; then
5786 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005787 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005788 LDFLAGS="-Wl,$flag $LDFLAGS"
5789 fi
5790 done
5791fi
5792
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005793qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005794qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005795qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005796qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00005797qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00005798qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005799
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005800# We can only support ivshmem if we have eventfd
5801if [ "$eventfd" = "yes" ]; then
5802 ivshmem=yes
5803fi
5804
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005805tools=""
5806if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02005807 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005808 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5809 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005810 fi
5811 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005812 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005813 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03005814 if [ "$curl" = "yes" ]; then
5815 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03005816 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005817fi
5818if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005819 if test "$linux" = yes; then
5820 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005821 virtfs=yes
5822 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5823 else
5824 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005825 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305826 fi
Andreas Färber17500372012-05-01 01:12:03 +02005827 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005828 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005829 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5830 mpath=yes
5831 else
5832 if test "$mpath" = yes; then
5833 error_exit "Multipath requires libmpathpersist devel"
5834 fi
5835 mpath=no
5836 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005837 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5838 else
5839 if test "$virtfs" = yes; then
5840 error_exit "VirtFS is supported only on Linux"
5841 fi
5842 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005843 if test "$mpath" = yes; then
5844 error_exit "Multipath is supported only on Linux"
5845 fi
5846 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305847 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005848 if test "$xkbcommon" = "yes"; then
5849 tools="qemu-keymap\$(EXESUF) $tools"
5850 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005851fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005852
5853# Probe for guest agent support/options
5854
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005855if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005856 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005857 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005858 guest_agent=yes
5859 elif [ "$guest_agent" != yes ]; then
5860 guest_agent=no
5861 else
5862 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005863 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005864fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005865
Michael Roth9d6bc272015-08-26 10:49:13 -05005866# Guest agent Window MSI package
5867
5868if test "$guest_agent" != yes; then
5869 if test "$guest_agent_msi" = yes; then
5870 error_exit "MSI guest agent package requires guest agent enabled"
5871 fi
5872 guest_agent_msi=no
5873elif test "$mingw32" != "yes"; then
5874 if test "$guest_agent_msi" = "yes"; then
5875 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5876 fi
5877 guest_agent_msi=no
5878elif ! has wixl; then
5879 if test "$guest_agent_msi" = "yes"; then
5880 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5881 fi
5882 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005883else
5884 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5885 # disabled explicitly
5886 if test "$guest_agent_msi" != "no"; then
5887 guest_agent_msi=yes
5888 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005889fi
5890
Michael Roth1a349042015-08-26 11:14:31 -05005891if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005892 if test "$guest_agent_with_vss" = "yes"; then
5893 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5894 fi
5895
5896 if test "$QEMU_GA_MANUFACTURER" = ""; then
5897 QEMU_GA_MANUFACTURER=QEMU
5898 fi
5899
5900 if test "$QEMU_GA_DISTRO" = ""; then
5901 QEMU_GA_DISTRO=Linux
5902 fi
5903
5904 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005905 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005906 fi
5907
Stefan Weil89138852016-05-16 15:10:20 +02005908 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005909
5910 case "$cpu" in
5911 x86_64)
5912 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5913 ;;
5914 i386)
5915 QEMU_GA_MSI_ARCH="-D Arch=32"
5916 ;;
5917 *)
5918 error_exit "CPU $cpu not supported for building installation package"
5919 ;;
5920 esac
5921fi
5922
Paolo Bonzinica35f782010-05-26 16:08:29 +02005923# Mac OS X ships with a broken assembler
5924roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06005925if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5926 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5927 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005928 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005929 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5930 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5931 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005932 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5933 ld_i386_emulation="$emu"
5934 roms="optionrom"
5935 break
5936 fi
5937 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005938fi
Eric Blakee633a5c2019-02-04 20:39:37 -06005939if test "$cpu" = "ppc64" && test "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005940 roms="$roms spapr-rtas"
5941fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005942
Thomas Huth2e33c3f2019-01-14 13:52:26 +01005943# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00005944if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01005945 write_c_skeleton
5946 if compile_prog "-march=z900" ""; then
5947 roms="$roms s390-ccw"
5948 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00005949fi
5950
Richard Henderson964c6fa2013-06-21 19:10:16 -07005951# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005952if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005953 textseg_addr=
5954 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005955 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5956 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005957 textseg_addr=0x60000000
5958 ;;
5959 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005960 # A 256M aligned address, high in the address space, with enough
5961 # room for the code_gen_buffer above it before the stack.
5962 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005963 ;;
5964 esac
5965 if [ -n "$textseg_addr" ]; then
5966 cat > $TMPC <<EOF
5967 int main(void) { return 0; }
5968EOF
5969 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5970 if ! compile_prog "" "$textseg_ldflags"; then
5971 # In case ld does not support -Ttext-segment, edit the default linker
5972 # script via sed to set the .text start addr. This is needed on FreeBSD
5973 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005974 if ! $ld --verbose >/dev/null 2>&1; then
5975 error_exit \
5976 "We need to link the QEMU user mode binaries at a" \
5977 "specific text address. Unfortunately your linker" \
5978 "doesn't support either the -Ttext-segment option or" \
5979 "printing the default linker script with --verbose." \
5980 "If you don't want the user mode binaries, pass the" \
5981 "--disable-user option to configure."
5982 fi
5983
Richard Henderson964c6fa2013-06-21 19:10:16 -07005984 $ld --verbose | sed \
5985 -e '1,/==================================================/d' \
5986 -e '/==================================================/,$d' \
5987 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5988 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5989 textseg_ldflags="-Wl,-T../config-host.ld"
5990 fi
5991 fi
5992fi
5993
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005994# Check that the C++ compiler exists and works with the C compiler.
5995# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5996if has $cxx; then
5997 cat > $TMPC <<EOF
5998int c_function(void);
5999int main(void) { return c_function(); }
6000EOF
6001
6002 compile_object
6003
6004 cat > $TMPCXX <<EOF
6005extern "C" {
6006 int c_function(void);
6007}
6008int c_function(void) { return 42; }
6009EOF
6010
6011 update_cxxflags
6012
6013 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6014 # C++ compiler $cxx works ok with C compiler $cc
6015 :
6016 else
6017 echo "C++ compiler $cxx does not work with C compiler $cc"
6018 echo "Disabling C++ specific optional code"
6019 cxx=
6020 fi
6021else
6022 echo "No C++ compiler available; disabling C++ specific optional code"
6023 cxx=
6024fi
6025
Cole Robinson02d34f62016-05-06 14:03:09 -04006026echo_version() {
6027 if test "$1" = "yes" ; then
6028 echo "($2)"
6029 fi
6030}
6031
Jan Kiszka50e12062014-10-02 10:03:55 +02006032# prepend pixman and ftd flags after all config tests are done
6033QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006034QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006035libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006036
bellard43ce4df2003-06-09 19:53:12 +00006037echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006038echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006039echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006040echo "binary directory $(eval echo $bindir)"
6041echo "library directory $(eval echo $libdir)"
6042echo "module directory $(eval echo $qemu_moddir)"
6043echo "libexec directory $(eval echo $libexecdir)"
6044echo "include directory $(eval echo $includedir)"
6045echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006046if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006047echo "local state directory $(eval echo $local_statedir)"
6048echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006049echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006050else
6051echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006052echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006053fi
bellard5a671352003-10-01 00:13:48 +00006054echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006055echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006056echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006057echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006058echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006059echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006060echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006061echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006062echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006063echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006064echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006065echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006066echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006067echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006068echo "python $python ($python_version)"
Brade2d88302011-09-02 16:53:28 -04006069if test "$slirp" = "yes" ; then
6070 echo "smbd $smbd"
6071fi
Fam Zheng17969262014-02-10 14:48:56 +08006072echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006073echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006074echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006075echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006076echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006077echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006078echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006079echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006080echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006081if test "$darwin" = "yes" ; then
6082 echo "Cocoa support $cocoa"
6083fi
Stefan Weil89138852016-05-16 15:10:20 +02006084echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006085echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006086echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006087echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006088echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006089echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006090echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006091echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006092echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006093echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00006094echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006095echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006096echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006097echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006098echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006099echo "Block whitelist (rw) $block_drv_rw_whitelist"
6100echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306101echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006102echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006103echo "VNC support $vnc"
6104if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006105 echo "VNC SASL support $vnc_sasl"
6106 echo "VNC JPEG support $vnc_jpeg"
6107 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006108fi
blueswir131422552007-04-16 18:27:06 +00006109if test -n "$sparc_cpu"; then
6110 echo "Target Sparc Arch $sparc_cpu"
6111fi
aliguorie37630c2009-04-22 15:19:10 +00006112echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006113if test "$xen" = "yes" ; then
6114 echo "xen ctrl version $xen_ctrl_version"
6115fi
aurel322e4d9fb2008-04-08 06:01:02 +00006116echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006117echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006118echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006119echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006120echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006121echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006122echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006123echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006124echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006125echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006126echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006127echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006128echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006129echo "TCG support $tcg"
6130if test "$tcg" = "yes" ; then
6131 echo "TCG debug enabled $debug_tcg"
6132 echo "TCG interpreter $tcg_interpreter"
6133fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006134echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006135echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006136echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006137echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006138echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006139echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006140echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006141echo "madvise $madvise"
6142echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006143echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006144echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006145echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006146echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006147echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006148echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006149echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006150echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006151if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006152echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006153fi
Stefan Weil89138852016-05-16 15:10:20 +02006154echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006155echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006156echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006157echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006158echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006159echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006160echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006161echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006162echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006163echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006164echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006165echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006166echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006167echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006168echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006169echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006170echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006171echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006172echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006173echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306174echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006175echo "gcov $gcov_tool"
6176echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006177echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006178echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006179echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006180echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006181echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006182echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006183echo "lzo support $lzo"
6184echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006185echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006186echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006187echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006188echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006189echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006190echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006191echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006192echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006193echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006194echo "bochs support $bochs"
6195echo "cloop support $cloop"
6196echo "dmg support $dmg"
6197echo "qcow v1 support $qcow1"
6198echo "vdi support $vdi"
6199echo "vvfat support $vvfat"
6200echo "qed support $qed"
6201echo "parallels support $parallels"
6202echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006203echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006204echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006205echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006206echo "libudev $libudev"
bellard67b915a2004-03-31 23:37:16 +00006207
Peter Maydell898be3e2017-03-21 14:31:57 +00006208if test "$supported_cpu" = "no"; then
6209 echo
6210 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6211 echo
6212 echo "CPU host architecture $cpu support is not currently maintained."
6213 echo "The QEMU project intends to remove support for this host CPU in"
6214 echo "a future release if nobody volunteers to maintain it and to"
6215 echo "provide a build host for our continuous integration setup."
6216 echo "configure has succeeded and you can continue to build, but"
6217 echo "if you care about QEMU on this platform you should contact"
6218 echo "us upstream at qemu-devel@nongnu.org."
6219fi
6220
6221if test "$supported_os" = "no"; then
6222 echo
6223 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6224 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006225 echo "Host OS $targetos support is not currently maintained."
6226 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006227 echo "a future release if nobody volunteers to maintain it and to"
6228 echo "provide a build host for our continuous integration setup."
6229 echo "configure has succeeded and you can continue to build, but"
6230 echo "if you care about QEMU on this platform you should contact"
6231 echo "us upstream at qemu-devel@nongnu.org."
6232fi
6233
Juan Quintela98ec69a2009-07-16 18:34:18 +02006234config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006235
Stefan Weildbd99ae2013-01-01 18:33:44 +01006236echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6237
Juan Quintela98ec69a2009-07-16 18:34:18 +02006238echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006239echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006240
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006241echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006242echo "prefix=$prefix" >> $config_host_mak
6243echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006244echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006245echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006246echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006247echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006248echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006249echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006250echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006251echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006252echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006253echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006254if test "$mingw32" = "no" ; then
6255 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6256fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006257echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006258echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006259echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006260echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006261echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006262echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006263echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006264echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006265
Juan Quintela98ec69a2009-07-16 18:34:18 +02006266echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006267
aurel32f8393942009-04-13 18:45:38 +00006268if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006269 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006270fi
aliguori1625af82009-04-05 17:41:02 +00006271if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006272 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006273fi
bellard7d132992003-03-06 23:23:54 +00006274if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006275 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006276fi
bellard67b915a2004-03-31 23:37:16 +00006277if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006278 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006279 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006280 version_major=${rc_version%%.*}
6281 rc_version=${rc_version#*.}
6282 version_minor=${rc_version%%.*}
6283 rc_version=${rc_version#*.}
6284 version_subminor=${rc_version%%.*}
6285 version_micro=0
6286 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6287 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006288 if test "$guest_agent_with_vss" = "yes" ; then
6289 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006290 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006291 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6292 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006293 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006294 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006295 fi
Michael Roth1a349042015-08-26 11:14:31 -05006296 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006297 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006298 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6299 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6300 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6301 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6302 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6303 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6304 fi
pbrook210fa552007-02-27 21:04:49 +00006305else
Juan Quintela35f4df22009-07-27 16:13:07 +02006306 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006307fi
blueswir1128ab2f2008-08-15 18:33:42 +00006308
Mark McLoughlindffcb712009-10-22 17:49:11 +01006309if test "$linux" = "yes" ; then
6310 echo "CONFIG_LINUX=y" >> $config_host_mak
6311fi
6312
bellard83fb7ad2004-07-05 21:25:26 +00006313if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006314 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006315fi
malcb29fe3e2008-11-18 01:42:22 +00006316
bellardec530c82006-04-25 22:36:06 +00006317if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006318 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006319fi
Andreas Färber179cf402010-09-20 00:50:43 +02006320if test "$haiku" = "yes" ; then
6321 echo "CONFIG_HAIKU=y" >> $config_host_mak
6322fi
bellard97a847b2003-08-10 21:36:04 +00006323if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006324 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006325fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006326if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006327 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006328fi
bellardc20709a2004-04-21 23:27:19 +00006329if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006330 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006331 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006332fi
ths8a16d272008-07-19 09:56:24 +00006333if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006334 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006335 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006336fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006337if test "$netmap" = "yes" ; then
6338 echo "CONFIG_NETMAP=y" >> $config_host_mak
6339fi
Gonglei015a33b2014-07-01 20:58:08 +08006340if test "$l2tpv3" = "yes" ; then
6341 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6342fi
Corey Bryant47e98652012-01-26 09:42:26 -05006343if test "$cap_ng" = "yes" ; then
6344 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6345fi
Juan Quintela2358a492009-07-27 16:13:25 +02006346echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006347for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006348 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006349 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006350 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006351 echo "$def=m" >> $config_host_mak ;;
6352 *)
6353 echo "$def=y" >> $config_host_mak ;;
6354 esac
malc0c58ac12008-06-25 21:04:05 +00006355done
Fam Zhengb1149912017-09-07 16:29:13 +08006356echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6357echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6358echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6359echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6360echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006361if test "$audio_pt_int" = "yes" ; then
6362 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6363fi
malcd5631632009-10-10 01:13:41 +04006364if test "$audio_win_int" = "yes" ; then
6365 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6366fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006367echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6368echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006369if test "$vnc" = "yes" ; then
6370 echo "CONFIG_VNC=y" >> $config_host_mak
6371fi
aliguori2f9606b2009-03-06 20:27:28 +00006372if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006373 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006374fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006375if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006376 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006377fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006378if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006379 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006380fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006381if test "$xkbcommon" = "yes" ; then
6382 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6383 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6384fi
aliguori76655d62009-03-06 20:27:37 +00006385if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006386 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006387fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006388if test "$xfs" = "yes" ; then
6389 echo "CONFIG_XFS=y" >> $config_host_mak
6390fi
Stefan Weil89138852016-05-16 15:10:20 +02006391qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006392echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006393echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006394echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006395echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006396if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006397 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006398fi
Fam Zheng17969262014-02-10 14:48:56 +08006399if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006400 # $shacmd can generate a hash started with digit, which the compiler doesn't
6401 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006402 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006403 echo "CONFIG_MODULES=y" >> $config_host_mak
6404fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006405if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006406 echo "CONFIG_X11=y" >> $config_host_mak
6407 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6408 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6409fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006410if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006411 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006412 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006413 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006414 if test "$sdl_image" = "yes" ; then
6415 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6416 fi
bellard49ecc3f2007-11-07 19:25:15 +00006417fi
6418if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006419 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006420fi
6421if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006422 echo "CONFIG_CURSES=m" >> $config_host_mak
6423 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6424 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006425fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006426if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006427 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006428fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006429if test "$accept4" = "yes" ; then
6430 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6431fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306432if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006433 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306434fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006435if test "$eventfd" = "yes" ; then
6436 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6437fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006438if test "$memfd" = "yes" ; then
6439 echo "CONFIG_MEMFD=y" >> $config_host_mak
6440fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006441if test "$have_usbfs" = "yes" ; then
6442 echo "CONFIG_USBFS=y" >> $config_host_mak
6443fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006444if test "$fallocate" = "yes" ; then
6445 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6446fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006447if test "$fallocate_punch_hole" = "yes" ; then
6448 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6449fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006450if test "$fallocate_zero_range" = "yes" ; then
6451 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6452fi
Kevin Wolfed911432014-09-29 17:12:59 +02006453if test "$posix_fallocate" = "yes" ; then
6454 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6455fi
Peter Maydellc727f472011-01-06 11:05:10 +00006456if test "$sync_file_range" = "yes" ; then
6457 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6458fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006459if test "$fiemap" = "yes" ; then
6460 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6461fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006462if test "$dup3" = "yes" ; then
6463 echo "CONFIG_DUP3=y" >> $config_host_mak
6464fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006465if test "$ppoll" = "yes" ; then
6466 echo "CONFIG_PPOLL=y" >> $config_host_mak
6467fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006468if test "$prctl_pr_set_timerslack" = "yes" ; then
6469 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6470fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006471if test "$epoll" = "yes" ; then
6472 echo "CONFIG_EPOLL=y" >> $config_host_mak
6473fi
6474if test "$epoll_create1" = "yes" ; then
6475 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6476fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006477if test "$sendfile" = "yes" ; then
6478 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6479fi
Riku Voipio51834342014-06-22 11:25:42 +01006480if test "$timerfd" = "yes" ; then
6481 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6482fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006483if test "$setns" = "yes" ; then
6484 echo "CONFIG_SETNS=y" >> $config_host_mak
6485fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006486if test "$clock_adjtime" = "yes" ; then
6487 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6488fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006489if test "$syncfs" = "yes" ; then
6490 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6491fi
aurel323b3f24a2009-04-15 16:12:13 +00006492if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006493 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006494fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006495if test "$inotify1" = "yes" ; then
6496 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6497fi
Peter Maydell401bc052017-09-05 13:19:32 +01006498if test "$sem_timedwait" = "yes" ; then
6499 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6500fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006501if test "$strchrnul" = "yes" ; then
6502 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6503fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006504if test "$byteswap_h" = "yes" ; then
6505 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6506fi
6507if test "$bswap_h" = "yes" ; then
6508 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6509fi
Alexander Graf769ce762009-05-11 17:41:42 +02006510if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006511 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006512 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006513 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006514fi
aurel322e4d9fb2008-04-08 06:01:02 +00006515if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006516 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006517 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006518fi
balrogfb599c92008-09-28 23:49:55 +00006519if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006520 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006521 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006522fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006523if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006524 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006525 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006526 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006527 if test "$gtk_gl" = "yes" ; then
6528 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6529 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006530fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01006531if test "$gio" = "yes" ; then
6532 echo "CONFIG_GIO=y" >> $config_host_mak
6533 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6534 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6535fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006536echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006537if test "$gnutls" = "yes" ; then
6538 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6539fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006540if test "$gcrypt" = "yes" ; then
6541 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006542 if test "$gcrypt_hmac" = "yes" ; then
6543 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6544 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006545fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006546if test "$nettle" = "yes" ; then
6547 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006548 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006549fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006550if test "$tasn1" = "yes" ; then
6551 echo "CONFIG_TASN1=y" >> $config_host_mak
6552fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006553if test "$have_ifaddrs_h" = "yes" ; then
6554 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6555fi
Eric Blake6b39b062016-10-11 10:46:23 -05006556if test "$have_broken_size_max" = "yes" ; then
6557 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6558fi
Jan Vesely277abf12016-04-29 13:15:23 -04006559
6560# Work around a system header bug with some kernel/XFS header
6561# versions where they both try to define 'struct fsxattr':
6562# xfs headers will not try to redefine structs from linux headers
6563# if this macro is set.
6564if test "$have_fsxattr" = "yes" ; then
6565 echo "HAVE_FSXATTR=y" >> $config_host_mak
6566fi
Fam Zheng1efad062018-06-01 17:26:43 +08006567if test "$have_copy_file_range" = "yes" ; then
6568 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6569fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006570if test "$vte" = "yes" ; then
6571 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006572 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006573 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006574fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006575if test "$virglrenderer" = "yes" ; then
6576 echo "CONFIG_VIRGL=y" >> $config_host_mak
6577 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6578 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6579fi
aliguorie37630c2009-04-22 15:19:10 +00006580if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006581 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006582 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00006583fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006584if test "$linux_aio" = "yes" ; then
6585 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6586fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006587if test "$attr" = "yes" ; then
6588 echo "CONFIG_ATTR=y" >> $config_host_mak
6589fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006590if test "$libattr" = "yes" ; then
6591 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6592fi
Meador Inge983eef52012-02-24 14:00:42 +05306593if test "$virtfs" = "yes" ; then
6594 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006595fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006596if test "$mpath" = "yes" ; then
6597 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006598 if test "$mpathpersist_new_api" = "yes"; then
6599 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6600 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006601fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006602if test "$vhost_scsi" = "yes" ; then
6603 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6604fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006605if test "$vhost_net" = "yes" && test "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006606 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6607fi
Gonglei042cea22018-03-01 21:46:28 +08006608if test "$vhost_crypto" = "yes" ; then
6609 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6610fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006611if test "$vhost_vsock" = "yes" ; then
6612 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6613fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006614if test "$vhost_user" = "yes" ; then
6615 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6616fi
ths77755342008-11-27 15:45:16 +00006617if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006618 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006619fi
aliguoribf9298b2008-12-05 20:05:26 +00006620if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006621 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006622fi
aliguoriceb42de2009-04-07 18:43:28 +00006623if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006624 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006625fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006626if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006627 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006628fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006629if test "$membarrier" = "yes" ; then
6630 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6631fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006632if test "$signalfd" = "yes" ; then
6633 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6634fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00006635if test "$optreset" = "yes" ; then
6636 echo "HAVE_OPTRESET=y" >> $config_host_mak
6637fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006638if test "$tcg" = "yes"; then
6639 echo "CONFIG_TCG=y" >> $config_host_mak
6640 if test "$tcg_interpreter" = "yes" ; then
6641 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6642 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006643fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006644if test "$fdatasync" = "yes" ; then
6645 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6646fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006647if test "$madvise" = "yes" ; then
6648 echo "CONFIG_MADVISE=y" >> $config_host_mak
6649fi
6650if test "$posix_madvise" = "yes" ; then
6651 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6652fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006653if test "$posix_memalign" = "yes" ; then
6654 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6655fi
bellard97a847b2003-08-10 21:36:04 +00006656
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006657if test "$spice" = "yes" ; then
6658 echo "CONFIG_SPICE=y" >> $config_host_mak
6659fi
6660
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006661if test "$smartcard" = "yes" ; then
6662 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006663 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6664 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006665fi
6666
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006667if test "$libusb" = "yes" ; then
6668 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006669 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6670 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006671fi
6672
Hans de Goede69354a82011-07-19 11:04:10 +02006673if test "$usb_redir" = "yes" ; then
6674 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006675 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6676 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006677fi
6678
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006679if test "$opengl" = "yes" ; then
6680 echo "CONFIG_OPENGL=y" >> $config_host_mak
6681 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006682 if test "$opengl_dmabuf" = "yes" ; then
6683 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6684 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006685fi
6686
Yang Zhong5a22ab72017-12-20 21:16:46 +08006687if test "$malloc_trim" = "yes" ; then
6688 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6689fi
6690
Liang Li99f2dbd2016-03-08 13:53:16 +08006691if test "$avx2_opt" = "yes" ; then
6692 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6693fi
6694
qiaonuohan607dacd2014-02-18 14:11:30 +08006695if test "$lzo" = "yes" ; then
6696 echo "CONFIG_LZO=y" >> $config_host_mak
6697fi
6698
6699if test "$snappy" = "yes" ; then
6700 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6701fi
6702
Peter Wu6b383c02015-01-06 18:48:14 +01006703if test "$bzip2" = "yes" ; then
6704 echo "CONFIG_BZIP2=y" >> $config_host_mak
6705 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6706fi
6707
Julio Faracco83bc1f92018-11-05 13:08:04 -02006708if test "$lzfse" = "yes" ; then
6709 echo "CONFIG_LZFSE=y" >> $config_host_mak
6710 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6711fi
6712
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006713if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006714 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006715 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6716 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006717fi
6718
Peter Lieven6542aa92014-02-03 10:26:13 +01006719if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006720 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6721 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006722fi
6723
Eduardo Otubof7945732012-08-14 18:44:05 -03006724if test "$seccomp" = "yes"; then
6725 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006726 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6727 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006728fi
6729
bellard83fb7ad2004-07-05 21:25:26 +00006730# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006731if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006732 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006733fi
6734
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006735if test "$localtime_r" = "yes" ; then
6736 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6737fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006738if test "$qom_cast_debug" = "yes" ; then
6739 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6740fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006741if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006742 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006743 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6744 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006745fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006746
Peter Maydell7c2acc72013-04-08 12:11:27 +01006747echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006748if test "$coroutine_pool" = "yes" ; then
6749 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6750else
6751 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6752fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306753
Peter Lieven7d992e42016-09-27 11:58:45 +02006754if test "$debug_stack_usage" = "yes" ; then
6755 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6756fi
6757
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006758if test "$crypto_afalg" = "yes" ; then
6759 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6760fi
6761
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306762if test "$open_by_handle_at" = "yes" ; then
6763 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6764fi
6765
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306766if test "$linux_magic_h" = "yes" ; then
6767 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6768fi
6769
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006770if test "$pragma_diagnostic_available" = "yes" ; then
6771 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006772fi
6773
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006774if test "$valgrind_h" = "yes" ; then
6775 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6776fi
6777
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006778if test "$have_asan_iface_fiber" = "yes" ; then
6779 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6780fi
6781
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006782if test "$has_environ" = "yes" ; then
6783 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6784fi
6785
Richard Henderson76a347e2012-12-28 14:17:02 -08006786if test "$cpuid_h" = "yes" ; then
6787 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6788fi
6789
Richard Hendersonf5401662013-02-16 12:46:59 -08006790if test "$int128" = "yes" ; then
6791 echo "CONFIG_INT128=y" >> $config_host_mak
6792fi
6793
Richard Henderson7ebee432016-06-29 21:10:59 -07006794if test "$atomic128" = "yes" ; then
6795 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6796fi
6797
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07006798if test "$cmpxchg128" = "yes" ; then
6799 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6800fi
6801
Richard Hendersondf79b992016-09-02 12:23:57 -07006802if test "$atomic64" = "yes" ; then
6803 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6804fi
6805
Richard Hendersondb432672017-09-15 14:11:45 -07006806if test "$vector16" = "yes" ; then
6807 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6808fi
6809
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006810if test "$getauxval" = "yes" ; then
6811 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6812fi
6813
Bharata B Raoeb100392012-09-24 14:42:45 +05306814if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006815 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006816 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6817 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306818fi
6819
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006820if test "$glusterfs_xlator_opt" = "yes" ; then
6821 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6822fi
6823
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306824if test "$glusterfs_discard" = "yes" ; then
6825 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6826fi
6827
Niels de Vosdf3a4292017-05-28 12:01:14 +05306828if test "$glusterfs_fallocate" = "yes" ; then
6829 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6830fi
6831
Bharata B Rao7c815372013-12-21 14:51:25 +05306832if test "$glusterfs_zerofill" = "yes" ; then
6833 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6834fi
6835
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006836if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006837 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006838 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6839 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006840fi
6841
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006842if test "$live_block_migration" = "yes" ; then
6843 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6844fi
6845
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006846if test "$tpm" = "yes"; then
6847 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006848 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006849 if test "$tpm_passthrough" = "yes"; then
6850 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6851 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006852 # TPM emulator support?
6853 if test "$tpm_emulator" = "yes"; then
6854 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6855 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006856fi
6857
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006858echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6859if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006860 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306861fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006862if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006863 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6864 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006865 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006866fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006867if have_backend "log"; then
6868 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02006869fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006870if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006871 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6872fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006873if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02006874 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6875 if test "$trace_backend_stap" = "yes" ; then
6876 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6877 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006878fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006879if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006880 if test "$linux" = "yes" ; then
6881 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006882 else
Stewart Smith21684af2014-01-24 12:39:10 +11006883 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006884 fi
6885fi
Paul Durrant0a852412016-08-04 14:44:14 +01006886if have_backend "syslog"; then
6887 if test "$posix_syslog" = "yes" ; then
6888 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6889 else
6890 feature_not_found "syslog(trace backend)" "syslog not available"
6891 fi
6892fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006893echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6894
Michael R. Hines2da776d2013-07-22 10:01:54 -04006895if test "$rdma" = "yes" ; then
6896 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006897 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006898fi
6899
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006900if test "$pvrdma" = "yes" ; then
6901 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6902fi
6903
Laurent Vivier575b22b2016-06-02 22:14:15 +02006904if test "$have_rtnetlink" = "yes" ; then
6905 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6906fi
6907
Klim Kireeved279a02018-01-12 12:01:19 +03006908if test "$libxml2" = "yes" ; then
6909 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6910 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6911 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6912fi
6913
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006914if test "$replication" = "yes" ; then
6915 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6916fi
6917
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006918if test "$have_af_vsock" = "yes" ; then
6919 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6920fi
6921
Christopher Covington4d043512016-12-28 15:04:33 -05006922if test "$have_sysmacros" = "yes" ; then
6923 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6924fi
6925
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006926if test "$have_static_assert" = "yes" ; then
6927 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6928fi
6929
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006930if test "$have_utmpx" = "yes" ; then
6931 echo "HAVE_UTMPX=y" >> $config_host_mak
6932fi
6933
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006934if test "$ivshmem" = "yes" ; then
6935 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6936fi
Richard Hendersone219c492017-09-28 09:01:23 -07006937if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006938 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6939fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006940if test "$debug_mutex" = "yes" ; then
6941 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6942fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006943
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006944# Hold two types of flag:
6945# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6946# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03006947# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006948# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03006949if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006950 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03006951 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6952elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6953 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6954 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006955fi
6956
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006957if test "$vxhs" = "yes" ; then
6958 echo "CONFIG_VXHS=y" >> $config_host_mak
6959 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6960fi
6961
Junyan He17824402018-07-18 15:47:59 +08006962if test "$libpmem" = "yes" ; then
6963 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6964fi
6965
Jeff Cody2f740132018-11-07 07:36:44 +01006966if test "$bochs" = "yes" ; then
6967 echo "CONFIG_BOCHS=y" >> $config_host_mak
6968fi
6969if test "$cloop" = "yes" ; then
6970 echo "CONFIG_CLOOP=y" >> $config_host_mak
6971fi
6972if test "$dmg" = "yes" ; then
6973 echo "CONFIG_DMG=y" >> $config_host_mak
6974fi
6975if test "$qcow1" = "yes" ; then
6976 echo "CONFIG_QCOW1=y" >> $config_host_mak
6977fi
6978if test "$vdi" = "yes" ; then
6979 echo "CONFIG_VDI=y" >> $config_host_mak
6980fi
6981if test "$vvfat" = "yes" ; then
6982 echo "CONFIG_VVFAT=y" >> $config_host_mak
6983fi
6984if test "$qed" = "yes" ; then
6985 echo "CONFIG_QED=y" >> $config_host_mak
6986fi
6987if test "$parallels" = "yes" ; then
6988 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6989fi
6990if test "$sheepdog" = "yes" ; then
6991 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6992fi
6993
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006994if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006995 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006996elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006997 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006998elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006999 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007000elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007001 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007002elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007003 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007004elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007005 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007006else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007007 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007008fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007009QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007010
Juan Quintela98ec69a2009-07-16 18:34:18 +02007011echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007012echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007013echo "MAKE=$make" >> $config_host_mak
7014echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007015echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7016echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007017echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7018echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007019echo "PYTHON=$python" >> $config_host_mak
Cleber Rosa755ee702018-11-09 10:07:07 -05007020echo "PYTHON_VERSION=$python_version" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007021echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007022if $iasl -h > /dev/null 2>&1; then
7023 echo "IASL=$iasl" >> $config_host_mak
7024fi
Juan Quintela804edf22009-07-27 16:12:49 +02007025echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007026echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007027echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007028echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007029echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007030echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007031echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007032echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007033echo "OBJCOPY=$objcopy" >> $config_host_mak
7034echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007035echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007036echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007037echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007038echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007039echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007040echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007041echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007042echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007043if test "$sparse" = "yes" ; then
7044 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007045 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007046 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007047 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7048 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7049fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01007050if test "$cross_prefix" != ""; then
7051 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
7052else
7053 echo "AUTOCONF_HOST := " >> $config_host_mak
7054fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007055echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007056echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007057echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007058echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007059echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007060echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007061echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007062echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007063echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007064echo "DSOSUF=$DSOSUF" >> $config_host_mak
7065echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007066echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007067echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7068echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007069echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007070if test "$gcov" = "yes" ; then
7071 echo "CONFIG_GCOV=y" >> $config_host_mak
7072 echo "GCOV=$gcov_tool" >> $config_host_mak
7073fi
Juan Quintela804edf22009-07-27 16:12:49 +02007074
Alex Bennée51a12b52018-04-04 14:24:39 +01007075if test "$docker" != "no"; then
7076 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7077fi
7078
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007079if test "$libudev" != "no"; then
7080 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7081 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7082fi
7083
Peter Maydell6efd7512011-11-30 11:59:04 +00007084# use included Linux headers
7085if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007086 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007087 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007088 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007089 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007090 ;;
Thomas Hutha69dc532018-08-21 13:27:48 +02007091 ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01007092 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007093 ;;
7094 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007095 linux_arch=s390
7096 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007097 aarch64)
7098 linux_arch=arm64
7099 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007100 mips64)
7101 linux_arch=mips
7102 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007103 *)
7104 # For most CPUs the kernel architecture name and QEMU CPU name match.
7105 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007106 ;;
7107 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007108 # For non-KVM architectures we will not have asm headers
7109 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7110 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7111 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007112fi
7113
bellard1d14ffa2005-10-30 18:58:22 +00007114for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007115target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007116config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007117target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00007118target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02007119
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007120case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007121 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 +02007122 target_bigendian=yes
7123 ;;
7124esac
bellard97a847b2003-08-10 21:36:04 +00007125target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007126target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007127target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007128target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007129case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007130 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007131 target_softmmu="yes"
7132 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007133 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007134 target_user_only="yes"
7135 target_linux_user="yes"
7136 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007137 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007138 target_user_only="yes"
7139 target_bsd_user="yes"
7140 ;;
pbrook9e407a82007-05-26 16:38:53 +00007141 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007142 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007143 exit 1
7144 ;;
7145esac
ths831b7822007-01-18 20:06:33 +00007146
Alex Bennéed75402b2018-04-04 20:27:05 +01007147target_compiler=""
7148target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007149target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007150
bellard97a847b2003-08-10 21:36:04 +00007151mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007152echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007153
pbrooke5fe0c52006-06-11 13:32:59 +00007154bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007155mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007156interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007157gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007158
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007159TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007160TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007161TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007162
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007163case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007164 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007165 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307166 gdb_xml_files="i386-32bit.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007167 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007168 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007169 ;;
7170 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007171 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007172 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307173 gdb_xml_files="i386-64bit.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007174 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007175 ;;
7176 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007177 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007178 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007179 ;;
7180 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007181 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007182 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007183 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007184 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007185 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007186 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007187 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007188 aarch64|aarch64_be)
7189 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007190 TARGET_BASE_ARCH=arm
7191 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007192 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007193 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 +01007194 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007195 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007196 ;;
aurel322408a522008-04-20 20:19:44 +00007197 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007198 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007199 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007200 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007201 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007202 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007203 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007204 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007205 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007206 ;;
aurel322408a522008-04-20 20:19:44 +00007207 m68k)
aurel322408a522008-04-20 20:19:44 +00007208 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007209 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007210 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007211 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007212 microblaze|microblazeel)
7213 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007214 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007215 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007216 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007217 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007218 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007219 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007220 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007221 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007222 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007223 ;;
7224 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007225 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007226 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007227 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007228 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007229 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007230 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007231 ;;
7232 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007233 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007234 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007235 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007236 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007237 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007238 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007239 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007240 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007241 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007242 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007243 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007244 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007245 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007246 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007247 TARGET_ARCH=openrisc
7248 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007249 ;;
aurel322408a522008-04-20 20:19:44 +00007250 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007251 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007252 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007253 ;;
aurel322408a522008-04-20 20:19:44 +00007254 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007255 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007256 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307257 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007258 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 +01007259 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007260 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007261 ppc64le)
7262 TARGET_ARCH=ppc64
7263 TARGET_BASE_ARCH=ppc
7264 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307265 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007266 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 +01007267 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007268 ;;
aurel322408a522008-04-20 20:19:44 +00007269 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007270 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007271 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007272 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007273 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007274 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 +01007275 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007276 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007277 riscv32)
7278 TARGET_BASE_ARCH=riscv
7279 TARGET_ABI_DIR=riscv
7280 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007281 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007282 ;;
7283 riscv64)
7284 TARGET_BASE_ARCH=riscv
7285 TARGET_ABI_DIR=riscv
7286 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007287 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007288 ;;
aurel322408a522008-04-20 20:19:44 +00007289 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007290 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007291 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007292 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007293 ;;
7294 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007295 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007296 ;;
7297 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007298 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007299 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007300 ;;
7301 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007302 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007303 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007304 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007305 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007306 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007307 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007308 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007309 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007310 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 +01007311 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007312 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007313 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007314 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007315 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007316 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007317 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007318 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007319 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007320 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007321 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007322 xtensa|xtensaeb)
7323 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007324 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007325 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007326 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007327 ;;
aurel322408a522008-04-20 20:19:44 +00007328 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007329 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007330 ;;
7331esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007332# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7333if [ "$TARGET_BASE_ARCH" = "" ]; then
7334 TARGET_BASE_ARCH=$TARGET_ARCH
7335fi
7336
Alex Bennéed75402b2018-04-04 20:27:05 +01007337# Do we have a cross compiler for this target?
7338if has $target_compiler; then
7339
7340 write_c_skeleton
7341
Alex Bennée716a5072018-04-10 12:19:40 +01007342 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007343 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007344 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007345 target_compiler=""
7346 else
7347 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7348 target_compiler_static="n"
7349 fi
7350 else
7351 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7352 target_compiler_static="y"
7353 fi
7354else
7355 target_compiler=""
7356fi
7357
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007358symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7359
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007360upper() {
7361 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7362}
7363
Stefan Weil89138852016-05-16 15:10:20 +02007364target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007365echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007366echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007367echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007368if [ "$TARGET_ABI_DIR" = "" ]; then
7369 TARGET_ABI_DIR=$TARGET_ARCH
7370fi
Juan Quintela25be2102009-10-07 02:41:00 +02007371echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007372if [ "$HOST_VARIANT_DIR" != "" ]; then
7373 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7374fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007375
7376if supported_xen_target $target; then
7377 echo "CONFIG_XEN=y" >> $config_target_mak
7378 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007379 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007380 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007381fi
7382if supported_kvm_target $target; then
7383 echo "CONFIG_KVM=y" >> $config_target_mak
7384 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007385 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007386 if test "$vhost_user" = "yes" ; then
7387 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7388 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007389 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007390fi
7391if supported_hax_target $target; then
7392 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007393fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007394if supported_hvf_target $target; then
7395 echo "CONFIG_HVF=y" >> $config_target_mak
7396fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007397if supported_whpx_target $target; then
7398 echo "CONFIG_WHPX=y" >> $config_target_mak
7399fi
bellardde83cd02003-06-15 20:25:43 +00007400if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007401 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007402fi
7403if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007404 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007405 if test "$mttcg" = "yes" ; then
7406 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7407 fi
bellardde83cd02003-06-15 20:25:43 +00007408fi
bellard997344f2003-10-27 21:10:39 +00007409if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007410 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007411 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007412fi
ths831b7822007-01-18 20:06:33 +00007413if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007414 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007415fi
pbrook56aebc82008-10-11 17:55:29 +00007416list=""
7417if test ! -z "$gdb_xml_files" ; then
7418 for x in $gdb_xml_files; do
7419 list="$list $source_path/gdb-xml/$x"
7420 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007421 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007422fi
bellardde83cd02003-06-15 20:25:43 +00007423
Eric Blakee633a5c2019-02-04 20:39:37 -06007424if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007425 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007426fi
blueswir184778502008-10-26 20:33:16 +00007427if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007428 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007429fi
bellard5b0753e2005-03-01 21:37:28 +00007430
Alex Bennéed75402b2018-04-04 20:27:05 +01007431if test -n "$target_compiler"; then
7432 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7433
7434 if test -n "$target_compiler_static"; then
7435 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7436 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007437
7438 if test -n "$target_compiler_cflags"; then
7439 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7440 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007441fi
7442
Alex Bennée716a5072018-04-10 12:19:40 +01007443
Juan Quintela4afddb52009-08-03 14:46:45 +02007444# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007445
Juan Quintela4afddb52009-08-03 14:46:45 +02007446cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007447ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007448
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007449disas_config() {
7450 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7451 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7452}
7453
Juan Quintela64656022009-08-03 14:46:53 +02007454for i in $ARCH $TARGET_BASE_ARCH ; do
7455 case "$i" in
7456 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007457 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007458 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007459 aarch64)
7460 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007461 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007462 fi
7463 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007464 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007465 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007466 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007467 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007468 fi
Juan Quintela64656022009-08-03 14:46:53 +02007469 ;;
7470 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007471 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007472 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007473 hppa)
7474 disas_config "HPPA"
7475 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007476 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007477 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007478 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007479 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007480 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007481 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007482 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007483 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007484 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007485 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007486 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007487 ;;
7488 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007489 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007490 if test -n "${cxx}"; then
7491 disas_config "NANOMIPS"
7492 fi
Juan Quintela64656022009-08-03 14:46:53 +02007493 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007494 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007495 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007496 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007497 nios2)
7498 disas_config "NIOS2"
7499 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007500 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007501 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007502 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007503 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007504 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007505 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007506 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007507 disas_config "RISCV"
7508 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007509 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007510 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007511 ;;
7512 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007513 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007514 ;;
7515 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007516 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007517 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007518 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007519 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007520 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007521 esac
7522done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007523if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007524 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007525fi
Juan Quintela64656022009-08-03 14:46:53 +02007526
Juan Quintela6ee71262009-08-03 14:46:47 +02007527case "$ARCH" in
7528alpha)
7529 # Ensure there's only a single GP
7530 cflags="-msmall-data $cflags"
7531;;
7532esac
7533
Juan Quintelad02c1db2009-08-03 14:46:50 +02007534if test "$gprof" = "yes" ; then
Philippe Mathieu-Daudé0acf7de2019-01-03 16:09:50 +01007535 echo "TARGET_GPROF=y" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007536 if test "$target_linux_user" = "yes" ; then
7537 cflags="-p $cflags"
7538 ldflags="-p $ldflags"
7539 fi
7540 if test "$target_softmmu" = "yes" ; then
7541 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007542 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007543 fi
7544fi
7545
Eric Blakee633a5c2019-02-04 20:39:37 -06007546if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007547 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007548fi
Juan Quintelafa282482009-07-22 22:37:39 +02007549
Christian Borntraegere9a35912017-08-23 12:16:23 +02007550# Newer kernels on s390 check for an S390_PGSTE program header and
7551# enable the pgste page table extensions in that case. This makes
7552# the vm.allocate_pgste sysctl unnecessary. We enable this program
7553# header if
7554# - we build on s390x
7555# - we build the system emulation for s390x (qemu-system-s390x)
7556# - KVM is enabled
7557# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06007558if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7559 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02007560 if ld_has --s390-pgste ; then
7561 ldflags="-Wl,--s390-pgste $ldflags"
7562 fi
7563fi
7564
Juan Quintela25be2102009-10-07 02:41:00 +02007565echo "LDFLAGS+=$ldflags" >> $config_target_mak
7566echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007567
bellard97a847b2003-08-10 21:36:04 +00007568done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007569
Alex Bennéed75402b2018-04-04 20:27:05 +01007570if test -n "$enabled_cross_compilers"; then
7571 echo
7572 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7573fi
7574
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007575if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007576 echo "config-host.h: subdir-dtc" >> $config_host_mak
7577fi
Richard Hendersone219c492017-09-28 09:01:23 -07007578if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7579 echo "config-host.h: subdir-capstone" >> $config_host_mak
7580fi
7581if test -n "$LIBCAPSTONE"; then
7582 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7583fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007584
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007585if test "$numa" = "yes"; then
7586 echo "CONFIG_NUMA=y" >> $config_host_mak
7587fi
7588
John Snowfd0e6052015-03-25 18:57:39 -04007589if test "$ccache_cpp2" = "yes"; then
7590 echo "export CCACHE_CPP2=y" >> $config_host_mak
7591fi
7592
Peter Maydelle29e5c62018-11-02 11:52:38 +00007593# If we're using a separate build tree, set it up now.
7594# DIRS are directories which we simply mkdir in the build tree;
7595# LINKS are things to symlink back into the source tree
7596# (these can be both files and directories).
7597# Caution: do not add files or directories here using wildcards. This
7598# will result in problems later if a new file matching the wildcard is
7599# added to the source tree -- nothing will cause configure to be rerun
7600# so the build tree will be missing the link back to the new file, and
7601# tests might fail. Prefer to keep the relevant files in their own
7602# directory and symlink the directory instead.
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007603DIRS="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 -05007604DIRS="$DIRS tests/fp"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007605DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007606DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007607DIRS="$DIRS roms/seabios roms/vgabios"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007608LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt"
7609LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7610LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7611LINKS="$LINKS tests/fp/Makefile"
7612LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7613LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7614LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7615LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7616LINKS="$LINKS pc-bios/qemu-icon.bmp"
7617LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007618LINKS="$LINKS tests/acceptance tests/data"
7619LINKS="$LINKS tests/qemu-iotests/check"
Richard Henderson753d11f2011-06-24 11:58:37 -07007620for bios_file in \
7621 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007622 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007623 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007624 $source_path/pc-bios/*.rom \
7625 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007626 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007627 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007628 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007629 $source_path/pc-bios/palcode-*
7630do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007631 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007632done
7633mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007634for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007635 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007636 symlink "$source_path/$f" "$f"
7637 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007638done
Paul Brook1ad21342009-05-19 16:17:58 +01007639
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007640# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007641for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007642 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007643 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007644 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007645 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007646 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007647 echo "CC=$cc" >> $config_mak
7648 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007649 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007650 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007651 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007652 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007653 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007654done
7655
Max Reitz76c75602014-05-24 23:24:56 +02007656# set up qemu-iotests in this build directory
7657iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007658
7659echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7660echo >> "$iotests_common_env"
7661echo "export PYTHON='$python'" >> "$iotests_common_env"
7662
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007663# Save the configure command line for later reuse.
7664cat <<EOD >config.status
7665#!/bin/sh
7666# Generated by configure.
7667# Run this file to recreate the current configuration.
7668# Compiler output produced by configure, useful for debugging
7669# configure, is in config.log if it exists.
7670EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007671
7672preserve_env() {
7673 envname=$1
7674
7675 eval envval=\$$envname
7676
7677 if test -n "$envval"
7678 then
7679 echo "$envname='$envval'" >> config.status
7680 echo "export $envname" >> config.status
7681 else
7682 echo "unset $envname" >> config.status
7683 fi
7684}
7685
7686# Preserve various env variables that influence what
7687# features/build target configure will detect
7688preserve_env AR
7689preserve_env AS
7690preserve_env CC
7691preserve_env CPP
7692preserve_env CXX
7693preserve_env INSTALL
7694preserve_env LD
7695preserve_env LD_LIBRARY_PATH
7696preserve_env LIBTOOL
7697preserve_env MAKE
7698preserve_env NM
7699preserve_env OBJCOPY
7700preserve_env PATH
7701preserve_env PKG_CONFIG
7702preserve_env PKG_CONFIG_LIBDIR
7703preserve_env PKG_CONFIG_PATH
7704preserve_env PYTHON
7705preserve_env SDL_CONFIG
7706preserve_env SDL2_CONFIG
7707preserve_env SMBD
7708preserve_env STRIP
7709preserve_env WINDRES
7710
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007711printf "exec" >>config.status
7712printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007713echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007714chmod +x config.status
7715
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007716rm -r "$TMPDIR1"