blob: 08ca4bcb46dad9193584da69f54f8f362065f095 [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 | \
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700201 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
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
Peter Maydell79d77bc2019-04-29 17:35:57 +0100279# make source path absolute
Antonio Ospite14211822019-05-26 16:47:46 +0200280source_path=$(cd "$(dirname -- "$0")"; pwd)
281
Antonio Ospite4ace32e2019-05-26 16:47:47 +0200282if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
283then
284 error_exit "main directory cannot contain spaces nor colons"
285fi
286
Antonio Ospite14211822019-05-26 16:47:46 +0200287# default parameters
Juan Quintela2ff6b912009-08-03 14:45:55 +0200288cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300289iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000290interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000291static="no"
bellard7d132992003-03-06 23:23:54 +0000292cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000293audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800294block_drv_rw_whitelist=""
295block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000296host_cc="cc"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +0100297libs_cpu=""
Juan Quintela73da3752009-08-03 14:46:26 +0200298libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200299libs_tools=""
malcd5631632009-10-10 01:13:41 +0400300audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500301libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100302debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100303stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000304
Daniel P. Berrange92712822017-09-29 11:11:58 +0100305if test -e "$source_path/.git"
306then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100307 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100308 git_submodules="ui/keycodemapdb"
Emilio G. Cota3ac1f812018-03-08 21:09:40 -0500309 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
310 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
Daniel P. Berrange92712822017-09-29 11:11:58 +0100311else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100312 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100313 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100314
315 if ! test -f "$source_path/ui/keycodemapdb/README"
316 then
317 echo
318 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
319 echo
320 echo "This is not a GIT checkout but module content appears to"
321 echo "be missing. Do not use 'git archive' or GitHub download links"
322 echo "to acquire QEMU source archives. Non-GIT builds are only"
323 echo "supported with source archives linked from:"
324 echo
Peter Maydella3e3b522019-07-22 14:07:39 +0100325 echo " https://www.qemu.org/download/#source"
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100326 echo
327 echo "Developers working with GIT can use scripts/archive-source.sh"
328 echo "if they need to create valid source archives."
329 echo
330 exit 1
331 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100332fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100333git="git"
aliguoriac0df512008-12-29 17:14:15 +0000334
Stefan Weilafb63eb2012-09-26 22:04:38 +0200335# Don't accept a target_list environment variable.
336unset target_list
Alex Bennée447e1332019-03-19 11:59:12 +0000337unset target_list_exclude
Paolo Bonzini377529c2010-12-23 11:43:50 +0100338
339# Default value for a variable defining feature "foo".
340# * foo="no" feature will only be used if --enable-foo arg is given
341# * foo="" feature will be searched for, and if found, will be used
342# unless --disable-foo is given
343# * foo="yes" this value will only be set by --enable-foo flag.
344# feature will searched for,
345# if not found, configure exits with error
346#
347# Always add --enable-foo and --disable-foo command line args.
348# Distributions want to ensure that several features are compiled in, and it
349# is impossible without a --enable-foo that exits if a feature is not found.
350
351bluez=""
352brlapi=""
353curl=""
354curses=""
355docs=""
356fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100357netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100358sdl=""
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +0000359sdl_image=""
Meador Inge983eef52012-02-24 14:00:42 +0530360virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200361mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100362vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100363sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100364vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365vnc_sasl=""
366vnc_jpeg=""
367vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200368xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100369xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000370xen_ctrl_version=""
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000371xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100372linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500373cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100374attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200375libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100376xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200377tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100378membarrier=""
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100379vhost_net=""
380vhost_crypto=""
381vhost_scsi=""
382vhost_vsock=""
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200383vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400384kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100385hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500386hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800387whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400388rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300389pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100390gprof="no"
391debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100392debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100393sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500394fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100395strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200396tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100397bigendian="no"
398mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000399gcov="no"
400gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100401EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800402DSOSUF=".so"
403LDFLAGS_SHARED="-shared"
404modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100405prefix="/usr/local"
406mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300407datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200408firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300409qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100410bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300411libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400412libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200413includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100414sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300415local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100416confsuffix="/qemu"
Marc-André Lureau675b9b52019-02-12 17:25:23 +0100417slirp=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100418oss_lib=""
419bsd="no"
420linux="no"
421solaris="no"
422profiler="no"
423cocoa="no"
424softmmu="yes"
425linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100426bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100427blobs="yes"
428pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200429pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200430qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300431trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100432trace_file="trace"
433spice=""
434rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200435smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100436libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200437usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100438opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100439opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000440cpuid_h="no"
Liam Merwick86583a02018-10-19 21:38:59 +0100441avx2_opt=""
Alon Levy1ece9902011-07-26 12:30:40 +0300442zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700443capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200444lzo=""
445snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100446bzip2=""
Julio Faracco83bc1f92018-11-05 13:08:04 -0200447lzfse=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400448guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400449guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500450guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300451guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400452vss_win32_sdk=""
453win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100454want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100455libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100456libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100457coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200458coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200459debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400460crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300461seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530462glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400463glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530464glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530465glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530466glusterfs_zerofill="no"
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +0100467glusterfs_ftruncate_has_stat="no"
Niels de Vos0e3b8912019-03-05 16:46:34 +0100468glusterfs_iocb_has_stat="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600469gtk=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200470gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100471tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100472gnutls=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100473nettle=""
474gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800475gcrypt_hmac="no"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +0100476auth_pam=""
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100477vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200478virglrenderer=""
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +0800479tpm=""
Pino Toscanob10d49d2019-06-20 22:08:40 +0200480libssh=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100481live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800482numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800483tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200484jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800485replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700486vxhs=""
Jeff Cody2f740132018-11-07 07:36:44 +0100487bochs="yes"
488cloop="yes"
489dmg="yes"
490qcow1="yes"
491vdi="yes"
492vvfat="yes"
493qed="yes"
494parallels="yes"
495sheepdog="yes"
Klim Kireeved279a02018-01-12 12:01:19 +0300496libxml2=""
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200497debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800498libpmem=""
Paolo Bonzinif3494742019-01-23 14:56:17 +0800499default_devices="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100500
Peter Maydell898be3e2017-03-21 14:31:57 +0000501supported_cpu="no"
502supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100503bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800504malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000505
aliguoriac0df512008-12-29 17:14:15 +0000506# parse CC options first
507for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200508 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000509 case "$opt" in
510 --cross-prefix=*) cross_prefix="$optarg"
511 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100512 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000513 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400514 --cxx=*) CXX="$optarg"
515 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200516 --cpu=*) cpu="$optarg"
517 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100518 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200519 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100520 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100521 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100522 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100523 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200524 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100525 --enable-debug-info) debug_info="yes"
526 ;;
527 --disable-debug-info) debug_info="no"
528 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100529 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
530 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100531 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
532 eval "cross_cc_cflags_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200533 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100534 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100535 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200536 cc_archs="$cc_archs $cc_arch"
Alex Bennéed75402b2018-04-04 20:27:05 +0100537 eval "cross_cc_${cc_arch}=\$optarg"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +0200538 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
Alex Bennéed75402b2018-04-04 20:27:05 +0100539 ;;
aliguoriac0df512008-12-29 17:14:15 +0000540 esac
541done
aliguoriac0df512008-12-29 17:14:15 +0000542# OS specific
543# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100544# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000545
Peter Maydelle49d0212012-12-07 15:39:13 +0000546# Preferred compiler:
547# ${CC} (if set)
548# ${cross_prefix}gcc (if cross-prefix specified)
549# system compiler
550if test -z "${CC}${cross_prefix}"; then
551 cc="$host_cc"
552else
553 cc="${CC-${cross_prefix}gcc}"
554fi
555
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400556if test -z "${CXX}${cross_prefix}"; then
557 cxx="c++"
558else
559 cxx="${CXX-${cross_prefix}g++}"
560fi
561
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500562ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700563as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700564ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000565cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500566objcopy="${OBJCOPY-${cross_prefix}objcopy}"
567ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800568ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200569nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500570strip="${STRIP-${cross_prefix}strip}"
571windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300572pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
573query_pkg_config() {
574 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
575}
576pkg_config=query_pkg_config
Dave Airlie47c03742013-12-10 14:05:51 +1000577sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000578
Peter Maydell45d285a2013-10-21 21:03:06 +0100579# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
580ARFLAGS="${ARFLAGS-rv}"
581
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200582# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100583# We use -fwrapv to tell the compiler that we require a C dialect where
584# left shift of signed integers is well defined and has the expected
585# 2s-complement style results. (Both clang and gcc agree that it
586# provides these semantics.)
Thomas Huth7be41672019-01-07 11:25:22 +0100587QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400588QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100589QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200590QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200591QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100592if test "$debug_info" = "yes"; then
593 CFLAGS="-g $CFLAGS"
594 LDFLAGS="-g $LDFLAGS"
595fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200596
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300597# running configure in the source tree?
598# we know that's the case if configure is there.
599if test -f "./configure"; then
600 pwd_is_source_path="y"
601else
602 pwd_is_source_path="n"
603fi
604
aliguoriac0df512008-12-29 17:14:15 +0000605check_define() {
606cat > $TMPC <<EOF
607#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000608#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000609#endif
610int main(void) { return 0; }
611EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200612 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000613}
614
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200615check_include() {
616cat > $TMPC <<EOF
617#include <$1>
618int main(void) { return 0; }
619EOF
620 compile_object
621}
622
John Snow93b25862015-03-25 18:57:37 -0400623write_c_skeleton() {
624 cat > $TMPC <<EOF
625int main(void) { return 0; }
626EOF
627}
628
Peter Maydellbbea4052012-08-14 15:35:34 +0100629if check_define __linux__ ; then
630 targetos="Linux"
631elif check_define _WIN32 ; then
632 targetos='MINGW32'
633elif check_define __OpenBSD__ ; then
634 targetos='OpenBSD'
635elif check_define __sun__ ; then
636 targetos='SunOS'
637elif check_define __HAIKU__ ; then
638 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100639elif check_define __FreeBSD__ ; then
640 targetos='FreeBSD'
641elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
642 targetos='GNU/kFreeBSD'
643elif check_define __DragonFly__ ; then
644 targetos='DragonFly'
645elif check_define __NetBSD__; then
646 targetos='NetBSD'
647elif check_define __APPLE__; then
648 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100649else
Peter Maydell951fedf2017-07-13 16:15:32 +0100650 # This is a fatal error, but don't report it yet, because we
651 # might be going to just print the --help text, or it might
652 # be the result of a missing compiler.
653 targetos='bogus'
654 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100655fi
656
657# Some host OSes need non-standard checks for which CPU to use.
658# Note that these checks are broken for cross-compilation: if you're
659# cross-compiling to one of these OSes then you'll need to specify
660# the correct CPU with the --cpu option.
661case $targetos in
662Darwin)
663 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
664 # run 64-bit userspace code.
665 # If the user didn't specify a CPU explicitly and the kernel says this is
666 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
667 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
668 cpu="x86_64"
669 fi
670 ;;
671SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200672 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100673 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
674 cpu="x86_64"
675 fi
676esac
677
Juan Quintela2ff6b912009-08-03 14:45:55 +0200678if test ! -z "$cpu" ; then
679 # command line argument
680 :
681elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000682 cpu="i386"
683elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700684 if check_define __ILP32__ ; then
685 cpu="x32"
686 else
687 cpu="x86_64"
688 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000689elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000690 if check_define __arch64__ ; then
691 cpu="sparc64"
692 else
693 cpu="sparc"
694 fi
malcfdf7ed92009-01-14 18:39:52 +0000695elif check_define _ARCH_PPC ; then
696 if check_define _ARCH_PPC64 ; then
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700697 if check_define _LITTLE_ENDIAN ; then
698 cpu="ppc64le"
699 else
700 cpu="ppc64"
701 fi
malcfdf7ed92009-01-14 18:39:52 +0000702 else
703 cpu="ppc"
704 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200705elif check_define __mips__ ; then
706 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200707elif check_define __s390__ ; then
708 if check_define __s390x__ ; then
709 cpu="s390x"
710 else
711 cpu="s390"
712 fi
Alistair Francisc4f80542018-12-19 19:20:19 +0000713elif check_define __riscv ; then
714 if check_define _LP64 ; then
715 cpu="riscv64"
716 else
717 cpu="riscv32"
718 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100719elif check_define __arm__ ; then
720 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100721elif check_define __aarch64__ ; then
722 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000723else
Stefan Weil89138852016-05-16 15:10:20 +0200724 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000725fi
726
Peter Maydell359bc952011-12-24 13:07:25 +0000727ARCH=
728# Normalise host CPU name and set ARCH.
729# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000730case "$cpu" in
Thomas Huthee35e962019-09-28 21:03:34 +0200731 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
Peter Maydell898be3e2017-03-21 14:31:57 +0000732 supported_cpu="yes"
733 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700734 ppc64le)
735 ARCH="ppc64"
736 supported_cpu="yes"
Richard Hendersonf8378ac2019-05-01 15:38:18 -0700737 ;;
bellard7d132992003-03-06 23:23:54 +0000738 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000739 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000740 supported_cpu="yes"
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"
aurel32aaa5fa12008-04-11 22:04:22 +0000745 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100746 armv*b|armv*l|arm)
747 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000748 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000749 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100750 aarch64)
751 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000752 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100753 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200754 mips*)
755 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000756 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200757 ;;
blueswir131422552007-04-16 18:27:06 +0000758 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000759 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100760 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000761 ;;
bellard7d132992003-03-06 23:23:54 +0000762 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000763 # This will result in either an error or falling back to TCI later
764 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000765 ;;
766esac
Peter Maydell359bc952011-12-24 13:07:25 +0000767if test -z "$ARCH"; then
768 ARCH="$cpu"
769fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200770
bellard7d132992003-03-06 23:23:54 +0000771# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200772
Stacey Sonadfc3e92014-06-08 09:57:22 -0700773# host *BSD for user mode
774HOST_VARIANT_DIR=""
775
bellard7d132992003-03-06 23:23:54 +0000776case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000777MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200778 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100779 hax="yes"
Paolo Bonzini299e6f12019-02-14 18:35:53 +0100780 vhost_user="no"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200781 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200782 if check_include dsound.h; then
783 audio_drv_list="dsound"
784 else
785 audio_drv_list=""
786 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000787 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000788;;
ths5c40d2b2007-06-23 16:03:36 +0000789GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100790 bsd="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100791 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200792 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000793;;
bellard7d3505c2004-05-12 19:32:15 +0000794FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200795 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100796 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100797 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200798 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100799 # needed for kinfo_getvmmap(3) in libutil.h
800 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500801 # needed for kinfo_getproc
802 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100803 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700804 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000805 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000806;;
blueswir1c5e97232009-03-07 20:06:23 +0000807DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200808 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100809 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100810 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200811 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700812 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000813;;
bellard7d3505c2004-05-12 19:32:15 +0000814NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200815 bsd="yes"
Kamil Rytarowski604a5b92019-02-08 00:37:04 +0100816 hax="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100817 make="${MAKE-gmake}"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100818 audio_drv_list="oss try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200819 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200820 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700821 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200822 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000823;;
824OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200825 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100826 make="${MAKE-gmake}"
Gerd Hoffmannf92c7162019-01-24 12:20:52 +0100827 audio_drv_list="try-sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200828 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700829 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500830 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000831;;
bellard83fb7ad2004-07-05 21:25:26 +0000832Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200833 bsd="yes"
834 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100835 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500836 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800837 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200838 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200839 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200840 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200841 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200842 cocoa="yes"
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100843 audio_drv_list="coreaudio try-sdl"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200844 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200845 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200846 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100847 # Disable attempts to use ObjectiveC features in os/object.h since they
848 # won't work when we're compiling with gcc as a C compiler.
849 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700850 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000851 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000852;;
bellardec530c82006-04-25 22:36:06 +0000853SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200854 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100855 make="${MAKE-gmake}"
856 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400857 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200858 if test -f /usr/include/sys/soundcard.h ; then
Gerd Hoffmann6a485412019-01-24 12:20:55 +0100859 audio_drv_list="oss try-sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200860 fi
861 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000862# needed for CMSG_ macros in sys/socket.h
863 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
864# needed for TIOCWIN* defines in termios.h
865 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200866 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200867 solarisnetlibs="-lsocket -lnsl -lresolv"
868 LIBS="$solarisnetlibs $LIBS"
869 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000870;;
Andreas Färber179cf402010-09-20 00:50:43 +0200871Haiku)
872 haiku="yes"
873 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
874 LIBS="-lposix_error_mapper -lnetwork $LIBS"
875;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000876Linux)
Gerd Hoffmann71838342019-02-19 13:42:57 +0100877 audio_drv_list="try-pa oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200878 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200879 linux="yes"
880 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200881 kvm="yes"
Mao Zhongyie8d81a62018-11-16 14:33:03 -0600882 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000883 supported_os="yes"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +0200884 libudev="yes"
Peter Maydell898be3e2017-03-21 14:31:57 +0000885;;
bellard7d132992003-03-06 23:23:54 +0000886esac
887
bellard7d3505c2004-05-12 19:32:15 +0000888if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000889 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200890 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000891 fi
bellard7d3505c2004-05-12 19:32:15 +0000892fi
893
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100894: ${make=${MAKE-make}}
895: ${install=${INSTALL-install}}
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +0000896# We prefer python 3.x. A bare 'python' is traditionally
897# python 2.x, but some distros have it as python 3.x, so
898# we check that before python2
899python=
900for binary in "${PYTHON-python3}" python python2
901do
902 if has "$binary"
903 then
904 python="$binary"
905 break
906 fi
907done
Brade2d88302011-09-02 16:53:28 -0400908: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100909
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100910# Default objcc to clang if available, otherwise use CC
911if has clang; then
912 objcc=clang
913else
914 objcc="$cc"
915fi
916
Juan Quintela3457a3f2009-08-03 14:46:07 +0200917if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200918 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800919 DSOSUF=".dll"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100920 # MinGW needs -mthreads for TLS and macro _MT.
921 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100922 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400923 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100924 if compile_prog "" "-liberty" ; then
925 LIBS="-liberty $LIBS"
926 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200927 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200928 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300929 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300930 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200931 bindir="\${prefix}"
932 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200933 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200934 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300935 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200936fi
937
Anthony Liguori487fefd2009-06-11 13:28:25 -0500938werror=""
bellard85aa5182007-11-11 20:17:03 +0000939
bellard7d132992003-03-06 23:23:54 +0000940for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200941 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000942 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000943 --help|-h) show_help=yes
944 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400945 --version|-V) exec cat $source_path/VERSION
946 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000947 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000948 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000949 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000950 ;;
aliguoriac0df512008-12-29 17:14:15 +0000951 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000952 ;;
aliguoriac0df512008-12-29 17:14:15 +0000953 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000954 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000955 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000956 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400957 --cxx=*)
958 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200959 --iasl=*) iasl="$optarg"
960 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100961 --objcc=*) objcc="$optarg"
962 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000963 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000964 ;;
pbrook6a882642006-04-17 13:57:12 +0000965 --install=*) install="$optarg"
966 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000967 --python=*) python="$optarg"
968 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000969 --gcov=*) gcov_tool="$optarg"
970 ;;
Brade2d88302011-09-02 16:53:28 -0400971 --smbd=*) smbd="$optarg"
972 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200973 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000974 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100975 --extra-cxxflags=*)
976 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200977 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000978 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100979 --enable-debug-info)
980 ;;
981 --disable-debug-info)
982 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100983 --cross-cc-*)
984 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800985 --enable-modules)
986 modules="yes"
987 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000988 --disable-modules)
989 modules="no"
990 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200991 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000992 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000993 --target-list=*) target_list="$optarg"
Alex Bennée447e1332019-03-19 11:59:12 +0000994 if test "$target_list_exclude"; then
995 error_exit "Can't mix --target-list with --target-list-exclude"
996 fi
997 ;;
998 --target-list-exclude=*) target_list_exclude="$optarg"
999 if test "$target_list"; then
1000 error_exit "Can't mix --target-list-exclude with --target-list"
1001 fi
bellardde83cd02003-06-15 20:25:43 +00001002 ;;
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001003 --enable-trace-backends=*) trace_backends="$optarg"
1004 ;;
1005 # XXX: backwards compatibility
1006 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01001007 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +01001008 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +01001009 ;;
Paolo Bonzinif3494742019-01-23 14:56:17 +08001010 --with-default-devices) default_devices="yes"
1011 ;;
1012 --without-default-devices) default_devices="no"
1013 ;;
bellard7d132992003-03-06 23:23:54 +00001014 --enable-gprof) gprof="yes"
1015 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +00001016 --enable-gcov) gcov="yes"
1017 ;;
LoĂŻc Minier79427692010-01-31 12:23:45 +01001018 --static)
1019 static="yes"
1020 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +03001021 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +00001022 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001023 --mandir=*) mandir="$optarg"
1024 ;;
1025 --bindir=*) bindir="$optarg"
1026 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001027 --libdir=*) libdir="$optarg"
1028 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001029 --libexecdir=*) libexecdir="$optarg"
1030 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001031 --includedir=*) includedir="$optarg"
1032 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001033 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001034 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001035 --with-confsuffix=*) confsuffix="$optarg"
1036 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001037 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001038 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001039 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001040 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001041 --localstatedir=*) local_statedir="$optarg"
1042 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001043 --firmwarepath=*) firmwarepath="$optarg"
1044 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001045 --host=*|--build=*|\
1046 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001047 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001048 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1049 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1050 # These switches are silently ignored, for compatibility with
1051 # autoconf-generated configure scripts. This allows QEMU's
1052 # configure to be used by RPM and similar macros that set
1053 # lots of directory switches by default.
1054 ;;
bellard97a847b2003-08-10 21:36:04 +00001055 --disable-sdl) sdl="no"
1056 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001057 --enable-sdl) sdl="yes"
1058 ;;
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00001059 --disable-sdl-image) sdl_image="no"
1060 ;;
1061 --enable-sdl-image) sdl_image="yes"
1062 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001063 --disable-qom-cast-debug) qom_cast_debug="no"
1064 ;;
1065 --enable-qom-cast-debug) qom_cast_debug="yes"
1066 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301067 --disable-virtfs) virtfs="no"
1068 ;;
1069 --enable-virtfs) virtfs="yes"
1070 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001071 --disable-mpath) mpath="no"
1072 ;;
1073 --enable-mpath) mpath="yes"
1074 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001075 --disable-vnc) vnc="no"
1076 ;;
1077 --enable-vnc) vnc="yes"
1078 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001079 --oss-lib=*) oss_lib="$optarg"
1080 ;;
malc0c58ac12008-06-25 21:04:05 +00001081 --audio-drv-list=*) audio_drv_list="$optarg"
1082 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001083 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001084 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001085 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001086 ;;
aurel32f8393942009-04-13 18:45:38 +00001087 --enable-debug-tcg) debug_tcg="yes"
1088 ;;
1089 --disable-debug-tcg) debug_tcg="no"
1090 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001091 --enable-debug)
1092 # Enable debugging options that aren't excessively noisy
1093 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001094 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001095 debug="yes"
1096 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001097 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001098 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001099 --enable-sanitizers) sanitizers="yes"
1100 ;;
1101 --disable-sanitizers) sanitizers="no"
1102 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001103 --enable-sparse) sparse="yes"
1104 ;;
1105 --disable-sparse) sparse="no"
1106 ;;
aliguori1625af82009-04-05 17:41:02 +00001107 --disable-strip) strip_opt="no"
1108 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001109 --disable-vnc-sasl) vnc_sasl="no"
1110 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001111 --enable-vnc-sasl) vnc_sasl="yes"
1112 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001113 --disable-vnc-jpeg) vnc_jpeg="no"
1114 ;;
1115 --enable-vnc-jpeg) vnc_jpeg="yes"
1116 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001117 --disable-vnc-png) vnc_png="no"
1118 ;;
1119 --enable-vnc-png) vnc_png="yes"
1120 ;;
bellard443f1372004-06-04 11:13:20 +00001121 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001122 ;;
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02001123 --enable-slirp=git) slirp="git"
1124 ;;
Marc-André Lureau675b9b52019-02-12 17:25:23 +01001125 --enable-slirp=system) slirp="system"
1126 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001127 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001128 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001129 --enable-vde) vde="yes"
1130 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001131 --disable-netmap) netmap="no"
1132 ;;
1133 --enable-netmap) netmap="yes"
1134 ;;
aliguorie37630c2009-04-22 15:19:10 +00001135 --disable-xen) xen="no"
1136 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001137 --enable-xen) xen="yes"
1138 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001139 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1140 ;;
1141 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1142 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001143 --disable-brlapi) brlapi="no"
1144 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001145 --enable-brlapi) brlapi="yes"
1146 ;;
balrogfb599c92008-09-28 23:49:55 +00001147 --disable-bluez) bluez="no"
1148 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001149 --enable-bluez) bluez="yes"
1150 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001151 --disable-kvm) kvm="no"
1152 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001153 --enable-kvm) kvm="yes"
1154 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001155 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001156 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001157 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001158 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001159 --disable-hvf) hvf="no"
1160 ;;
1161 --enable-hvf) hvf="yes"
1162 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001163 --disable-whpx) whpx="no"
1164 ;;
1165 --enable-whpx) whpx="yes"
1166 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001167 --disable-tcg-interpreter) tcg_interpreter="no"
1168 ;;
1169 --enable-tcg-interpreter) tcg_interpreter="yes"
1170 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001171 --disable-cap-ng) cap_ng="no"
1172 ;;
1173 --enable-cap-ng) cap_ng="yes"
1174 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001175 --disable-tcg) tcg="no"
1176 ;;
1177 --enable-tcg) tcg="yes"
1178 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001179 --disable-malloc-trim) malloc_trim="no"
1180 ;;
1181 --enable-malloc-trim) malloc_trim="yes"
1182 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001183 --disable-spice) spice="no"
1184 ;;
1185 --enable-spice) spice="yes"
1186 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001187 --disable-libiscsi) libiscsi="no"
1188 ;;
1189 --enable-libiscsi) libiscsi="yes"
1190 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001191 --disable-libnfs) libnfs="no"
1192 ;;
1193 --enable-libnfs) libnfs="yes"
1194 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001195 --enable-profiler) profiler="yes"
1196 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001197 --disable-cocoa) cocoa="no"
1198 ;;
malcc2de5c92008-06-28 19:13:06 +00001199 --enable-cocoa)
1200 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001201 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001202 ;;
pbrookcad25d62006-03-19 16:31:11 +00001203 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001204 ;;
pbrookcad25d62006-03-19 16:31:11 +00001205 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001206 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001207 --disable-user)
1208 linux_user="no" ;
1209 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001210 ;;
1211 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001212 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001213 ;;
ths831b7822007-01-18 20:06:33 +00001214 --enable-linux-user) linux_user="yes"
1215 ;;
blueswir184778502008-10-26 20:33:16 +00001216 --disable-bsd-user) bsd_user="no"
1217 ;;
1218 --enable-bsd-user) bsd_user="yes"
1219 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001220 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001221 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001222 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001223 ;;
bellard85aa5182007-11-11 20:17:03 +00001224 --enable-werror) werror="yes"
1225 ;;
1226 --disable-werror) werror="no"
1227 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001228 --enable-stack-protector) stack_protector="yes"
1229 ;;
1230 --disable-stack-protector) stack_protector="no"
1231 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001232 --disable-curses) curses="no"
1233 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001234 --enable-curses) curses="yes"
1235 ;;
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001236 --disable-iconv) iconv="no"
1237 ;;
1238 --enable-iconv) iconv="yes"
1239 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001240 --disable-curl) curl="no"
1241 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001242 --enable-curl) curl="yes"
1243 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001244 --disable-fdt) fdt="no"
1245 ;;
1246 --enable-fdt) fdt="yes"
1247 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001248 --disable-linux-aio) linux_aio="no"
1249 ;;
1250 --enable-linux-aio) linux_aio="yes"
1251 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001252 --disable-attr) attr="no"
1253 ;;
1254 --enable-attr) attr="yes"
1255 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001256 --disable-membarrier) membarrier="no"
1257 ;;
1258 --enable-membarrier) membarrier="yes"
1259 ;;
ths77755342008-11-27 15:45:16 +00001260 --disable-blobs) blobs="no"
1261 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001262 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001263 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001264 --with-coroutine=*) coroutine="$optarg"
1265 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001266 --disable-coroutine-pool) coroutine_pool="no"
1267 ;;
1268 --enable-coroutine-pool) coroutine_pool="yes"
1269 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001270 --enable-debug-stack-usage) debug_stack_usage="yes"
1271 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001272 --enable-crypto-afalg) crypto_afalg="yes"
1273 ;;
1274 --disable-crypto-afalg) crypto_afalg="no"
1275 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001276 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001277 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001278 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001279 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001280 --disable-vhost-net) vhost_net="no"
1281 ;;
1282 --enable-vhost-net) vhost_net="yes"
1283 ;;
Gonglei042cea22018-03-01 21:46:28 +08001284 --disable-vhost-crypto) vhost_crypto="no"
1285 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001286 --enable-vhost-crypto) vhost_crypto="yes"
Gonglei042cea22018-03-01 21:46:28 +08001287 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001288 --disable-vhost-scsi) vhost_scsi="no"
1289 ;;
1290 --enable-vhost-scsi) vhost_scsi="yes"
1291 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001292 --disable-vhost-vsock) vhost_vsock="no"
1293 ;;
1294 --enable-vhost-vsock) vhost_vsock="yes"
1295 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001296 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001297 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001298 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001299 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001300 --disable-rbd) rbd="no"
1301 ;;
1302 --enable-rbd) rbd="yes"
1303 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001304 --disable-xfsctl) xfs="no"
1305 ;;
1306 --enable-xfsctl) xfs="yes"
1307 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001308 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001309 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001310 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001311 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001312 --disable-libusb) libusb="no"
1313 ;;
1314 --enable-libusb) libusb="yes"
1315 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001316 --disable-usb-redir) usb_redir="no"
1317 ;;
1318 --enable-usb-redir) usb_redir="yes"
1319 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001320 --disable-zlib-test) zlib="no"
1321 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001322 --disable-lzo) lzo="no"
1323 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001324 --enable-lzo) lzo="yes"
1325 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001326 --disable-snappy) snappy="no"
1327 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001328 --enable-snappy) snappy="yes"
1329 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001330 --disable-bzip2) bzip2="no"
1331 ;;
1332 --enable-bzip2) bzip2="yes"
1333 ;;
Julio Faracco83bc1f92018-11-05 13:08:04 -02001334 --enable-lzfse) lzfse="yes"
1335 ;;
1336 --disable-lzfse) lzfse="no"
1337 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001338 --enable-guest-agent) guest_agent="yes"
1339 ;;
1340 --disable-guest-agent) guest_agent="no"
1341 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001342 --enable-guest-agent-msi) guest_agent_msi="yes"
1343 ;;
1344 --disable-guest-agent-msi) guest_agent_msi="no"
1345 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001346 --with-vss-sdk) vss_win32_sdk=""
1347 ;;
1348 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1349 ;;
1350 --without-vss-sdk) vss_win32_sdk="no"
1351 ;;
1352 --with-win-sdk) win_sdk=""
1353 ;;
1354 --with-win-sdk=*) win_sdk="$optarg"
1355 ;;
1356 --without-win-sdk) win_sdk="no"
1357 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001358 --enable-tools) want_tools="yes"
1359 ;;
1360 --disable-tools) want_tools="no"
1361 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001362 --enable-seccomp) seccomp="yes"
1363 ;;
1364 --disable-seccomp) seccomp="no"
1365 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301366 --disable-glusterfs) glusterfs="no"
1367 ;;
Liam Merwick86583a02018-10-19 21:38:59 +01001368 --disable-avx2) avx2_opt="no"
1369 ;;
1370 --enable-avx2) avx2_opt="yes"
1371 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301372 --enable-glusterfs) glusterfs="yes"
1373 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001374 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1375 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001376 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001377 --enable-vhdx|--disable-vhdx)
1378 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1379 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001380 --enable-uuid|--disable-uuid)
1381 echo "$0: $opt is obsolete, UUID support is always built" >&2
1382 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001383 --disable-gtk) gtk="no"
1384 ;;
1385 --enable-gtk) gtk="yes"
1386 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001387 --tls-priority=*) tls_priority="$optarg"
1388 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001389 --disable-gnutls) gnutls="no"
1390 ;;
1391 --enable-gnutls) gnutls="yes"
1392 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001393 --disable-nettle) nettle="no"
1394 ;;
1395 --enable-nettle) nettle="yes"
1396 ;;
1397 --disable-gcrypt) gcrypt="no"
1398 ;;
1399 --enable-gcrypt) gcrypt="yes"
1400 ;;
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001401 --disable-auth-pam) auth_pam="no"
1402 ;;
1403 --enable-auth-pam) auth_pam="yes"
1404 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001405 --enable-rdma) rdma="yes"
1406 ;;
1407 --disable-rdma) rdma="no"
1408 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001409 --enable-pvrdma) pvrdma="yes"
1410 ;;
1411 --disable-pvrdma) pvrdma="no"
1412 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001413 --disable-vte) vte="no"
1414 ;;
1415 --enable-vte) vte="yes"
1416 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001417 --disable-virglrenderer) virglrenderer="no"
1418 ;;
1419 --enable-virglrenderer) virglrenderer="yes"
1420 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001421 --disable-tpm) tpm="no"
1422 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001423 --enable-tpm) tpm="yes"
1424 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001425 --disable-libssh) libssh="no"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001426 ;;
Pino Toscanob10d49d2019-06-20 22:08:40 +02001427 --enable-libssh) libssh="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001428 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001429 --disable-live-block-migration) live_block_migration="no"
1430 ;;
1431 --enable-live-block-migration) live_block_migration="yes"
1432 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001433 --disable-numa) numa="no"
1434 ;;
1435 --enable-numa) numa="yes"
1436 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001437 --disable-libxml2) libxml2="no"
1438 ;;
1439 --enable-libxml2) libxml2="yes"
1440 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001441 --disable-tcmalloc) tcmalloc="no"
1442 ;;
1443 --enable-tcmalloc) tcmalloc="yes"
1444 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001445 --disable-jemalloc) jemalloc="no"
1446 ;;
1447 --enable-jemalloc) jemalloc="yes"
1448 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001449 --disable-replication) replication="no"
1450 ;;
1451 --enable-replication) replication="yes"
1452 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001453 --disable-vxhs) vxhs="no"
1454 ;;
1455 --enable-vxhs) vxhs="yes"
1456 ;;
Jeff Cody2f740132018-11-07 07:36:44 +01001457 --disable-bochs) bochs="no"
1458 ;;
1459 --enable-bochs) bochs="yes"
1460 ;;
1461 --disable-cloop) cloop="no"
1462 ;;
1463 --enable-cloop) cloop="yes"
1464 ;;
1465 --disable-dmg) dmg="no"
1466 ;;
1467 --enable-dmg) dmg="yes"
1468 ;;
1469 --disable-qcow1) qcow1="no"
1470 ;;
1471 --enable-qcow1) qcow1="yes"
1472 ;;
1473 --disable-vdi) vdi="no"
1474 ;;
1475 --enable-vdi) vdi="yes"
1476 ;;
1477 --disable-vvfat) vvfat="no"
1478 ;;
1479 --enable-vvfat) vvfat="yes"
1480 ;;
1481 --disable-qed) qed="no"
1482 ;;
1483 --enable-qed) qed="yes"
1484 ;;
1485 --disable-parallels) parallels="no"
1486 ;;
1487 --enable-parallels) parallels="yes"
1488 ;;
1489 --disable-sheepdog) sheepdog="no"
1490 ;;
1491 --enable-sheepdog) sheepdog="yes"
1492 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001493 --disable-vhost-user) vhost_user="no"
1494 ;;
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001495 --enable-vhost-user) vhost_user="yes"
1496 ;;
1497 --disable-vhost-kernel) vhost_kernel="no"
1498 ;;
1499 --enable-vhost-kernel) vhost_kernel="yes"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001500 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001501 --disable-capstone) capstone="no"
1502 ;;
1503 --enable-capstone) capstone="yes"
1504 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001505 --enable-capstone=git) capstone="git"
1506 ;;
1507 --enable-capstone=system) capstone="system"
1508 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001509 --with-git=*) git="$optarg"
1510 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001511 --enable-git-update) git_update=yes
1512 ;;
1513 --disable-git-update) git_update=no
1514 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001515 --enable-debug-mutex) debug_mutex=yes
1516 ;;
1517 --disable-debug-mutex) debug_mutex=no
1518 ;;
Junyan He17824402018-07-18 15:47:59 +08001519 --enable-libpmem) libpmem=yes
1520 ;;
1521 --disable-libpmem) libpmem=no
1522 ;;
James Le Cuirot75411912019-09-14 15:51:55 +01001523 --enable-xkbcommon) xkbcommon=yes
1524 ;;
1525 --disable-xkbcommon) xkbcommon=no
1526 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001527 *)
1528 echo "ERROR: unknown option $opt"
1529 echo "Try '$0 --help' for more information"
1530 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001531 ;;
bellard7d132992003-03-06 23:23:54 +00001532 esac
1533done
1534
bellard40293e52008-01-31 11:32:10 +00001535case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001536 ppc)
1537 CPU_CFLAGS="-m32"
1538 LDFLAGS="-m32 $LDFLAGS"
1539 ;;
1540 ppc64)
1541 CPU_CFLAGS="-m64"
1542 LDFLAGS="-m64 $LDFLAGS"
1543 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001544 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001545 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1546 LDFLAGS="-m32 -mv8plus $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001547 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001548 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001549 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001550 LDFLAGS="-m64 $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001551 ;;
ths76d83bd2007-11-18 21:22:10 +00001552 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001553 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001554 LDFLAGS="-m31 $LDFLAGS"
1555 ;;
1556 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001557 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001558 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001559 ;;
bellard40293e52008-01-31 11:32:10 +00001560 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001561 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001562 LDFLAGS="-m32 $LDFLAGS"
bellard40293e52008-01-31 11:32:10 +00001563 ;;
1564 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001565 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1566 # If we truly care, we should simply detect this case at
1567 # runtime and generate the fallback to serial emulation.
1568 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001569 LDFLAGS="-m64 $LDFLAGS"
Paul Brook379f6692009-07-17 12:48:08 +01001570 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001571 x32)
1572 CPU_CFLAGS="-mx32"
1573 LDFLAGS="-mx32 $LDFLAGS"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001574 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001575 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001576esac
1577
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02001578eval "cross_cc_${cpu}=\$host_cc"
1579cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001580QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001581
Peter Maydellaffc88c2016-06-13 11:32:24 +01001582# For user-mode emulation the host arch has to be one we explicitly
1583# support, even if we're using TCI.
1584if [ "$ARCH" = "unknown" ]; then
1585 bsd_user="no"
1586 linux_user="no"
1587fi
1588
Peter Maydell60e0df22011-05-03 14:50:13 +01001589default_target_list=""
1590
Peter Maydell6e92f822013-05-20 16:16:15 +01001591mak_wilds=""
1592
1593if [ "$softmmu" = "yes" ]; then
1594 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001595fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001596if [ "$linux_user" = "yes" ]; then
1597 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001598fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001599if [ "$bsd_user" = "yes" ]; then
1600 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001601fi
1602
Alex Bennée447e1332019-03-19 11:59:12 +00001603if test -z "$target_list_exclude"; then
1604 for config in $mak_wilds; do
1605 default_target_list="${default_target_list} $(basename "$config" .mak)"
1606 done
1607else
1608 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1609 for config in $mak_wilds; do
1610 target="$(basename "$config" .mak)"
1611 exclude="no"
1612 for excl in $exclude_list; do
1613 if test "$excl" = "$target"; then
1614 exclude="yes"
1615 break;
1616 fi
1617 done
1618 if test "$exclude" = "no"; then
1619 default_target_list="${default_target_list} $target"
1620 fi
1621 done
1622fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001623
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001624# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001625trace_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 +01001626
pbrookaf5db582006-04-08 14:26:41 +00001627if test x"$show_help" = x"yes" ; then
1628cat << EOF
1629
1630Usage: configure [options]
1631Options: [defaults in brackets after descriptions]
1632
Stefan Weil08fb77e2013-12-18 22:09:39 +01001633Standard options:
1634 --help print this message
1635 --prefix=PREFIX install in PREFIX [$prefix]
1636 --interp-prefix=PREFIX where to find shared libraries, etc.
1637 use %M for cpu name [$interp_prefix]
1638 --target-list=LIST set target list (default: build everything)
1639$(echo Available targets: $default_target_list | \
1640 fold -s -w 53 | sed -e 's/^/ /')
Alex Bennée447e1332019-03-19 11:59:12 +00001641 --target-list-exclude=LIST exclude a set of targets from the default target-list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001642
1643Advanced options (experts only):
Stefan Weil08fb77e2013-12-18 22:09:39 +01001644 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1645 --cc=CC use C compiler CC [$cc]
1646 --iasl=IASL use ACPI compiler IASL [$iasl]
1647 --host-cc=CC use C compiler CC [$host_cc] for code run at
1648 build time
1649 --cxx=CXX use C++ compiler CXX [$cxx]
1650 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1651 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001652 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001653 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001654 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001655 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001656 --make=MAKE use specified make [$make]
1657 --install=INSTALL use specified install [$install]
1658 --python=PYTHON use specified python [$python]
1659 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001660 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001661 --static enable static build [$static]
1662 --mandir=PATH install man pages in PATH
1663 --datadir=PATH install firmware in PATH$confsuffix
1664 --docdir=PATH install documentation in PATH$confsuffix
1665 --bindir=PATH install binaries in PATH
1666 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001667 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001668 --sysconfdir=PATH install config in PATH$confsuffix
1669 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001670 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001671 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001672 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001673 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001674 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001675 --disable-strip disable stripping binaries
1676 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001677 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001678 --audio-drv-list=LIST set audio drivers list:
1679 Available drivers: $audio_possible_drivers
1680 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1681 --block-drv-rw-whitelist=L
1682 set block driver read-write whitelist
1683 (affects only QEMU, not qemu-img)
1684 --block-drv-ro-whitelist=L
1685 set block driver read-only whitelist
1686 (affects only QEMU, not qemu-img)
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02001687 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001688 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001689 --with-trace-file=NAME Full PATH,NAME of file to store traces
1690 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001691 --disable-slirp disable SLIRP userspace network connectivity
1692 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001693 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001694 --oss-lib path to OSS library
1695 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001696 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001697 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001698 --enable-gcov enable test coverage analysis with gcov
1699 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001700 --disable-blobs disable installing provided firmware blobs
1701 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1702 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001703 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001704 --enable-gprof QEMU profiling with gprof
1705 --enable-profiler profiler support
Lin Mac12d66a2017-03-10 18:14:05 +08001706 --enable-debug-stack-usage
1707 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001708
1709Optional features, enabled with --enable-FEATURE and
1710disabled with --disable-FEATURE, default is enabled if available:
1711
1712 system all system emulation targets
1713 user supported user emulation targets
1714 linux-user all linux usermode emulation targets
1715 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001716 docs build documentation
1717 guest-agent build the QEMU Guest Agent
1718 guest-agent-msi build guest agent Windows MSI installation package
1719 pie Position Independent Executables
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001720 modules modules support (non-Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001721 debug-tcg TCG debugging (default is disabled)
1722 debug-info debugging information
1723 sparse sparse checker
1724
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001725 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001726 nettle nettle cryptography support
1727 gcrypt libgcrypt cryptography support
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01001728 auth-pam PAM access control
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001729 sdl SDL UI
Markus Armbruster04c6e162019-05-17 20:32:46 +02001730 sdl-image SDL Image support for icons
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001731 gtk gtk UI
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001732 vte vte support for the gtk UI
1733 curses curses UI
Samuel Thibaulte08bb302019-03-11 14:51:26 +01001734 iconv font glyph conversion support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001735 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001736 vnc-sasl SASL encryption for VNC server
1737 vnc-jpeg JPEG lossy compression for VNC server
1738 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001739 cocoa Cocoa UI (Mac OS X only)
1740 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001741 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001742 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001743 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001744 brlapi BrlAPI (Braile)
1745 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001746 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001747 fdt fdt device tree
1748 bluez bluez stack connectivity
1749 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001750 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001751 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001752 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001753 rdma Enable RDMA-based migration
1754 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001755 vde support for vde network
1756 netmap support for netmap network
1757 linux-aio Linux AIO support
1758 cap-ng libcap-ng support
1759 attr attr and xattr support
Paolo Bonzini299e6f12019-02-14 18:35:53 +01001760 vhost-net vhost-net kernel acceleration support
1761 vhost-vsock virtio sockets device support
1762 vhost-scsi vhost-scsi kernel target support
1763 vhost-crypto vhost-user-crypto backend support
1764 vhost-kernel vhost kernel backend support
1765 vhost-user vhost-user backend support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001766 spice spice
1767 rbd rados block device (rbd)
1768 libiscsi iscsi support
1769 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001770 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001771 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001772 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001773 usb-redir usb network redirection support
1774 lzo support of lzo compression library
1775 snappy support of snappy compression library
1776 bzip2 support of bzip2 compression library
1777 (for reading bzip2-compressed dmg images)
Julio Faracco83bc1f92018-11-05 13:08:04 -02001778 lzfse support of lzfse compression library
1779 (for reading lzfse-compressed dmg images)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001780 seccomp seccomp support
1781 coroutine-pool coroutine freelist (better performance)
1782 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001783 tpm TPM support
Pino Toscanob10d49d2019-06-20 22:08:40 +02001784 libssh ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001785 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001786 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001787 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001788 jemalloc jemalloc support
Liam Merwick86583a02018-10-19 21:38:59 +01001789 avx2 AVX2 optimization support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001790 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001791 opengl opengl support
1792 virglrenderer virgl rendering support
1793 xfsctl xfsctl support
1794 qom-cast-debug cast debugging support
Cleber Rosa8de73fa2019-02-07 14:36:03 -05001795 tools build qemu-io, qemu-nbd and qemu-img tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001796 vxhs Veritas HyperScale vDisk backend support
Jeff Cody2f740132018-11-07 07:36:44 +01001797 bochs bochs image format support
1798 cloop cloop image format support
1799 dmg dmg image format support
1800 qcow1 qcow v1 image format support
1801 vdi vdi image format support
1802 vvfat vvfat image format support
1803 qed qed image format support
1804 parallels parallels image format support
1805 sheepdog sheepdog block driver support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001806 crypto-afalg Linux AF_ALG crypto backend driver
Richard Henderson8ca80762017-09-14 09:41:12 -07001807 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001808 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001809 libpmem libpmem support
James Le Cuirot75411912019-09-14 15:51:55 +01001810 xkbcommon xkbcommon support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001811
1812NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001813EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001814exit 0
pbrookaf5db582006-04-08 14:26:41 +00001815fi
1816
Thomas Huth9c790242019-03-11 11:20:34 +01001817# Remove old dependency files to make sure that they get properly regenerated
Thomas Huthbb768f72019-05-10 10:11:59 +02001818rm -f */config-devices.mak.d
Thomas Huth9c790242019-03-11 11:20:34 +01001819
Daniel P. Berrangéfaf44142019-03-27 17:07:01 +00001820if test -z "$python"
1821then
1822 error_exit "Python not found. Use --python=/path/to/python"
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001823fi
1824
1825# Note that if the Python conditional here evaluates True we will exit
1826# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001827if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1828 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001829 "Use --python=/path/to/python to specify a supported Python."
1830fi
1831
Cleber Rosa755ee702018-11-09 10:07:07 -05001832# Preserve python version since some functionality is dependent on it
Cleber Rosa406ab2f2019-08-26 11:58:32 -04001833python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
Cleber Rosa755ee702018-11-09 10:07:07 -05001834
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001835# Suppress writing compiled files
1836python="$python -B"
1837
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001838# Check that the C compiler works. Doing this here before testing
1839# the host CPU ensures that we had a valid CC to autodetect the
1840# $cpu var (and we should bail right here if that's not the case).
1841# It also allows the help message to be printed without a CC.
1842write_c_skeleton;
1843if compile_object ; then
1844 : C compiler works ok
1845else
1846 error_exit "\"$cc\" either does not exist or does not work"
1847fi
1848if ! compile_prog ; then
1849 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1850fi
1851
Peter Maydell359bc952011-12-24 13:07:25 +00001852# Now we have handled --enable-tcg-interpreter and know we're not just
1853# printing the help message, bail out if the host CPU isn't supported.
1854if test "$ARCH" = "unknown"; then
1855 if test "$tcg_interpreter" = "yes" ; then
1856 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001857 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001858 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001859 fi
1860fi
1861
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001862# Consult white-list to determine whether to enable werror
1863# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001864if test -z "$werror" ; then
Alexey Kardashevskiyfd737452019-02-28 15:35:03 +11001865 if test -e "$source_path/.git" && \
Eric Blakee633a5c2019-02-04 20:39:37 -06001866 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001867 werror="yes"
1868 else
1869 werror="no"
1870 fi
1871fi
1872
Peter Maydellfb59dab2017-03-28 14:01:52 +01001873if test "$bogus_os" = "yes"; then
1874 # Now that we know that we're not printing the help and that
1875 # the compiler works (so the results of the check_defines we used
1876 # to identify the OS are reliable), if we didn't recognize the
1877 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001878 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001879fi
1880
Thomas Huthefc6c072018-12-03 10:12:32 +01001881# Check whether the compiler matches our minimum requirements:
1882cat > $TMPC << EOF
1883#if defined(__clang_major__) && defined(__clang_minor__)
1884# ifdef __apple_build_version__
1885# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1886# error You need at least XCode Clang v5.1 to compile QEMU
1887# endif
1888# else
1889# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1890# error You need at least Clang v3.4 to compile QEMU
1891# endif
1892# endif
1893#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1894# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1895# error You need at least GCC v4.8 to compile QEMU
1896# endif
1897#else
1898# error You either need GCC or Clang to compiler QEMU
1899#endif
1900int main (void) { return 0; }
1901EOF
1902if ! compile_prog "" "" ; then
1903 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1904fi
1905
Paolo Bonzini8d050952010-12-23 11:43:52 +01001906gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1907gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001908gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001909gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001910gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Thomas Huthe6e90fe2019-04-24 13:05:25 +02001911gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001912# Note that we do not add -Werror to gcc_flags here, because that would
1913# enable it for all configure tests. If a configure test failed due
1914# to -Werror this would just silently disable some features,
1915# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001916
1917cc_has_warning_flag() {
1918 write_c_skeleton;
1919
Peter Maydella1d29d62012-10-27 22:19:07 +01001920 # Use the positive sense of the flag when testing for -Wno-wombat
1921 # support (gcc will happily accept the -Wno- form of unknown
1922 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001923 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1924 compile_prog "-Werror $optflag" ""
1925}
1926
1927for flag in $gcc_flags; do
1928 if cc_has_warning_flag $flag ; then
1929 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001930 fi
1931done
1932
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001933if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001934 cat > $TMPC << EOF
1935int main(int argc, char *argv[])
1936{
1937 char arr[64], *p = arr, *c = argv[0];
1938 while (*c) {
1939 *p++ = *c++;
1940 }
1941 return 0;
1942}
1943EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001944 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001945 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001946 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001947 # We need to check both a compile and a link, since some compiler
1948 # setups fail only on a .c->.o compile and some only at link time
1949 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1950 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001951 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001952 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001953 break
1954 fi
1955 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001956 if test "$stack_protector" = yes; then
1957 if test $sp_on = 0; then
1958 error_exit "Stack protector not supported"
1959 fi
1960 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001961fi
1962
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001963# Disable -Wmissing-braces on older compilers that warn even for
1964# the "universal" C zero initializer {0}.
1965cat > $TMPC << EOF
1966struct {
1967 int a[2];
1968} x = {0};
1969EOF
1970if compile_object "-Werror" "" ; then
1971 :
1972else
1973 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1974fi
1975
Marc-André Lureau21e709a2019-07-18 16:04:13 +04001976# Our module code doesn't support Windows
1977if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
1978 error_exit "Modules are not available for Windows"
1979fi
1980
Thomas Huthd376e9d2018-12-03 11:41:38 +01001981# Static linking is not possible with modules or PIE
Avi Kivity40d64442011-11-15 20:12:17 +02001982if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001983 if test "$modules" = "yes" ; then
1984 error_exit "static and modules are mutually incompatible"
1985 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001986 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001987 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001988 else
1989 pie="no"
1990 fi
1991fi
1992
Emilio G. Cota768b7852015-04-29 13:09:02 +02001993# Unconditional check for compiler __thread support
1994 cat > $TMPC << EOF
1995static __thread int tls_var;
1996int main(void) { return tls_var; }
1997EOF
1998
1999if ! compile_prog "-Werror" "" ; then
2000 error_exit "Your compiler does not support the __thread specifier for " \
2001 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2002fi
2003
Avi Kivity40d64442011-11-15 20:12:17 +02002004if test "$pie" = ""; then
2005 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07002006 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02002007 ;;
2008 *)
2009 pie="no"
2010 ;;
2011 esac
2012fi
2013
2014if test "$pie" != "no" ; then
2015 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02002016
2017#ifdef __linux__
2018# define THREAD __thread
2019#else
2020# define THREAD
2021#endif
2022
2023static THREAD int tls_var;
2024
2025int main(void) { return tls_var; }
2026
Avi Kivity40d64442011-11-15 20:12:17 +02002027EOF
Alex Bennée412aeac2019-08-15 19:41:51 +00002028 # check we support --no-pie first...
2029 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2030 CFLAGS_NOPIE="-fno-pie"
2031 LDFLAGS_NOPIE="-nopie"
2032 fi
2033
Avi Kivity40d64442011-11-15 20:12:17 +02002034 if compile_prog "-fPIE -DPIE" "-pie"; then
2035 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2036 LDFLAGS="-pie $LDFLAGS"
2037 pie="yes"
2038 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2039 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2040 fi
2041 else
2042 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002043 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02002044 else
2045 echo "Disabling PIE due to missing toolchain support"
2046 pie="no"
2047 fi
2048 fi
2049fi
2050
Paolo Bonzini09dada42013-04-17 16:26:47 +02002051##########################################
2052# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2053# use i686 as default anyway, but for those that don't, an explicit
2054# specification is necessary
2055
2056if test "$cpu" = "i386"; then
2057 cat > $TMPC << EOF
2058static int sfaa(int *ptr)
2059{
2060 return __sync_fetch_and_and(ptr, 0);
2061}
2062
2063int main(void)
2064{
2065 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02002066 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02002067 sfaa(&val);
2068 return val;
2069}
2070EOF
2071 if ! compile_prog "" "" ; then
2072 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2073 fi
2074fi
2075
2076#########################################
bellardec530c82006-04-25 22:36:06 +00002077# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02002078
bellardec530c82006-04-25 22:36:06 +00002079if test "$solaris" = "yes" ; then
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002080 if has $install; then
2081 :
2082 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002083 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2084 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2085 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00002086 fi
Stefan Weil89138852016-05-16 15:10:20 +02002087 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002088 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2089 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2090 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00002091 fi
LoĂŻc Minier6792aa12010-01-20 11:35:54 +01002092 if has ar; then
2093 :
2094 else
bellardec530c82006-04-25 22:36:06 +00002095 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002096 error_exit "No path includes ar" \
2097 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00002098 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01002099 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00002100 fi
ths5fafdf22007-09-16 21:08:06 +00002101fi
bellardec530c82006-04-25 22:36:06 +00002102
Stefan Weilafb63eb2012-09-26 22:04:38 +02002103if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002104 for target in $default_target_list; do
2105 supported_target $target 2>/dev/null && \
2106 target_list="$target_list $target"
2107 done
2108 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002109else
Stefan Weil89138852016-05-16 15:10:20 +02002110 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002111 for target in $target_list; do
2112 # Check that we recognised the target name; this allows a more
2113 # friendly error message than if we let it fall through.
2114 case " $default_target_list " in
2115 *" $target "*)
2116 ;;
2117 *)
2118 error_exit "Unknown target name '$target'"
2119 ;;
2120 esac
2121 supported_target $target || exit 1
2122 done
bellard5327cf42005-01-10 23:18:50 +00002123fi
Peter Maydell25b48332013-05-20 16:16:16 +01002124
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002125# see if system emulation was really requested
2126case " $target_list " in
2127 *"-softmmu "*) softmmu=yes
2128 ;;
2129 *) softmmu=no
2130 ;;
2131esac
bellard5327cf42005-01-10 23:18:50 +00002132
Juan Quintela249247c2009-08-12 18:20:25 +02002133feature_not_found() {
2134 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002135 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002136
Peter Maydell76ad07a2013-04-08 12:11:26 +01002137 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002138 "configure was not able to find it." \
2139 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002140}
2141
bellard7d132992003-03-06 23:23:54 +00002142# ---
2143# big/little endian test
2144cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002145short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2146short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2147extern int foo(short *, short *);
2148int main(int argc, char *argv[]) {
2149 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002150}
2151EOF
2152
Mike Frysinger61cc9192013-06-30 23:30:18 -04002153if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002154 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002155 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002156 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002157 bigendian="no"
2158 else
2159 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002160 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002161else
2162 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002163fi
2164
Juan Quintelab0a47e72009-08-12 18:29:49 +02002165##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002166# cocoa implies not SDL or GTK
2167# (the cocoa UI code currently assumes it is always the active UI
2168# and doesn't interact well with other UI frontend code)
2169if test "$cocoa" = "yes"; then
2170 if test "$sdl" = "yes"; then
2171 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2172 fi
2173 if test "$gtk" = "yes"; then
2174 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2175 fi
2176 gtk=no
2177 sdl=no
2178fi
2179
Eric Blake6b39b062016-10-11 10:46:23 -05002180# Some versions of Mac OS X incorrectly define SIZE_MAX
2181cat > $TMPC << EOF
2182#include <stdint.h>
2183#include <stdio.h>
2184int main(int argc, char *argv[]) {
2185 return printf("%zu", SIZE_MAX);
2186}
2187EOF
2188have_broken_size_max=no
2189if ! compile_object -Werror ; then
2190 have_broken_size_max=yes
2191fi
2192
Peter Maydella30878e2015-08-14 16:10:52 +01002193##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002194# L2TPV3 probe
2195
2196cat > $TMPC <<EOF
2197#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002198#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002199int main(void) { return sizeof(struct mmsghdr); }
2200EOF
2201if compile_prog "" "" ; then
2202 l2tpv3=yes
2203else
2204 l2tpv3=no
2205fi
2206
Paolo Bonzini299e6f12019-02-14 18:35:53 +01002207#########################################
2208# vhost interdependencies and host support
2209
2210# vhost backends
2211test "$vhost_user" = "" && vhost_user=yes
2212if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2213 error_exit "vhost-user isn't available on win32"
2214fi
2215test "$vhost_kernel" = "" && vhost_kernel=$linux
2216if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2217 error_exit "vhost-kernel is only available on Linux"
2218fi
2219
2220# vhost-kernel devices
2221test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2222if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2223 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2224fi
2225test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2226if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2227 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2228fi
2229
2230# vhost-user backends
2231test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2232if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2233 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2234fi
2235test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2236if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2237 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2238fi
2239
2240# OR the vhost-kernel and vhost-user values for simplicity
2241if test "$vhost_net" = ""; then
2242 test "$vhost_net_user" = "yes" && vhost_net=yes
2243 test "$vhost_kernel" = "yes" && vhost_net=yes
2244fi
2245
Gonglei015a33b2014-07-01 20:58:08 +08002246##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002247# MinGW / Mingw-w64 localtime_r/gmtime_r check
2248
2249if test "$mingw32" = "yes"; then
2250 # Some versions of MinGW / Mingw-w64 lack localtime_r
2251 # and gmtime_r entirely.
2252 #
2253 # Some versions of Mingw-w64 define a macro for
2254 # localtime_r/gmtime_r.
2255 #
2256 # Some versions of Mingw-w64 will define functions
2257 # for localtime_r/gmtime_r, but only if you have
2258 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2259 # though, unistd.h and pthread.h both define
2260 # that for you.
2261 #
2262 # So this #undef localtime_r and #include <unistd.h>
2263 # are not in fact redundant.
2264cat > $TMPC << EOF
2265#include <unistd.h>
2266#include <time.h>
2267#undef localtime_r
2268int main(void) { localtime_r(NULL, NULL); return 0; }
2269EOF
2270 if compile_prog "" "" ; then
2271 localtime_r="yes"
2272 else
2273 localtime_r="no"
2274 fi
2275fi
2276
2277##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002278# pkg-config probe
2279
2280if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002281 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002282fi
2283
2284##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002285# NPTL probe
2286
Peter Maydell24cb36a2013-07-16 18:45:00 +01002287if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002288 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002289#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002290#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002291int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002292#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2293#error bork
2294#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002295 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002296}
2297EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002298 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002299 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002300 fi
pbrookbd0c5662008-05-29 14:34:11 +00002301fi
2302
balrogac629222008-10-11 09:56:04 +00002303##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002304# lzo check
2305
2306if test "$lzo" != "no" ; then
2307 cat > $TMPC << EOF
2308#include <lzo/lzo1x.h>
2309int main(void) { lzo_version(); return 0; }
2310EOF
2311 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002312 libs_softmmu="$libs_softmmu -llzo2"
2313 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002314 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002315 if test "$lzo" = "yes"; then
2316 feature_not_found "liblzo2" "Install liblzo2 devel"
2317 fi
2318 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002319 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002320fi
2321
2322##########################################
2323# snappy check
2324
2325if test "$snappy" != "no" ; then
2326 cat > $TMPC << EOF
2327#include <snappy-c.h>
2328int main(void) { snappy_max_compressed_length(4096); return 0; }
2329EOF
2330 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002331 libs_softmmu="$libs_softmmu -lsnappy"
2332 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002333 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002334 if test "$snappy" = "yes"; then
2335 feature_not_found "libsnappy" "Install libsnappy devel"
2336 fi
2337 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002338 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002339fi
2340
2341##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002342# bzip2 check
2343
2344if test "$bzip2" != "no" ; then
2345 cat > $TMPC << EOF
2346#include <bzlib.h>
2347int main(void) { BZ2_bzlibVersion(); return 0; }
2348EOF
2349 if compile_prog "" "-lbz2" ; then
2350 bzip2="yes"
2351 else
2352 if test "$bzip2" = "yes"; then
2353 feature_not_found "libbzip2" "Install libbzip2 devel"
2354 fi
2355 bzip2="no"
2356 fi
2357fi
2358
2359##########################################
Julio Faracco83bc1f92018-11-05 13:08:04 -02002360# lzfse check
2361
2362if test "$lzfse" != "no" ; then
2363 cat > $TMPC << EOF
2364#include <lzfse.h>
2365int main(void) { lzfse_decode_scratch_size(); return 0; }
2366EOF
2367 if compile_prog "" "-llzfse" ; then
2368 lzfse="yes"
2369 else
2370 if test "$lzfse" = "yes"; then
2371 feature_not_found "lzfse" "Install lzfse devel"
2372 fi
2373 lzfse="no"
2374 fi
2375fi
2376
2377##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002378# libseccomp check
2379
2380if test "$seccomp" != "no" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002381 libseccomp_minver="2.3.0"
2382 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002383 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2384 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002385 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002386 else
Andrew Jones693e5912015-09-30 11:59:18 -04002387 if test "$seccomp" = "yes" ; then
Helge Deller25ed0ec2019-04-04 20:39:23 +02002388 feature_not_found "libseccomp" \
2389 "Install libseccomp devel >= $libseccomp_minver"
Andrew Jones693e5912015-09-30 11:59:18 -04002390 fi
2391 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002392 fi
2393fi
2394##########################################
aliguorie37630c2009-04-22 15:19:10 +00002395# xen probe
2396
Juan Quintelafc321b42009-08-12 18:29:55 +02002397if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002398 # Check whether Xen library path is specified via --extra-ldflags to avoid
2399 # overriding this setting with pkg-config output. If not, try pkg-config
2400 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002401
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002402 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2403 $pkg_config --exists xencontrol ; then
2404 xen_ctrl_version="$(printf '%d%02d%02d' \
2405 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2406 xen=yes
2407 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2408 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002409 if $pkg_config --exists xentoolcore; then
2410 xen_pc="$xen_pc xentoolcore"
2411 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002412 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2413 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002414 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002415
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002416 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002417 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002418
2419 # First we test whether Xen headers and libraries are available.
2420 # If no, we are done and there is no Xen support.
2421 # If yes, more tests are run to detect the Xen version.
2422
2423 # Xen (any)
2424 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002425#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002426int main(void) {
2427 return 0;
2428}
2429EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002430 if ! compile_prog "" "$xen_libs" ; then
2431 # Xen not found
2432 if test "$xen" = "yes" ; then
2433 feature_not_found "xen" "Install xen devel"
2434 fi
2435 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002436
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002437 # Xen unstable
2438 elif
2439 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002440#undef XC_WANT_COMPAT_DEVICEMODEL_API
2441#define __XEN_TOOLS__
2442#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002443#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002444int main(void) {
2445 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002446 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002447
2448 xd = xendevicemodel_open(0, 0);
2449 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2450
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002451 xfmem = xenforeignmemory_open(0, 0);
2452 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2453
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002454 return 0;
2455}
2456EOF
2457 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2458 then
2459 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2460 xen_ctrl_version=41100
2461 xen=yes
2462 elif
2463 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002464#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2465#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002466#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002467int main(void) {
2468 xenforeignmemory_handle *xfmem;
2469
2470 xfmem = xenforeignmemory_open(0, 0);
2471 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002472 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002473
2474 return 0;
2475}
2476EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002477 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002478 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002479 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002480 xen_ctrl_version=41000
2481 xen=yes
2482 elif
2483 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002484#undef XC_WANT_COMPAT_DEVICEMODEL_API
2485#define __XEN_TOOLS__
2486#include <xendevicemodel.h>
2487int main(void) {
2488 xendevicemodel_handle *xd;
2489
2490 xd = xendevicemodel_open(0, 0);
2491 xendevicemodel_close(xd);
2492
2493 return 0;
2494}
2495EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002496 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2497 then
2498 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2499 xen_ctrl_version=40900
2500 xen=yes
2501 elif
2502 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002503/*
2504 * If we have stable libs the we don't want the libxc compat
2505 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002506 *
2507 * Also, check if xengnttab_grant_copy_segment_t is defined and
2508 * grant copy operation is implemented.
2509 */
2510#undef XC_WANT_COMPAT_EVTCHN_API
2511#undef XC_WANT_COMPAT_GNTTAB_API
2512#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2513#include <xenctrl.h>
2514#include <xenstore.h>
2515#include <xenevtchn.h>
2516#include <xengnttab.h>
2517#include <xenforeignmemory.h>
2518#include <stdint.h>
2519#include <xen/hvm/hvm_info_table.h>
2520#if !defined(HVM_MAX_VCPUS)
2521# error HVM_MAX_VCPUS not defined
2522#endif
2523int main(void) {
2524 xc_interface *xc = NULL;
2525 xenforeignmemory_handle *xfmem;
2526 xenevtchn_handle *xe;
2527 xengnttab_handle *xg;
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002528 xengnttab_grant_copy_segment_t* seg = NULL;
2529
2530 xs_daemon_open();
2531
2532 xc = xc_interface_open(0, 0, 0);
2533 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2534 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2535 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2536 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002537
2538 xfmem = xenforeignmemory_open(0, 0);
2539 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2540
2541 xe = xenevtchn_open(0, 0);
2542 xenevtchn_fd(xe);
2543
2544 xg = xengnttab_open(0, 0);
2545 xengnttab_grant_copy(xg, 0, seg);
2546
2547 return 0;
2548}
2549EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002550 compile_prog "" "$xen_libs $xen_stable_libs"
2551 then
2552 xen_ctrl_version=40800
2553 xen=yes
2554 elif
2555 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002556/*
2557 * If we have stable libs the we don't want the libxc compat
2558 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002559 */
2560#undef XC_WANT_COMPAT_EVTCHN_API
2561#undef XC_WANT_COMPAT_GNTTAB_API
2562#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2563#include <xenctrl.h>
2564#include <xenstore.h>
2565#include <xenevtchn.h>
2566#include <xengnttab.h>
2567#include <xenforeignmemory.h>
2568#include <stdint.h>
2569#include <xen/hvm/hvm_info_table.h>
2570#if !defined(HVM_MAX_VCPUS)
2571# error HVM_MAX_VCPUS not defined
2572#endif
2573int main(void) {
2574 xc_interface *xc = NULL;
2575 xenforeignmemory_handle *xfmem;
2576 xenevtchn_handle *xe;
2577 xengnttab_handle *xg;
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002578
2579 xs_daemon_open();
2580
2581 xc = xc_interface_open(0, 0, 0);
2582 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2583 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2584 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2585 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002586
2587 xfmem = xenforeignmemory_open(0, 0);
2588 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2589
2590 xe = xenevtchn_open(0, 0);
2591 xenevtchn_fd(xe);
2592
2593 xg = xengnttab_open(0, 0);
2594 xengnttab_map_grant_ref(xg, 0, 0, 0);
2595
2596 return 0;
2597}
2598EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002599 compile_prog "" "$xen_libs $xen_stable_libs"
2600 then
2601 xen_ctrl_version=40701
2602 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002603
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002604 # Xen 4.6
2605 elif
2606 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002607#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002608#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002609#include <stdint.h>
2610#include <xen/hvm/hvm_info_table.h>
2611#if !defined(HVM_MAX_VCPUS)
2612# error HVM_MAX_VCPUS not defined
2613#endif
2614int main(void) {
2615 xc_interface *xc;
2616 xs_daemon_open();
2617 xc = xc_interface_open(0, 0, 0);
2618 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2619 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002620 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002621 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002622 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002623 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002624 return 0;
2625}
2626EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002627 compile_prog "" "$xen_libs"
2628 then
2629 xen_ctrl_version=40600
2630 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002631
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002632 # Xen 4.5
2633 elif
2634 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002635#include <xenctrl.h>
2636#include <xenstore.h>
2637#include <stdint.h>
2638#include <xen/hvm/hvm_info_table.h>
2639#if !defined(HVM_MAX_VCPUS)
2640# error HVM_MAX_VCPUS not defined
2641#endif
2642int main(void) {
2643 xc_interface *xc;
2644 xs_daemon_open();
2645 xc = xc_interface_open(0, 0, 0);
2646 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2647 xc_gnttab_open(NULL, 0);
2648 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2649 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002650 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2651 return 0;
2652}
2653EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002654 compile_prog "" "$xen_libs"
2655 then
2656 xen_ctrl_version=40500
2657 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002658
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002659 elif
2660 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002661#include <xenctrl.h>
2662#include <xenstore.h>
2663#include <stdint.h>
2664#include <xen/hvm/hvm_info_table.h>
2665#if !defined(HVM_MAX_VCPUS)
2666# error HVM_MAX_VCPUS not defined
2667#endif
2668int main(void) {
2669 xc_interface *xc;
2670 xs_daemon_open();
2671 xc = xc_interface_open(0, 0, 0);
2672 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2673 xc_gnttab_open(NULL, 0);
2674 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2675 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002676 return 0;
2677}
2678EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002679 compile_prog "" "$xen_libs"
2680 then
2681 xen_ctrl_version=40200
2682 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002683
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002684 else
2685 if test "$xen" = "yes" ; then
2686 feature_not_found "xen (unsupported version)" \
2687 "Install a supported xen (xen 4.2 or newer)"
2688 fi
2689 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002690 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002691
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002692 if test "$xen" = yes; then
2693 if test $xen_ctrl_version -ge 40701 ; then
2694 libs_softmmu="$xen_stable_libs $libs_softmmu"
2695 fi
2696 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002697 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002698 fi
aliguorie37630c2009-04-22 15:19:10 +00002699fi
2700
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002701if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002702 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002703 xen_pci_passthrough=yes
2704 else
2705 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002706 error_exit "User requested feature Xen PCI Passthrough" \
2707 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002708 fi
2709 xen_pci_passthrough=no
2710 fi
2711fi
2712
aliguorie37630c2009-04-22 15:19:10 +00002713##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002714# Windows Hypervisor Platform accelerator (WHPX) check
2715if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002716 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002717 whpx="yes"
2718 else
2719 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002720 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002721 fi
2722 whpx="no"
2723 fi
2724fi
2725
2726##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002727# Sparse probe
2728if test "$sparse" != "no" ; then
LoĂŻc Minier0dba6192010-01-28 21:26:51 +00002729 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002730 sparse=yes
2731 else
2732 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002733 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002734 fi
2735 sparse=no
2736 fi
2737fi
2738
2739##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002740# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002741if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002742 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002743 x11_cflags=$($pkg_config --cflags x11)
2744 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002745fi
2746
2747##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002748# GTK probe
2749
2750if test "$gtk" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002751 gtkpackage="gtk+-3.0"
2752 gtkx11package="gtk+-x11-3.0"
Daniel P. Berrangé58296cb2018-08-22 14:15:53 +01002753 gtkversion="3.14.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002754 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002755 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2756 gtk_libs=$($pkg_config --libs $gtkpackage)
2757 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002758 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002759 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002760 gtk_cflags="$gtk_cflags $x11_cflags"
2761 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002762 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002763 gtk="yes"
2764 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002765 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002766 else
2767 gtk="no"
2768 fi
2769fi
2770
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002771
2772##########################################
2773# GNUTLS probe
2774
2775if test "$gnutls" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002776 pass="no"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002777 if $pkg_config --exists "gnutls >= 3.1.18"; then
Stefan Weil89138852016-05-16 15:10:20 +02002778 gnutls_cflags=$($pkg_config --cflags gnutls)
2779 gnutls_libs=$($pkg_config --libs gnutls)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002780 # Packaging for the static libraries is not always correct.
2781 # At least ubuntu 18.04 ships only shared libraries.
2782 write_c_skeleton
2783 if compile_prog "" "$gnutls_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002784 LIBS="$gnutls_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002785 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2786 pass="yes"
2787 fi
2788 fi
2789 if test "$pass" = "no" && test "$gnutls" = "yes"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002790 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002791 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002792 gnutls="$pass"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002793 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002794fi
2795
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002796
2797# If user didn't give a --disable/enable-gcrypt flag,
2798# then mark as disabled if user requested nettle
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002799# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002800if test -z "$gcrypt"
2801then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002802 if test "$nettle" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002803 then
2804 gcrypt="no"
2805 fi
2806fi
2807
2808# If user didn't give a --disable/enable-nettle flag,
2809# then mark as disabled if user requested gcrypt
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002810# explicitly
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002811if test -z "$nettle"
2812then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002813 if test "$gcrypt" = "yes"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002814 then
2815 nettle="no"
2816 fi
2817fi
2818
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002819has_libgcrypt() {
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002820 if ! has "libgcrypt-config"
2821 then
2822 return 1
2823 fi
2824
2825 if test -n "$cross_prefix"
2826 then
Stefan Weil89138852016-05-16 15:10:20 +02002827 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002828 if test "$host-" != $cross_prefix
2829 then
2830 return 1
2831 fi
2832 fi
2833
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002834 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2835 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2836
2837 if test $maj != 1 || test $min -lt 5
2838 then
2839 return 1
2840 fi
2841
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002842 return 0
2843}
2844
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002845
2846if test "$nettle" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002847 pass="no"
Daniel P. Berrangé64dd2f32018-07-18 11:55:05 +01002848 if $pkg_config --exists "nettle >= 2.7.1"; then
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002849 nettle_cflags=$($pkg_config --cflags nettle)
2850 nettle_libs=$($pkg_config --libs nettle)
2851 nettle_version=$($pkg_config --modversion nettle)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002852 # Link test to make sure the given libraries work (e.g for static).
2853 write_c_skeleton
2854 if compile_prog "" "$nettle_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002855 LIBS="$nettle_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002856 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2857 if test -z "$gcrypt"; then
2858 gcrypt="no"
2859 fi
2860 pass="yes"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002861 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002862 fi
2863 if test "$pass" = "no" && test "$nettle" = "yes"; then
2864 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002865 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002866 nettle="$pass"
Daniel P. Berrangéa0722402018-07-18 11:55:05 +01002867 fi
2868fi
2869
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002870if test "$gcrypt" != "no"; then
Richard Hendersona73e82e2019-05-09 18:24:35 -07002871 pass="no"
Daniel P. Berrangédea7a642018-07-18 11:55:05 +01002872 if has_libgcrypt; then
Stefan Weil89138852016-05-16 15:10:20 +02002873 gcrypt_cflags=$(libgcrypt-config --cflags)
2874 gcrypt_libs=$(libgcrypt-config --libs)
Richard Hendersona73e82e2019-05-09 18:24:35 -07002875 # Debian has removed -lgpg-error from libgcrypt-config
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002876 # as it "spreads unnecessary dependencies" which in
2877 # turn breaks static builds...
2878 if test "$static" = "yes"
2879 then
2880 gcrypt_libs="$gcrypt_libs -lgpg-error"
2881 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002882
Richard Hendersona73e82e2019-05-09 18:24:35 -07002883 # Link test to make sure the given libraries work (e.g for static).
2884 write_c_skeleton
2885 if compile_prog "" "$gcrypt_libs" ; then
Richard Henderson243dc2c2019-05-16 15:29:06 -07002886 LIBS="$gcrypt_libs $LIBS"
Richard Hendersona73e82e2019-05-09 18:24:35 -07002887 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2888 pass="yes"
2889 fi
2890 fi
2891 if test "$pass" = "yes"; then
2892 gcrypt="yes"
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002893 cat > $TMPC << EOF
2894#include <gcrypt.h>
2895int main(void) {
2896 gcry_mac_hd_t handle;
2897 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2898 GCRY_MAC_FLAG_SECURE, NULL);
2899 return 0;
2900}
2901EOF
2902 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2903 gcrypt_hmac=yes
2904 fi
Richard Hendersona73e82e2019-05-09 18:24:35 -07002905 elif test "$gcrypt" = "yes"; then
2906 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002907 else
Richard Hendersona73e82e2019-05-09 18:24:35 -07002908 gcrypt="no"
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002909 fi
2910fi
2911
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002912
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002913if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2914then
2915 error_exit "Only one of gcrypt & nettle can be enabled"
2916fi
2917
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002918##########################################
2919# libtasn1 - only for the TLS creds/session test suite
2920
2921tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002922tasn1_cflags=""
2923tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002924if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002925 tasn1_cflags=$($pkg_config --cflags libtasn1)
2926 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002927else
2928 tasn1=no
2929fi
2930
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002931
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002932##########################################
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002933# PAM probe
2934
2935if test "$auth_pam" != "no"; then
2936 cat > $TMPC <<EOF
2937#include <security/pam_appl.h>
2938#include <stdio.h>
2939int main(void) {
2940 const char *service_name = "qemu";
2941 const char *user = "frank";
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01002942 const struct pam_conv pam_conv = { 0 };
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002943 pam_handle_t *pamh = NULL;
Dr. David Alan Gilbert9c9642d2019-04-04 10:17:25 +01002944 pam_start(service_name, user, &pam_conv, &pamh);
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01002945 return 0;
2946}
2947EOF
2948 if compile_prog "" "-lpam" ; then
2949 auth_pam=yes
2950 else
2951 if test "$auth_pam" = "yes"; then
2952 feature_not_found "PAM" "Install PAM development package"
2953 else
2954 auth_pam=no
2955 fi
2956 fi
2957fi
2958
2959##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002960# getifaddrs (for tests/test-io-channel-socket )
2961
2962have_ifaddrs_h=yes
2963if ! check_include "ifaddrs.h" ; then
2964 have_ifaddrs_h=no
2965fi
2966
2967##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002968# VTE probe
2969
2970if test "$vte" != "no"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002971 vteminversion="0.32.0"
2972 if $pkg_config --exists "vte-2.91"; then
2973 vtepackage="vte-2.91"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002974 else
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002975 vtepackage="vte-2.90"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002976 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002977 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002978 vte_cflags=$($pkg_config --cflags $vtepackage)
2979 vte_libs=$($pkg_config --libs $vtepackage)
2980 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002981 vte="yes"
2982 elif test "$vte" = "yes"; then
Daniel P. Berrangé89d85cd2018-08-22 14:15:52 +01002983 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Peter Maydell0d185e62013-07-18 16:42:01 +01002984 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002985 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002986 fi
2987fi
2988
2989##########################################
bellard11d9f692004-04-02 20:55:59 +00002990# SDL probe
2991
Carlo Marcelo Arenas BelĂłnaee8a612019-07-10 15:55:28 -07002992# Look for sdl configuration program (pkg-config or sdl2-config). Try
2993# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002994
Peter Xuc6093a02018-04-10 13:40:34 +08002995sdl_probe ()
2996{
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01002997 if $pkg_config sdl2 --exists; then
2998 sdlconfig="$pkg_config sdl2"
Peter Xuc6093a02018-04-10 13:40:34 +08002999 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Carlo Marcelo Arenas BelĂłnaee8a612019-07-10 15:55:28 -07003000 elif has "$sdl2_config"; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003001 sdlconfig="$sdl2_config"
Peter Xuc6093a02018-04-10 13:40:34 +08003002 sdlversion=$($sdlconfig --version)
3003 else
3004 if test "$sdl" = "yes" ; then
3005 feature_not_found "sdl" "Install SDL2-devel"
3006 fi
3007 sdl=no
3008 # no need to do the rest
3009 return
3010 fi
Carlo Marcelo Arenas BelĂłnaee8a612019-07-10 15:55:28 -07003011 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
Peter Xuc6093a02018-04-10 13:40:34 +08003012 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3013 fi
3014
Juan Quintelaac119f92009-07-27 16:13:15 +02003015 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00003016#include <SDL.h>
3017#undef main /* We don't want SDL to override our main() */
3018int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3019EOF
Stefan Weil89138852016-05-16 15:10:20 +02003020 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01003021 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08003022 if test "$static" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003023 if $pkg_config sdl2 --exists; then
3024 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
Thomas Huth5f37e6d2017-06-13 20:00:44 +02003025 else
3026 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3027 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003028 else
Stefan Weil89138852016-05-16 15:10:20 +02003029 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003030 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003031 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003032 sdl=yes
aliguoricd01b4a2008-08-21 19:25:45 +00003033
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003034 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Eric Blakee633a5c2019-02-04 20:39:37 -06003035 if test "$sdl" = "yes" && test "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003036 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003037 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3038 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003039 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003040 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003041 :
3042 else
3043 sdl=no
3044 fi
3045 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003046 else # sdl not found
3047 if test "$sdl" = "yes" ; then
Daniel P. Berrangé0015ca52018-08-22 14:15:54 +01003048 feature_not_found "sdl" "Install SDL2 devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003049 fi
3050 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003051 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003052}
3053
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003054sdl_image_probe ()
3055{
3056 if test "$sdl_image" != "no" ; then
3057 if $pkg_config SDL2_image --exists; then
3058 if test "$static" = "yes"; then
3059 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3060 else
3061 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3062 fi
3063 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3064 sdl_image=yes
3065
3066 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3067 sdl_libs="$sdl_libs $sdl_image_libs"
3068 else
3069 if test "$sdl_image" = "yes" ; then
3070 feature_not_found "sdl_image" "Install SDL Image devel"
3071 else
3072 sdl_image=no
3073 fi
3074 fi
3075 fi
3076}
3077
Peter Xuc6093a02018-04-10 13:40:34 +08003078if test "$sdl" != "no" ; then
3079 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003080fi
bellard11d9f692004-04-02 20:55:59 +00003081
aliguori5368a422009-03-03 17:37:21 +00003082if test "$sdl" = "yes" ; then
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00003083 sdl_image_probe
3084else
3085 if test "$sdl_image" = "yes"; then
3086 echo "warning: SDL Image requested, but SDL is not available, disabling"
3087 fi
3088 sdl_image=no
3089fi
3090
3091if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003092 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003093#include <SDL.h>
3094#if defined(SDL_VIDEO_DRIVER_X11)
3095#include <X11/XKBlib.h>
3096#else
3097#error No x11 support
3098#endif
3099int main(void) { return 0; }
3100EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003101 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003102 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003103 sdl_cflags="$sdl_cflags $x11_cflags"
3104 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003105 fi
aliguori5368a422009-03-03 17:37:21 +00003106fi
3107
ths8f28f3f2007-01-05 21:25:54 +00003108##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003109# RDMA needs OpenFabrics libraries
3110if test "$rdma" != "no" ; then
3111 cat > $TMPC <<EOF
3112#include <rdma/rdma_cma.h>
3113int main(void) { return 0; }
3114EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003115 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003116 if compile_prog "" "$rdma_libs" ; then
3117 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003118 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003119 else
3120 if test "$rdma" = "yes" ; then
3121 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003122 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003123 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003124 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003125 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3126 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3127 fi
3128 rdma="no"
3129 fi
3130fi
3131
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003132##########################################
3133# PVRDMA detection
3134
3135cat > $TMPC <<EOF &&
3136#include <sys/mman.h>
3137
3138int
3139main(void)
3140{
3141 char buf = 0;
3142 void *addr = &buf;
3143 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3144
3145 return 0;
3146}
3147EOF
3148
3149if test "$rdma" = "yes" ; then
3150 case "$pvrdma" in
3151 "")
3152 if compile_prog "" ""; then
3153 pvrdma="yes"
3154 else
3155 pvrdma="no"
3156 fi
3157 ;;
3158 "yes")
3159 if ! compile_prog "" ""; then
3160 error_exit "PVRDMA is not supported since mremap is not implemented"
3161 fi
3162 pvrdma="yes"
3163 ;;
3164 "no")
3165 pvrdma="no"
3166 ;;
3167 esac
3168else
3169 if test "$pvrdma" = "yes" ; then
3170 error_exit "PVRDMA requires rdma suppport"
3171 fi
3172 pvrdma="no"
3173fi
ths8d5d2d42007-08-25 01:37:51 +00003174
3175##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003176# VNC SASL detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003177if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003178 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003179#include <sasl/sasl.h>
3180#include <stdio.h>
3181int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3182EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003183 # Assuming Cyrus-SASL installed in /usr prefix
3184 vnc_sasl_cflags=""
3185 vnc_sasl_libs="-lsasl2"
3186 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3187 vnc_sasl=yes
3188 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003189 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003190 else
3191 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003192 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003193 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003194 vnc_sasl=no
3195 fi
aliguori2f9606b2009-03-06 20:27:28 +00003196fi
3197
3198##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003199# VNC JPEG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003200if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003201cat > $TMPC <<EOF
3202#include <stdio.h>
3203#include <jpeglib.h>
3204int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3205EOF
3206 vnc_jpeg_cflags=""
3207 vnc_jpeg_libs="-ljpeg"
3208 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3209 vnc_jpeg=yes
3210 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003211 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003212 else
3213 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003214 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003215 fi
3216 vnc_jpeg=no
3217 fi
3218fi
3219
3220##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003221# VNC PNG detection
Eric Blakee633a5c2019-02-04 20:39:37 -06003222if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003223cat > $TMPC <<EOF
3224//#include <stdio.h>
3225#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003226#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003227int main(void) {
3228 png_structp png_ptr;
3229 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003230 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003231}
3232EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003233 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003234 vnc_png_cflags=$($pkg_config libpng --cflags)
3235 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003236 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003237 vnc_png_cflags=""
3238 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003239 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003240 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3241 vnc_png=yes
3242 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003243 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003244 else
3245 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003246 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003247 fi
3248 vnc_png=no
3249 fi
3250fi
3251
3252##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003253# xkbcommon probe
3254if test "$xkbcommon" != "no" ; then
3255 if $pkg_config xkbcommon --exists; then
3256 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3257 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3258 xkbcommon=yes
3259 else
3260 if test "$xkbcommon" = "yes" ; then
3261 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3262 fi
3263 xkbcommon=no
3264 fi
3265fi
3266
aliguori76655d62009-03-06 20:27:37 +00003267
3268##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003269# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003270if test "$xfs" != "no" ; then
3271 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003272#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003273#include <xfs/xfs.h>
3274int main(void)
3275{
3276 xfsctl(NULL, 0, 0, NULL);
3277 return 0;
3278}
3279EOF
3280 if compile_prog "" "" ; then
3281 xfs="yes"
3282 else
3283 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003284 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003285 fi
3286 xfs=no
3287 fi
3288fi
3289
3290##########################################
ths8a16d272008-07-19 09:56:24 +00003291# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003292if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003293 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003294 cat > $TMPC << EOF
3295#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003296int main(void)
3297{
3298 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003299 char s[] = "";
3300 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003301 return 0;
3302}
ths8a16d272008-07-19 09:56:24 +00003303EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003304 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003305 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003306 else
3307 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003308 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003309 fi
3310 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003311 fi
ths8a16d272008-07-19 09:56:24 +00003312fi
3313
3314##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003315# netmap support probe
3316# Apart from looking for netmap headers, we make sure that the host API version
3317# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3318# a minor/major version number. Minor new features will be marked with values up
3319# to 15, and if something happens that requires a change to the backend we will
3320# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003321if test "$netmap" != "no" ; then
3322 cat > $TMPC << EOF
3323#include <inttypes.h>
3324#include <net/if.h>
3325#include <net/netmap.h>
3326#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003327#if (NETMAP_API < 11) || (NETMAP_API > 15)
3328#error
3329#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003330int main(void) { return 0; }
3331EOF
3332 if compile_prog "" "" ; then
3333 netmap=yes
3334 else
3335 if test "$netmap" = "yes" ; then
3336 feature_not_found "netmap"
3337 fi
3338 netmap=no
3339 fi
3340fi
3341
3342##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003343# libcap-ng library probe
3344if test "$cap_ng" != "no" ; then
3345 cap_libs="-lcap-ng"
3346 cat > $TMPC << EOF
3347#include <cap-ng.h>
3348int main(void)
3349{
3350 capng_capability_to_name(CAPNG_EFFECTIVE);
3351 return 0;
3352}
3353EOF
3354 if compile_prog "" "$cap_libs" ; then
3355 cap_ng=yes
3356 libs_tools="$cap_libs $libs_tools"
3357 else
3358 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003359 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003360 fi
3361 cap_ng=no
3362 fi
3363fi
3364
3365##########################################
malcc2de5c92008-06-28 19:13:06 +00003366# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003367
Stefan Weil89138852016-05-16 15:10:20 +02003368audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003369for drv in $audio_drv_list; do
3370 case $drv in
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003371 alsa | try-alsa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003372 if $pkg_config alsa --exists; then
3373 alsa_libs=$($pkg_config alsa --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003374 if test "$drv" = "try-alsa"; then
3375 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3376 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003377 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003378 if test "$drv" = "try-alsa"; then
3379 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3380 else
3381 error_exit "$drv check failed" \
3382 "Make sure to have the $drv libs and headers installed."
3383 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003384 fi
malcc2de5c92008-06-28 19:13:06 +00003385 ;;
3386
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003387 pa | try-pa)
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003388 if $pkg_config libpulse --exists; then
3389 pulse_libs=$($pkg_config libpulse --libs)
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003390 if test "$drv" = "try-pa"; then
3391 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3392 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003393 else
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003394 if test "$drv" = "try-pa"; then
3395 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3396 else
3397 error_exit "$drv check failed" \
3398 "Make sure to have the $drv libs and headers installed."
3399 fi
Gerd Hoffmannc80a8672019-01-24 12:20:50 +01003400 fi
malcb8e59f12008-07-02 21:03:08 +00003401 ;;
3402
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003403 sdl)
3404 if test "$sdl" = "no"; then
3405 error_exit "sdl not found or disabled, can not use sdl audio driver"
3406 fi
3407 ;;
3408
Gerd Hoffmanne42975a2019-01-24 12:20:51 +01003409 try-sdl)
3410 if test "$sdl" = "no"; then
3411 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3412 else
3413 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3414 fi
3415 ;;
3416
Juan Quintela997e6902009-08-03 14:46:29 +02003417 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003418 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003419 ;;
3420
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003421 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003422 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003423 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003424 ;;
3425
3426 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003427 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003428 ;;
3429
malce4c63a62008-07-19 16:15:16 +00003430 *)
malc1c9b2a52008-07-19 16:57:30 +00003431 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003432 error_exit "Unknown driver '$drv' selected" \
3433 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003434 }
3435 ;;
malcc2de5c92008-06-28 19:13:06 +00003436 esac
3437done
ths8f28f3f2007-01-05 21:25:54 +00003438
balrog4d3b6f62008-02-10 16:33:14 +00003439##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003440# BrlAPI probe
3441
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003442if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003443 brlapi_libs="-lbrlapi"
3444 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003445#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003446#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003447int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3448EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003449 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003450 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003451 else
3452 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003453 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003454 fi
3455 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003456 fi
3457fi
aurel322e4d9fb2008-04-08 06:01:02 +00003458
3459##########################################
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003460# iconv probe
3461if test "$iconv" != "no" ; then
3462 cat > $TMPC << EOF
3463#include <iconv.h>
3464int main(void) {
3465 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3466 return conv != (iconv_t) -1;
3467}
3468EOF
3469 iconv_prefix_list="/usr/local:/usr"
3470 iconv_lib_list=":-liconv"
3471 IFS=:
3472 for iconv_prefix in $iconv_prefix_list; do
3473 IFS=:
3474 iconv_cflags="-I$iconv_prefix/include"
3475 iconv_ldflags="-L$iconv_prefix/lib"
3476 for iconv_link in $iconv_lib_list; do
3477 unset IFS
3478 iconv_lib="$iconv_ldflags $iconv_link"
3479 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3480 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3481 iconv_found=yes
3482 break
3483 fi
3484 done
3485 if test "$iconv_found" = yes ; then
3486 break
3487 fi
3488 done
3489 if test "$iconv_found" = "yes" ; then
3490 iconv=yes
3491 else
3492 if test "$iconv" = "yes" ; then
3493 feature_not_found "iconv" "Install iconv devel"
3494 fi
3495 iconv=no
3496 fi
3497fi
3498
3499##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003500# curses probe
Samuel Thibaulte08bb302019-03-11 14:51:26 +01003501if test "$iconv" = "no" ; then
3502 # curses will need iconv
3503 curses=no
3504fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003505if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003506 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003507 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3508 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003509 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003510 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003511 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003512 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003513 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003514 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003515#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003516#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003517#include <wchar.h>
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003518#include <langinfo.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003519int main(void) {
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003520 const char *codeset;
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003521 wchar_t wch = L'w';
3522 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003523 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003524 addwstr(L"wide chars\n");
3525 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003526 add_wch(WACS_DEGREE);
Samuel Thibault2f8b7cd2019-03-11 14:51:27 +01003527 codeset = nl_langinfo(CODESET);
3528 return codeset != 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003529}
balrog4d3b6f62008-02-10 16:33:14 +00003530EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003531 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003532 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003533 # Make sure we get the wide character prototypes
3534 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003535 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003536 for curses_lib in $curses_lib_list; do
3537 unset IFS
3538 if compile_prog "$curses_inc" "$curses_lib" ; then
3539 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003540 break
3541 fi
3542 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003543 if test "$curses_found" = yes ; then
3544 break
3545 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003546 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003547 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003548 if test "$curses_found" = "yes" ; then
3549 curses=yes
3550 else
3551 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003552 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003553 fi
3554 curses=no
3555 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003556fi
balrog4d3b6f62008-02-10 16:33:14 +00003557
blueswir1414f0da2008-08-15 18:20:52 +00003558##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003559# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003560if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003561 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003562 curlconfig="$pkg_config libcurl"
3563 else
3564 curlconfig=curl-config
3565 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003566 cat > $TMPC << EOF
3567#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003568int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003569EOF
Stefan Weil89138852016-05-16 15:10:20 +02003570 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3571 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003572 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003573 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003574 else
3575 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003576 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003577 fi
3578 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003579 fi
3580fi # test "$curl"
3581
3582##########################################
balrogfb599c92008-09-28 23:49:55 +00003583# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003584if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003585 cat > $TMPC << EOF
3586#include <bluetooth/bluetooth.h>
3587int main(void) { return bt_error(0); }
3588EOF
Stefan Weil89138852016-05-16 15:10:20 +02003589 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3590 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003591 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003592 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003593 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003594 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003595 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003596 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003597 fi
balroge820e3f2008-09-30 02:27:44 +00003598 bluez="no"
3599 fi
balrogfb599c92008-09-28 23:49:55 +00003600fi
3601
3602##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003603# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003604
Daniel P. Berrangé00f2cfb2018-05-04 15:34:46 +01003605glib_req_ver=2.48
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003606glib_modules=gthread-2.0
3607if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003608 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003609fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003610
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003611# This workaround is required due to a bug in pkg-config file for glib as it
3612# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3613
Eric Blakee633a5c2019-02-04 20:39:37 -06003614if test "$static" = yes && test "$mingw32" = yes; then
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003615 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3616fi
3617
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003618for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003619 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003620 glib_cflags=$($pkg_config --cflags $i)
3621 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003622 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003623 LIBS="$glib_libs $LIBS"
3624 libs_qga="$glib_libs $libs_qga"
3625 else
3626 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3627 fi
3628done
3629
Marc-André Lureauf876b762019-02-21 12:07:00 +01003630if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3631 gio=yes
3632 gio_cflags=$($pkg_config --cflags gio-2.0)
3633 gio_libs=$($pkg_config --libs gio-2.0)
3634else
3635 gio=no
3636fi
3637
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003638# Sanity check that the current size_t matches the
3639# size that glib thinks it should be. This catches
3640# problems on multi-arch where people try to build
3641# 32-bit QEMU while pointing at 64-bit glib headers
3642cat > $TMPC <<EOF
3643#include <glib.h>
3644#include <unistd.h>
3645
3646#define QEMU_BUILD_BUG_ON(x) \
3647 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3648
3649int main(void) {
3650 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3651 return 0;
3652}
3653EOF
3654
Stefan Weil5919e032016-04-28 23:33:41 +02003655if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003656 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3657 "You probably need to set PKG_CONFIG_LIBDIR"\
3658 "to point to the right pkg-config files for your"\
3659 "build target"
3660fi
3661
John Snowbbbf2e02015-03-25 18:57:38 -04003662# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3663cat > $TMPC << EOF
3664#include <glib.h>
3665int main(void) { return 0; }
3666EOF
3667if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3668 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3669 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3670 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3671 fi
3672fi
3673
Stefan Weil6a1f42b2018-07-12 21:26:03 +02003674#########################################
3675# zlib check
3676
3677if test "$zlib" != "no" ; then
3678 if $pkg_config --exists zlib; then
3679 zlib_cflags=$($pkg_config --cflags zlib)
3680 zlib_libs=$($pkg_config --libs zlib)
3681 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3682 LIBS="$zlib_libs $LIBS"
3683 else
3684 cat > $TMPC << EOF
3685#include <zlib.h>
3686int main(void) { zlibVersion(); return 0; }
3687EOF
3688 if compile_prog "" "-lz" ; then
3689 LIBS="$LIBS -lz"
3690 else
3691 error_exit "zlib check failed" \
3692 "Make sure to have the zlib libs and headers installed."
3693 fi
3694 fi
3695fi
3696
Fam Zhenge26110c2014-02-10 14:48:57 +08003697##########################################
3698# SHA command probe for modules
3699if test "$modules" = yes; then
3700 shacmd_probe="sha1sum sha1 shasum"
3701 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003702 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003703 shacmd="$c"
3704 break
3705 fi
3706 done
3707 if test "$shacmd" = ""; then
3708 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3709 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003710fi
3711
3712##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003713# pixman support probe
3714
Eric Blakee633a5c2019-02-04 20:39:37 -06003715if test "$want_tools" = "no" && test "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003716 pixman_cflags=
3717 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003718elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003719 pixman_cflags=$($pkg_config --cflags pixman-1)
3720 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003721else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003722 error_exit "pixman >= 0.21.8 not present." \
3723 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003724fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003725
3726##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003727# libmpathpersist probe
3728
3729if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003730 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003731 cat > $TMPC <<EOF
3732#include <libudev.h>
3733#include <mpath_persist.h>
3734unsigned mpath_mx_alloc_len = 1024;
3735int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003736static struct config *multipath_conf;
3737extern struct udev *udev;
3738extern struct config *get_multipath_config(void);
3739extern void put_multipath_config(struct config *conf);
3740struct udev *udev;
3741struct config *get_multipath_config(void) { return multipath_conf; }
3742void put_multipath_config(struct config *conf) { }
3743
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003744int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003745 udev = udev_new();
3746 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003747 return 0;
3748}
3749EOF
3750 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3751 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003752 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003753 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003754 # probe for the old API
3755 cat > $TMPC <<EOF
3756#include <libudev.h>
3757#include <mpath_persist.h>
3758unsigned mpath_mx_alloc_len = 1024;
3759int logsink;
3760int main(void) {
3761 struct udev *udev = udev_new();
3762 mpath_lib_init(udev);
3763 return 0;
3764}
3765EOF
3766 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3767 mpathpersist=yes
3768 mpathpersist_new_api=no
3769 else
3770 mpathpersist=no
3771 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003772 fi
3773else
3774 mpathpersist=no
3775fi
3776
3777##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303778# libcap probe
3779
3780if test "$cap" != "no" ; then
3781 cat > $TMPC <<EOF
3782#include <stdio.h>
3783#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003784int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303785EOF
3786 if compile_prog "" "-lcap" ; then
3787 cap=yes
3788 else
3789 cap=no
3790 fi
3791fi
3792
3793##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003794# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003795PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003796
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003797pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003798cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003799#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003800static void *f(void *p) { return NULL; }
3801int main(void) {
3802 pthread_t thread;
3803 pthread_create(&thread, 0, f, 0);
3804 return 0;
3805}
blueswir1414f0da2008-08-15 18:20:52 +00003806EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003807if compile_prog "" "" ; then
3808 pthread=yes
3809else
3810 for pthread_lib in $PTHREADLIBS_LIST; do
3811 if compile_prog "" "$pthread_lib" ; then
3812 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003813 found=no
3814 for lib_entry in $LIBS; do
3815 if test "$lib_entry" = "$pthread_lib"; then
3816 found=yes
3817 break
3818 fi
3819 done
3820 if test "$found" = "no"; then
3821 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003822 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003823 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003824 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003825 break
3826 fi
3827 done
3828fi
blueswir1414f0da2008-08-15 18:20:52 +00003829
Eric Blakee633a5c2019-02-04 20:39:37 -06003830if test "$mingw32" != yes && test "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003831 error_exit "pthread check failed" \
3832 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003833fi
3834
Roman Bolshakov479a5742018-12-17 23:26:01 +03003835# check for pthread_setname_np with thread id
3836pthread_setname_np_w_tid=no
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003837cat > $TMPC << EOF
3838#include <pthread.h>
3839
3840static void *f(void *p) { return NULL; }
3841int main(void)
3842{
3843 pthread_t thread;
3844 pthread_create(&thread, 0, f, 0);
3845 pthread_setname_np(thread, "QEMU");
3846 return 0;
3847}
3848EOF
3849if compile_prog "" "$pthread_lib" ; then
Roman Bolshakov479a5742018-12-17 23:26:01 +03003850 pthread_setname_np_w_tid=yes
3851fi
3852
3853# check for pthread_setname_np without thread id
3854pthread_setname_np_wo_tid=no
3855cat > $TMPC << EOF
3856#include <pthread.h>
3857
3858static void *f(void *p) { pthread_setname_np("QEMU"); }
3859int main(void)
3860{
3861 pthread_t thread;
3862 pthread_create(&thread, 0, f, 0);
3863 return 0;
3864}
3865EOF
3866if compile_prog "" "$pthread_lib" ; then
3867 pthread_setname_np_wo_tid=yes
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003868fi
3869
aliguoribf9298b2008-12-05 20:05:26 +00003870##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003871# rbd probe
3872if test "$rbd" != "no" ; then
3873 cat > $TMPC <<EOF
3874#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003875#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003876int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003877 rados_t cluster;
3878 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003879 return 0;
3880}
3881EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003882 rbd_libs="-lrbd -lrados"
3883 if compile_prog "" "$rbd_libs" ; then
3884 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003885 else
3886 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003887 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003888 fi
3889 rbd=no
3890 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003891fi
3892
3893##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02003894# libssh probe
3895if test "$libssh" != "no" ; then
3896 if $pkg_config --exists libssh; then
3897 libssh_cflags=$($pkg_config libssh --cflags)
3898 libssh_libs=$($pkg_config libssh --libs)
3899 libssh=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003900 else
Pino Toscanob10d49d2019-06-20 22:08:40 +02003901 if test "$libssh" = "yes" ; then
3902 error_exit "libssh required for --enable-libssh"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003903 fi
Pino Toscanob10d49d2019-06-20 22:08:40 +02003904 libssh=no
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003905 fi
3906fi
3907
3908##########################################
Pino Toscanob10d49d2019-06-20 22:08:40 +02003909# Check for libssh 0.8
3910# This is done like this instead of using the LIBSSH_VERSION_* and
3911# SSH_VERSION_* macros because some distributions in the past shipped
3912# snapshots of the future 0.8 from Git, and those snapshots did not
3913# have updated version numbers (still referring to 0.7.0).
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003914
Pino Toscanob10d49d2019-06-20 22:08:40 +02003915if test "$libssh" = "yes"; then
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003916 cat > $TMPC <<EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02003917#include <libssh/libssh.h>
3918int main(void) { return ssh_get_server_publickey(NULL, NULL); }
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003919EOF
Pino Toscanob10d49d2019-06-20 22:08:40 +02003920 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3921 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003922 fi
3923fi
3924
3925##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003926# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003927
3928if test "$linux_aio" != "no" ; then
3929 cat > $TMPC <<EOF
3930#include <libaio.h>
3931#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003932#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003933int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3934EOF
3935 if compile_prog "" "-laio" ; then
3936 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003937 else
3938 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003939 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003940 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003941 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003942 fi
3943fi
3944
3945##########################################
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08003946# TPM emulation is only on POSIX
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003947
Paolo Bonzini7aaa6a12019-01-23 14:56:07 +08003948if test "$tpm" = ""; then
3949 if test "$mingw32" = "yes"; then
3950 tpm=no
3951 else
3952 tpm=yes
3953 fi
3954elif test "$tpm" = "yes"; then
3955 if test "$mingw32" = "yes" ; then
3956 error_exit "TPM emulation only available on POSIX systems"
3957 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003958fi
3959
3960##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003961# attr probe
3962
3963if test "$attr" != "no" ; then
3964 cat > $TMPC <<EOF
3965#include <stdio.h>
3966#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003967#ifdef CONFIG_LIBATTR
3968#include <attr/xattr.h>
3969#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003970#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003971#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003972int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3973EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003974 if compile_prog "" "" ; then
3975 attr=yes
3976 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003977 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003978 attr=yes
3979 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003980 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003981 else
3982 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003983 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003984 fi
3985 attr=no
3986 fi
3987fi
3988
3989##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003990# iovec probe
3991cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003992#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003993#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003994#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003995int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003996EOF
3997iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003998if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003999 iovec=yes
4000fi
4001
aurel32f652e6a2008-12-16 10:43:48 +00004002##########################################
aliguoriceb42de2009-04-07 18:43:28 +00004003# preadv probe
4004cat > $TMPC <<EOF
4005#include <sys/types.h>
4006#include <sys/uio.h>
4007#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00004008int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00004009EOF
4010preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02004011if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00004012 preadv=yes
4013fi
4014
4015##########################################
aurel32f652e6a2008-12-16 10:43:48 +00004016# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01004017# fdt support is mandatory for at least some target architectures,
4018# so insist on it if we're building those system emulators.
4019fdt_required=no
4020for target in $target_list; do
4021 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02004022 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01004023 fdt_required=yes
4024 ;;
4025 esac
4026done
4027
4028if test "$fdt_required" = "yes"; then
4029 if test "$fdt" = "no"; then
4030 error_exit "fdt disabled but some requested targets require it." \
4031 "You can turn off fdt only if you also disable all the system emulation" \
4032 "targets which need it (by specifying a cut down --target-list)."
4033 fi
4034 fdt=yes
4035fi
4036
Juan Quintela2df87df2009-08-12 18:29:54 +02004037if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02004038 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004039 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01004040 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02004041 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02004042#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10004043#include <libfdt_env.h>
Alexey Kardashevskiyfea35ca2018-12-21 01:34:48 +01004044int main(void) { fdt_check_full(NULL, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00004045EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004046 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004047 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004048 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004049 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004050 # have GIT checkout, so activate dtc submodule
4051 if test -e "${source_path}/.git" ; then
4052 git_submodules="${git_submodules} dtc"
4053 fi
4054 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03004055 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004056 mkdir -p dtc
4057 if [ "$pwd_is_source_path" != "y" ] ; then
4058 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4059 symlink "$source_path/dtc/scripts" "dtc/scripts"
4060 fi
4061 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03004062 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4063 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01004064 elif test "$fdt" = "yes" ; then
4065 # Not a git build & no libfdt found, prompt for system install
4066 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4067 "Please install the DTC (libfdt) devel package"
4068 else
4069 # don't have and don't want
4070 fdt_libs=
4071 fdt=no
4072 fi
aurel32f652e6a2008-12-16 10:43:48 +00004073 fi
4074fi
4075
Peter Crosthwaitea540f152013-04-18 14:47:31 +10004076libs_softmmu="$libs_softmmu $fdt_libs"
4077
Michael Walle20ff0752011-03-07 23:32:39 +01004078##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09004079# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01004080
Marc-André Lureaud52c4542019-05-24 15:09:42 +02004081gbm="no"
4082if $pkg_config gbm; then
4083 gbm_cflags="$($pkg_config --cflags gbm)"
4084 gbm_libs="$($pkg_config --libs gbm)"
4085 gbm="yes"
4086fi
4087
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004088if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03004089 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01004090 if $pkg_config $opengl_pkgs; then
4091 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4092 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004093 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02004094 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4095 gtk_gl="yes"
4096 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01004097 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01004098 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004099 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02004100 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01004101 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06004102 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01004103 opengl_libs=""
4104 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01004105 fi
4106fi
4107
Gerd Hoffmann014cb152015-12-03 12:56:34 +01004108if test "$opengl" = "yes"; then
4109 cat > $TMPC << EOF
4110#include <epoxy/egl.h>
4111#ifndef EGL_MESA_image_dma_buf_export
4112# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4113#endif
4114int main(void) { return 0; }
4115EOF
4116 if compile_prog "" "" ; then
4117 opengl_dmabuf=yes
4118 fi
4119fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004120
Eric Blakee633a5c2019-02-04 20:39:37 -06004121if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
Philippe Mathieu-Daudé99e1a932019-01-30 13:00:03 +01004122 for target in $target_list; do
4123 case $target in
4124 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4125 need_x11=yes
4126 ;;
4127 esac
4128 done
4129fi
4130
Klim Kireeved279a02018-01-12 12:01:19 +03004131##########################################
4132# libxml2 probe
4133if test "$libxml2" != "no" ; then
4134 if $pkg_config --exists libxml-2.0; then
4135 libxml2="yes"
4136 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4137 libxml2_libs=$($pkg_config --libs libxml-2.0)
4138 else
4139 if test "$libxml2" = "yes"; then
4140 feature_not_found "libxml2" "Install libxml2 devel"
4141 fi
4142 libxml2="no"
4143 fi
4144fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004145
Bharata B Raoeb100392012-09-24 14:42:45 +05304146##########################################
4147# glusterfs probe
4148if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004149 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304150 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004151 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4152 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004153 if $pkg_config --atleast-version=4 glusterfs-api; then
4154 glusterfs_xlator_opt="yes"
4155 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004156 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304157 glusterfs_discard="yes"
4158 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304159 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304160 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304161 glusterfs_zerofill="yes"
4162 fi
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01004163 cat > $TMPC << EOF
4164#include <glusterfs/api/glfs.h>
4165
4166int
4167main(void)
4168{
4169 /* new glfs_ftruncate() passes two additional args */
4170 return glfs_ftruncate(NULL, 0, NULL, NULL);
4171}
4172EOF
4173 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4174 glusterfs_ftruncate_has_stat="yes"
4175 fi
Niels de Vos0e3b8912019-03-05 16:46:34 +01004176 cat > $TMPC << EOF
4177#include <glusterfs/api/glfs.h>
4178
4179/* new glfs_io_cbk() passes two additional glfs_stat structs */
4180static void
4181glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4182{}
4183
4184int
4185main(void)
4186{
4187 glfs_io_cbk iocb = &glusterfs_iocb;
4188 iocb(NULL, 0 , NULL, NULL, NULL);
4189 return 0;
4190}
4191EOF
4192 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4193 glusterfs_iocb_has_stat="yes"
4194 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304195 else
4196 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004197 feature_not_found "GlusterFS backend support" \
4198 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304199 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304200 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304201 fi
4202fi
4203
aurel3239386ac2009-04-15 19:48:17 +00004204# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004205# emulator. This is done because older glibc versions don't
4206# have syscall stubs for these implemented. In that case we
4207# don't provide them even if kernel supports them.
4208#
4209inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004210cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004211#include <sys/inotify.h>
4212
4213int
4214main(void)
4215{
4216 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004217 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004218}
4219EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004220if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004221 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004222fi
4223
Riku Voipioc05c7a72010-03-26 15:25:11 +00004224inotify1=no
4225cat > $TMPC << EOF
4226#include <sys/inotify.h>
4227
4228int
4229main(void)
4230{
4231 /* try to start inotify */
4232 return inotify_init1(0);
4233}
4234EOF
4235if compile_prog "" "" ; then
4236 inotify1=yes
4237fi
4238
Riku Voipio099d6b02009-05-05 12:10:04 +03004239# check if pipe2 is there
4240pipe2=no
4241cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004242#include <unistd.h>
4243#include <fcntl.h>
4244
4245int main(void)
4246{
4247 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004248 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004249}
4250EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004251if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004252 pipe2=yes
4253fi
4254
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004255# check if accept4 is there
4256accept4=no
4257cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004258#include <sys/socket.h>
4259#include <stddef.h>
4260
4261int main(void)
4262{
4263 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4264 return 0;
4265}
4266EOF
4267if compile_prog "" "" ; then
4268 accept4=yes
4269fi
4270
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304271# check if tee/splice is there. vmsplice was added same time.
4272splice=no
4273cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304274#include <unistd.h>
4275#include <fcntl.h>
4276#include <limits.h>
4277
4278int main(void)
4279{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004280 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304281 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4282 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4283 return 0;
4284}
4285EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004286if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304287 splice=yes
4288fi
4289
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004290##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004291# libnuma probe
4292
4293if test "$numa" != "no" ; then
4294 cat > $TMPC << EOF
4295#include <numa.h>
4296int main(void) { return numa_available(); }
4297EOF
4298
4299 if compile_prog "" "-lnuma" ; then
4300 numa=yes
4301 libs_softmmu="-lnuma $libs_softmmu"
4302 else
4303 if test "$numa" = "yes" ; then
4304 feature_not_found "numa" "install numactl devel"
4305 fi
4306 numa=no
4307 fi
4308fi
4309
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004310if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4311 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4312 exit 1
4313fi
4314
Yang Zhong5a22ab72017-12-20 21:16:46 +08004315# Even if malloc_trim() is available, these non-libc memory allocators
4316# do not support it.
4317if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4318 if test "$malloc_trim" = "yes" ; then
4319 echo "Disabling malloc_trim with non-libc memory allocator"
4320 fi
4321 malloc_trim="no"
4322fi
4323
4324#######################################
4325# malloc_trim
4326
4327if test "$malloc_trim" != "no" ; then
4328 cat > $TMPC << EOF
4329#include <malloc.h>
4330int main(void) { malloc_trim(0); return 0; }
4331EOF
4332 if compile_prog "" "" ; then
4333 malloc_trim="yes"
4334 else
4335 malloc_trim="no"
4336 fi
4337fi
4338
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004339##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004340# tcmalloc probe
4341
4342if test "$tcmalloc" = "yes" ; then
4343 cat > $TMPC << EOF
4344#include <stdlib.h>
4345int main(void) { malloc(1); return 0; }
4346EOF
4347
4348 if compile_prog "" "-ltcmalloc" ; then
4349 LIBS="-ltcmalloc $LIBS"
4350 else
4351 feature_not_found "tcmalloc" "install gperftools devel"
4352 fi
4353fi
4354
4355##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004356# jemalloc probe
4357
4358if test "$jemalloc" = "yes" ; then
4359 cat > $TMPC << EOF
4360#include <stdlib.h>
4361int main(void) { malloc(1); return 0; }
4362EOF
4363
4364 if compile_prog "" "-ljemalloc" ; then
4365 LIBS="-ljemalloc $LIBS"
4366 else
4367 feature_not_found "jemalloc" "install jemalloc devel"
4368 fi
4369fi
4370
4371##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004372# signalfd probe
4373signalfd="no"
4374cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004375#include <unistd.h>
4376#include <sys/syscall.h>
4377#include <signal.h>
4378int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4379EOF
4380
4381if compile_prog "" "" ; then
4382 signalfd=yes
4383fi
4384
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00004385# check if optreset global is declared by <getopt.h>
4386optreset="no"
4387cat > $TMPC << EOF
4388#include <getopt.h>
4389int main(void) { return optreset; }
4390EOF
4391
4392if compile_prog "" "" ; then
4393 optreset=yes
4394fi
4395
Riku Voipioc2882b92009-08-12 15:08:24 +03004396# check if eventfd is supported
4397eventfd=no
4398cat > $TMPC << EOF
4399#include <sys/eventfd.h>
4400
4401int main(void)
4402{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004403 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004404}
4405EOF
4406if compile_prog "" "" ; then
4407 eventfd=yes
4408fi
4409
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004410# check if memfd is supported
4411memfd=no
4412cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004413#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004414
4415int main(void)
4416{
4417 return memfd_create("foo", MFD_ALLOW_SEALING);
4418}
4419EOF
4420if compile_prog "" "" ; then
4421 memfd=yes
4422fi
4423
Cortland Tölva955727d2018-10-08 09:35:19 -07004424# check for usbfs
4425have_usbfs=no
4426if test "$linux_user" = "yes"; then
Thomas Petazzoni96566d02019-02-13 22:18:27 +01004427 cat > $TMPC << EOF
4428#include <linux/usbdevice_fs.h>
4429
4430#ifndef USBDEVFS_GET_CAPABILITIES
4431#error "USBDEVFS_GET_CAPABILITIES undefined"
4432#endif
4433
4434#ifndef USBDEVFS_DISCONNECT_CLAIM
4435#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4436#endif
4437
4438int main(void)
4439{
4440 return 0;
4441}
4442EOF
4443 if compile_prog "" ""; then
Cortland Tölva955727d2018-10-08 09:35:19 -07004444 have_usbfs=yes
4445 fi
Cortland Tölva955727d2018-10-08 09:35:19 -07004446fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004447
Ulrich Hechtd0927932009-09-17 20:22:14 +03004448# check for fallocate
4449fallocate=no
4450cat > $TMPC << EOF
4451#include <fcntl.h>
4452
4453int main(void)
4454{
4455 fallocate(0, 0, 0, 0);
4456 return 0;
4457}
4458EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004459if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004460 fallocate=yes
4461fi
4462
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004463# check for fallocate hole punching
4464fallocate_punch_hole=no
4465cat > $TMPC << EOF
4466#include <fcntl.h>
4467#include <linux/falloc.h>
4468
4469int main(void)
4470{
4471 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4472 return 0;
4473}
4474EOF
4475if compile_prog "" "" ; then
4476 fallocate_punch_hole=yes
4477fi
4478
Denis V. Lunevb953f072015-01-30 11:42:14 +03004479# check that fallocate supports range zeroing inside the file
4480fallocate_zero_range=no
4481cat > $TMPC << EOF
4482#include <fcntl.h>
4483#include <linux/falloc.h>
4484
4485int main(void)
4486{
4487 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4488 return 0;
4489}
4490EOF
4491if compile_prog "" "" ; then
4492 fallocate_zero_range=yes
4493fi
4494
Kevin Wolfed911432014-09-29 17:12:59 +02004495# check for posix_fallocate
4496posix_fallocate=no
4497cat > $TMPC << EOF
4498#include <fcntl.h>
4499
4500int main(void)
4501{
4502 posix_fallocate(0, 0, 0);
4503 return 0;
4504}
4505EOF
4506if compile_prog "" "" ; then
4507 posix_fallocate=yes
4508fi
4509
Peter Maydellc727f472011-01-06 11:05:10 +00004510# check for sync_file_range
4511sync_file_range=no
4512cat > $TMPC << EOF
4513#include <fcntl.h>
4514
4515int main(void)
4516{
4517 sync_file_range(0, 0, 0, 0);
4518 return 0;
4519}
4520EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004521if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004522 sync_file_range=yes
4523fi
4524
Peter Maydelldace20d2011-01-10 13:11:24 +00004525# check for linux/fiemap.h and FS_IOC_FIEMAP
4526fiemap=no
4527cat > $TMPC << EOF
4528#include <sys/ioctl.h>
4529#include <linux/fs.h>
4530#include <linux/fiemap.h>
4531
4532int main(void)
4533{
4534 ioctl(0, FS_IOC_FIEMAP, 0);
4535 return 0;
4536}
4537EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004538if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004539 fiemap=yes
4540fi
4541
Ulrich Hechtd0927932009-09-17 20:22:14 +03004542# check for dup3
4543dup3=no
4544cat > $TMPC << EOF
4545#include <unistd.h>
4546
4547int main(void)
4548{
4549 dup3(0, 0, 0);
4550 return 0;
4551}
4552EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004553if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004554 dup3=yes
4555fi
4556
Alex Bligh4e0c6522013-08-21 16:02:43 +01004557# check for ppoll support
4558ppoll=no
4559cat > $TMPC << EOF
4560#include <poll.h>
4561
4562int main(void)
4563{
4564 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4565 ppoll(&pfd, 1, 0, 0);
4566 return 0;
4567}
4568EOF
4569if compile_prog "" "" ; then
4570 ppoll=yes
4571fi
4572
Alex Blighcd758dd2013-08-21 16:02:44 +01004573# check for prctl(PR_SET_TIMERSLACK , ... ) support
4574prctl_pr_set_timerslack=no
4575cat > $TMPC << EOF
4576#include <sys/prctl.h>
4577
4578int main(void)
4579{
4580 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4581 return 0;
4582}
4583EOF
4584if compile_prog "" "" ; then
4585 prctl_pr_set_timerslack=yes
4586fi
4587
Peter Maydell3b6edd12011-02-15 18:35:05 +00004588# check for epoll support
4589epoll=no
4590cat > $TMPC << EOF
4591#include <sys/epoll.h>
4592
4593int main(void)
4594{
4595 epoll_create(0);
4596 return 0;
4597}
4598EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004599if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004600 epoll=yes
4601fi
4602
Peter Maydell227f0212016-06-06 19:58:11 +01004603# epoll_create1 is a later addition
4604# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004605epoll_create1=no
4606cat > $TMPC << EOF
4607#include <sys/epoll.h>
4608
4609int main(void)
4610{
Peter Maydell19e83f62011-04-26 16:56:40 +01004611 /* Note that we use epoll_create1 as a value, not as
4612 * a function being called. This is necessary so that on
4613 * old SPARC glibc versions where the function was present in
4614 * the library but not declared in the header file we will
4615 * fail the configure check. (Otherwise we will get a compiler
4616 * warning but not an error, and will proceed to fail the
4617 * qemu compile where we compile with -Werror.)
4618 */
Blue Swirlc075a722012-08-09 20:21:25 +00004619 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004620}
4621EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004622if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004623 epoll_create1=yes
4624fi
4625
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004626# check for sendfile support
4627sendfile=no
4628cat > $TMPC << EOF
4629#include <sys/sendfile.h>
4630
4631int main(void)
4632{
4633 return sendfile(0, 0, 0, 0);
4634}
4635EOF
4636if compile_prog "" "" ; then
4637 sendfile=yes
4638fi
4639
Riku Voipio51834342014-06-22 11:25:42 +01004640# check for timerfd support (glibc 2.8 and newer)
4641timerfd=no
4642cat > $TMPC << EOF
4643#include <sys/timerfd.h>
4644
4645int main(void)
4646{
4647 return(timerfd_create(CLOCK_REALTIME, 0));
4648}
4649EOF
4650if compile_prog "" "" ; then
4651 timerfd=yes
4652fi
4653
Riku Voipio9af5c902014-08-12 15:58:57 +03004654# check for setns and unshare support
4655setns=no
4656cat > $TMPC << EOF
4657#include <sched.h>
4658
4659int main(void)
4660{
4661 int ret;
4662 ret = setns(0, 0);
4663 ret = unshare(0);
4664 return ret;
4665}
4666EOF
4667if compile_prog "" "" ; then
4668 setns=yes
4669fi
4670
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004671# clock_adjtime probe
4672clock_adjtime=no
4673cat > $TMPC <<EOF
4674#include <time.h>
4675
4676int main(void)
4677{
4678 return clock_adjtime(0, 0);
4679}
4680EOF
4681clock_adjtime=no
4682if compile_prog "" "" ; then
4683 clock_adjtime=yes
4684fi
4685
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004686# syncfs probe
4687syncfs=no
4688cat > $TMPC <<EOF
4689#include <unistd.h>
4690
4691int main(void)
4692{
4693 return syncfs(0);
4694}
4695EOF
4696syncfs=no
4697if compile_prog "" "" ; then
4698 syncfs=yes
4699fi
4700
Peter Maydell5f71eac2019-03-07 14:26:46 +00004701# Check we have a new enough version of sphinx-build
4702has_sphinx_build() {
4703 # This is a bit awkward but works: create a trivial document and
4704 # try to run it with our configuration file (which enforces a
4705 # version requirement). This will fail if either
4706 # sphinx-build doesn't exist at all or if it is too old.
4707 mkdir -p "$TMPDIR1/sphinx"
4708 touch "$TMPDIR1/sphinx/index.rst"
4709 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4710}
4711
pbrookcc8ae6d2006-04-23 17:57:59 +00004712# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004713if test "$docs" != "no" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004714 if has makeinfo && has pod2man && has_sphinx_build; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004715 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004716 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004717 if test "$docs" = "yes" ; then
Peter Maydell5f71eac2019-03-07 14:26:46 +00004718 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004719 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004720 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004721 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004722fi
4723
Stefan Weilf514f412009-10-11 12:44:07 +02004724# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004725byteswap_h=no
4726cat > $TMPC << EOF
4727#include <byteswap.h>
4728int main(void) { return bswap_32(0); }
4729EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004730if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004731 byteswap_h=yes
4732fi
4733
Stefan Weil75f13592013-01-05 12:17:38 +01004734# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004735bswap_h=no
4736cat > $TMPC << EOF
4737#include <sys/endian.h>
4738#include <sys/types.h>
4739#include <machine/bswap.h>
4740int main(void) { return bswap32(0); }
4741EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004742if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004743 bswap_h=yes
4744fi
4745
aliguorida93a1f2008-12-12 20:02:52 +00004746##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004747# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004748if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004749 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004750 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004751 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4752 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004753 else
4754 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004755 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004756 fi
4757 libiscsi="no"
4758 fi
4759fi
4760
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004761##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004762# Do we need libm
4763cat > $TMPC << EOF
4764#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004765int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004766EOF
4767if compile_prog "" "" ; then
4768 :
4769elif compile_prog "" "-lm" ; then
4770 LIBS="-lm $LIBS"
4771 libs_qga="-lm $libs_qga"
4772else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004773 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004774fi
4775
4776##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004777# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004778# uClibc provides 2 versions of clock_gettime(), one with realtime
4779# support and one without. This means that the clock_gettime() don't
4780# need -lrt. We still need it for timer_create() so we check for this
4781# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004782cat > $TMPC <<EOF
4783#include <signal.h>
4784#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004785int main(void) {
4786 timer_create(CLOCK_REALTIME, NULL, NULL);
4787 return clock_gettime(CLOCK_REALTIME, NULL);
4788}
aliguorida93a1f2008-12-12 20:02:52 +00004789EOF
4790
Juan Quintela52166aa2009-08-03 14:46:03 +02004791if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004792 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004793# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004794elif compile_prog "" "$pthread_lib -lrt" ; then
4795 LIBS="$LIBS -lrt"
4796 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004797fi
4798
Thomas Huthd99e97e2019-01-17 18:14:08 +01004799# Check whether we need to link libutil for openpty()
4800cat > $TMPC << EOF
4801extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4802int main(void) { return openpty(0, 0, 0, 0, 0); }
4803EOF
4804
4805if ! compile_prog "" "" ; then
4806 if compile_prog "" "-lutil" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004807 libs_softmmu="-lutil $libs_softmmu"
Thomas Huthd99e97e2019-01-17 18:14:08 +01004808 libs_tools="-lutil $libs_tools"
4809 fi
Juan Quintela6362a532009-08-03 14:46:32 +02004810fi
4811
Blue Swirlde5071c2009-09-12 09:58:46 +00004812##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004813# spice probe
4814if test "$spice" != "no" ; then
4815 cat > $TMPC << EOF
4816#include <spice.h>
4817int main(void) { spice_server_new(); return 0; }
4818EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004819 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4820 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Marc-André Lureau1b636652018-11-28 19:59:32 +04004821 if $pkg_config --atleast-version=0.12.5 spice-server && \
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004822 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004823 compile_prog "$spice_cflags" "$spice_libs" ; then
4824 spice="yes"
4825 libs_softmmu="$libs_softmmu $spice_libs"
4826 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004827 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4828 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004829 else
4830 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004831 feature_not_found "spice" \
Marc-André Lureau1b636652018-11-28 19:59:32 +04004832 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004833 fi
4834 spice="no"
4835 fi
4836fi
4837
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004838# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004839if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004840 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004841 libcacard_cflags=$($pkg_config --cflags libcacard)
4842 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004843 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004844 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004845 if test "$smartcard" = "yes"; then
4846 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004847 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004848 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004849 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004850fi
4851
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004852# check for libusb
4853if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004854 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004855 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004856 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4857 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004858 else
4859 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004860 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004861 fi
4862 libusb="no"
4863 fi
4864fi
4865
Hans de Goede69354a82011-07-19 11:04:10 +02004866# check for usbredirparser for usb network redirection support
4867if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004868 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004869 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004870 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4871 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004872 else
4873 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004874 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004875 fi
4876 usb_redir="no"
4877 fi
4878fi
4879
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004880##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004881# check if we have VSS SDK headers for win
4882
Eric Blakee633a5c2019-02-04 20:39:37 -06004883if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4884 test "$vss_win32_sdk" != "no" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004885 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004886 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004887 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4888 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004889 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004890 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4891 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004892 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004893 esac
4894 cat > $TMPC << EOF
4895#define __MIDL_user_allocate_free_DEFINED__
4896#include <inc/win2003/vss.h>
4897int main(void) { return VSS_CTX_BACKUP; }
4898EOF
4899 if compile_prog "$vss_win32_include" "" ; then
4900 guest_agent_with_vss="yes"
4901 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004902 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004903 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004904 else
4905 if test "$vss_win32_sdk" != "" ; then
4906 echo "ERROR: Please download and install Microsoft VSS SDK:"
4907 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4908 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4909 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4910 echo "ERROR: The headers are extracted in the directory \`inc'."
4911 feature_not_found "VSS support"
4912 fi
4913 guest_agent_with_vss="no"
4914 fi
4915fi
4916
4917##########################################
4918# lookup Windows platform SDK (if not specified)
4919# The SDK is needed only to build .tlb (type library) file of guest agent
4920# VSS provider from the source. It is usually unnecessary because the
4921# pre-compiled .tlb file is included.
4922
Eric Blakee633a5c2019-02-04 20:39:37 -06004923if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4924 test "$guest_agent_with_vss" = "yes" ; then
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004925 if test -z "$win_sdk"; then
4926 programfiles="$PROGRAMFILES"
4927 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4928 if test -n "$programfiles"; then
4929 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4930 else
4931 feature_not_found "Windows SDK"
4932 fi
4933 elif test "$win_sdk" = "no"; then
4934 win_sdk=""
4935 fi
4936fi
4937
4938##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004939# check if mingw environment provides a recent ntddscsi.h
Eric Blakee633a5c2019-02-04 20:39:37 -06004940if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
Michael Roth50cbebb2015-07-07 18:10:09 -05004941 cat > $TMPC << EOF
4942#include <windows.h>
4943#include <ntddscsi.h>
4944int main(void) {
4945#if !defined(IOCTL_SCSI_GET_ADDRESS)
4946#error Missing required ioctl definitions
4947#endif
4948 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4949 return addr.Lun;
4950}
4951EOF
4952 if compile_prog "" "" ; then
4953 guest_agent_ntddscsi=yes
Matt Hines996b9cd2019-01-28 14:30:56 -08004954 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004955 fi
4956fi
4957
4958##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004959# virgl renderer probe
4960
4961if test "$virglrenderer" != "no" ; then
4962 cat > $TMPC << EOF
4963#include <virglrenderer.h>
4964int main(void) { virgl_renderer_poll(); return 0; }
4965EOF
4966 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4967 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004968 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004969 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4970 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4971 virglrenderer="yes"
4972 else
4973 if test "$virglrenderer" = "yes" ; then
4974 feature_not_found "virglrenderer"
4975 fi
4976 virglrenderer="no"
4977 fi
4978fi
4979
4980##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004981# capstone
4982
Richard Hendersone219c492017-09-28 09:01:23 -07004983case "$capstone" in
4984 "" | yes)
4985 if $pkg_config capstone; then
4986 capstone=system
Eric Blakee633a5c2019-02-04 20:39:37 -06004987 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004988 capstone=git
4989 elif test -e "${source_path}/capstone/Makefile" ; then
4990 capstone=internal
4991 elif test -z "$capstone" ; then
4992 capstone=no
4993 else
4994 feature_not_found "capstone" "Install capstone devel or git submodule"
4995 fi
4996 ;;
4997
4998 system)
4999 if ! $pkg_config capstone; then
5000 feature_not_found "capstone" "Install capstone devel"
5001 fi
5002 ;;
5003esac
5004
5005case "$capstone" in
5006 git | internal)
5007 if test "$capstone" = git; then
5008 git_submodules="${git_submodules} capstone"
5009 fi
5010 mkdir -p capstone
5011 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5012 if test "$mingw32" = "yes"; then
5013 LIBCAPSTONE=capstone.lib
5014 else
5015 LIBCAPSTONE=libcapstone.a
5016 fi
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005017 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005018 ;;
5019
5020 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07005021 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01005022 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
Richard Hendersone219c492017-09-28 09:01:23 -07005023 ;;
5024
5025 no)
5026 ;;
5027 *)
5028 error_exit "Unknown state for capstone: $capstone"
5029 ;;
5030esac
Richard Henderson8ca80762017-09-14 09:41:12 -07005031
5032##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005033# check if we have fdatasync
5034
5035fdatasync=no
5036cat > $TMPC << EOF
5037#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005038int main(void) {
5039#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5040return fdatasync(0);
5041#else
Stefan Weile172fe12012-04-06 21:33:20 +02005042#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04005043#endif
5044}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005045EOF
5046if compile_prog "" "" ; then
5047 fdatasync=yes
5048fi
5049
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005050##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00005051# check if we have madvise
5052
5053madvise=no
5054cat > $TMPC << EOF
5055#include <sys/types.h>
5056#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005057#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005058int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5059EOF
5060if compile_prog "" "" ; then
5061 madvise=yes
5062fi
5063
5064##########################################
5065# check if we have posix_madvise
5066
5067posix_madvise=no
5068cat > $TMPC << EOF
5069#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05005070#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00005071int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5072EOF
5073if compile_prog "" "" ; then
5074 posix_madvise=yes
5075fi
5076
5077##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005078# check if we have posix_memalign()
5079
5080posix_memalign=no
5081cat > $TMPC << EOF
5082#include <stdlib.h>
5083int main(void) {
5084 void *p;
5085 return posix_memalign(&p, 8, 8);
5086}
5087EOF
5088if compile_prog "" "" ; then
5089 posix_memalign=yes
5090fi
5091
5092##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01005093# check if we have posix_syslog
5094
5095posix_syslog=no
5096cat > $TMPC << EOF
5097#include <syslog.h>
5098int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5099EOF
5100if compile_prog "" "" ; then
5101 posix_syslog=yes
5102fi
5103
5104##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01005105# check if we have sem_timedwait
5106
5107sem_timedwait=no
5108cat > $TMPC << EOF
5109#include <semaphore.h>
Daniel P. Berrangé811294b2019-06-17 12:41:14 +01005110int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
Peter Maydell401bc052017-09-05 13:19:32 +01005111EOF
5112if compile_prog "" "" ; then
5113 sem_timedwait=yes
5114fi
5115
5116##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02005117# check if we have strchrnul
5118
5119strchrnul=no
5120cat > $TMPC << EOF
5121#include <string.h>
5122int main(void);
5123// Use a haystack that the compiler shouldn't be able to constant fold
5124char *haystack = (char*)&main;
5125int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5126EOF
5127if compile_prog "" "" ; then
5128 strchrnul=yes
5129fi
5130
5131##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005132# check if trace backend exists
5133
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005134$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005135if test "$?" -ne 0 ; then
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005136 error_exit "invalid trace backends" \
5137 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01005138fi
5139
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005140##########################################
5141# For 'ust' backend, test if ust headers are present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005142if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005143 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005144#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005145int main(void) { return 0; }
5146EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005147 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005148 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005149 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005150 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05005151 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005152 fi
5153 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02005154 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005155 else
5156 urcu_bp_libs="-lurcu-bp"
5157 fi
5158
5159 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5160 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005161 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05005162 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005163 fi
5164fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005165
5166##########################################
5167# For 'dtrace' backend, test if 'dtrace' command is present
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02005168if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005169 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005170 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005171 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005172 trace_backend_stap="no"
5173 if has 'stap' ; then
5174 trace_backend_stap="yes"
5175 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00005176fi
5177
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01005178##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01005179# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305180
Peter Maydell7c2acc72013-04-08 12:11:27 +01005181# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005182# is sigcontext. On Windows the only valid backend is the Windows
5183# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01005184
5185ucontext_works=no
5186if test "$darwin" != "yes"; then
5187 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305188#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00005189#ifdef __stub_makecontext
5190#error Ignoring glibc stub makecontext which will always fail
5191#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01005192int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305193EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01005194 if compile_prog "" "" ; then
5195 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305196 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01005197fi
5198
5199if test "$coroutine" = ""; then
5200 if test "$mingw32" = "yes"; then
5201 coroutine=win32
5202 elif test "$ucontext_works" = "yes"; then
5203 coroutine=ucontext
5204 else
5205 coroutine=sigaltstack
5206 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01005207else
Peter Maydell7c2acc72013-04-08 12:11:27 +01005208 case $coroutine in
5209 windows)
5210 if test "$mingw32" != "yes"; then
5211 error_exit "'windows' coroutine backend only valid for Windows"
5212 fi
5213 # Unfortunately the user visible backend name doesn't match the
5214 # coroutine-*.c filename for this case, so we have to adjust it here.
5215 coroutine=win32
5216 ;;
5217 ucontext)
5218 if test "$ucontext_works" != "yes"; then
5219 feature_not_found "ucontext"
5220 fi
5221 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005222 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01005223 if test "$mingw32" = "yes"; then
5224 error_exit "only the 'windows' coroutine backend is valid for Windows"
5225 fi
5226 ;;
5227 *)
5228 error_exit "unknown coroutine backend $coroutine"
5229 ;;
5230 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305231fi
5232
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005233if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005234 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005235fi
5236
Peter Lieven7d992e42016-09-27 11:58:45 +02005237if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005238 if test "$coroutine_pool" = "yes"; then
5239 echo "WARN: disabling coroutine pool for stack usage debugging"
5240 coroutine_pool=no
5241 fi
5242fi
5243
5244
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305245##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305246# check if we have open_by_handle_at
5247
Stefan Weil4e1797f2012-06-18 22:11:06 +02005248open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305249cat > $TMPC << EOF
5250#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005251#if !defined(AT_EMPTY_PATH)
5252# error missing definition
5253#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005254int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005255#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305256EOF
5257if compile_prog "" "" ; then
5258 open_by_handle_at=yes
5259fi
5260
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305261########################################
5262# check if we have linux/magic.h
5263
5264linux_magic_h=no
5265cat > $TMPC << EOF
5266#include <linux/magic.h>
5267int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005268 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305269}
5270EOF
5271if compile_prog "" "" ; then
5272 linux_magic_h=yes
5273fi
5274
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005275########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005276# check whether we can disable warning option with a pragma (this is needed
5277# to silence warnings in the headers of some versions of external libraries).
5278# This test has to be compiled with -Werror as otherwise an unknown pragma is
5279# only a warning.
5280#
5281# If we can't selectively disable warning in the code, disable -Werror so that
5282# the build doesn't fail anyway.
5283
Peter Maydell06d71fa2012-07-30 16:13:07 +01005284pragma_disable_unused_but_set=no
5285cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005286#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005287#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005288#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005289
Peter Maydell06d71fa2012-07-30 16:13:07 +01005290int main(void) {
5291 return 0;
5292}
5293EOF
5294if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005295 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005296else
5297 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005298fi
5299
5300########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005301# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005302
5303valgrind_h=no
5304cat > $TMPC << EOF
5305#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005306int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005307 return 0;
5308}
5309EOF
5310if compile_prog "" "" ; then
5311 valgrind_h=yes
5312fi
5313
5314########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005315# check if environ is declared
5316
5317has_environ=no
5318cat > $TMPC << EOF
5319#include <unistd.h>
5320int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005321 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005322 return 0;
5323}
5324EOF
5325if compile_prog "" "" ; then
5326 has_environ=yes
5327fi
5328
Richard Henderson76a347e2012-12-28 14:17:02 -08005329########################################
5330# check if cpuid.h is usable.
5331
Richard Henderson76a347e2012-12-28 14:17:02 -08005332cat > $TMPC << EOF
5333#include <cpuid.h>
5334int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005335 unsigned a, b, c, d;
5336 int max = __get_cpuid_max(0, 0);
5337
5338 if (max >= 1) {
5339 __cpuid(1, a, b, c, d);
5340 }
5341
5342 if (max >= 7) {
5343 __cpuid_count(7, 0, a, b, c, d);
5344 }
5345
5346 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005347}
5348EOF
5349if compile_prog "" "" ; then
5350 cpuid_h=yes
5351fi
5352
Richard Henderson5dd89902017-07-18 18:40:18 -10005353##########################################
5354# avx2 optimization requirement check
5355#
5356# There is no point enabling this if cpuid.h is not usable,
5357# since we won't be able to select the new routines.
5358
Eric Blakee633a5c2019-02-04 20:39:37 -06005359if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
Richard Henderson5dd89902017-07-18 18:40:18 -10005360 cat > $TMPC << EOF
5361#pragma GCC push_options
5362#pragma GCC target("avx2")
5363#include <cpuid.h>
5364#include <immintrin.h>
5365static int bar(void *a) {
5366 __m256i x = *(__m256i *)a;
5367 return _mm256_testz_si256(x, x);
5368}
5369int main(int argc, char *argv[]) { return bar(argv[0]); }
5370EOF
5371 if compile_object "" ; then
5372 avx2_opt="yes"
Liam Merwick86583a02018-10-19 21:38:59 +01005373 else
5374 avx2_opt="no"
Richard Henderson5dd89902017-07-18 18:40:18 -10005375 fi
5376fi
5377
Richard Hendersonf5401662013-02-16 12:46:59 -08005378########################################
5379# check if __[u]int128_t is usable.
5380
5381int128=no
5382cat > $TMPC << EOF
5383__int128_t a;
5384__uint128_t b;
5385int main (void) {
5386 a = a + b;
5387 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005388 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005389 return 0;
5390}
5391EOF
5392if compile_prog "" "" ; then
5393 int128=yes
5394fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005395
Richard Henderson7ebee432016-06-29 21:10:59 -07005396#########################################
5397# See if 128-bit atomic operations are supported.
5398
5399atomic128=no
5400if test "$int128" = "yes"; then
5401 cat > $TMPC << EOF
5402int main(void)
5403{
5404 unsigned __int128 x = 0, y = 0;
5405 y = __atomic_load_16(&x, 0);
5406 __atomic_store_16(&x, y, 0);
5407 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5408 return 0;
5409}
5410EOF
5411 if compile_prog "" "" ; then
5412 atomic128=yes
5413 fi
5414fi
5415
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005416cmpxchg128=no
Eric Blakee633a5c2019-02-04 20:39:37 -06005417if test "$int128" = yes && test "$atomic128" = no; then
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07005418 cat > $TMPC << EOF
5419int main(void)
5420{
5421 unsigned __int128 x = 0, y = 0;
5422 __sync_val_compare_and_swap_16(&x, y, x);
5423 return 0;
5424}
5425EOF
5426 if compile_prog "" "" ; then
5427 cmpxchg128=yes
5428 fi
5429fi
5430
Richard Hendersondf79b992016-09-02 12:23:57 -07005431#########################################
5432# See if 64-bit atomic operations are supported.
5433# Note that without __atomic builtins, we can only
5434# assume atomic loads/stores max at pointer size.
5435
5436cat > $TMPC << EOF
5437#include <stdint.h>
5438int main(void)
5439{
5440 uint64_t x = 0, y = 0;
5441#ifdef __ATOMIC_RELAXED
5442 y = __atomic_load_8(&x, 0);
5443 __atomic_store_8(&x, y, 0);
5444 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5445 __atomic_exchange_8(&x, y, 0);
5446 __atomic_fetch_add_8(&x, y, 0);
5447#else
5448 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5449 __sync_lock_test_and_set(&x, y);
5450 __sync_val_compare_and_swap(&x, y, 0);
5451 __sync_fetch_and_add(&x, y);
5452#endif
5453 return 0;
5454}
5455EOF
5456if compile_prog "" "" ; then
5457 atomic64=yes
5458fi
5459
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005460########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005461# See if 16-byte vector operations are supported.
5462# Even without a vector unit the compiler may expand these.
5463# There is a bug in old GCC for PPC that crashes here.
5464# Unfortunately it's the system compiler for Centos 7.
5465
5466cat > $TMPC << EOF
5467typedef unsigned char U1 __attribute__((vector_size(16)));
5468typedef unsigned short U2 __attribute__((vector_size(16)));
5469typedef unsigned int U4 __attribute__((vector_size(16)));
5470typedef unsigned long long U8 __attribute__((vector_size(16)));
5471typedef signed char S1 __attribute__((vector_size(16)));
5472typedef signed short S2 __attribute__((vector_size(16)));
5473typedef signed int S4 __attribute__((vector_size(16)));
5474typedef signed long long S8 __attribute__((vector_size(16)));
5475static U1 a1, b1;
5476static U2 a2, b2;
5477static U4 a4, b4;
5478static U8 a8, b8;
5479static S1 c1;
5480static S2 c2;
5481static S4 c4;
5482static S8 c8;
5483static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005484void helper(void *d, void *a, int shift, int i);
5485void helper(void *d, void *a, int shift, int i)
5486{
5487 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5488 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5489 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5490 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5491}
Richard Hendersondb432672017-09-15 14:11:45 -07005492int main(void)
5493{
5494 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5495 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5496 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5497 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5498 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5499 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5500 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5501 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5502 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5503 return 0;
5504}
5505EOF
5506
5507vector16=no
5508if compile_prog "" "" ; then
5509 vector16=yes
5510fi
5511
5512########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005513# check if getauxval is available.
5514
5515getauxval=no
5516cat > $TMPC << EOF
5517#include <sys/auxv.h>
5518int main(void) {
5519 return getauxval(AT_HWCAP) == 0;
5520}
5521EOF
5522if compile_prog "" "" ; then
5523 getauxval=yes
5524fi
5525
John Snowfd0e6052015-03-25 18:57:39 -04005526########################################
5527# check if ccache is interfering with
5528# semantic analysis of macros
5529
John Snow5e4dfd32015-10-28 13:56:40 -04005530unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005531ccache_cpp2=no
5532cat > $TMPC << EOF
5533static const int Z = 1;
5534#define fn() ({ Z; })
5535#define TAUT(X) ((X) == Z)
5536#define PAREN(X, Y) (X == Y)
5537#define ID(X) (X)
5538int main(int argc, char *argv[])
5539{
5540 int x = 0, y = 0;
5541 x = ID(x);
5542 x = fn();
5543 fn();
5544 if (PAREN(x, y)) return 0;
5545 if (TAUT(Z)) return 0;
5546 return 0;
5547}
5548EOF
5549
5550if ! compile_object "-Werror"; then
5551 ccache_cpp2=yes
5552fi
5553
John Snowb553a042015-11-03 15:43:42 -05005554#################################################
5555# clang does not support glibc + FORTIFY_SOURCE.
5556
5557if test "$fortify_source" != "no"; then
5558 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5559 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005560 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005561 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005562 fortify_source="no";
5563 else
5564 fortify_source="yes"
5565 fi
5566fi
5567
Fam Zheng1efad062018-06-01 17:26:43 +08005568###############################################
5569# Check if copy_file_range is provided by glibc
5570have_copy_file_range=no
5571cat > $TMPC << EOF
5572#include <unistd.h>
5573int main(void) {
5574 copy_file_range(0, NULL, 0, NULL, 0, 0);
5575 return 0;
5576}
5577EOF
5578if compile_prog "" "" ; then
5579 have_copy_file_range=yes
5580fi
5581
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305582##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005583# check if struct fsxattr is available via linux/fs.h
5584
5585have_fsxattr=no
5586cat > $TMPC << EOF
5587#include <linux/fs.h>
5588struct fsxattr foo;
5589int main(void) {
5590 return 0;
5591}
5592EOF
5593if compile_prog "" "" ; then
5594 have_fsxattr=yes
5595fi
5596
Peter Maydellb66e10e2016-06-08 18:34:32 +01005597##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005598# check for usable membarrier system call
5599if test "$membarrier" = "yes"; then
5600 have_membarrier=no
5601 if test "$mingw32" = "yes" ; then
5602 have_membarrier=yes
5603 elif test "$linux" = "yes" ; then
5604 cat > $TMPC << EOF
5605 #include <linux/membarrier.h>
5606 #include <sys/syscall.h>
5607 #include <unistd.h>
5608 #include <stdlib.h>
5609 int main(void) {
5610 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5611 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5612 exit(0);
5613 }
5614EOF
5615 if compile_prog "" "" ; then
5616 have_membarrier=yes
5617 fi
5618 fi
5619 if test "$have_membarrier" = "no"; then
5620 feature_not_found "membarrier" "membarrier system call not available"
5621 fi
5622else
5623 # Do not enable it by default even for Mingw32, because it doesn't
5624 # work on Wine.
5625 membarrier=no
5626fi
5627
5628##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005629# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005630have_rtnetlink=no
5631cat > $TMPC << EOF
5632#include <linux/rtnetlink.h>
5633int main(void) {
5634 return IFLA_PROTO_DOWN;
5635}
5636EOF
5637if compile_prog "" "" ; then
5638 have_rtnetlink=yes
5639fi
5640
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005641##########################################
5642# check for usable AF_VSOCK environment
5643have_af_vsock=no
5644cat > $TMPC << EOF
5645#include <errno.h>
5646#include <sys/types.h>
5647#include <sys/socket.h>
5648#if !defined(AF_VSOCK)
5649# error missing AF_VSOCK flag
5650#endif
5651#include <linux/vm_sockets.h>
5652int main(void) {
5653 int sock, ret;
5654 struct sockaddr_vm svm;
5655 socklen_t len = sizeof(svm);
5656 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5657 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5658 if ((ret == -1) && (errno == ENOTCONN)) {
5659 return 0;
5660 }
5661 return -1;
5662}
5663EOF
5664if compile_prog "" "" ; then
5665 have_af_vsock=yes
5666fi
5667
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005668##########################################
5669# check for usable AF_ALG environment
5670hava_afalg=no
5671cat > $TMPC << EOF
5672#include <errno.h>
5673#include <sys/types.h>
5674#include <sys/socket.h>
5675#include <linux/if_alg.h>
5676int main(void) {
5677 int sock;
5678 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5679 return sock;
5680}
5681EOF
5682if compile_prog "" "" ; then
5683 have_afalg=yes
5684fi
5685if test "$crypto_afalg" = "yes"
5686then
5687 if test "$have_afalg" != "yes"
5688 then
5689 error_exit "AF_ALG requested but could not be detected"
5690 fi
5691fi
5692
5693
James Clarke6969ec62016-06-06 12:02:50 +01005694#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005695# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005696if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005697 cat > $TMPC << EOF
5698#include <Hypervisor/hv.h>
5699int main() { return 0;}
5700EOF
5701 if ! compile_object ""; then
5702 hvf='no'
5703 else
5704 hvf='yes'
5705 LDFLAGS="-framework Hypervisor $LDFLAGS"
5706 fi
5707fi
5708
5709#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005710# Sparc implicitly links with --relax, which is
5711# incompatible with -r, so --no-relax should be
5712# given. It does no harm to give it on other
5713# platforms too.
5714
5715# Note: the prototype is needed since QEMU_CFLAGS
5716# contains -Wmissing-prototypes
5717cat > $TMPC << EOF
5718extern int foo(void);
5719int foo(void) { return 0; }
5720EOF
5721if ! compile_object ""; then
5722 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5723fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005724for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5725 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5726 LD_REL_FLAGS=$i
5727 break
5728 fi
5729done
5730if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5731 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005732fi
5733
Jan Vesely277abf12016-04-29 13:15:23 -04005734##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005735# check for sysmacros.h
5736
5737have_sysmacros=no
5738cat > $TMPC << EOF
5739#include <sys/sysmacros.h>
5740int main(void) {
5741 return makedev(0, 0);
5742}
5743EOF
5744if compile_prog "" "" ; then
5745 have_sysmacros=yes
5746fi
5747
5748##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005749# Veritas HyperScale block driver VxHS
5750# Check if libvxhs is installed
5751
5752if test "$vxhs" != "no" ; then
5753 cat > $TMPC <<EOF
5754#include <stdint.h>
5755#include <qnio/qnio_api.h>
5756
5757void *vxhs_callback;
5758
5759int main(void) {
5760 iio_init(QNIO_VERSION, vxhs_callback);
5761 return 0;
5762}
5763EOF
5764 vxhs_libs="-lvxhs -lssl"
5765 if compile_prog "" "$vxhs_libs" ; then
5766 vxhs=yes
5767 else
5768 if test "$vxhs" = "yes" ; then
5769 feature_not_found "vxhs block device" "Install libvxhs See github"
5770 fi
5771 vxhs=no
5772 fi
5773fi
5774
5775##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005776# check for _Static_assert()
5777
5778have_static_assert=no
5779cat > $TMPC << EOF
5780_Static_assert(1, "success");
5781int main(void) {
5782 return 0;
5783}
5784EOF
5785if compile_prog "" "" ; then
5786 have_static_assert=yes
5787fi
5788
5789##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005790# check for utmpx.h, it is missing e.g. on OpenBSD
5791
5792have_utmpx=no
5793cat > $TMPC << EOF
5794#include <utmpx.h>
5795struct utmpx user_info;
5796int main(void) {
5797 return 0;
5798}
5799EOF
5800if compile_prog "" "" ; then
5801 have_utmpx=yes
5802fi
5803
5804##########################################
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07005805# check for getrandom()
5806
5807have_getrandom=no
5808cat > $TMPC << EOF
5809#include <sys/random.h>
5810int main(void) {
5811 return getrandom(0, 0, GRND_NONBLOCK);
5812}
5813EOF
5814if compile_prog "" "" ; then
5815 have_getrandom=yes
5816fi
5817
5818##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005819# checks for sanitizers
5820
Marc-André Lureau247724c2018-01-16 16:11:51 +01005821have_asan=no
5822have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005823have_asan_iface_h=no
5824have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005825
5826if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005827 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005828 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5829 have_asan=yes
5830 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005831
5832 # we could use a simple skeleton for flags checks, but this also
5833 # detect the static linking issue of ubsan, see also:
5834 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5835 cat > $TMPC << EOF
5836#include <stdlib.h>
5837int main(void) {
5838 void *tmp = malloc(10);
5839 return *(int *)(tmp + 2);
5840}
5841EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005842 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5843 have_ubsan=yes
5844 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005845
5846 if check_include "sanitizer/asan_interface.h" ; then
5847 have_asan_iface_h=yes
5848 fi
5849
5850 cat > $TMPC << EOF
5851#include <sanitizer/asan_interface.h>
5852int main(void) {
5853 __sanitizer_start_switch_fiber(0, 0, 0);
5854 return 0;
5855}
5856EOF
5857 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5858 have_asan_iface_fiber=yes
5859 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005860fi
5861
5862##########################################
Junyan He17824402018-07-18 15:47:59 +08005863# check for libpmem
5864
5865if test "$libpmem" != "no"; then
5866 if $pkg_config --exists "libpmem"; then
5867 libpmem="yes"
5868 libpmem_libs=$($pkg_config --libs libpmem)
5869 libpmem_cflags=$($pkg_config --cflags libpmem)
5870 libs_softmmu="$libs_softmmu $libpmem_libs"
5871 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5872 else
5873 if test "$libpmem" = "yes" ; then
5874 feature_not_found "libpmem" "Install nvml or pmdk"
5875 fi
5876 libpmem="no"
5877 fi
5878fi
5879
5880##########################################
Marc-André Lureau675b9b52019-02-12 17:25:23 +01005881# check for slirp
5882
5883case "$slirp" in
5884 "" | yes)
5885 if $pkg_config slirp; then
5886 slirp=system
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02005887 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5888 slirp=git
Marc-André Lureau675b9b52019-02-12 17:25:23 +01005889 elif test -e "${source_path}/slirp/Makefile" ; then
5890 slirp=internal
5891 elif test -z "$slirp" ; then
5892 slirp=no
5893 else
5894 feature_not_found "slirp" "Install slirp devel or git submodule"
5895 fi
5896 ;;
5897
5898 system)
5899 if ! $pkg_config slirp; then
5900 feature_not_found "slirp" "Install slirp devel"
5901 fi
5902 ;;
5903esac
5904
5905case "$slirp" in
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02005906 git | internal)
5907 if test "$slirp" = git; then
5908 git_submodules="${git_submodules} slirp"
5909 fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01005910 mkdir -p slirp
5911 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5912 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5913 ;;
5914
5915 system)
5916 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5917 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5918 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5919 ;;
5920
5921 no)
5922 ;;
5923 *)
5924 error_exit "Unknown state for slirp: $slirp"
5925 ;;
5926esac
5927
5928
5929##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005930# End of CC checks
5931# After here, no more $cc or $ld runs
5932
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005933write_c_skeleton
5934
Blue Swirl1d728c32012-05-01 18:45:39 +00005935if test "$gcov" = "yes" ; then
5936 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5937 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005938elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005939 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005940elif test "$debug" = "no"; then
5941 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005942fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005943
Marc-André Lureau247724c2018-01-16 16:11:51 +01005944if test "$have_asan" = "yes"; then
5945 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005946 if test "$have_asan_iface_h" = "no" ; then
5947 echo "ASAN build enabled, but ASAN header missing." \
5948 "Without code annotation, the report may be inferior."
5949 elif test "$have_asan_iface_fiber" = "no" ; then
5950 echo "ASAN build enabled, but ASAN header is too old." \
5951 "Without code annotation, the report may be inferior."
5952 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005953fi
5954if test "$have_ubsan" = "yes"; then
5955 CFLAGS="-fsanitize=undefined $CFLAGS"
5956fi
5957
Peter Lieven6542aa92014-02-03 10:26:13 +01005958##########################################
5959# Do we have libnfs
5960if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005961 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005962 libnfs="yes"
5963 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005964 else
5965 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005966 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005967 fi
5968 libnfs="no"
5969 fi
5970fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005971
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02005972##########################################
5973# Do we have libudev
5974if test "$libudev" != "no" ; then
5975 if $pkg_config libudev && test "$static" != "yes"; then
5976 libudev="yes"
5977 libudev_libs=$($pkg_config --libs libudev)
5978 else
5979 libudev="no"
5980 fi
5981fi
5982
Peter Maydell6ca026c2012-07-18 15:10:18 +01005983# Now we've finished running tests it's OK to add -Werror to the compiler flags
5984if test "$werror" = "yes"; then
5985 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5986fi
5987
Juan Quintelae86ecd42009-08-03 14:45:59 +02005988if test "$solaris" = "no" ; then
5989 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005990 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005991 fi
5992fi
5993
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005994# test if pod2man has --utf8 option
5995if pod2man --help | grep -q utf8; then
5996 POD2MAN="pod2man --utf8"
5997else
5998 POD2MAN="pod2man"
5999fi
6000
Blue Swirl952afb72010-09-19 08:36:34 +00006001# Use ASLR, no-SEH and DEP if available
6002if test "$mingw32" = "yes" ; then
6003 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02006004 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00006005 LDFLAGS="-Wl,$flag $LDFLAGS"
6006 fi
6007 done
6008fi
6009
Philippe Mathieu-Daudé7776ea62019-03-07 15:28:22 +01006010# Disable OpenBSD W^X if available
6011if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6012 cat > $TMPC <<EOF
6013 int main(void) { return 0; }
6014EOF
6015 wx_ldflags="-Wl,-z,wxneeded"
6016 if compile_prog "" "$wx_ldflags"; then
6017 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6018 fi
6019fi
6020
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03006021qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08006022qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03006023qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06006024qemu_localedir="$datadir/locale"
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006025qemu_icondir="$datadir/icons"
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006026qemu_desktopdir="$datadir/applications"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02006027
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006028# We can only support ivshmem if we have eventfd
6029if [ "$eventfd" = "yes" ]; then
6030 ivshmem=yes
6031fi
6032
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006033tools=""
6034if test "$want_tools" = "yes" ; then
Gerd Hoffmann72d277a2018-09-25 09:56:42 +02006035 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006036 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6037 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01006038 fi
6039 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02006040 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006041 fi
Viktor Prutyanov1b9d35f2018-12-20 04:24:41 +03006042 if [ "$curl" = "yes" ]; then
6043 tools="elf2dmp\$(EXESUF) $tools"
Viktor Prutyanov3fa2d382018-08-29 15:41:25 +03006044 fi
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01006045fi
6046if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006047 if test "$linux" = yes; then
6048 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02006049 virtfs=yes
6050 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6051 else
6052 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006053 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05306054 fi
Andreas Färber17500372012-05-01 01:12:03 +02006055 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02006056 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006057 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6058 mpath=yes
6059 else
6060 if test "$mpath" = yes; then
6061 error_exit "Multipath requires libmpathpersist devel"
6062 fi
6063 mpath=no
6064 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006065 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6066 else
6067 if test "$virtfs" = yes; then
6068 error_exit "VirtFS is supported only on Linux"
6069 fi
6070 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006071 if test "$mpath" = yes; then
6072 error_exit "Multipath is supported only on Linux"
6073 fi
6074 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05306075 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02006076 if test "$xkbcommon" = "yes"; then
6077 tools="qemu-keymap\$(EXESUF) $tools"
6078 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006079fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006080
6081# Probe for guest agent support/options
6082
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006083if [ "$guest_agent" != "no" ]; then
Laurent Viviera5125902019-04-01 16:12:20 +02006084 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6085 guest_agent=no
6086 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Paolo Bonzini08144652019-07-18 12:22:01 +02006087 tools="qemu-ga\$(EXESUF) $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04006088 guest_agent=yes
6089 elif [ "$guest_agent" != yes ]; then
6090 guest_agent=no
6091 else
6092 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02006093 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02006094fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006095
Michael Roth9d6bc272015-08-26 10:49:13 -05006096# Guest agent Window MSI package
6097
6098if test "$guest_agent" != yes; then
6099 if test "$guest_agent_msi" = yes; then
6100 error_exit "MSI guest agent package requires guest agent enabled"
6101 fi
6102 guest_agent_msi=no
6103elif test "$mingw32" != "yes"; then
6104 if test "$guest_agent_msi" = "yes"; then
6105 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6106 fi
6107 guest_agent_msi=no
6108elif ! has wixl; then
6109 if test "$guest_agent_msi" = "yes"; then
6110 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6111 fi
6112 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05006113else
6114 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6115 # disabled explicitly
6116 if test "$guest_agent_msi" != "no"; then
6117 guest_agent_msi=yes
6118 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05006119fi
6120
Michael Roth1a349042015-08-26 11:14:31 -05006121if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05006122 if test "$guest_agent_with_vss" = "yes"; then
6123 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6124 fi
6125
6126 if test "$QEMU_GA_MANUFACTURER" = ""; then
6127 QEMU_GA_MANUFACTURER=QEMU
6128 fi
6129
6130 if test "$QEMU_GA_DISTRO" = ""; then
6131 QEMU_GA_DISTRO=Linux
6132 fi
6133
6134 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02006135 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05006136 fi
6137
Stefan Weil89138852016-05-16 15:10:20 +02006138 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05006139
6140 case "$cpu" in
6141 x86_64)
6142 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6143 ;;
6144 i386)
6145 QEMU_GA_MSI_ARCH="-D Arch=32"
6146 ;;
6147 *)
6148 error_exit "CPU $cpu not supported for building installation package"
6149 ;;
6150 esac
6151fi
6152
Paolo Bonzinica35f782010-05-26 16:08:29 +02006153# Mac OS X ships with a broken assembler
6154roms=
Eric Blakee633a5c2019-02-04 20:39:37 -06006155if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6156 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6157 test "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01006158 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05006159 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6160 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6161 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01006162 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6163 ld_i386_emulation="$emu"
6164 roms="optionrom"
6165 break
6166 fi
6167 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02006168fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02006169
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006170# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
Christian Borntraeger9933c302013-04-23 01:23:03 +00006171if test "$cpu" = "s390x" ; then
Thomas Huth2e33c3f2019-01-14 13:52:26 +01006172 write_c_skeleton
6173 if compile_prog "-march=z900" ""; then
6174 roms="$roms s390-ccw"
6175 fi
Christian Borntraeger9933c302013-04-23 01:23:03 +00006176fi
6177
Richard Henderson964c6fa2013-06-21 19:10:16 -07006178# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006179if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006180 textseg_addr=
6181 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07006182 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6183 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07006184 textseg_addr=0x60000000
6185 ;;
6186 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07006187 # A 256M aligned address, high in the address space, with enough
6188 # room for the code_gen_buffer above it before the stack.
6189 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07006190 ;;
6191 esac
6192 if [ -n "$textseg_addr" ]; then
6193 cat > $TMPC <<EOF
6194 int main(void) { return 0; }
6195EOF
6196 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6197 if ! compile_prog "" "$textseg_ldflags"; then
6198 # In case ld does not support -Ttext-segment, edit the default linker
6199 # script via sed to set the .text start addr. This is needed on FreeBSD
6200 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01006201 if ! $ld --verbose >/dev/null 2>&1; then
6202 error_exit \
6203 "We need to link the QEMU user mode binaries at a" \
6204 "specific text address. Unfortunately your linker" \
6205 "doesn't support either the -Ttext-segment option or" \
6206 "printing the default linker script with --verbose." \
6207 "If you don't want the user mode binaries, pass the" \
6208 "--disable-user option to configure."
6209 fi
6210
Richard Henderson964c6fa2013-06-21 19:10:16 -07006211 $ld --verbose | sed \
6212 -e '1,/==================================================/d' \
6213 -e '/==================================================/,$d' \
6214 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6215 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6216 textseg_ldflags="-Wl,-T../config-host.ld"
6217 fi
6218 fi
6219fi
6220
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006221# Check that the C++ compiler exists and works with the C compiler.
6222# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6223if has $cxx; then
6224 cat > $TMPC <<EOF
6225int c_function(void);
6226int main(void) { return c_function(); }
6227EOF
6228
6229 compile_object
6230
6231 cat > $TMPCXX <<EOF
6232extern "C" {
6233 int c_function(void);
6234}
6235int c_function(void) { return 42; }
6236EOF
6237
6238 update_cxxflags
6239
6240 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6241 # C++ compiler $cxx works ok with C compiler $cc
6242 :
6243 else
6244 echo "C++ compiler $cxx does not work with C compiler $cc"
6245 echo "Disabling C++ specific optional code"
6246 cxx=
6247 fi
6248else
6249 echo "No C++ compiler available; disabling C++ specific optional code"
6250 cxx=
6251fi
6252
Cole Robinson02d34f62016-05-06 14:03:09 -04006253echo_version() {
6254 if test "$1" = "yes" ; then
6255 echo "($2)"
6256 fi
6257}
6258
Jan Kiszka50e12062014-10-02 10:03:55 +02006259# prepend pixman and ftd flags after all config tests are done
6260QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006261QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02006262libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01006263
bellard43ce4df2003-06-09 19:53:12 +00006264echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02006265echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006266echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02006267echo "binary directory $(eval echo $bindir)"
6268echo "library directory $(eval echo $libdir)"
6269echo "module directory $(eval echo $qemu_moddir)"
6270echo "libexec directory $(eval echo $libexecdir)"
6271echo "include directory $(eval echo $includedir)"
6272echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00006273if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02006274echo "local state directory $(eval echo $local_statedir)"
6275echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00006276echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006277else
6278echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006279echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00006280fi
bellard5a671352003-10-01 00:13:48 +00006281echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006282echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006283echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00006284echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00006285echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006286echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006287echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01006288echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006289echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02006290echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02006291echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006292echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00006293echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00006294echo "install $install"
Cleber Rosa755ee702018-11-09 10:07:07 -05006295echo "python $python ($python_version)"
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006296echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6297if test "$slirp" != "no" ; then
Brade2d88302011-09-02 16:53:28 -04006298 echo "smbd $smbd"
6299fi
Fam Zheng17969262014-02-10 14:48:56 +08006300echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00006301echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00006302echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00006303echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00006304echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00006305echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00006306echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00006307echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00006308echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00006309if test "$darwin" = "yes" ; then
6310 echo "Cocoa support $cocoa"
6311fi
Stefan Weil89138852016-05-16 15:10:20 +02006312echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006313echo "SDL image support $sdl_image"
Stefan Weil89138852016-05-16 15:10:20 +02006314echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006315echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02006316echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006317echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006318echo "GNUTLS support $gnutls"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006319echo "libgcrypt $gcrypt"
Stefan Weil89138852016-05-16 15:10:20 +02006320echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006321echo "libtasn1 $tasn1"
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006322echo "PAM $auth_pam"
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006323echo "iconv support $iconv"
balrog4d3b6f62008-02-10 16:33:14 +00006324echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006325echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006326echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006327echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006328echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006329echo "Block whitelist (rw) $block_drv_rw_whitelist"
6330echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306331echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006332echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006333echo "VNC support $vnc"
6334if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006335 echo "VNC SASL support $vnc_sasl"
6336 echo "VNC JPEG support $vnc_jpeg"
6337 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006338fi
aliguorie37630c2009-04-22 15:19:10 +00006339echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006340if test "$xen" = "yes" ; then
6341 echo "xen ctrl version $xen_ctrl_version"
6342fi
aurel322e4d9fb2008-04-08 06:01:02 +00006343echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006344echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006345echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006346echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006347echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006348echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006349echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006350echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006351echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006352echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006353echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006354echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006355echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006356echo "TCG support $tcg"
6357if test "$tcg" = "yes" ; then
6358 echo "TCG debug enabled $debug_tcg"
6359 echo "TCG interpreter $tcg_interpreter"
6360fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006361echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006362echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006363echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006364echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006365echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006366echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006367echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006368echo "madvise $madvise"
6369echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006370echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006371echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006372echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006373echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006374echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006375echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006376echo "vhost-user support $vhost_user"
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02006377echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006378if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006379echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006380fi
Stefan Weil89138852016-05-16 15:10:20 +02006381echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006382echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006383echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006384echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006385echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006386echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006387echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006388echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006389echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006390echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006391echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006392echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006393echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006394echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006395echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006396echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006397echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006398echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006399echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006400echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306401echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006402echo "gcov $gcov_tool"
6403echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006404echo "TPM support $tpm"
Pino Toscanob10d49d2019-06-20 22:08:40 +02006405echo "libssh support $libssh"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006406echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006407echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006408echo "lzo support $lzo"
6409echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006410echo "bzip2 support $bzip2"
Julio Faracco83bc1f92018-11-05 13:08:04 -02006411echo "lzfse support $lzfse"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006412echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006413echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006414echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006415echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006416echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006417echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006418echo "VxHS block device $vxhs"
Jeff Cody2f740132018-11-07 07:36:44 +01006419echo "bochs support $bochs"
6420echo "cloop support $cloop"
6421echo "dmg support $dmg"
6422echo "qcow v1 support $qcow1"
6423echo "vdi support $vdi"
6424echo "vvfat support $vvfat"
6425echo "qed support $qed"
6426echo "parallels support $parallels"
6427echo "sheepdog support $sheepdog"
Richard Henderson8ca80762017-09-14 09:41:12 -07006428echo "capstone $capstone"
Junyan He17824402018-07-18 15:47:59 +08006429echo "libpmem support $libpmem"
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02006430echo "libudev $libudev"
Paolo Bonzinif3494742019-01-23 14:56:17 +08006431echo "default devices $default_devices"
bellard67b915a2004-03-31 23:37:16 +00006432
Peter Maydell898be3e2017-03-21 14:31:57 +00006433if test "$supported_cpu" = "no"; then
6434 echo
6435 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6436 echo
6437 echo "CPU host architecture $cpu support is not currently maintained."
6438 echo "The QEMU project intends to remove support for this host CPU in"
6439 echo "a future release if nobody volunteers to maintain it and to"
6440 echo "provide a build host for our continuous integration setup."
6441 echo "configure has succeeded and you can continue to build, but"
6442 echo "if you care about QEMU on this platform you should contact"
6443 echo "us upstream at qemu-devel@nongnu.org."
6444fi
6445
6446if test "$supported_os" = "no"; then
6447 echo
6448 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6449 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006450 echo "Host OS $targetos support is not currently maintained."
6451 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006452 echo "a future release if nobody volunteers to maintain it and to"
6453 echo "provide a build host for our continuous integration setup."
6454 echo "configure has succeeded and you can continue to build, but"
6455 echo "if you care about QEMU on this platform you should contact"
6456 echo "us upstream at qemu-devel@nongnu.org."
6457fi
6458
Eduardo Habkoste5abf592019-05-03 16:37:21 -03006459# Note that if the Python conditional here evaluates True we will exit
6460# with status 1 which is a shell 'false' value.
6461if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
6462 echo
6463 echo "warning: Python 2 support is deprecated" >&2
6464 echo "warning: Python 3 will be required for building future versions of QEMU" >&2
Cleber Rosa406ab2f2019-08-26 11:58:32 -04006465 python2="y"
Eduardo Habkoste5abf592019-05-03 16:37:21 -03006466fi
6467
Juan Quintela98ec69a2009-07-16 18:34:18 +02006468config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006469
Stefan Weildbd99ae2013-01-01 18:33:44 +01006470echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6471
Juan Quintela98ec69a2009-07-16 18:34:18 +02006472echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006473echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006474
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006475echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006476echo "prefix=$prefix" >> $config_host_mak
6477echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006478echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006479echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006480echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006481echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006482echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006483echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006484echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006485echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006486echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006487echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006488if test "$mingw32" = "no" ; then
6489 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6490fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006491echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006492echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Daniel P. Berrangéa8260d32019-01-10 12:00:45 +00006493echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
Daniel P. Berrangé67ea9542019-01-10 12:00:46 +00006494echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
Daniel P. Berrangé02f91352019-05-16 10:51:34 +01006495echo "libs_cpu=$libs_cpu" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006496echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006497echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006498echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006499echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006500
Juan Quintela98ec69a2009-07-16 18:34:18 +02006501echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006502
Paolo Bonzinif3494742019-01-23 14:56:17 +08006503if test "$default_devices" = "yes" ; then
6504 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6505else
6506 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6507fi
aurel32f8393942009-04-13 18:45:38 +00006508if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006509 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006510fi
aliguori1625af82009-04-05 17:41:02 +00006511if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006512 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006513fi
bellard7d132992003-03-06 23:23:54 +00006514if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006515 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006516fi
bellard67b915a2004-03-31 23:37:16 +00006517if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006518 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006519 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006520 version_major=${rc_version%%.*}
6521 rc_version=${rc_version#*.}
6522 version_minor=${rc_version%%.*}
6523 rc_version=${rc_version#*.}
6524 version_subminor=${rc_version%%.*}
6525 version_micro=0
6526 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6527 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006528 if test "$guest_agent_with_vss" = "yes" ; then
6529 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006530 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006531 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6532 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006533 if test "$guest_agent_ntddscsi" = "yes" ; then
Tomáš Golembiovský76dc75c2018-10-23 13:23:16 +02006534 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
Michael Roth50cbebb2015-07-07 18:10:09 -05006535 fi
Michael Roth1a349042015-08-26 11:14:31 -05006536 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006537 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006538 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6539 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6540 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6541 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6542 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6543 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6544 fi
pbrook210fa552007-02-27 21:04:49 +00006545else
Juan Quintela35f4df22009-07-27 16:13:07 +02006546 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006547fi
blueswir1128ab2f2008-08-15 18:33:42 +00006548
Mark McLoughlindffcb712009-10-22 17:49:11 +01006549if test "$linux" = "yes" ; then
6550 echo "CONFIG_LINUX=y" >> $config_host_mak
6551fi
6552
bellard83fb7ad2004-07-05 21:25:26 +00006553if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006554 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006555fi
malcb29fe3e2008-11-18 01:42:22 +00006556
bellardec530c82006-04-25 22:36:06 +00006557if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006558 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006559fi
Andreas Färber179cf402010-09-20 00:50:43 +02006560if test "$haiku" = "yes" ; then
6561 echo "CONFIG_HAIKU=y" >> $config_host_mak
6562fi
bellard97a847b2003-08-10 21:36:04 +00006563if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006564 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006565fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006566if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006567 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006568fi
Paolo Bonzinic932ce32019-07-18 12:24:29 +02006569if test "$want_tools" = "yes" ; then
6570 echo "CONFIG_TOOLS=y" >> $config_host_mak
6571fi
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006572if test "$slirp" != "no"; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006573 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006574 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
Marc-André Lureau675b9b52019-02-12 17:25:23 +01006575 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6576 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6577fi
Marc-André Lureau7c57bdd2019-04-24 13:00:41 +02006578if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02006579 echo "config-host.h: slirp/all" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006580fi
ths8a16d272008-07-19 09:56:24 +00006581if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006582 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006583 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006584fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006585if test "$netmap" = "yes" ; then
6586 echo "CONFIG_NETMAP=y" >> $config_host_mak
6587fi
Gonglei015a33b2014-07-01 20:58:08 +08006588if test "$l2tpv3" = "yes" ; then
6589 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6590fi
Corey Bryant47e98652012-01-26 09:42:26 -05006591if test "$cap_ng" = "yes" ; then
6592 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6593fi
Juan Quintela2358a492009-07-27 16:13:25 +02006594echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006595for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006596 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006597 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006598 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006599 echo "$def=m" >> $config_host_mak ;;
6600 *)
6601 echo "$def=y" >> $config_host_mak ;;
6602 esac
malc0c58ac12008-06-25 21:04:05 +00006603done
Fam Zhengb1149912017-09-07 16:29:13 +08006604echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6605echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6606echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6607echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6608echo "OSS_LIBS=$oss_libs" >> $config_host_mak
malcd5631632009-10-10 01:13:41 +04006609if test "$audio_win_int" = "yes" ; then
6610 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6611fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006612echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6613echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006614if test "$vnc" = "yes" ; then
6615 echo "CONFIG_VNC=y" >> $config_host_mak
6616fi
aliguori2f9606b2009-03-06 20:27:28 +00006617if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006618 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006619fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006620if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006621 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006622fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006623if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006624 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006625fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006626if test "$xkbcommon" = "yes" ; then
6627 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6628 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6629fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006630if test "$xfs" = "yes" ; then
6631 echo "CONFIG_XFS=y" >> $config_host_mak
6632fi
Stefan Weil89138852016-05-16 15:10:20 +02006633qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006634echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006635echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006636echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006637echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006638if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006639 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006640fi
Fam Zheng17969262014-02-10 14:48:56 +08006641if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006642 # $shacmd can generate a hash started with digit, which the compiler doesn't
6643 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006644 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006645 echo "CONFIG_MODULES=y" >> $config_host_mak
6646fi
Eric Blakee633a5c2019-02-04 20:39:37 -06006647if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01006648 echo "CONFIG_X11=y" >> $config_host_mak
6649 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6650 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6651fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006652if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006653 echo "CONFIG_SDL=m" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006654 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006655 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
Daniel P. Berrangéa442fe22019-01-10 12:00:47 +00006656 if test "$sdl_image" = "yes" ; then
6657 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6658 fi
bellard49ecc3f2007-11-07 19:25:15 +00006659fi
6660if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006661 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006662fi
Samuel Thibaulte08bb302019-03-11 14:51:26 +01006663if test "$iconv" = "yes" ; then
6664 echo "CONFIG_ICONV=y" >> $config_host_mak
6665 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6666 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6667fi
balrog4d3b6f62008-02-10 16:33:14 +00006668if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006669 echo "CONFIG_CURSES=m" >> $config_host_mak
6670 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6671 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006672fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006673if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006674 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006675fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006676if test "$accept4" = "yes" ; then
6677 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6678fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306679if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006680 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306681fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006682if test "$eventfd" = "yes" ; then
6683 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6684fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006685if test "$memfd" = "yes" ; then
6686 echo "CONFIG_MEMFD=y" >> $config_host_mak
6687fi
Cortland Tölva955727d2018-10-08 09:35:19 -07006688if test "$have_usbfs" = "yes" ; then
6689 echo "CONFIG_USBFS=y" >> $config_host_mak
6690fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006691if test "$fallocate" = "yes" ; then
6692 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6693fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006694if test "$fallocate_punch_hole" = "yes" ; then
6695 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6696fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006697if test "$fallocate_zero_range" = "yes" ; then
6698 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6699fi
Kevin Wolfed911432014-09-29 17:12:59 +02006700if test "$posix_fallocate" = "yes" ; then
6701 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6702fi
Peter Maydellc727f472011-01-06 11:05:10 +00006703if test "$sync_file_range" = "yes" ; then
6704 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6705fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006706if test "$fiemap" = "yes" ; then
6707 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6708fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006709if test "$dup3" = "yes" ; then
6710 echo "CONFIG_DUP3=y" >> $config_host_mak
6711fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006712if test "$ppoll" = "yes" ; then
6713 echo "CONFIG_PPOLL=y" >> $config_host_mak
6714fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006715if test "$prctl_pr_set_timerslack" = "yes" ; then
6716 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6717fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006718if test "$epoll" = "yes" ; then
6719 echo "CONFIG_EPOLL=y" >> $config_host_mak
6720fi
6721if test "$epoll_create1" = "yes" ; then
6722 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6723fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006724if test "$sendfile" = "yes" ; then
6725 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6726fi
Riku Voipio51834342014-06-22 11:25:42 +01006727if test "$timerfd" = "yes" ; then
6728 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6729fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006730if test "$setns" = "yes" ; then
6731 echo "CONFIG_SETNS=y" >> $config_host_mak
6732fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006733if test "$clock_adjtime" = "yes" ; then
6734 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6735fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006736if test "$syncfs" = "yes" ; then
6737 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6738fi
aurel323b3f24a2009-04-15 16:12:13 +00006739if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006740 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006741fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006742if test "$inotify1" = "yes" ; then
6743 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6744fi
Peter Maydell401bc052017-09-05 13:19:32 +01006745if test "$sem_timedwait" = "yes" ; then
6746 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6747fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006748if test "$strchrnul" = "yes" ; then
6749 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6750fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006751if test "$byteswap_h" = "yes" ; then
6752 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6753fi
6754if test "$bswap_h" = "yes" ; then
6755 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6756fi
Alexander Graf769ce762009-05-11 17:41:42 +02006757if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006758 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006759 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006760 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006761fi
aurel322e4d9fb2008-04-08 06:01:02 +00006762if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006763 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006764 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006765fi
balrogfb599c92008-09-28 23:49:55 +00006766if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006767 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006768 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006769fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006770if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006771 echo "CONFIG_GTK=m" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006772 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006773 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006774 if test "$gtk_gl" = "yes" ; then
6775 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6776 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006777fi
Marc-André Lureauf876b762019-02-21 12:07:00 +01006778if test "$gio" = "yes" ; then
6779 echo "CONFIG_GIO=y" >> $config_host_mak
6780 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6781 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6782fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006783echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006784if test "$gnutls" = "yes" ; then
6785 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6786fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006787if test "$gcrypt" = "yes" ; then
6788 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006789 if test "$gcrypt_hmac" = "yes" ; then
6790 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6791 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006792fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006793if test "$nettle" = "yes" ; then
6794 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006795 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006796fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006797if test "$tasn1" = "yes" ; then
6798 echo "CONFIG_TASN1=y" >> $config_host_mak
6799fi
Daniel P. Berrange8953caf2016-07-27 14:13:56 +01006800if test "$auth_pam" = "yes" ; then
6801 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6802fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006803if test "$have_ifaddrs_h" = "yes" ; then
6804 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6805fi
Eric Blake6b39b062016-10-11 10:46:23 -05006806if test "$have_broken_size_max" = "yes" ; then
6807 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6808fi
Jan Vesely277abf12016-04-29 13:15:23 -04006809
6810# Work around a system header bug with some kernel/XFS header
6811# versions where they both try to define 'struct fsxattr':
6812# xfs headers will not try to redefine structs from linux headers
6813# if this macro is set.
6814if test "$have_fsxattr" = "yes" ; then
6815 echo "HAVE_FSXATTR=y" >> $config_host_mak
6816fi
Fam Zheng1efad062018-06-01 17:26:43 +08006817if test "$have_copy_file_range" = "yes" ; then
6818 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6819fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006820if test "$vte" = "yes" ; then
6821 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006822 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006823 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006824fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006825if test "$virglrenderer" = "yes" ; then
6826 echo "CONFIG_VIRGL=y" >> $config_host_mak
6827 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6828 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6829fi
aliguorie37630c2009-04-22 15:19:10 +00006830if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006831 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006832 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
aliguorie37630c2009-04-22 15:19:10 +00006833fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006834if test "$linux_aio" = "yes" ; then
6835 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6836fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006837if test "$attr" = "yes" ; then
6838 echo "CONFIG_ATTR=y" >> $config_host_mak
6839fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006840if test "$libattr" = "yes" ; then
6841 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6842fi
Meador Inge983eef52012-02-24 14:00:42 +05306843if test "$virtfs" = "yes" ; then
6844 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006845fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006846if test "$mpath" = "yes" ; then
6847 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006848 if test "$mpathpersist_new_api" = "yes"; then
6849 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6850 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006851fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006852if test "$vhost_scsi" = "yes" ; then
6853 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6854fi
Paolo Bonziniaf3bba72019-02-14 18:35:52 +01006855if test "$vhost_net" = "yes" ; then
6856 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6857fi
6858if test "$vhost_net_user" = "yes" ; then
Paolo Bonzini56f41de2019-02-14 18:35:49 +01006859 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006860fi
Gonglei042cea22018-03-01 21:46:28 +08006861if test "$vhost_crypto" = "yes" ; then
6862 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6863fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006864if test "$vhost_vsock" = "yes" ; then
6865 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6866fi
Paolo Bonzini299e6f12019-02-14 18:35:53 +01006867if test "$vhost_kernel" = "yes" ; then
6868 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6869fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006870if test "$vhost_user" = "yes" ; then
6871 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6872fi
ths77755342008-11-27 15:45:16 +00006873if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006874 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006875fi
aliguoribf9298b2008-12-05 20:05:26 +00006876if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006877 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006878fi
aliguoriceb42de2009-04-07 18:43:28 +00006879if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006880 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006881fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006882if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006883 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006884fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006885if test "$membarrier" = "yes" ; then
6886 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6887fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006888if test "$signalfd" = "yes" ; then
6889 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6890fi
Richard W.M. Jonesd339d762019-01-18 10:11:14 +00006891if test "$optreset" = "yes" ; then
6892 echo "HAVE_OPTRESET=y" >> $config_host_mak
6893fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006894if test "$tcg" = "yes"; then
6895 echo "CONFIG_TCG=y" >> $config_host_mak
6896 if test "$tcg_interpreter" = "yes" ; then
6897 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6898 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006899fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006900if test "$fdatasync" = "yes" ; then
6901 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6902fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006903if test "$madvise" = "yes" ; then
6904 echo "CONFIG_MADVISE=y" >> $config_host_mak
6905fi
6906if test "$posix_madvise" = "yes" ; then
6907 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6908fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006909if test "$posix_memalign" = "yes" ; then
6910 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6911fi
bellard97a847b2003-08-10 21:36:04 +00006912
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006913if test "$spice" = "yes" ; then
6914 echo "CONFIG_SPICE=y" >> $config_host_mak
6915fi
6916
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006917if test "$smartcard" = "yes" ; then
6918 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006919 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6920 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006921fi
6922
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006923if test "$libusb" = "yes" ; then
6924 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006925 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6926 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006927fi
6928
Hans de Goede69354a82011-07-19 11:04:10 +02006929if test "$usb_redir" = "yes" ; then
6930 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006931 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6932 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006933fi
6934
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006935if test "$opengl" = "yes" ; then
6936 echo "CONFIG_OPENGL=y" >> $config_host_mak
6937 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006938 if test "$opengl_dmabuf" = "yes" ; then
6939 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6940 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006941fi
6942
Marc-André Lureaud52c4542019-05-24 15:09:42 +02006943if test "$gbm" = "yes" ; then
6944 echo "CONFIG_GBM=y" >> $config_host_mak
6945 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6946 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6947fi
6948
6949
Yang Zhong5a22ab72017-12-20 21:16:46 +08006950if test "$malloc_trim" = "yes" ; then
6951 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6952fi
6953
Liang Li99f2dbd2016-03-08 13:53:16 +08006954if test "$avx2_opt" = "yes" ; then
6955 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6956fi
6957
qiaonuohan607dacd2014-02-18 14:11:30 +08006958if test "$lzo" = "yes" ; then
6959 echo "CONFIG_LZO=y" >> $config_host_mak
6960fi
6961
6962if test "$snappy" = "yes" ; then
6963 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6964fi
6965
Peter Wu6b383c02015-01-06 18:48:14 +01006966if test "$bzip2" = "yes" ; then
6967 echo "CONFIG_BZIP2=y" >> $config_host_mak
6968 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6969fi
6970
Julio Faracco83bc1f92018-11-05 13:08:04 -02006971if test "$lzfse" = "yes" ; then
6972 echo "CONFIG_LZFSE=y" >> $config_host_mak
6973 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6974fi
6975
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006976if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006977 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006978 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6979 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006980fi
6981
Peter Lieven6542aa92014-02-03 10:26:13 +01006982if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006983 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6984 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006985fi
6986
Eduardo Otubof7945732012-08-14 18:44:05 -03006987if test "$seccomp" = "yes"; then
6988 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006989 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6990 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006991fi
6992
bellard83fb7ad2004-07-05 21:25:26 +00006993# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006994if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006995 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006996fi
6997
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006998if test "$localtime_r" = "yes" ; then
6999 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7000fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02007001if test "$qom_cast_debug" = "yes" ; then
7002 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7003fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007004if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007005 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007006 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7007 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01007008fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06007009
Peter Maydell7c2acc72013-04-08 12:11:27 +01007010echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02007011if test "$coroutine_pool" = "yes" ; then
7012 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7013else
7014 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7015fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05307016
Peter Lieven7d992e42016-09-27 11:58:45 +02007017if test "$debug_stack_usage" = "yes" ; then
7018 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7019fi
7020
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04007021if test "$crypto_afalg" = "yes" ; then
7022 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7023fi
7024
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05307025if test "$open_by_handle_at" = "yes" ; then
7026 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7027fi
7028
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05307029if test "$linux_magic_h" = "yes" ; then
7030 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7031fi
7032
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01007033if test "$pragma_diagnostic_available" = "yes" ; then
7034 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01007035fi
7036
Kevin Wolf3f4349d2012-06-29 13:40:27 +02007037if test "$valgrind_h" = "yes" ; then
7038 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7039fi
7040
Marc-André Lureaud83414e2018-01-16 16:11:52 +01007041if test "$have_asan_iface_fiber" = "yes" ; then
7042 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7043fi
7044
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03007045if test "$has_environ" = "yes" ; then
7046 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7047fi
7048
Richard Henderson76a347e2012-12-28 14:17:02 -08007049if test "$cpuid_h" = "yes" ; then
7050 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7051fi
7052
Richard Hendersonf5401662013-02-16 12:46:59 -08007053if test "$int128" = "yes" ; then
7054 echo "CONFIG_INT128=y" >> $config_host_mak
7055fi
7056
Richard Henderson7ebee432016-06-29 21:10:59 -07007057if test "$atomic128" = "yes" ; then
7058 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7059fi
7060
Richard Hendersone6cd4bb2018-08-15 16:31:47 -07007061if test "$cmpxchg128" = "yes" ; then
7062 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7063fi
7064
Richard Hendersondf79b992016-09-02 12:23:57 -07007065if test "$atomic64" = "yes" ; then
7066 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7067fi
7068
Richard Hendersondb432672017-09-15 14:11:45 -07007069if test "$vector16" = "yes" ; then
7070 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7071fi
7072
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08007073if test "$getauxval" = "yes" ; then
7074 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7075fi
7076
Bharata B Raoeb100392012-09-24 14:42:45 +05307077if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08007078 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08007079 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7080 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05307081fi
7082
Jeff Codyd85fa9e2016-04-05 10:40:09 -04007083if test "$glusterfs_xlator_opt" = "yes" ; then
7084 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7085fi
7086
Bharata B Rao0c14fb42013-07-16 21:47:42 +05307087if test "$glusterfs_discard" = "yes" ; then
7088 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7089fi
7090
Niels de Vosdf3a4292017-05-28 12:01:14 +05307091if test "$glusterfs_fallocate" = "yes" ; then
7092 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7093fi
7094
Bharata B Rao7c815372013-12-21 14:51:25 +05307095if test "$glusterfs_zerofill" = "yes" ; then
7096 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7097fi
7098
Prasanna Kumar Kalevere014dbe2019-03-05 16:46:33 +01007099if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7100 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7101fi
7102
Niels de Vos0e3b8912019-03-05 16:46:34 +01007103if test "$glusterfs_iocb_has_stat" = "yes" ; then
7104 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7105fi
7106
Pino Toscanob10d49d2019-06-20 22:08:40 +02007107if test "$libssh" = "yes" ; then
7108 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7109 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7110 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01007111fi
7112
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01007113if test "$live_block_migration" = "yes" ; then
7114 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7115fi
7116
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007117if test "$tpm" = "yes"; then
Paolo Bonzini3cae16d2019-07-11 19:08:36 +02007118 echo 'CONFIG_TPM=y' >> $config_host_mak
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01007119fi
7120
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007121echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7122if have_backend "nop"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007123 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05307124fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007125if have_backend "simple"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007126 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7127 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02007128 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01007129fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03007130if have_backend "log"; then
7131 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
LluĂ­s6d8a7642011-08-31 20:30:43 +02007132fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007133if have_backend "ust"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007134 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7135fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007136if have_backend "dtrace"; then
LluĂ­s6d8a7642011-08-31 20:30:43 +02007137 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7138 if test "$trace_backend_stap" = "yes" ; then
7139 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7140 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00007141fi
LluĂ­s Vilanova5b808272014-05-27 15:02:14 +02007142if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007143 if test "$linux" = "yes" ; then
7144 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007145 else
Stewart Smith21684af2014-01-24 12:39:10 +11007146 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09007147 fi
7148fi
Paul Durrant0a852412016-08-04 14:44:14 +01007149if have_backend "syslog"; then
7150 if test "$posix_syslog" = "yes" ; then
7151 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7152 else
7153 feature_not_found "syslog(trace backend)" "syslog not available"
7154 fi
7155fi
Prerna Saxena9410b562010-07-13 09:26:32 +01007156echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7157
Michael R. Hines2da776d2013-07-22 10:01:54 -04007158if test "$rdma" = "yes" ; then
7159 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08007160 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04007161fi
7162
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03007163if test "$pvrdma" = "yes" ; then
7164 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7165fi
7166
Laurent Vivier575b22b2016-06-02 22:14:15 +02007167if test "$have_rtnetlink" = "yes" ; then
7168 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7169fi
7170
Klim Kireeved279a02018-01-12 12:01:19 +03007171if test "$libxml2" = "yes" ; then
7172 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7173 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7174 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7175fi
7176
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08007177if test "$replication" = "yes" ; then
7178 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7179fi
7180
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01007181if test "$have_af_vsock" = "yes" ; then
7182 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7183fi
7184
Christopher Covington4d043512016-12-28 15:04:33 -05007185if test "$have_sysmacros" = "yes" ; then
7186 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7187fi
7188
Andreas Grapentin49e00a12017-03-14 17:59:53 +01007189if test "$have_static_assert" = "yes" ; then
7190 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7191fi
7192
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02007193if test "$have_utmpx" = "yes" ; then
7194 echo "HAVE_UTMPX=y" >> $config_host_mak
7195fi
Richard Hendersondb1ed1a2019-03-13 20:57:28 -07007196if test "$have_getrandom" = "yes" ; then
7197 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7198fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007199if test "$ivshmem" = "yes" ; then
7200 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7201fi
Richard Hendersone219c492017-09-28 09:01:23 -07007202if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07007203 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7204fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02007205if test "$debug_mutex" = "yes" ; then
7206 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7207fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01007208
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007209# Hold two types of flag:
7210# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7211# a thread we have a handle to
Roman Bolshakov479a5742018-12-17 23:26:01 +03007212# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007213# platform
Roman Bolshakov479a5742018-12-17 23:26:01 +03007214if test "$pthread_setname_np_w_tid" = "yes" ; then
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007215 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
Roman Bolshakov479a5742018-12-17 23:26:01 +03007216 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7217elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7218 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7219 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00007220fi
7221
Ashish Mittalda92c3f2017-04-03 20:48:08 -07007222if test "$vxhs" = "yes" ; then
7223 echo "CONFIG_VXHS=y" >> $config_host_mak
7224 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7225fi
7226
Junyan He17824402018-07-18 15:47:59 +08007227if test "$libpmem" = "yes" ; then
7228 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7229fi
7230
Jeff Cody2f740132018-11-07 07:36:44 +01007231if test "$bochs" = "yes" ; then
7232 echo "CONFIG_BOCHS=y" >> $config_host_mak
7233fi
7234if test "$cloop" = "yes" ; then
7235 echo "CONFIG_CLOOP=y" >> $config_host_mak
7236fi
7237if test "$dmg" = "yes" ; then
7238 echo "CONFIG_DMG=y" >> $config_host_mak
7239fi
7240if test "$qcow1" = "yes" ; then
7241 echo "CONFIG_QCOW1=y" >> $config_host_mak
7242fi
7243if test "$vdi" = "yes" ; then
7244 echo "CONFIG_VDI=y" >> $config_host_mak
7245fi
7246if test "$vvfat" = "yes" ; then
7247 echo "CONFIG_VVFAT=y" >> $config_host_mak
7248fi
7249if test "$qed" = "yes" ; then
7250 echo "CONFIG_QED=y" >> $config_host_mak
7251fi
7252if test "$parallels" = "yes" ; then
7253 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7254fi
7255if test "$sheepdog" = "yes" ; then
7256 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7257fi
7258
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007259if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007260 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007261elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007262 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007263elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007264 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007265elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007266 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07007267elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007268 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Eric Blakee633a5c2019-02-04 20:39:37 -06007269elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
Alistair Francisc4f80542018-12-19 19:20:19 +00007270 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007271else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007272 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007273fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02007274QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02007275
Juan Quintela98ec69a2009-07-16 18:34:18 +02007276echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02007277echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007278echo "MAKE=$make" >> $config_host_mak
7279echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04007280echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7281echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03007282echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7283echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00007284echo "PYTHON=$python" >> $config_host_mak
Cleber Rosa406ab2f2019-08-26 11:58:32 -04007285echo "PYTHON2=$python2" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007286echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007287if $iasl -h > /dev/null 2>&1; then
7288 echo "IASL=$iasl" >> $config_host_mak
7289fi
Juan Quintela804edf22009-07-27 16:12:49 +02007290echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04007291echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01007292echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007293echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01007294echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007295echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007296echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007297echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007298echo "OBJCOPY=$objcopy" >> $config_host_mak
7299echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007300echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02007301echo "NM=$nm" >> $config_host_mak
Alex Bennéedaa79d92019-09-19 14:07:36 +01007302echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00007303echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007304echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007305echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02007306echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01007307echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01007308echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007309if test "$sparse" = "yes" ; then
7310 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01007311 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02007312 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01007313 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7314 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7315fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02007316echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05007317echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03007318echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01007319echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01007320echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02007321echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02007322echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01007323echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02007324echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08007325echo "DSOSUF=$DSOSUF" >> $config_host_mak
7326echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05007327echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01007328echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7329echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02007330echo "POD2MAN=$POD2MAN" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00007331if test "$gcov" = "yes" ; then
7332 echo "CONFIG_GCOV=y" >> $config_host_mak
7333 echo "GCOV=$gcov_tool" >> $config_host_mak
7334fi
Juan Quintela804edf22009-07-27 16:12:49 +02007335
Tomáš Golembiovský3efac6e2018-10-23 13:23:10 +02007336if test "$libudev" != "no"; then
7337 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7338 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7339fi
7340
Peter Maydell6efd7512011-11-30 11:59:04 +00007341# use included Linux headers
7342if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00007343 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00007344 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007345 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01007346 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00007347 ;;
Richard Hendersonf8378ac2019-05-01 15:38:18 -07007348 ppc|ppc64|ppc64le)
Peter Maydell08312a62012-08-03 13:51:25 +01007349 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00007350 ;;
7351 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01007352 linux_arch=s390
7353 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01007354 aarch64)
7355 linux_arch=arm64
7356 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01007357 mips64)
7358 linux_arch=mips
7359 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01007360 *)
7361 # For most CPUs the kernel architecture name and QEMU CPU name match.
7362 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00007363 ;;
7364 esac
Peter Maydell08312a62012-08-03 13:51:25 +01007365 # For non-KVM architectures we will not have asm headers
7366 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7367 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7368 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00007369fi
7370
bellard1d14ffa2005-10-30 18:58:22 +00007371for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00007372target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02007373config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02007374target_name=$(echo $target | cut -d '-' -f 1)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007375target_aligned_only="no"
7376case "$target_name" in
7377 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7378 target_aligned_only="yes"
7379 ;;
7380esac
bellard97a847b2003-08-10 21:36:04 +00007381target_bigendian="no"
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007382case "$target_name" in
Thomas Hutha69dc532018-08-21 13:27:48 +02007383 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007384 target_bigendian="yes"
Juan Quintelaea2d6a32009-07-16 18:34:10 +02007385 ;;
7386esac
bellard97a847b2003-08-10 21:36:04 +00007387target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00007388target_user_only="no"
ths831b7822007-01-18 20:06:33 +00007389target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00007390target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00007391case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007392 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007393 target_softmmu="yes"
7394 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007395 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007396 target_user_only="yes"
7397 target_linux_user="yes"
7398 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007399 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007400 target_user_only="yes"
7401 target_bsd_user="yes"
7402 ;;
pbrook9e407a82007-05-26 16:38:53 +00007403 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007404 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007405 exit 1
7406 ;;
7407esac
ths831b7822007-01-18 20:06:33 +00007408
bellard97a847b2003-08-10 21:36:04 +00007409mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007410echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007411
pbrooke5fe0c52006-06-11 13:32:59 +00007412bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007413mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007414interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007415gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007416
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007417TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007418TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007419TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007420
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007421case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007422 i386)
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007423 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307424 gdb_xml_files="i386-32bit.xml"
aurel322408a522008-04-20 20:19:44 +00007425 ;;
7426 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007427 TARGET_BASE_ARCH=i386
Emilio G. Cota0a7fa002018-08-13 20:52:26 -04007428 mttcg="yes"
Doug Gale7b0f97b2019-01-24 00:34:57 -03307429 gdb_xml_files="i386-64bit.xml"
aurel322408a522008-04-20 20:19:44 +00007430 ;;
7431 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007432 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00007433 ;;
7434 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007435 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007436 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007437 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007438 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00007439 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007440 aarch64|aarch64_be)
7441 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007442 TARGET_BASE_ARCH=arm
7443 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007444 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007445 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007446 ;;
aurel322408a522008-04-20 20:19:44 +00007447 cris)
aurel322408a522008-04-20 20:19:44 +00007448 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007449 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007450 mttcg="yes"
Richard Henderson61766fe2016-12-15 11:26:14 -08007451 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007452 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01007453 ;;
aurel322408a522008-04-20 20:19:44 +00007454 m68k)
aurel322408a522008-04-20 20:19:44 +00007455 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007456 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00007457 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007458 microblaze|microblazeel)
7459 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007460 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007461 echo "TARGET_ABI32=y" >> $config_target_mak
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007462 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007463 mips|mipsel)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007464 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007465 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007466 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007467 ;;
7468 mipsn32|mipsn32el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007469 mttcg="yes"
Richard Henderson597e2ce2013-02-10 10:30:50 -08007470 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007471 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007472 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007473 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007474 ;;
7475 mips64|mips64el)
Aleksandar Markovic04547282019-02-11 17:09:29 +01007476 mttcg="yes"
Juan Quintelab498c8a2009-07-16 18:34:11 +02007477 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007478 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02007479 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007480 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007481 moxie)
7482 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007483 nios2)
7484 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007485 or1k)
Jia Liue67db062012-07-20 15:50:39 +08007486 TARGET_ARCH=openrisc
7487 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007488 ;;
aurel322408a522008-04-20 20:19:44 +00007489 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007490 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00007491 ;;
aurel322408a522008-04-20 20:19:44 +00007492 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007493 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007494 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307495 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007496 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007497 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007498 ppc64le)
7499 TARGET_ARCH=ppc64
7500 TARGET_BASE_ARCH=ppc
7501 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307502 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007503 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Doug Kwan9c351262014-05-29 09:12:21 -05007504 ;;
aurel322408a522008-04-20 20:19:44 +00007505 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007506 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007507 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007508 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007509 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007510 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00007511 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007512 riscv32)
7513 TARGET_BASE_ARCH=riscv
7514 TARGET_ABI_DIR=riscv
7515 mttcg=yes
Jim Wilson1a987a12019-03-15 03:26:55 -07007516 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml"
Michael Clark25fa1942018-03-03 01:32:59 +13007517 ;;
7518 riscv64)
7519 TARGET_BASE_ARCH=riscv
7520 TARGET_ABI_DIR=riscv
7521 mttcg=yes
Jim Wilsonc6709702019-03-15 03:26:56 -07007522 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml"
Michael Clark25fa1942018-03-03 01:32:59 +13007523 ;;
aurel322408a522008-04-20 20:19:44 +00007524 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007525 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007526 bflt="yes"
7527 ;;
7528 sparc)
aurel322408a522008-04-20 20:19:44 +00007529 ;;
7530 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007531 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00007532 ;;
7533 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007534 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007535 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007536 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02007537 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007538 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007539 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007540 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007541 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
Alexander Graf24e804ec2009-12-05 12:44:22 +01007542 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007543 tilegx)
7544 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007545 tricore)
7546 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007547 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007548 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007549 xtensa|xtensaeb)
7550 TARGET_ARCH=xtensa
Max Filippov02e33e92018-10-19 18:40:20 -07007551 bflt="yes"
Max Filippov9fb40342017-03-06 17:17:43 -08007552 mttcg="yes"
Max Filippovcfa550c2011-09-06 03:55:26 +04007553 ;;
aurel322408a522008-04-20 20:19:44 +00007554 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007555 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007556 ;;
7557esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007558# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7559if [ "$TARGET_BASE_ARCH" = "" ]; then
7560 TARGET_BASE_ARCH=$TARGET_ARCH
7561fi
7562
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007563symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7564
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007565upper() {
7566 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7567}
7568
Stefan Weil89138852016-05-16 15:10:20 +02007569target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007570echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007571echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007572echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007573if [ "$TARGET_ABI_DIR" = "" ]; then
7574 TARGET_ABI_DIR=$TARGET_ARCH
7575fi
Juan Quintela25be2102009-10-07 02:41:00 +02007576echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007577if [ "$HOST_VARIANT_DIR" != "" ]; then
7578 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7579fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007580
7581if supported_xen_target $target; then
7582 echo "CONFIG_XEN=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007583 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007584 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007585 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007586 fi
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007587else
7588 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007589fi
7590if supported_kvm_target $target; then
7591 echo "CONFIG_KVM=y" >> $config_target_mak
Paolo Bonzinie0e312f2019-01-23 14:56:01 +08007592 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7593else
7594 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007595fi
7596if supported_hax_target $target; then
7597 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007598fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007599if supported_hvf_target $target; then
7600 echo "CONFIG_HVF=y" >> $config_target_mak
7601fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007602if supported_whpx_target $target; then
7603 echo "CONFIG_WHPX=y" >> $config_target_mak
7604fi
tony.nguyen@bt.com52bf9772019-07-18 06:01:31 +00007605if test "$target_aligned_only" = "yes" ; then
7606 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7607fi
bellardde83cd02003-06-15 20:25:43 +00007608if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007609 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007610fi
7611if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007612 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007613 if test "$mttcg" = "yes" ; then
7614 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7615 fi
bellardde83cd02003-06-15 20:25:43 +00007616fi
bellard997344f2003-10-27 21:10:39 +00007617if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007618 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007619 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007620fi
ths831b7822007-01-18 20:06:33 +00007621if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007622 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007623fi
pbrook56aebc82008-10-11 17:55:29 +00007624list=""
7625if test ! -z "$gdb_xml_files" ; then
7626 for x in $gdb_xml_files; do
7627 list="$list $source_path/gdb-xml/$x"
7628 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007629 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007630fi
bellardde83cd02003-06-15 20:25:43 +00007631
Eric Blakee633a5c2019-02-04 20:39:37 -06007632if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007633 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007634fi
blueswir184778502008-10-26 20:33:16 +00007635if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007636 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007637fi
bellard5b0753e2005-03-01 21:37:28 +00007638
Alex Bennée716a5072018-04-10 12:19:40 +01007639
Juan Quintela4afddb52009-08-03 14:46:45 +02007640# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007641
Juan Quintela4afddb52009-08-03 14:46:45 +02007642cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007643ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007644
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007645disas_config() {
7646 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7647 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7648}
7649
Juan Quintela64656022009-08-03 14:46:53 +02007650for i in $ARCH $TARGET_BASE_ARCH ; do
7651 case "$i" in
7652 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007653 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007654 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007655 aarch64)
7656 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007657 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007658 fi
7659 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007660 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007661 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007662 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007663 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007664 fi
Juan Quintela64656022009-08-03 14:46:53 +02007665 ;;
7666 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007667 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007668 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007669 hppa)
7670 disas_config "HPPA"
7671 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007672 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007673 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007674 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007675 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007676 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007677 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007678 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007679 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007680 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007681 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007682 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007683 ;;
7684 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007685 disas_config "MIPS"
Aleksandar Markovic89a955e2018-10-24 17:41:49 +02007686 if test -n "${cxx}"; then
7687 disas_config "NANOMIPS"
7688 fi
Juan Quintela64656022009-08-03 14:46:53 +02007689 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007690 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007691 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007692 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007693 nios2)
7694 disas_config "NIOS2"
7695 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007696 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007697 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007698 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007699 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007700 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007701 ;;
Alistair Francisc4f80542018-12-19 19:20:19 +00007702 riscv*)
Michael Clark25fa1942018-03-03 01:32:59 +13007703 disas_config "RISCV"
7704 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007705 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007706 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007707 ;;
7708 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007709 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007710 ;;
7711 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007712 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007713 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007714 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007715 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007716 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007717 esac
7718done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007719if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007720 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007721fi
Juan Quintela64656022009-08-03 14:46:53 +02007722
Juan Quintela6ee71262009-08-03 14:46:47 +02007723case "$ARCH" in
7724alpha)
7725 # Ensure there's only a single GP
7726 cflags="-msmall-data $cflags"
7727;;
7728esac
7729
Juan Quintelad02c1db2009-08-03 14:46:50 +02007730if test "$gprof" = "yes" ; then
Philippe Mathieu-Daudé0acf7de2019-01-03 16:09:50 +01007731 echo "TARGET_GPROF=y" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007732 if test "$target_linux_user" = "yes" ; then
7733 cflags="-p $cflags"
7734 ldflags="-p $ldflags"
7735 fi
7736 if test "$target_softmmu" = "yes" ; then
7737 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007738 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007739 fi
7740fi
7741
Eric Blakee633a5c2019-02-04 20:39:37 -06007742if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007743 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007744fi
Juan Quintelafa282482009-07-22 22:37:39 +02007745
Christian Borntraegere9a35912017-08-23 12:16:23 +02007746# Newer kernels on s390 check for an S390_PGSTE program header and
7747# enable the pgste page table extensions in that case. This makes
7748# the vm.allocate_pgste sysctl unnecessary. We enable this program
7749# header if
7750# - we build on s390x
7751# - we build the system emulation for s390x (qemu-system-s390x)
7752# - KVM is enabled
7753# - the linker supports --s390-pgste
Eric Blakee633a5c2019-02-04 20:39:37 -06007754if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7755 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
Christian Borntraegere9a35912017-08-23 12:16:23 +02007756 if ld_has --s390-pgste ; then
7757 ldflags="-Wl,--s390-pgste $ldflags"
7758 fi
7759fi
7760
Juan Quintela25be2102009-10-07 02:41:00 +02007761echo "LDFLAGS+=$ldflags" >> $config_target_mak
7762echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007763
bellard97a847b2003-08-10 21:36:04 +00007764done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007765
Marc-André Lureaud52c4542019-05-24 15:09:42 +02007766echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
7767echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
7768
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007769if [ "$fdt" = "git" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02007770 echo "config-host.h: dtc/all" >> $config_host_mak
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007771fi
Richard Hendersone219c492017-09-28 09:01:23 -07007772if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
Markus Armbruster3b8593e2019-05-28 10:23:07 +02007773 echo "config-host.h: capstone/all" >> $config_host_mak
Richard Hendersone219c492017-09-28 09:01:23 -07007774fi
7775if test -n "$LIBCAPSTONE"; then
7776 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7777fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007778
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007779if test "$numa" = "yes"; then
7780 echo "CONFIG_NUMA=y" >> $config_host_mak
7781fi
7782
John Snowfd0e6052015-03-25 18:57:39 -04007783if test "$ccache_cpp2" = "yes"; then
7784 echo "export CCACHE_CPP2=y" >> $config_host_mak
7785fi
7786
Peter Maydelle29e5c62018-11-02 11:52:38 +00007787# If we're using a separate build tree, set it up now.
7788# DIRS are directories which we simply mkdir in the build tree;
7789# LINKS are things to symlink back into the source tree
7790# (these can be both files and directories).
7791# Caution: do not add files or directories here using wildcards. This
7792# will result in problems later if a new file matching the wildcard is
7793# added to the source tree -- nothing will cause configure to be rerun
7794# so the build tree will be missing the link back to the new file, and
7795# tests might fail. Prefer to keep the relevant files in their own
7796# directory and symlink the directory instead.
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02007797DIRS="tests tests/tcg tests/tcg/lm32 tests/libqos tests/qapi-schema tests/qemu-iotests tests/vm"
Emanuele Giuseppe Espositofc281c82018-06-13 17:07:21 +02007798DIRS="$DIRS tests/fp tests/qgraph"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007799DIRS="$DIRS docs docs/interop fsdev scsi"
Alexey Kardashevskiy744a9282019-07-16 15:27:43 +10007800DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007801DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02007802LINKS="Makefile"
7803LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
7804LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007805LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
Peter Maydelle29e5c62018-11-02 11:52:38 +00007806LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7807LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7808LINKS="$LINKS pc-bios/qemu-icon.bmp"
7809LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
Peter Maydell39950352018-11-02 11:52:39 +00007810LINKS="$LINKS tests/acceptance tests/data"
7811LINKS="$LINKS tests/qemu-iotests/check"
Cleber Rosa8f8fd9e2019-02-06 11:29:01 -05007812LINKS="$LINKS python"
Richard Henderson753d11f2011-06-24 11:58:37 -07007813for bios_file in \
7814 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007815 $source_path/pc-bios/*.lid \
Richard Henderson753d11f2011-06-24 11:58:37 -07007816 $source_path/pc-bios/*.rom \
7817 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007818 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007819 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007820 $source_path/pc-bios/u-boot.* \
Laszlo Ersek26ce90f2019-03-08 01:19:35 +01007821 $source_path/pc-bios/edk2-*.fd.bz2 \
Richard Henderson753d11f2011-06-24 11:58:37 -07007822 $source_path/pc-bios/palcode-*
7823do
Peter Maydelle29e5c62018-11-02 11:52:38 +00007824 LINKS="$LINKS pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007825done
7826mkdir -p $DIRS
Peter Maydelle29e5c62018-11-02 11:52:38 +00007827for f in $LINKS ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007828 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007829 symlink "$source_path/$f" "$f"
7830 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007831done
Paul Brook1ad21342009-05-19 16:17:58 +01007832
Paolo Bonzini2038f8c2019-08-07 16:35:23 +02007833(for i in $cross_cc_vars; do
7834 export $i
7835done
7836export target_list source_path
7837$source_path/tests/tcg/configure.sh)
7838
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007839# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007840for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007841 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007842 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007843 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007844 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007845 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007846 echo "CC=$cc" >> $config_mak
7847 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007848 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007849 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007850 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007851 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007852 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007853done
7854
Max Reitz76c75602014-05-24 23:24:56 +02007855# set up qemu-iotests in this build directory
7856iotests_common_env="tests/qemu-iotests/common.env"
Max Reitz76c75602014-05-24 23:24:56 +02007857
7858echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7859echo >> "$iotests_common_env"
7860echo "export PYTHON='$python'" >> "$iotests_common_env"
7861
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007862# Save the configure command line for later reuse.
7863cat <<EOD >config.status
7864#!/bin/sh
7865# Generated by configure.
7866# Run this file to recreate the current configuration.
7867# Compiler output produced by configure, useful for debugging
7868# configure, is in config.log if it exists.
7869EOD
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007870
7871preserve_env() {
7872 envname=$1
7873
7874 eval envval=\$$envname
7875
7876 if test -n "$envval"
7877 then
7878 echo "$envname='$envval'" >> config.status
7879 echo "export $envname" >> config.status
7880 else
7881 echo "unset $envname" >> config.status
7882 fi
7883}
7884
7885# Preserve various env variables that influence what
7886# features/build target configure will detect
7887preserve_env AR
7888preserve_env AS
7889preserve_env CC
7890preserve_env CPP
7891preserve_env CXX
7892preserve_env INSTALL
7893preserve_env LD
7894preserve_env LD_LIBRARY_PATH
7895preserve_env LIBTOOL
7896preserve_env MAKE
7897preserve_env NM
7898preserve_env OBJCOPY
7899preserve_env PATH
7900preserve_env PKG_CONFIG
7901preserve_env PKG_CONFIG_LIBDIR
7902preserve_env PKG_CONFIG_PATH
7903preserve_env PYTHON
Daniel P. Berrangée811da72018-09-04 13:36:03 +01007904preserve_env SDL2_CONFIG
7905preserve_env SMBD
7906preserve_env STRIP
7907preserve_env WINDRES
7908
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007909printf "exec" >>config.status
7910printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007911echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007912chmod +x config.status
7913
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007914rm -r "$TMPDIR1"