blob: e7bddc04b0480109bf224755c92ee1580bd97ada [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 ;;
110 *)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
112 ;;
113 esac
114 done
115}
116
Juan Quintela52166aa2009-08-03 14:46:03 +0200117compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400118 local_cflags="$1"
119 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200120}
121
122compile_prog() {
123 local_cflags="$1"
124 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100125 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200126}
127
Paolo Bonzini11568d62010-12-23 11:43:58 +0100128# symbolically link $1 to $2. Portable version of "ln -sf".
129symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100130 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800131 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100132 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100133}
134
Loïc Minier0dba6192010-01-28 21:26:51 +0000135# check whether a command is available to this shell (may be either an
136# executable or a builtin)
137has() {
138 type "$1" >/dev/null 2>&1
139}
140
141# search for an executable in PATH
142path_of() {
143 local_command="$1"
144 local_ifs="$IFS"
145 local_dir=""
146
147 # pathname has a dir component?
148 if [ "${local_command#*/}" != "$local_command" ]; then
149 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
150 echo "$local_command"
151 return 0
152 fi
153 fi
154 if [ -z "$local_command" ]; then
155 return 1
156 fi
157
158 IFS=:
159 for local_dir in $PATH; do
160 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
161 echo "$local_dir/$local_command"
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 0
164 fi
165 done
166 # not found
167 IFS="${local_ifs:-$(printf ' \t\n')}"
168 return 1
169}
170
Lluís Vilanova5b808272014-05-27 15:02:14 +0200171have_backend () {
172 echo "$trace_backends" | grep "$1" >/dev/null
173}
174
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200175glob() {
176 eval test -z '"${1#'"$2"'}"'
177}
178
179supported_hax_target() {
180 test "$hax" = "yes" || return 1
181 glob "$1" "*-softmmu" || return 1
182 case "${1%-softmmu}" in
183 i386|x86_64)
184 return 0
185 ;;
186 esac
187 return 1
188}
189
190supported_kvm_target() {
191 test "$kvm" = "yes" || return 1
192 glob "$1" "*-softmmu" || return 1
193 case "${1%-softmmu}:$cpu" in
194 arm:arm | aarch64:aarch64 | \
195 i386:i386 | i386:x86_64 | i386:x32 | \
196 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
197 mips:mips | mipsel:mips | \
198 ppc:ppc | ppcemb:ppc | ppc64:ppc | \
199 ppc:ppc64 | ppcemb:ppc64 | ppc64:ppc64 | \
200 s390x:s390x)
201 return 0
202 ;;
203 esac
204 return 1
205}
206
207supported_xen_target() {
208 test "$xen" = "yes" || return 1
209 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200210 # Only i386 and x86_64 provide the xenpv machine.
211 case "${1%-softmmu}" in
212 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200213 return 0
214 ;;
215 esac
216 return 1
217}
218
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500219supported_hvf_target() {
220 test "$hvf" = "yes" || return 1
221 glob "$1" "*-softmmu" || return 1
222 case "${1%-softmmu}" in
223 x86_64)
224 return 0
225 ;;
226 esac
227 return 1
228}
229
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800230supported_whpx_target() {
231 test "$whpx" = "yes" || return 1
232 glob "$1" "*-softmmu" || return 1
233 case "${1%-softmmu}" in
234 i386|x86_64)
235 return 0
236 ;;
237 esac
238 return 1
239}
240
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200241supported_target() {
242 case "$1" in
243 *-softmmu)
244 ;;
245 *-linux-user)
246 if test "$linux" != "yes"; then
247 print_error "Target '$target' is only available on a Linux host"
248 return 1
249 fi
250 ;;
251 *-bsd-user)
252 if test "$bsd" != "yes"; then
253 print_error "Target '$target' is only available on a BSD host"
254 return 1
255 fi
256 ;;
257 *)
258 print_error "Invalid target name '$target'"
259 return 1
260 ;;
261 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200262 test "$tcg" = "yes" && return 0
263 supported_kvm_target "$1" && return 0
264 supported_xen_target "$1" && return 0
265 supported_hax_target "$1" && return 0
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500266 supported_hvf_target "$1" && return 0
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800267 supported_whpx_target "$1" && return 0
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200268 print_error "TCG disabled, but hardware accelerator not available for '$target'"
269 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200270}
271
Christian Borntraegere9a35912017-08-23 12:16:23 +0200272
273ld_has() {
274 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
275}
276
bellard7d132992003-03-06 23:23:54 +0000277# default parameters
Stefan Weil89138852016-05-16 15:10:20 +0200278source_path=$(dirname "$0")
Juan Quintela2ff6b912009-08-03 14:45:55 +0200279cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300280iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000281interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000282static="no"
bellard7d132992003-03-06 23:23:54 +0000283cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000284audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800285block_drv_rw_whitelist=""
286block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000287host_cc="cc"
Juan Quintela73da3752009-08-03 14:46:26 +0200288libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200289libs_tools=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200290audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400291audio_win_int=""
Michael Roth957f1f92011-08-11 15:38:12 -0500292libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100293debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100294stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000295
Daniel P. Berrange92712822017-09-29 11:11:58 +0100296if test -e "$source_path/.git"
297then
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100298 git_update=yes
Daniel P. Berrange92712822017-09-29 11:11:58 +0100299 git_submodules="ui/keycodemapdb"
300else
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +0100301 git_update=no
Daniel P. Berrange92712822017-09-29 11:11:58 +0100302 git_submodules=""
Daniel P. Berrangé5c0ef672018-04-18 18:11:51 +0100303
304 if ! test -f "$source_path/ui/keycodemapdb/README"
305 then
306 echo
307 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
308 echo
309 echo "This is not a GIT checkout but module content appears to"
310 echo "be missing. Do not use 'git archive' or GitHub download links"
311 echo "to acquire QEMU source archives. Non-GIT builds are only"
312 echo "supported with source archives linked from:"
313 echo
314 echo " https://www.qemu.org/download/"
315 echo
316 echo "Developers working with GIT can use scripts/archive-source.sh"
317 echo "if they need to create valid source archives."
318 echo
319 exit 1
320 fi
Daniel P. Berrange92712822017-09-29 11:11:58 +0100321fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100322git="git"
aliguoriac0df512008-12-29 17:14:15 +0000323
Stefan Weilafb63eb2012-09-26 22:04:38 +0200324# Don't accept a target_list environment variable.
325unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100326
327# Default value for a variable defining feature "foo".
328# * foo="no" feature will only be used if --enable-foo arg is given
329# * foo="" feature will be searched for, and if found, will be used
330# unless --disable-foo is given
331# * foo="yes" this value will only be set by --enable-foo flag.
332# feature will searched for,
333# if not found, configure exits with error
334#
335# Always add --enable-foo and --disable-foo command line args.
336# Distributions want to ensure that several features are compiled in, and it
337# is impossible without a --enable-foo that exits if a feature is not found.
338
339bluez=""
340brlapi=""
341curl=""
342curses=""
343docs=""
344fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100345netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100346sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400347sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530348virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200349mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100350vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100351sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100352vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100353vnc_sasl=""
354vnc_jpeg=""
355vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200356xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100357xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000358xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000359xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000360xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100361linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500362cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100363attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200364libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200366tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100367membarrier=""
Bradd41a75a2011-07-26 23:11:26 -0400368vhost_net="no"
Gonglei042cea22018-03-01 21:46:28 +0800369vhost_crypto="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000370vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100371vhost_vsock="no"
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200372vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400373kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100374hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500375hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800376whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400377rdma=""
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +0300378pvrdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100379gprof="no"
380debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100381debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100382sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500383fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100384strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200385tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100386bigendian="no"
387mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000388gcov="no"
389gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100390EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800391DSOSUF=".so"
392LDFLAGS_SHARED="-shared"
393modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100394prefix="/usr/local"
395mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300396datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200397firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300398qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100399bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300400libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400401libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200402includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100403sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300404local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100405confsuffix="/qemu"
406slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100407oss_lib=""
408bsd="no"
409linux="no"
410solaris="no"
411profiler="no"
412cocoa="no"
413softmmu="yes"
414linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100415bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100416blobs="yes"
417pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200418pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200419qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300420trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100421trace_file="trace"
422spice=""
423rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200424smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100425libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200426usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100427opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100428opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000429cpuid_h="no"
Liang Li99f2dbd2016-03-08 13:53:16 +0800430avx2_opt="no"
Alon Levy1ece9902011-07-26 12:30:40 +0300431zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700432capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200433lzo=""
434snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100435bzip2=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400436guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400437guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500438guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300439guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400440vss_win32_sdk=""
441win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100442want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100443libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100444libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100445coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200446coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200447debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400448crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300449seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530450glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400451glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530452glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530453glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530454glusterfs_zerofill="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600455gtk=""
Stefan Weil9e04c682014-05-17 16:29:18 +0200456gtkabi=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200457gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100458tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100459gnutls=""
Daniel P. Berrangeb917da42015-10-31 14:39:52 +0900460gnutls_rnd=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100461nettle=""
Daniel P. Berrangefff2f982016-03-29 15:47:51 +0100462nettle_kdf="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100463gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800464gcrypt_hmac="no"
Daniel P. Berrange37788f22015-10-14 13:14:04 +0100465gcrypt_kdf="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100466vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200467virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400468tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100469libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100470live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800471numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800472tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200473jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800474replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700475vxhs=""
Klim Kireeved279a02018-01-12 12:01:19 +0300476libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100477docker="no"
Paolo Bonziniba59fb72018-06-13 14:23:08 +0200478debug_mutex="no"
Junyan He17824402018-07-18 15:47:59 +0800479libpmem=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100480
Alex Bennéed75402b2018-04-04 20:27:05 +0100481# cross compilers defaults, can be overridden with --cross-cc-ARCH
482cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100483cross_cc_aarch64_be="$cross_cc_aarch64"
484cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100485cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100486cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100487cross_cc_i386="i386-pc-linux-gnu-gcc"
488cross_cc_cflags_i386=""
Alex Bennéed75402b2018-04-04 20:27:05 +0100489cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100490cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100491
492enabled_cross_compilers=""
493
Peter Maydell898be3e2017-03-21 14:31:57 +0000494supported_cpu="no"
495supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100496bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800497malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000498
aliguoriac0df512008-12-29 17:14:15 +0000499# parse CC options first
500for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200501 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000502 case "$opt" in
503 --cross-prefix=*) cross_prefix="$optarg"
504 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100505 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000506 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400507 --cxx=*) CXX="$optarg"
508 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100509 --source-path=*) source_path="$optarg"
510 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200511 --cpu=*) cpu="$optarg"
512 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100513 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200514 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100515 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100516 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100517 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100518 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200519 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100520 --enable-debug-info) debug_info="yes"
521 ;;
522 --disable-debug-info) debug_info="no"
523 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100524 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
525 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100526 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
527 eval "cross_cc_cflags_${cc_arch}=\$optarg"
528 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100529 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
530 eval "cross_cc_${cc_arch}=\$optarg"
531 ;;
aliguoriac0df512008-12-29 17:14:15 +0000532 esac
533done
aliguoriac0df512008-12-29 17:14:15 +0000534# OS specific
535# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100536# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000537
Peter Maydelle49d0212012-12-07 15:39:13 +0000538# Preferred compiler:
539# ${CC} (if set)
540# ${cross_prefix}gcc (if cross-prefix specified)
541# system compiler
542if test -z "${CC}${cross_prefix}"; then
543 cc="$host_cc"
544else
545 cc="${CC-${cross_prefix}gcc}"
546fi
547
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400548if test -z "${CXX}${cross_prefix}"; then
549 cxx="c++"
550else
551 cxx="${CXX-${cross_prefix}g++}"
552fi
553
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500554ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700555as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700556ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000557cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500558objcopy="${OBJCOPY-${cross_prefix}objcopy}"
559ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800560ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200561nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500562strip="${STRIP-${cross_prefix}strip}"
563windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300564pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
565query_pkg_config() {
566 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
567}
568pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500569sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000570sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000571
Peter Maydell45d285a2013-10-21 21:03:06 +0100572# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
573ARFLAGS="${ARFLAGS-rv}"
574
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200575# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100576# We use -fwrapv to tell the compiler that we require a C dialect where
577# left shift of signed integers is well defined and has the expected
578# 2s-complement style results. (Both clang and gcc agree that it
579# provides these semantics.)
580QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400581QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100582QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200583QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200584QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100585if test "$debug_info" = "yes"; then
586 CFLAGS="-g $CFLAGS"
587 LDFLAGS="-g $LDFLAGS"
588fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200589
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100590# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200591source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100592
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300593# running configure in the source tree?
594# we know that's the case if configure is there.
595if test -f "./configure"; then
596 pwd_is_source_path="y"
597else
598 pwd_is_source_path="n"
599fi
600
aliguoriac0df512008-12-29 17:14:15 +0000601check_define() {
602cat > $TMPC <<EOF
603#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000604#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000605#endif
606int main(void) { return 0; }
607EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200608 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000609}
610
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200611check_include() {
612cat > $TMPC <<EOF
613#include <$1>
614int main(void) { return 0; }
615EOF
616 compile_object
617}
618
John Snow93b25862015-03-25 18:57:37 -0400619write_c_skeleton() {
620 cat > $TMPC <<EOF
621int main(void) { return 0; }
622EOF
623}
624
Peter Maydellbbea4052012-08-14 15:35:34 +0100625if check_define __linux__ ; then
626 targetos="Linux"
627elif check_define _WIN32 ; then
628 targetos='MINGW32'
629elif check_define __OpenBSD__ ; then
630 targetos='OpenBSD'
631elif check_define __sun__ ; then
632 targetos='SunOS'
633elif check_define __HAIKU__ ; then
634 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100635elif check_define __FreeBSD__ ; then
636 targetos='FreeBSD'
637elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
638 targetos='GNU/kFreeBSD'
639elif check_define __DragonFly__ ; then
640 targetos='DragonFly'
641elif check_define __NetBSD__; then
642 targetos='NetBSD'
643elif check_define __APPLE__; then
644 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100645else
Peter Maydell951fedf2017-07-13 16:15:32 +0100646 # This is a fatal error, but don't report it yet, because we
647 # might be going to just print the --help text, or it might
648 # be the result of a missing compiler.
649 targetos='bogus'
650 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100651fi
652
653# Some host OSes need non-standard checks for which CPU to use.
654# Note that these checks are broken for cross-compilation: if you're
655# cross-compiling to one of these OSes then you'll need to specify
656# the correct CPU with the --cpu option.
657case $targetos in
658Darwin)
659 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
660 # run 64-bit userspace code.
661 # If the user didn't specify a CPU explicitly and the kernel says this is
662 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
663 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
664 cpu="x86_64"
665 fi
666 ;;
667SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200668 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100669 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
670 cpu="x86_64"
671 fi
672esac
673
Juan Quintela2ff6b912009-08-03 14:45:55 +0200674if test ! -z "$cpu" ; then
675 # command line argument
676 :
677elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000678 cpu="i386"
679elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700680 if check_define __ILP32__ ; then
681 cpu="x32"
682 else
683 cpu="x86_64"
684 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000685elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000686 if check_define __arch64__ ; then
687 cpu="sparc64"
688 else
689 cpu="sparc"
690 fi
malcfdf7ed92009-01-14 18:39:52 +0000691elif check_define _ARCH_PPC ; then
692 if check_define _ARCH_PPC64 ; then
693 cpu="ppc64"
694 else
695 cpu="ppc"
696 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200697elif check_define __mips__ ; then
698 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200699elif check_define __s390__ ; then
700 if check_define __s390x__ ; then
701 cpu="s390x"
702 else
703 cpu="s390"
704 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100705elif check_define __arm__ ; then
706 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100707elif check_define __aarch64__ ; then
708 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000709else
Stefan Weil89138852016-05-16 15:10:20 +0200710 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000711fi
712
Peter Maydell359bc952011-12-24 13:07:25 +0000713ARCH=
714# Normalise host CPU name and set ARCH.
715# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000716case "$cpu" in
Peter Maydell6499fd12017-03-28 11:58:38 +0100717 ppc|ppc64|s390|s390x|sparc64|x32)
Peter Maydell898be3e2017-03-21 14:31:57 +0000718 cpu="$cpu"
719 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100720 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000721 ;;
bellard7d132992003-03-06 23:23:54 +0000722 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000723 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000724 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100725 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000726 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000727 x86_64|amd64)
728 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000729 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100730 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000731 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100732 armv*b|armv*l|arm)
733 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000734 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100735 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000736 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100737 aarch64)
738 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000739 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100740 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100741 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200742 mips*)
743 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000744 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100745 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200746 ;;
blueswir131422552007-04-16 18:27:06 +0000747 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000748 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100749 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100750 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000751 ;;
bellard7d132992003-03-06 23:23:54 +0000752 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000753 # This will result in either an error or falling back to TCI later
754 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000755 ;;
756esac
Peter Maydell359bc952011-12-24 13:07:25 +0000757if test -z "$ARCH"; then
758 ARCH="$cpu"
759fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200760
bellard7d132992003-03-06 23:23:54 +0000761# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200762
Stacey Sonadfc3e92014-06-08 09:57:22 -0700763# host *BSD for user mode
764HOST_VARIANT_DIR=""
765
bellard7d132992003-03-06 23:23:54 +0000766case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000767MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200768 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100769 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200770 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200771 if check_include dsound.h; then
772 audio_drv_list="dsound"
773 else
774 audio_drv_list=""
775 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000776 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000777;;
ths5c40d2b2007-06-23 16:03:36 +0000778GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100779 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200780 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200781 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000782;;
bellard7d3505c2004-05-12 19:32:15 +0000783FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200784 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100785 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200786 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200787 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100788 # needed for kinfo_getvmmap(3) in libutil.h
789 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500790 # needed for kinfo_getproc
791 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100792 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700793 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000794 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000795;;
blueswir1c5e97232009-03-07 20:06:23 +0000796DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200797 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100798 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200799 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200800 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700801 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000802;;
bellard7d3505c2004-05-12 19:32:15 +0000803NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200804 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100805 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200806 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200807 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200808 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700809 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200810 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000811;;
812OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200813 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100814 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400815 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200816 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700817 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500818 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000819;;
bellard83fb7ad2004-07-05 21:25:26 +0000820Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200821 bsd="yes"
822 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100823 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500824 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800825 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200826 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200827 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200828 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200829 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200830 cocoa="yes"
831 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200832 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200833 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200834 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100835 # Disable attempts to use ObjectiveC features in os/object.h since they
836 # won't work when we're compiling with gcc as a C compiler.
837 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700838 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000839 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000840;;
bellardec530c82006-04-25 22:36:06 +0000841SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200842 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100843 make="${MAKE-gmake}"
844 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400845 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200846 if test -f /usr/include/sys/soundcard.h ; then
847 audio_drv_list="oss"
848 fi
849 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000850# needed for CMSG_ macros in sys/socket.h
851 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
852# needed for TIOCWIN* defines in termios.h
853 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200854 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200855 solarisnetlibs="-lsocket -lnsl -lresolv"
856 LIBS="$solarisnetlibs $LIBS"
857 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000858;;
Andreas Färber179cf402010-09-20 00:50:43 +0200859Haiku)
860 haiku="yes"
861 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
862 LIBS="-lposix_error_mapper -lnetwork $LIBS"
863;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000864Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200865 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200866 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200867 linux="yes"
868 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200869 kvm="yes"
870 vhost_net="yes"
Gonglei042cea22018-03-01 21:46:28 +0800871 vhost_crypto="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000872 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100873 vhost_vsock="yes"
Alexey Kardashevskiya5851402013-05-29 23:30:43 +1000874 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000875 supported_os="yes"
876;;
bellard7d132992003-03-06 23:23:54 +0000877esac
878
bellard7d3505c2004-05-12 19:32:15 +0000879if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000880 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200881 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000882 fi
bellard7d3505c2004-05-12 19:32:15 +0000883fi
884
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100885: ${make=${MAKE-make}}
886: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100887: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400888: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100889
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100890# Default objcc to clang if available, otherwise use CC
891if has clang; then
892 objcc=clang
893else
894 objcc="$cc"
895fi
896
Juan Quintela3457a3f2009-08-03 14:46:07 +0200897if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200898 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800899 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200900 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100901 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
902 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100903 # MinGW needs -mthreads for TLS and macro _MT.
904 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100905 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400906 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100907 if compile_prog "" "-liberty" ; then
908 LIBS="-liberty $LIBS"
909 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200910 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200911 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300912 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300913 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200914 bindir="\${prefix}"
915 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200916 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200917 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300918 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200919fi
920
Anthony Liguori487fefd2009-06-11 13:28:25 -0500921werror=""
bellard85aa5182007-11-11 20:17:03 +0000922
bellard7d132992003-03-06 23:23:54 +0000923for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200924 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000925 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000926 --help|-h) show_help=yes
927 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400928 --version|-V) exec cat $source_path/VERSION
929 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000930 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000931 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000932 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000933 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100934 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000935 ;;
aliguoriac0df512008-12-29 17:14:15 +0000936 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000937 ;;
aliguoriac0df512008-12-29 17:14:15 +0000938 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000939 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000940 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000941 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400942 --cxx=*)
943 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200944 --iasl=*) iasl="$optarg"
945 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100946 --objcc=*) objcc="$optarg"
947 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000948 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000949 ;;
pbrook6a882642006-04-17 13:57:12 +0000950 --install=*) install="$optarg"
951 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000952 --python=*) python="$optarg"
953 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000954 --gcov=*) gcov_tool="$optarg"
955 ;;
Brade2d88302011-09-02 16:53:28 -0400956 --smbd=*) smbd="$optarg"
957 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200958 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000959 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100960 --extra-cxxflags=*)
961 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200962 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000963 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100964 --enable-debug-info)
965 ;;
966 --disable-debug-info)
967 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100968 --cross-cc-*)
969 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800970 --enable-modules)
971 modules="yes"
972 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000973 --disable-modules)
974 modules="no"
975 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200976 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000977 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000978 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000979 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +0200980 --enable-trace-backends=*) trace_backends="$optarg"
981 ;;
982 # XXX: backwards compatibility
983 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100984 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100985 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100986 ;;
bellard7d132992003-03-06 23:23:54 +0000987 --enable-gprof) gprof="yes"
988 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000989 --enable-gcov) gcov="yes"
990 ;;
Loïc Minier79427692010-01-31 12:23:45 +0100991 --static)
992 static="yes"
993 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300994 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +0000995 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200996 --mandir=*) mandir="$optarg"
997 ;;
998 --bindir=*) bindir="$optarg"
999 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +03001000 --libdir=*) libdir="$optarg"
1001 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +04001002 --libexecdir=*) libexecdir="$optarg"
1003 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +02001004 --includedir=*) includedir="$optarg"
1005 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03001006 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001007 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -03001008 --with-confsuffix=*) confsuffix="$optarg"
1009 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -03001010 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +02001011 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +01001012 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -06001013 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001014 --localstatedir=*) local_statedir="$optarg"
1015 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001016 --firmwarepath=*) firmwarepath="$optarg"
1017 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +02001018 --host=*|--build=*|\
1019 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -03001020 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001021 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1022 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1023 # These switches are silently ignored, for compatibility with
1024 # autoconf-generated configure scripts. This allows QEMU's
1025 # configure to be used by RPM and similar macros that set
1026 # lots of directory switches by default.
1027 ;;
bellard97a847b2003-08-10 21:36:04 +00001028 --disable-sdl) sdl="no"
1029 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001030 --enable-sdl) sdl="yes"
1031 ;;
Dave Airlie47c03742013-12-10 14:05:51 +10001032 --with-sdlabi=*) sdlabi="$optarg"
1033 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001034 --disable-qom-cast-debug) qom_cast_debug="no"
1035 ;;
1036 --enable-qom-cast-debug) qom_cast_debug="yes"
1037 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301038 --disable-virtfs) virtfs="no"
1039 ;;
1040 --enable-virtfs) virtfs="yes"
1041 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001042 --disable-mpath) mpath="no"
1043 ;;
1044 --enable-mpath) mpath="yes"
1045 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001046 --disable-vnc) vnc="no"
1047 ;;
1048 --enable-vnc) vnc="yes"
1049 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001050 --oss-lib=*) oss_lib="$optarg"
1051 ;;
malc0c58ac12008-06-25 21:04:05 +00001052 --audio-drv-list=*) audio_drv_list="$optarg"
1053 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001054 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001055 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001056 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001057 ;;
aurel32f8393942009-04-13 18:45:38 +00001058 --enable-debug-tcg) debug_tcg="yes"
1059 ;;
1060 --disable-debug-tcg) debug_tcg="no"
1061 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001062 --enable-debug)
1063 # Enable debugging options that aren't excessively noisy
1064 debug_tcg="yes"
Peter Xu1fcc6d42018-04-25 10:54:59 +08001065 debug_mutex="yes"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001066 debug="yes"
1067 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001068 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001069 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001070 --enable-sanitizers) sanitizers="yes"
1071 ;;
1072 --disable-sanitizers) sanitizers="no"
1073 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001074 --enable-sparse) sparse="yes"
1075 ;;
1076 --disable-sparse) sparse="no"
1077 ;;
aliguori1625af82009-04-05 17:41:02 +00001078 --disable-strip) strip_opt="no"
1079 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001080 --disable-vnc-sasl) vnc_sasl="no"
1081 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001082 --enable-vnc-sasl) vnc_sasl="yes"
1083 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001084 --disable-vnc-jpeg) vnc_jpeg="no"
1085 ;;
1086 --enable-vnc-jpeg) vnc_jpeg="yes"
1087 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001088 --disable-vnc-png) vnc_png="no"
1089 ;;
1090 --enable-vnc-png) vnc_png="yes"
1091 ;;
bellard443f1372004-06-04 11:13:20 +00001092 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001093 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001094 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001095 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001096 --enable-vde) vde="yes"
1097 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001098 --disable-netmap) netmap="no"
1099 ;;
1100 --enable-netmap) netmap="yes"
1101 ;;
aliguorie37630c2009-04-22 15:19:10 +00001102 --disable-xen) xen="no"
1103 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001104 --enable-xen) xen="yes"
1105 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001106 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1107 ;;
1108 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1109 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +00001110 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1111 ;;
1112 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1113 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001114 --disable-brlapi) brlapi="no"
1115 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001116 --enable-brlapi) brlapi="yes"
1117 ;;
balrogfb599c92008-09-28 23:49:55 +00001118 --disable-bluez) bluez="no"
1119 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001120 --enable-bluez) bluez="yes"
1121 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001122 --disable-kvm) kvm="no"
1123 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001124 --enable-kvm) kvm="yes"
1125 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001126 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001127 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001128 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001129 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001130 --disable-hvf) hvf="no"
1131 ;;
1132 --enable-hvf) hvf="yes"
1133 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001134 --disable-whpx) whpx="no"
1135 ;;
1136 --enable-whpx) whpx="yes"
1137 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001138 --disable-tcg-interpreter) tcg_interpreter="no"
1139 ;;
1140 --enable-tcg-interpreter) tcg_interpreter="yes"
1141 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001142 --disable-cap-ng) cap_ng="no"
1143 ;;
1144 --enable-cap-ng) cap_ng="yes"
1145 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001146 --disable-tcg) tcg="no"
1147 ;;
1148 --enable-tcg) tcg="yes"
1149 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001150 --disable-malloc-trim) malloc_trim="no"
1151 ;;
1152 --enable-malloc-trim) malloc_trim="yes"
1153 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001154 --disable-spice) spice="no"
1155 ;;
1156 --enable-spice) spice="yes"
1157 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001158 --disable-libiscsi) libiscsi="no"
1159 ;;
1160 --enable-libiscsi) libiscsi="yes"
1161 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001162 --disable-libnfs) libnfs="no"
1163 ;;
1164 --enable-libnfs) libnfs="yes"
1165 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001166 --enable-profiler) profiler="yes"
1167 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001168 --disable-cocoa) cocoa="no"
1169 ;;
malcc2de5c92008-06-28 19:13:06 +00001170 --enable-cocoa)
1171 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001172 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001173 ;;
pbrookcad25d62006-03-19 16:31:11 +00001174 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001175 ;;
pbrookcad25d62006-03-19 16:31:11 +00001176 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001177 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001178 --disable-user)
1179 linux_user="no" ;
1180 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001181 ;;
1182 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001183 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001184 ;;
ths831b7822007-01-18 20:06:33 +00001185 --enable-linux-user) linux_user="yes"
1186 ;;
blueswir184778502008-10-26 20:33:16 +00001187 --disable-bsd-user) bsd_user="no"
1188 ;;
1189 --enable-bsd-user) bsd_user="yes"
1190 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001191 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001192 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001193 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001194 ;;
bellard85aa5182007-11-11 20:17:03 +00001195 --enable-werror) werror="yes"
1196 ;;
1197 --disable-werror) werror="no"
1198 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001199 --enable-stack-protector) stack_protector="yes"
1200 ;;
1201 --disable-stack-protector) stack_protector="no"
1202 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001203 --disable-curses) curses="no"
1204 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001205 --enable-curses) curses="yes"
1206 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001207 --disable-curl) curl="no"
1208 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001209 --enable-curl) curl="yes"
1210 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001211 --disable-fdt) fdt="no"
1212 ;;
1213 --enable-fdt) fdt="yes"
1214 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001215 --disable-linux-aio) linux_aio="no"
1216 ;;
1217 --enable-linux-aio) linux_aio="yes"
1218 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001219 --disable-attr) attr="no"
1220 ;;
1221 --enable-attr) attr="yes"
1222 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001223 --disable-membarrier) membarrier="no"
1224 ;;
1225 --enable-membarrier) membarrier="yes"
1226 ;;
ths77755342008-11-27 15:45:16 +00001227 --disable-blobs) blobs="no"
1228 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001229 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001230 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001231 --with-coroutine=*) coroutine="$optarg"
1232 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001233 --disable-coroutine-pool) coroutine_pool="no"
1234 ;;
1235 --enable-coroutine-pool) coroutine_pool="yes"
1236 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001237 --enable-debug-stack-usage) debug_stack_usage="yes"
1238 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001239 --enable-crypto-afalg) crypto_afalg="yes"
1240 ;;
1241 --disable-crypto-afalg) crypto_afalg="no"
1242 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001243 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001244 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001245 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001246 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001247 --disable-vhost-net) vhost_net="no"
1248 ;;
1249 --enable-vhost-net) vhost_net="yes"
1250 ;;
Gonglei042cea22018-03-01 21:46:28 +08001251 --disable-vhost-crypto) vhost_crypto="no"
1252 ;;
1253 --enable-vhost-crypto)
1254 vhost_crypto="yes"
1255 if test "$mingw32" = "yes"; then
1256 error_exit "vhost-crypto isn't available on win32"
1257 fi
1258 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001259 --disable-vhost-scsi) vhost_scsi="no"
1260 ;;
1261 --enable-vhost-scsi) vhost_scsi="yes"
1262 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001263 --disable-vhost-vsock) vhost_vsock="no"
1264 ;;
1265 --enable-vhost-vsock) vhost_vsock="yes"
1266 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001267 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001268 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001269 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001270 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001271 --disable-rbd) rbd="no"
1272 ;;
1273 --enable-rbd) rbd="yes"
1274 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001275 --disable-xfsctl) xfs="no"
1276 ;;
1277 --enable-xfsctl) xfs="yes"
1278 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001279 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001280 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001281 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001282 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001283 --disable-libusb) libusb="no"
1284 ;;
1285 --enable-libusb) libusb="yes"
1286 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001287 --disable-usb-redir) usb_redir="no"
1288 ;;
1289 --enable-usb-redir) usb_redir="yes"
1290 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001291 --disable-zlib-test) zlib="no"
1292 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001293 --disable-lzo) lzo="no"
1294 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001295 --enable-lzo) lzo="yes"
1296 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001297 --disable-snappy) snappy="no"
1298 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001299 --enable-snappy) snappy="yes"
1300 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001301 --disable-bzip2) bzip2="no"
1302 ;;
1303 --enable-bzip2) bzip2="yes"
1304 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001305 --enable-guest-agent) guest_agent="yes"
1306 ;;
1307 --disable-guest-agent) guest_agent="no"
1308 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001309 --enable-guest-agent-msi) guest_agent_msi="yes"
1310 ;;
1311 --disable-guest-agent-msi) guest_agent_msi="no"
1312 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001313 --with-vss-sdk) vss_win32_sdk=""
1314 ;;
1315 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1316 ;;
1317 --without-vss-sdk) vss_win32_sdk="no"
1318 ;;
1319 --with-win-sdk) win_sdk=""
1320 ;;
1321 --with-win-sdk=*) win_sdk="$optarg"
1322 ;;
1323 --without-win-sdk) win_sdk="no"
1324 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001325 --enable-tools) want_tools="yes"
1326 ;;
1327 --disable-tools) want_tools="no"
1328 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001329 --enable-seccomp) seccomp="yes"
1330 ;;
1331 --disable-seccomp) seccomp="no"
1332 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301333 --disable-glusterfs) glusterfs="no"
1334 ;;
1335 --enable-glusterfs) glusterfs="yes"
1336 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001337 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1338 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001339 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001340 --enable-vhdx|--disable-vhdx)
1341 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1342 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001343 --enable-uuid|--disable-uuid)
1344 echo "$0: $opt is obsolete, UUID support is always built" >&2
1345 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001346 --disable-gtk) gtk="no"
1347 ;;
1348 --enable-gtk) gtk="yes"
1349 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001350 --tls-priority=*) tls_priority="$optarg"
1351 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001352 --disable-gnutls) gnutls="no"
1353 ;;
1354 --enable-gnutls) gnutls="yes"
1355 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001356 --disable-nettle) nettle="no"
1357 ;;
1358 --enable-nettle) nettle="yes"
1359 ;;
1360 --disable-gcrypt) gcrypt="no"
1361 ;;
1362 --enable-gcrypt) gcrypt="yes"
1363 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001364 --enable-rdma) rdma="yes"
1365 ;;
1366 --disable-rdma) rdma="no"
1367 ;;
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001368 --enable-pvrdma) pvrdma="yes"
1369 ;;
1370 --disable-pvrdma) pvrdma="no"
1371 ;;
Daniel P. Berrange528de902013-02-25 15:20:44 +00001372 --with-gtkabi=*) gtkabi="$optarg"
1373 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001374 --disable-vte) vte="no"
1375 ;;
1376 --enable-vte) vte="yes"
1377 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001378 --disable-virglrenderer) virglrenderer="no"
1379 ;;
1380 --enable-virglrenderer) virglrenderer="yes"
1381 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001382 --disable-tpm) tpm="no"
1383 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001384 --enable-tpm) tpm="yes"
1385 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001386 --disable-libssh2) libssh2="no"
1387 ;;
1388 --enable-libssh2) libssh2="yes"
1389 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001390 --disable-live-block-migration) live_block_migration="no"
1391 ;;
1392 --enable-live-block-migration) live_block_migration="yes"
1393 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001394 --disable-numa) numa="no"
1395 ;;
1396 --enable-numa) numa="yes"
1397 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001398 --disable-libxml2) libxml2="no"
1399 ;;
1400 --enable-libxml2) libxml2="yes"
1401 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001402 --disable-tcmalloc) tcmalloc="no"
1403 ;;
1404 --enable-tcmalloc) tcmalloc="yes"
1405 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001406 --disable-jemalloc) jemalloc="no"
1407 ;;
1408 --enable-jemalloc) jemalloc="yes"
1409 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001410 --disable-replication) replication="no"
1411 ;;
1412 --enable-replication) replication="yes"
1413 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001414 --disable-vxhs) vxhs="no"
1415 ;;
1416 --enable-vxhs) vxhs="yes"
1417 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001418 --disable-vhost-user) vhost_user="no"
1419 ;;
1420 --enable-vhost-user)
1421 vhost_user="yes"
1422 if test "$mingw32" = "yes"; then
1423 error_exit "vhost-user isn't available on win32"
1424 fi
1425 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001426 --disable-capstone) capstone="no"
1427 ;;
1428 --enable-capstone) capstone="yes"
1429 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001430 --enable-capstone=git) capstone="git"
1431 ;;
1432 --enable-capstone=system) capstone="system"
1433 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001434 --with-git=*) git="$optarg"
1435 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001436 --enable-git-update) git_update=yes
1437 ;;
1438 --disable-git-update) git_update=no
1439 ;;
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001440 --enable-debug-mutex) debug_mutex=yes
1441 ;;
1442 --disable-debug-mutex) debug_mutex=no
1443 ;;
Junyan He17824402018-07-18 15:47:59 +08001444 --enable-libpmem) libpmem=yes
1445 ;;
1446 --disable-libpmem) libpmem=no
1447 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001448 *)
1449 echo "ERROR: unknown option $opt"
1450 echo "Try '$0 --help' for more information"
1451 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001452 ;;
bellard7d132992003-03-06 23:23:54 +00001453 esac
1454done
1455
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001456if test "$vhost_user" = ""; then
1457 if test "$mingw32" = "yes"; then
1458 vhost_user="no"
1459 else
1460 vhost_user="yes"
1461 fi
1462fi
1463
bellard40293e52008-01-31 11:32:10 +00001464case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001465 ppc)
1466 CPU_CFLAGS="-m32"
1467 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001468 cross_cc_powerpc=$cc
1469 cross_cc_cflags_powerpc=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001470 ;;
1471 ppc64)
1472 CPU_CFLAGS="-m64"
1473 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001474 cross_cc_ppc64=$cc
1475 cross_cc_cflags_ppc64=$CPU_CFLAGS
Richard Hendersone3608d62013-08-28 15:48:21 -07001476 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001477 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001478 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1479 LDFLAGS="-m32 -mv8plus $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001480 cross_cc_sparc=$cc
1481 cross_cc_cflags_sparc=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001482 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001483 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001484 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001485 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001486 cross_cc_sparc64=$cc
1487 cross_cc_cflags_sparc64=$CPU_CFLAGS
blueswir131422552007-04-16 18:27:06 +00001488 ;;
ths76d83bd2007-11-18 21:22:10 +00001489 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001490 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001491 LDFLAGS="-m31 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001492 cross_cc_s390=$cc
1493 cross_cc_cflags_s390=$CPU_CFLAGS
Richard Henderson28d7cc42010-06-04 12:14:09 -07001494 ;;
1495 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001496 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001497 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée13a5abe2018-04-13 16:15:07 +01001498 cross_cc_s390x=$cc
1499 cross_cc_cflags_s390x=$CPU_CFLAGS
ths76d83bd2007-11-18 21:22:10 +00001500 ;;
bellard40293e52008-01-31 11:32:10 +00001501 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001502 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001503 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001504 cross_cc_i386=$cc
1505 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001506 ;;
1507 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001508 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1509 # If we truly care, we should simply detect this case at
1510 # runtime and generate the fallback to serial emulation.
1511 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001512 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001513 cross_cc_x86_64=$cc
1514 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001515 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001516 x32)
1517 CPU_CFLAGS="-mx32"
1518 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001519 cross_cc_i386=$cc
Alex Bennée13a5abe2018-04-13 16:15:07 +01001520 cross_cc_cflags_i386=$CPU_CFLAGS
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001521 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001522 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001523esac
1524
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001525QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001526
Peter Maydellaffc88c2016-06-13 11:32:24 +01001527# For user-mode emulation the host arch has to be one we explicitly
1528# support, even if we're using TCI.
1529if [ "$ARCH" = "unknown" ]; then
1530 bsd_user="no"
1531 linux_user="no"
1532fi
1533
Peter Maydell60e0df22011-05-03 14:50:13 +01001534default_target_list=""
1535
Peter Maydell6e92f822013-05-20 16:16:15 +01001536mak_wilds=""
1537
1538if [ "$softmmu" = "yes" ]; then
1539 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001540fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001541if [ "$linux_user" = "yes" ]; then
1542 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001543fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001544if [ "$bsd_user" = "yes" ]; then
1545 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001546fi
1547
Peter Maydell6e92f822013-05-20 16:16:15 +01001548for config in $mak_wilds; do
1549 default_target_list="${default_target_list} $(basename "$config" .mak)"
1550done
1551
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001552# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001553trace_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 +01001554
pbrookaf5db582006-04-08 14:26:41 +00001555if test x"$show_help" = x"yes" ; then
1556cat << EOF
1557
1558Usage: configure [options]
1559Options: [defaults in brackets after descriptions]
1560
Stefan Weil08fb77e2013-12-18 22:09:39 +01001561Standard options:
1562 --help print this message
1563 --prefix=PREFIX install in PREFIX [$prefix]
1564 --interp-prefix=PREFIX where to find shared libraries, etc.
1565 use %M for cpu name [$interp_prefix]
1566 --target-list=LIST set target list (default: build everything)
1567$(echo Available targets: $default_target_list | \
1568 fold -s -w 53 | sed -e 's/^/ /')
1569
1570Advanced options (experts only):
1571 --source-path=PATH path of source code [$source_path]
1572 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1573 --cc=CC use C compiler CC [$cc]
1574 --iasl=IASL use ACPI compiler IASL [$iasl]
1575 --host-cc=CC use C compiler CC [$host_cc] for code run at
1576 build time
1577 --cxx=CXX use C++ compiler CXX [$cxx]
1578 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1579 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001580 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001581 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001582 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001583 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001584 --make=MAKE use specified make [$make]
1585 --install=INSTALL use specified install [$install]
1586 --python=PYTHON use specified python [$python]
1587 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001588 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001589 --static enable static build [$static]
1590 --mandir=PATH install man pages in PATH
1591 --datadir=PATH install firmware in PATH$confsuffix
1592 --docdir=PATH install documentation in PATH$confsuffix
1593 --bindir=PATH install binaries in PATH
1594 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001595 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001596 --sysconfdir=PATH install config in PATH$confsuffix
1597 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001598 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001599 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001600 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001601 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001602 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001603 --disable-strip disable stripping binaries
1604 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001605 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001606 --audio-drv-list=LIST set audio drivers list:
1607 Available drivers: $audio_possible_drivers
1608 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1609 --block-drv-rw-whitelist=L
1610 set block driver read-write whitelist
1611 (affects only QEMU, not qemu-img)
1612 --block-drv-ro-whitelist=L
1613 set block driver read-only whitelist
1614 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001615 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001616 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001617 --with-trace-file=NAME Full PATH,NAME of file to store traces
1618 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001619 --disable-slirp disable SLIRP userspace network connectivity
1620 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001621 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001622 --oss-lib path to OSS library
1623 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001624 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001625 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001626 --enable-gcov enable test coverage analysis with gcov
1627 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001628 --disable-blobs disable installing provided firmware blobs
1629 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1630 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001631 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001632 --enable-gprof QEMU profiling with gprof
1633 --enable-profiler profiler support
1634 --enable-xen-pv-domain-build
1635 xen pv domain builder
1636 --enable-debug-stack-usage
1637 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001638
1639Optional features, enabled with --enable-FEATURE and
1640disabled with --disable-FEATURE, default is enabled if available:
1641
1642 system all system emulation targets
1643 user supported user emulation targets
1644 linux-user all linux usermode emulation targets
1645 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001646 docs build documentation
1647 guest-agent build the QEMU Guest Agent
1648 guest-agent-msi build guest agent Windows MSI installation package
1649 pie Position Independent Executables
1650 modules modules support
1651 debug-tcg TCG debugging (default is disabled)
1652 debug-info debugging information
1653 sparse sparse checker
1654
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001655 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001656 nettle nettle cryptography support
1657 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001658 sdl SDL UI
1659 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1660 gtk gtk UI
1661 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1662 vte vte support for the gtk UI
1663 curses curses UI
1664 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001665 vnc-sasl SASL encryption for VNC server
1666 vnc-jpeg JPEG lossy compression for VNC server
1667 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001668 cocoa Cocoa UI (Mac OS X only)
1669 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001670 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001671 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001672 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001673 brlapi BrlAPI (Braile)
1674 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001675 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001676 fdt fdt device tree
1677 bluez bluez stack connectivity
1678 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001679 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001680 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001681 whpx Windows Hypervisor Platform acceleration support
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03001682 rdma Enable RDMA-based migration
1683 pvrdma Enable PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001684 vde support for vde network
1685 netmap support for netmap network
1686 linux-aio Linux AIO support
1687 cap-ng libcap-ng support
1688 attr attr and xattr support
1689 vhost-net vhost-net acceleration support
Gonglei042cea22018-03-01 21:46:28 +08001690 vhost-crypto vhost-crypto acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001691 spice spice
1692 rbd rados block device (rbd)
1693 libiscsi iscsi support
1694 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001695 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001696 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001697 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001698 usb-redir usb network redirection support
1699 lzo support of lzo compression library
1700 snappy support of snappy compression library
1701 bzip2 support of bzip2 compression library
1702 (for reading bzip2-compressed dmg images)
1703 seccomp seccomp support
1704 coroutine-pool coroutine freelist (better performance)
1705 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001706 tpm TPM support
1707 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001708 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001709 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001710 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001711 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001712 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001713 vhost-vsock virtio sockets device support
1714 opengl opengl support
1715 virglrenderer virgl rendering support
1716 xfsctl xfsctl support
1717 qom-cast-debug cast debugging support
1718 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001719 vxhs Veritas HyperScale vDisk backend support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001720 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001721 vhost-user vhost-user support
Richard Henderson8ca80762017-09-14 09:41:12 -07001722 capstone capstone disassembler support
Paolo Bonziniba59fb72018-06-13 14:23:08 +02001723 debug-mutex mutex debugging support
Junyan He17824402018-07-18 15:47:59 +08001724 libpmem libpmem support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001725
1726NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001727EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001728exit 0
pbrookaf5db582006-04-08 14:26:41 +00001729fi
1730
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001731if ! has $python; then
1732 error_exit "Python not found. Use --python=/path/to/python"
1733fi
1734
1735# Note that if the Python conditional here evaluates True we will exit
1736# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001737if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1738 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001739 "Use --python=/path/to/python to specify a supported Python."
1740fi
1741
1742# Suppress writing compiled files
1743python="$python -B"
1744
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001745# Check that the C compiler works. Doing this here before testing
1746# the host CPU ensures that we had a valid CC to autodetect the
1747# $cpu var (and we should bail right here if that's not the case).
1748# It also allows the help message to be printed without a CC.
1749write_c_skeleton;
1750if compile_object ; then
1751 : C compiler works ok
1752else
1753 error_exit "\"$cc\" either does not exist or does not work"
1754fi
1755if ! compile_prog ; then
1756 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1757fi
1758
Peter Maydell359bc952011-12-24 13:07:25 +00001759# Now we have handled --enable-tcg-interpreter and know we're not just
1760# printing the help message, bail out if the host CPU isn't supported.
1761if test "$ARCH" = "unknown"; then
1762 if test "$tcg_interpreter" = "yes" ; then
1763 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001764 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001765 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001766 fi
1767fi
1768
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001769# Consult white-list to determine whether to enable werror
1770# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001771if test -z "$werror" ; then
1772 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001773 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001774 werror="yes"
1775 else
1776 werror="no"
1777 fi
1778fi
1779
Peter Maydellfb59dab2017-03-28 14:01:52 +01001780if test "$bogus_os" = "yes"; then
1781 # Now that we know that we're not printing the help and that
1782 # the compiler works (so the results of the check_defines we used
1783 # to identify the OS are reliable), if we didn't recognize the
1784 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001785 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001786fi
1787
Paolo Bonzini8d050952010-12-23 11:43:52 +01001788gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1789gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001790gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001791gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001792gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001793gcc_flags="-Wno-string-plus-int $gcc_flags"
Gerd Hoffmann0e39c4a2018-03-09 14:59:45 +01001794gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001795# Note that we do not add -Werror to gcc_flags here, because that would
1796# enable it for all configure tests. If a configure test failed due
1797# to -Werror this would just silently disable some features,
1798# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001799
1800cc_has_warning_flag() {
1801 write_c_skeleton;
1802
Peter Maydella1d29d62012-10-27 22:19:07 +01001803 # Use the positive sense of the flag when testing for -Wno-wombat
1804 # support (gcc will happily accept the -Wno- form of unknown
1805 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001806 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1807 compile_prog "-Werror $optflag" ""
1808}
1809
1810for flag in $gcc_flags; do
1811 if cc_has_warning_flag $flag ; then
1812 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001813 fi
1814done
1815
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001816if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001817 cat > $TMPC << EOF
1818int main(int argc, char *argv[])
1819{
1820 char arr[64], *p = arr, *c = argv[0];
1821 while (*c) {
1822 *p++ = *c++;
1823 }
1824 return 0;
1825}
1826EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001827 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001828 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001829 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001830 # We need to check both a compile and a link, since some compiler
1831 # setups fail only on a .c->.o compile and some only at link time
1832 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1833 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001834 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001835 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001836 break
1837 fi
1838 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001839 if test "$stack_protector" = yes; then
1840 if test $sp_on = 0; then
1841 error_exit "Stack protector not supported"
1842 fi
1843 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001844fi
1845
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001846# Disable -Wmissing-braces on older compilers that warn even for
1847# the "universal" C zero initializer {0}.
1848cat > $TMPC << EOF
1849struct {
1850 int a[2];
1851} x = {0};
1852EOF
1853if compile_object "-Werror" "" ; then
1854 :
1855else
1856 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1857fi
1858
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001859# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1860# large functions that use global variables. The bug is in all releases of
1861# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1862# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1863cat > $TMPC << EOF
1864#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1865int main(void) { return 0; }
1866#else
1867#error No bug in this compiler.
1868#endif
1869EOF
1870if compile_prog "-Werror -fno-gcse" "" ; then
1871 TRANSLATE_OPT_CFLAGS=-fno-gcse
1872fi
1873
Avi Kivity40d64442011-11-15 20:12:17 +02001874if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001875 if test "$modules" = "yes" ; then
1876 error_exit "static and modules are mutually incompatible"
1877 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001878 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001879 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001880 else
1881 pie="no"
1882 fi
1883fi
1884
Emilio G. Cota768b7852015-04-29 13:09:02 +02001885# Unconditional check for compiler __thread support
1886 cat > $TMPC << EOF
1887static __thread int tls_var;
1888int main(void) { return tls_var; }
1889EOF
1890
1891if ! compile_prog "-Werror" "" ; then
1892 error_exit "Your compiler does not support the __thread specifier for " \
1893 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1894fi
1895
Avi Kivity40d64442011-11-15 20:12:17 +02001896if test "$pie" = ""; then
1897 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001898 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001899 ;;
1900 *)
1901 pie="no"
1902 ;;
1903 esac
1904fi
1905
1906if test "$pie" != "no" ; then
1907 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001908
1909#ifdef __linux__
1910# define THREAD __thread
1911#else
1912# define THREAD
1913#endif
1914
1915static THREAD int tls_var;
1916
1917int main(void) { return tls_var; }
1918
Avi Kivity40d64442011-11-15 20:12:17 +02001919EOF
1920 if compile_prog "-fPIE -DPIE" "-pie"; then
1921 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1922 LDFLAGS="-pie $LDFLAGS"
1923 pie="yes"
1924 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1925 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1926 fi
1927 else
1928 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001929 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001930 else
1931 echo "Disabling PIE due to missing toolchain support"
1932 pie="no"
1933 fi
1934 fi
Brad46eef332013-12-10 19:49:08 -05001935
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001936 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001937 CFLAGS_NOPIE="-fno-pie"
1938 LDFLAGS_NOPIE="-nopie"
1939 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001940fi
1941
Paolo Bonzini09dada42013-04-17 16:26:47 +02001942##########################################
1943# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1944# use i686 as default anyway, but for those that don't, an explicit
1945# specification is necessary
1946
1947if test "$cpu" = "i386"; then
1948 cat > $TMPC << EOF
1949static int sfaa(int *ptr)
1950{
1951 return __sync_fetch_and_and(ptr, 0);
1952}
1953
1954int main(void)
1955{
1956 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001957 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001958 sfaa(&val);
1959 return val;
1960}
1961EOF
1962 if ! compile_prog "" "" ; then
1963 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1964 fi
1965fi
1966
1967#########################################
bellardec530c82006-04-25 22:36:06 +00001968# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001969
bellardec530c82006-04-25 22:36:06 +00001970if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001971 if has $install; then
1972 :
1973 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001974 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1975 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1976 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001977 fi
Stefan Weil89138852016-05-16 15:10:20 +02001978 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001979 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1980 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1981 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001982 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001983 if has ar; then
1984 :
1985 else
bellardec530c82006-04-25 22:36:06 +00001986 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001987 error_exit "No path includes ar" \
1988 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001989 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001990 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001991 fi
ths5fafdf22007-09-16 21:08:06 +00001992fi
bellardec530c82006-04-25 22:36:06 +00001993
Stefan Weilafb63eb2012-09-26 22:04:38 +02001994if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001995 for target in $default_target_list; do
1996 supported_target $target 2>/dev/null && \
1997 target_list="$target_list $target"
1998 done
1999 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05002000else
Stefan Weil89138852016-05-16 15:10:20 +02002001 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02002002 for target in $target_list; do
2003 # Check that we recognised the target name; this allows a more
2004 # friendly error message than if we let it fall through.
2005 case " $default_target_list " in
2006 *" $target "*)
2007 ;;
2008 *)
2009 error_exit "Unknown target name '$target'"
2010 ;;
2011 esac
2012 supported_target $target || exit 1
2013 done
bellard5327cf42005-01-10 23:18:50 +00002014fi
Peter Maydell25b48332013-05-20 16:16:16 +01002015
Paolo Bonzinif55fe272010-05-26 16:08:17 +02002016# see if system emulation was really requested
2017case " $target_list " in
2018 *"-softmmu "*) softmmu=yes
2019 ;;
2020 *) softmmu=no
2021 ;;
2022esac
bellard5327cf42005-01-10 23:18:50 +00002023
Juan Quintela249247c2009-08-12 18:20:25 +02002024feature_not_found() {
2025 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11002026 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02002027
Peter Maydell76ad07a2013-04-08 12:11:26 +01002028 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11002029 "configure was not able to find it." \
2030 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02002031}
2032
bellard7d132992003-03-06 23:23:54 +00002033# ---
2034# big/little endian test
2035cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04002036short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2037short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2038extern int foo(short *, short *);
2039int main(int argc, char *argv[]) {
2040 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00002041}
2042EOF
2043
Mike Frysinger61cc9192013-06-30 23:30:18 -04002044if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01002045 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002046 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01002047 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04002048 bigendian="no"
2049 else
2050 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002051 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002052else
2053 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002054fi
2055
Juan Quintelab0a47e72009-08-12 18:29:49 +02002056##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002057# cocoa implies not SDL or GTK
2058# (the cocoa UI code currently assumes it is always the active UI
2059# and doesn't interact well with other UI frontend code)
2060if test "$cocoa" = "yes"; then
2061 if test "$sdl" = "yes"; then
2062 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2063 fi
2064 if test "$gtk" = "yes"; then
2065 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2066 fi
2067 gtk=no
2068 sdl=no
2069fi
2070
Eric Blake6b39b062016-10-11 10:46:23 -05002071# Some versions of Mac OS X incorrectly define SIZE_MAX
2072cat > $TMPC << EOF
2073#include <stdint.h>
2074#include <stdio.h>
2075int main(int argc, char *argv[]) {
2076 return printf("%zu", SIZE_MAX);
2077}
2078EOF
2079have_broken_size_max=no
2080if ! compile_object -Werror ; then
2081 have_broken_size_max=yes
2082fi
2083
Peter Maydella30878e2015-08-14 16:10:52 +01002084##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002085# L2TPV3 probe
2086
2087cat > $TMPC <<EOF
2088#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002089#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002090int main(void) { return sizeof(struct mmsghdr); }
2091EOF
2092if compile_prog "" "" ; then
2093 l2tpv3=yes
2094else
2095 l2tpv3=no
2096fi
2097
2098##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002099# MinGW / Mingw-w64 localtime_r/gmtime_r check
2100
2101if test "$mingw32" = "yes"; then
2102 # Some versions of MinGW / Mingw-w64 lack localtime_r
2103 # and gmtime_r entirely.
2104 #
2105 # Some versions of Mingw-w64 define a macro for
2106 # localtime_r/gmtime_r.
2107 #
2108 # Some versions of Mingw-w64 will define functions
2109 # for localtime_r/gmtime_r, but only if you have
2110 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2111 # though, unistd.h and pthread.h both define
2112 # that for you.
2113 #
2114 # So this #undef localtime_r and #include <unistd.h>
2115 # are not in fact redundant.
2116cat > $TMPC << EOF
2117#include <unistd.h>
2118#include <time.h>
2119#undef localtime_r
2120int main(void) { localtime_r(NULL, NULL); return 0; }
2121EOF
2122 if compile_prog "" "" ; then
2123 localtime_r="yes"
2124 else
2125 localtime_r="no"
2126 fi
2127fi
2128
2129##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002130# pkg-config probe
2131
2132if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002133 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002134fi
2135
2136##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002137# NPTL probe
2138
Peter Maydell24cb36a2013-07-16 18:45:00 +01002139if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002140 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002141#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002142#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002143int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002144#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2145#error bork
2146#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002147 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002148}
2149EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002150 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002151 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002152 fi
pbrookbd0c5662008-05-29 14:34:11 +00002153fi
2154
Liang Li99f2dbd2016-03-08 13:53:16 +08002155#########################################
balrogac629222008-10-11 09:56:04 +00002156# zlib check
2157
Alon Levy1ece9902011-07-26 12:30:40 +03002158if test "$zlib" != "no" ; then
2159 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00002160#include <zlib.h>
2161int main(void) { zlibVersion(); return 0; }
2162EOF
Alon Levy1ece9902011-07-26 12:30:40 +03002163 if compile_prog "" "-lz" ; then
2164 :
2165 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002166 error_exit "zlib check failed" \
2167 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03002168 fi
balrogac629222008-10-11 09:56:04 +00002169fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00002170LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00002171
2172##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002173# lzo check
2174
2175if test "$lzo" != "no" ; then
2176 cat > $TMPC << EOF
2177#include <lzo/lzo1x.h>
2178int main(void) { lzo_version(); return 0; }
2179EOF
2180 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002181 libs_softmmu="$libs_softmmu -llzo2"
2182 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002183 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002184 if test "$lzo" = "yes"; then
2185 feature_not_found "liblzo2" "Install liblzo2 devel"
2186 fi
2187 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002188 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002189fi
2190
2191##########################################
2192# snappy check
2193
2194if test "$snappy" != "no" ; then
2195 cat > $TMPC << EOF
2196#include <snappy-c.h>
2197int main(void) { snappy_max_compressed_length(4096); return 0; }
2198EOF
2199 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002200 libs_softmmu="$libs_softmmu -lsnappy"
2201 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002202 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002203 if test "$snappy" = "yes"; then
2204 feature_not_found "libsnappy" "Install libsnappy devel"
2205 fi
2206 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002207 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002208fi
2209
2210##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002211# bzip2 check
2212
2213if test "$bzip2" != "no" ; then
2214 cat > $TMPC << EOF
2215#include <bzlib.h>
2216int main(void) { BZ2_bzlibVersion(); return 0; }
2217EOF
2218 if compile_prog "" "-lbz2" ; then
2219 bzip2="yes"
2220 else
2221 if test "$bzip2" = "yes"; then
2222 feature_not_found "libbzip2" "Install libbzip2 devel"
2223 fi
2224 bzip2="no"
2225 fi
2226fi
2227
2228##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002229# libseccomp check
2230
2231if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002232 case "$cpu" in
2233 i386|x86_64)
dann frazierba060c52015-10-23 15:34:22 -06002234 libseccomp_minver="2.1.0"
Andrew Jones693e5912015-09-30 11:59:18 -04002235 ;;
James Hogan5ce43972016-04-08 14:16:34 +01002236 mips)
2237 libseccomp_minver="2.2.0"
2238 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002239 arm|aarch64)
2240 libseccomp_minver="2.2.3"
2241 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002242 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002243 libseccomp_minver="2.3.0"
2244 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002245 *)
2246 libseccomp_minver=""
2247 ;;
2248 esac
2249
2250 if test "$libseccomp_minver" != "" &&
2251 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002252 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2253 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002254 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002255 else
Andrew Jones693e5912015-09-30 11:59:18 -04002256 if test "$seccomp" = "yes" ; then
2257 if test "$libseccomp_minver" != "" ; then
2258 feature_not_found "libseccomp" \
2259 "Install libseccomp devel >= $libseccomp_minver"
2260 else
2261 feature_not_found "libseccomp" \
2262 "libseccomp is not supported for host cpu $cpu"
2263 fi
2264 fi
2265 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002266 fi
2267fi
2268##########################################
aliguorie37630c2009-04-22 15:19:10 +00002269# xen probe
2270
Juan Quintelafc321b42009-08-12 18:29:55 +02002271if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002272 # Check whether Xen library path is specified via --extra-ldflags to avoid
2273 # overriding this setting with pkg-config output. If not, try pkg-config
2274 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002275
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002276 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2277 $pkg_config --exists xencontrol ; then
2278 xen_ctrl_version="$(printf '%d%02d%02d' \
2279 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2280 xen=yes
2281 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2282 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002283 if $pkg_config --exists xentoolcore; then
2284 xen_pc="$xen_pc xentoolcore"
2285 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002286 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2287 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2288 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2289 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002290
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002291 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002292 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002293
2294 # First we test whether Xen headers and libraries are available.
2295 # If no, we are done and there is no Xen support.
2296 # If yes, more tests are run to detect the Xen version.
2297
2298 # Xen (any)
2299 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002300#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002301int main(void) {
2302 return 0;
2303}
2304EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002305 if ! compile_prog "" "$xen_libs" ; then
2306 # Xen not found
2307 if test "$xen" = "yes" ; then
2308 feature_not_found "xen" "Install xen devel"
2309 fi
2310 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002311
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002312 # Xen unstable
2313 elif
2314 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002315#undef XC_WANT_COMPAT_DEVICEMODEL_API
2316#define __XEN_TOOLS__
2317#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002318#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002319int main(void) {
2320 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002321 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002322
2323 xd = xendevicemodel_open(0, 0);
2324 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2325
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002326 xfmem = xenforeignmemory_open(0, 0);
2327 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2328
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002329 return 0;
2330}
2331EOF
2332 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2333 then
2334 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2335 xen_ctrl_version=41100
2336 xen=yes
2337 elif
2338 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002339#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2340#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002341#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002342int main(void) {
2343 xenforeignmemory_handle *xfmem;
2344
2345 xfmem = xenforeignmemory_open(0, 0);
2346 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002347 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002348
2349 return 0;
2350}
2351EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002352 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002353 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002354 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002355 xen_ctrl_version=41000
2356 xen=yes
2357 elif
2358 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002359#undef XC_WANT_COMPAT_DEVICEMODEL_API
2360#define __XEN_TOOLS__
2361#include <xendevicemodel.h>
2362int main(void) {
2363 xendevicemodel_handle *xd;
2364
2365 xd = xendevicemodel_open(0, 0);
2366 xendevicemodel_close(xd);
2367
2368 return 0;
2369}
2370EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002371 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2372 then
2373 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2374 xen_ctrl_version=40900
2375 xen=yes
2376 elif
2377 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002378/*
2379 * If we have stable libs the we don't want the libxc compat
2380 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002381 *
2382 * Also, check if xengnttab_grant_copy_segment_t is defined and
2383 * grant copy operation is implemented.
2384 */
2385#undef XC_WANT_COMPAT_EVTCHN_API
2386#undef XC_WANT_COMPAT_GNTTAB_API
2387#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2388#include <xenctrl.h>
2389#include <xenstore.h>
2390#include <xenevtchn.h>
2391#include <xengnttab.h>
2392#include <xenforeignmemory.h>
2393#include <stdint.h>
2394#include <xen/hvm/hvm_info_table.h>
2395#if !defined(HVM_MAX_VCPUS)
2396# error HVM_MAX_VCPUS not defined
2397#endif
2398int main(void) {
2399 xc_interface *xc = NULL;
2400 xenforeignmemory_handle *xfmem;
2401 xenevtchn_handle *xe;
2402 xengnttab_handle *xg;
2403 xen_domain_handle_t handle;
2404 xengnttab_grant_copy_segment_t* seg = NULL;
2405
2406 xs_daemon_open();
2407
2408 xc = xc_interface_open(0, 0, 0);
2409 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2410 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2411 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2412 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2413 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2414
2415 xfmem = xenforeignmemory_open(0, 0);
2416 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2417
2418 xe = xenevtchn_open(0, 0);
2419 xenevtchn_fd(xe);
2420
2421 xg = xengnttab_open(0, 0);
2422 xengnttab_grant_copy(xg, 0, seg);
2423
2424 return 0;
2425}
2426EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002427 compile_prog "" "$xen_libs $xen_stable_libs"
2428 then
2429 xen_ctrl_version=40800
2430 xen=yes
2431 elif
2432 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002433/*
2434 * If we have stable libs the we don't want the libxc compat
2435 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002436 */
2437#undef XC_WANT_COMPAT_EVTCHN_API
2438#undef XC_WANT_COMPAT_GNTTAB_API
2439#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2440#include <xenctrl.h>
2441#include <xenstore.h>
2442#include <xenevtchn.h>
2443#include <xengnttab.h>
2444#include <xenforeignmemory.h>
2445#include <stdint.h>
2446#include <xen/hvm/hvm_info_table.h>
2447#if !defined(HVM_MAX_VCPUS)
2448# error HVM_MAX_VCPUS not defined
2449#endif
2450int main(void) {
2451 xc_interface *xc = NULL;
2452 xenforeignmemory_handle *xfmem;
2453 xenevtchn_handle *xe;
2454 xengnttab_handle *xg;
2455 xen_domain_handle_t handle;
2456
2457 xs_daemon_open();
2458
2459 xc = xc_interface_open(0, 0, 0);
2460 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2461 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2462 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2463 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2464 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2465
2466 xfmem = xenforeignmemory_open(0, 0);
2467 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2468
2469 xe = xenevtchn_open(0, 0);
2470 xenevtchn_fd(xe);
2471
2472 xg = xengnttab_open(0, 0);
2473 xengnttab_map_grant_ref(xg, 0, 0, 0);
2474
2475 return 0;
2476}
2477EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002478 compile_prog "" "$xen_libs $xen_stable_libs"
2479 then
2480 xen_ctrl_version=40701
2481 xen=yes
2482 elif
2483 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002484#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002485#include <stdint.h>
2486int main(void) {
2487 xc_interface *xc = NULL;
2488 xen_domain_handle_t handle;
2489 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2490 return 0;
2491}
2492EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002493 compile_prog "" "$xen_libs"
2494 then
2495 xen_ctrl_version=40700
2496 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002497
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002498 # Xen 4.6
2499 elif
2500 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002501#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002502#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002503#include <stdint.h>
2504#include <xen/hvm/hvm_info_table.h>
2505#if !defined(HVM_MAX_VCPUS)
2506# error HVM_MAX_VCPUS not defined
2507#endif
2508int main(void) {
2509 xc_interface *xc;
2510 xs_daemon_open();
2511 xc = xc_interface_open(0, 0, 0);
2512 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2513 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002514 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002515 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002516 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002517 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002518 return 0;
2519}
2520EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002521 compile_prog "" "$xen_libs"
2522 then
2523 xen_ctrl_version=40600
2524 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002525
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002526 # Xen 4.5
2527 elif
2528 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002529#include <xenctrl.h>
2530#include <xenstore.h>
2531#include <stdint.h>
2532#include <xen/hvm/hvm_info_table.h>
2533#if !defined(HVM_MAX_VCPUS)
2534# error HVM_MAX_VCPUS not defined
2535#endif
2536int main(void) {
2537 xc_interface *xc;
2538 xs_daemon_open();
2539 xc = xc_interface_open(0, 0, 0);
2540 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2541 xc_gnttab_open(NULL, 0);
2542 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2543 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002544 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2545 return 0;
2546}
2547EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002548 compile_prog "" "$xen_libs"
2549 then
2550 xen_ctrl_version=40500
2551 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002552
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002553 elif
2554 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002555#include <xenctrl.h>
2556#include <xenstore.h>
2557#include <stdint.h>
2558#include <xen/hvm/hvm_info_table.h>
2559#if !defined(HVM_MAX_VCPUS)
2560# error HVM_MAX_VCPUS not defined
2561#endif
2562int main(void) {
2563 xc_interface *xc;
2564 xs_daemon_open();
2565 xc = xc_interface_open(0, 0, 0);
2566 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2567 xc_gnttab_open(NULL, 0);
2568 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2569 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002570 return 0;
2571}
2572EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002573 compile_prog "" "$xen_libs"
2574 then
2575 xen_ctrl_version=40200
2576 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002577
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002578 else
2579 if test "$xen" = "yes" ; then
2580 feature_not_found "xen (unsupported version)" \
2581 "Install a supported xen (xen 4.2 or newer)"
2582 fi
2583 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002584 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002585
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002586 if test "$xen" = yes; then
2587 if test $xen_ctrl_version -ge 40701 ; then
2588 libs_softmmu="$xen_stable_libs $libs_softmmu"
2589 fi
2590 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002591 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002592 fi
aliguorie37630c2009-04-22 15:19:10 +00002593fi
2594
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002595if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002596 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002597 xen_pci_passthrough=yes
2598 else
2599 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002600 error_exit "User requested feature Xen PCI Passthrough" \
2601 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002602 fi
2603 xen_pci_passthrough=no
2604 fi
2605fi
2606
Ian Campbell64a7ad62016-01-15 13:23:44 +00002607if test "$xen_pv_domain_build" = "yes" &&
2608 test "$xen" != "yes"; then
2609 error_exit "User requested Xen PV domain builder support" \
2610 "which requires Xen support."
2611fi
2612
aliguorie37630c2009-04-22 15:19:10 +00002613##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002614# Windows Hypervisor Platform accelerator (WHPX) check
2615if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002616 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002617 whpx="yes"
2618 else
2619 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002620 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002621 fi
2622 whpx="no"
2623 fi
2624fi
2625
2626##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002627# Sparse probe
2628if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002629 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002630 sparse=yes
2631 else
2632 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002633 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002634 fi
2635 sparse=no
2636 fi
2637fi
2638
2639##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002640# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002641if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002642 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002643 x11_cflags=$($pkg_config --cflags x11)
2644 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002645fi
2646
2647##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002648# GTK probe
2649
2650if test "$gtk" != "no"; then
Peter Xu5a464e62018-04-09 16:23:23 +08002651 if test "$gtkabi" = ""; then
2652 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2653 # Use 2.0 as a fallback if that is available.
2654 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2655 gtkabi=3.0
2656 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2657 gtkabi=2.0
2658 else
2659 gtkabi=3.0
2660 fi
2661 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002662 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002663 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002664 if test "$gtkabi" = "3.0" ; then
2665 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002666 else
2667 gtkversion="2.18.0"
2668 fi
2669 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002670 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2671 gtk_libs=$($pkg_config --libs $gtkpackage)
2672 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002673 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002674 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002675 gtk_cflags="$gtk_cflags $x11_cflags"
2676 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002677 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002678 gtk="yes"
2679 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002680 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002681 else
2682 gtk="no"
2683 fi
2684fi
2685
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002686
2687##########################################
2688# GNUTLS probe
2689
Peter Maydell37371292015-07-24 18:28:08 +01002690gnutls_works() {
2691 # Unfortunately some distros have bad pkg-config information for gnutls
2692 # such that it claims to exist but you get a compiler error if you try
2693 # to use the options returned by --libs. Specifically, Ubuntu for --static
2694 # builds doesn't work:
2695 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2696 #
2697 # So sanity check the cflags/libs before assuming gnutls can be used.
2698 if ! $pkg_config --exists "gnutls"; then
2699 return 1
2700 fi
2701
2702 write_c_skeleton
2703 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2704}
2705
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002706gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002707gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002708if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002709 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002710 gnutls_cflags=$($pkg_config --cflags gnutls)
2711 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002712 libs_softmmu="$gnutls_libs $libs_softmmu"
2713 libs_tools="$gnutls_libs $libs_tools"
2714 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2715 gnutls="yes"
2716
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002717 # gnutls_rnd requires >= 2.11.0
2718 if $pkg_config --exists "gnutls >= 2.11.0"; then
2719 gnutls_rnd="yes"
2720 else
2721 gnutls_rnd="no"
2722 fi
2723
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002724 if $pkg_config --exists 'gnutls >= 3.0'; then
2725 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002726 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002727 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002728 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002729 *gcrypt*)
2730 gnutls_gcrypt=yes
2731 gnutls_nettle=no
2732 ;;
2733 *nettle*)
2734 gnutls_gcrypt=no
2735 gnutls_nettle=yes
2736 ;;
2737 *)
2738 gnutls_gcrypt=yes
2739 gnutls_nettle=no
2740 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002741 esac
2742 else
2743 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002744 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002745 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002746 elif test "$gnutls" = "yes"; then
2747 feature_not_found "gnutls" "Install gnutls devel"
2748 else
2749 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002750 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002751 fi
2752else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002753 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002754fi
2755
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002756
2757# If user didn't give a --disable/enable-gcrypt flag,
2758# then mark as disabled if user requested nettle
2759# explicitly, or if gnutls links to nettle
2760if test -z "$gcrypt"
2761then
2762 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2763 then
2764 gcrypt="no"
2765 fi
2766fi
2767
2768# If user didn't give a --disable/enable-nettle flag,
2769# then mark as disabled if user requested gcrypt
2770# explicitly, or if gnutls links to gcrypt
2771if test -z "$nettle"
2772then
2773 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2774 then
2775 nettle="no"
2776 fi
2777fi
2778
2779has_libgcrypt_config() {
2780 if ! has "libgcrypt-config"
2781 then
2782 return 1
2783 fi
2784
2785 if test -n "$cross_prefix"
2786 then
Stefan Weil89138852016-05-16 15:10:20 +02002787 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002788 if test "$host-" != $cross_prefix
2789 then
2790 return 1
2791 fi
2792 fi
2793
2794 return 0
2795}
2796
2797if test "$gcrypt" != "no"; then
2798 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002799 gcrypt_cflags=$(libgcrypt-config --cflags)
2800 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002801 # Debian has remove -lgpg-error from libgcrypt-config
2802 # as it "spreads unnecessary dependencies" which in
2803 # turn breaks static builds...
2804 if test "$static" = "yes"
2805 then
2806 gcrypt_libs="$gcrypt_libs -lgpg-error"
2807 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002808 libs_softmmu="$gcrypt_libs $libs_softmmu"
2809 libs_tools="$gcrypt_libs $libs_tools"
2810 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002811 gcrypt="yes"
2812 if test -z "$nettle"; then
2813 nettle="no"
2814 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002815
2816 cat > $TMPC << EOF
2817#include <gcrypt.h>
2818int main(void) {
2819 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2820 GCRY_MD_SHA256,
2821 NULL, 0, 0, 0, NULL);
2822 return 0;
2823}
2824EOF
2825 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2826 gcrypt_kdf=yes
2827 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002828
2829 cat > $TMPC << EOF
2830#include <gcrypt.h>
2831int main(void) {
2832 gcry_mac_hd_t handle;
2833 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2834 GCRY_MAC_FLAG_SECURE, NULL);
2835 return 0;
2836}
2837EOF
2838 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2839 gcrypt_hmac=yes
2840 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002841 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002842 if test "$gcrypt" = "yes"; then
2843 feature_not_found "gcrypt" "Install gcrypt devel"
2844 else
2845 gcrypt="no"
2846 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002847 fi
2848fi
2849
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002850
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002851if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002852 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002853 nettle_cflags=$($pkg_config --cflags nettle)
2854 nettle_libs=$($pkg_config --libs nettle)
2855 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002856 libs_softmmu="$nettle_libs $libs_softmmu"
2857 libs_tools="$nettle_libs $libs_tools"
2858 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002859 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002860
2861 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002862#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002863#include <nettle/pbkdf2.h>
2864int main(void) {
2865 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2866 return 0;
2867}
2868EOF
2869 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2870 nettle_kdf=yes
2871 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002872 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002873 if test "$nettle" = "yes"; then
2874 feature_not_found "nettle" "Install nettle devel"
2875 else
2876 nettle="no"
2877 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002878 fi
2879fi
2880
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002881if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2882then
2883 error_exit "Only one of gcrypt & nettle can be enabled"
2884fi
2885
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002886##########################################
2887# libtasn1 - only for the TLS creds/session test suite
2888
2889tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002890tasn1_cflags=""
2891tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002892if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002893 tasn1_cflags=$($pkg_config --cflags libtasn1)
2894 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002895else
2896 tasn1=no
2897fi
2898
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002899
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002900##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002901# getifaddrs (for tests/test-io-channel-socket )
2902
2903have_ifaddrs_h=yes
2904if ! check_include "ifaddrs.h" ; then
2905 have_ifaddrs_h=no
2906fi
2907
2908##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002909# VTE probe
2910
2911if test "$vte" != "no"; then
2912 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002913 vteminversion="0.32.0"
2914 if $pkg_config --exists "vte-2.91"; then
2915 vtepackage="vte-2.91"
2916 else
2917 vtepackage="vte-2.90"
2918 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002919 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002920 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002921 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002922 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002923 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002924 vte_cflags=$($pkg_config --cflags $vtepackage)
2925 vte_libs=$($pkg_config --libs $vtepackage)
2926 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002927 vte="yes"
2928 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002929 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002930 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002931 else
2932 feature_not_found "vte" "Install libvte devel"
2933 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002934 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002935 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002936 fi
2937fi
2938
2939##########################################
bellard11d9f692004-04-02 20:55:59 +00002940# SDL probe
2941
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002942# Look for sdl configuration program (pkg-config or sdl-config). Try
2943# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002944
Peter Xuc6093a02018-04-10 13:40:34 +08002945sdl_probe ()
2946{
2947 sdl_too_old=no
2948 if test "$sdlabi" = ""; then
2949 if $pkg_config --exists "sdl2"; then
2950 sdlabi=2.0
2951 elif $pkg_config --exists "sdl"; then
2952 sdlabi=1.2
2953 else
2954 sdlabi=2.0
2955 fi
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002956 fi
bellard11d9f692004-04-02 20:55:59 +00002957
Peter Xuc6093a02018-04-10 13:40:34 +08002958 if test $sdlabi = "2.0"; then
2959 sdl_config=$sdl2_config
2960 sdlname=sdl2
2961 sdlconfigname=sdl2_config
2962 elif test $sdlabi = "1.2"; then
2963 sdlname=sdl
2964 sdlconfigname=sdl_config
2965 else
2966 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2967 fi
2968
2969 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2970 sdl_config=$sdlconfigname
2971 fi
2972
2973 if $pkg_config $sdlname --exists; then
2974 sdlconfig="$pkg_config $sdlname"
2975 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2976 elif has ${sdl_config}; then
2977 sdlconfig="$sdl_config"
2978 sdlversion=$($sdlconfig --version)
2979 else
2980 if test "$sdl" = "yes" ; then
2981 feature_not_found "sdl" "Install SDL2-devel"
2982 fi
2983 sdl=no
2984 # no need to do the rest
2985 return
2986 fi
2987 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2988 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2989 fi
2990
Juan Quintelaac119f92009-07-27 16:13:15 +02002991 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002992#include <SDL.h>
2993#undef main /* We don't want SDL to override our main() */
2994int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2995EOF
Stefan Weil89138852016-05-16 15:10:20 +02002996 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002997 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002998 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002999 if $pkg_config $sdlname --exists; then
3000 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
3001 else
3002 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3003 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003004 else
Stefan Weil89138852016-05-16 15:10:20 +02003005 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003006 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003007 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02003008 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003009 sdl_too_old=yes
3010 else
Peter Maydella30878e2015-08-14 16:10:52 +01003011 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02003012 fi
aliguoricd01b4a2008-08-21 19:25:45 +00003013
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003014 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02003015 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003016 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003017 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3018 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003019 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003020 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003021 :
3022 else
3023 sdl=no
3024 fi
3025 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003026 else # sdl not found
3027 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003028 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003029 fi
3030 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003031 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003032}
3033
3034if test "$sdl" != "no" ; then
3035 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003036fi
bellard11d9f692004-04-02 20:55:59 +00003037
aliguori5368a422009-03-03 17:37:21 +00003038if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003039 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003040#include <SDL.h>
3041#if defined(SDL_VIDEO_DRIVER_X11)
3042#include <X11/XKBlib.h>
3043#else
3044#error No x11 support
3045#endif
3046int main(void) { return 0; }
3047EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003048 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003049 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003050 sdl_cflags="$sdl_cflags $x11_cflags"
3051 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003052 fi
aliguori5368a422009-03-03 17:37:21 +00003053fi
3054
ths8f28f3f2007-01-05 21:25:54 +00003055##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003056# RDMA needs OpenFabrics libraries
3057if test "$rdma" != "no" ; then
3058 cat > $TMPC <<EOF
3059#include <rdma/rdma_cma.h>
3060int main(void) { return 0; }
3061EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003062 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003063 if compile_prog "" "$rdma_libs" ; then
3064 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003065 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003066 else
3067 if test "$rdma" = "yes" ; then
3068 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003069 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003070 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003071 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003072 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3073 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3074 fi
3075 rdma="no"
3076 fi
3077fi
3078
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003079##########################################
3080# PVRDMA detection
3081
3082cat > $TMPC <<EOF &&
3083#include <sys/mman.h>
3084
3085int
3086main(void)
3087{
3088 char buf = 0;
3089 void *addr = &buf;
3090 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3091
3092 return 0;
3093}
3094EOF
3095
3096if test "$rdma" = "yes" ; then
3097 case "$pvrdma" in
3098 "")
3099 if compile_prog "" ""; then
3100 pvrdma="yes"
3101 else
3102 pvrdma="no"
3103 fi
3104 ;;
3105 "yes")
3106 if ! compile_prog "" ""; then
3107 error_exit "PVRDMA is not supported since mremap is not implemented"
3108 fi
3109 pvrdma="yes"
3110 ;;
3111 "no")
3112 pvrdma="no"
3113 ;;
3114 esac
3115else
3116 if test "$pvrdma" = "yes" ; then
3117 error_exit "PVRDMA requires rdma suppport"
3118 fi
3119 pvrdma="no"
3120fi
ths8d5d2d42007-08-25 01:37:51 +00003121
3122##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003123# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003124if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003125 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003126#include <sasl/sasl.h>
3127#include <stdio.h>
3128int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3129EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003130 # Assuming Cyrus-SASL installed in /usr prefix
3131 vnc_sasl_cflags=""
3132 vnc_sasl_libs="-lsasl2"
3133 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3134 vnc_sasl=yes
3135 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003136 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003137 else
3138 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003139 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003140 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003141 vnc_sasl=no
3142 fi
aliguori2f9606b2009-03-06 20:27:28 +00003143fi
3144
3145##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003146# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003147if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003148cat > $TMPC <<EOF
3149#include <stdio.h>
3150#include <jpeglib.h>
3151int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3152EOF
3153 vnc_jpeg_cflags=""
3154 vnc_jpeg_libs="-ljpeg"
3155 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3156 vnc_jpeg=yes
3157 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003158 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003159 else
3160 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003161 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003162 fi
3163 vnc_jpeg=no
3164 fi
3165fi
3166
3167##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003168# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003169if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003170cat > $TMPC <<EOF
3171//#include <stdio.h>
3172#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003173#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003174int main(void) {
3175 png_structp png_ptr;
3176 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003177 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003178}
3179EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003180 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003181 vnc_png_cflags=$($pkg_config libpng --cflags)
3182 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003183 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003184 vnc_png_cflags=""
3185 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003186 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003187 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3188 vnc_png=yes
3189 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003190 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003191 else
3192 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003193 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003194 fi
3195 vnc_png=no
3196 fi
3197fi
3198
3199##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003200# xkbcommon probe
3201if test "$xkbcommon" != "no" ; then
3202 if $pkg_config xkbcommon --exists; then
3203 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3204 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3205 xkbcommon=yes
3206 else
3207 if test "$xkbcommon" = "yes" ; then
3208 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3209 fi
3210 xkbcommon=no
3211 fi
3212fi
3213
3214##########################################
aliguori76655d62009-03-06 20:27:37 +00003215# fnmatch() probe, used for ACL routines
3216fnmatch="no"
3217cat > $TMPC << EOF
3218#include <fnmatch.h>
3219int main(void)
3220{
3221 fnmatch("foo", "foo", 0);
3222 return 0;
3223}
3224EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003225if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003226 fnmatch="yes"
3227fi
3228
3229##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003230# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003231if test "$xfs" != "no" ; then
3232 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003233#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003234#include <xfs/xfs.h>
3235int main(void)
3236{
3237 xfsctl(NULL, 0, 0, NULL);
3238 return 0;
3239}
3240EOF
3241 if compile_prog "" "" ; then
3242 xfs="yes"
3243 else
3244 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003245 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003246 fi
3247 xfs=no
3248 fi
3249fi
3250
3251##########################################
ths8a16d272008-07-19 09:56:24 +00003252# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003253if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003254 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003255 cat > $TMPC << EOF
3256#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003257int main(void)
3258{
3259 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003260 char s[] = "";
3261 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003262 return 0;
3263}
ths8a16d272008-07-19 09:56:24 +00003264EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003265 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003266 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003267 else
3268 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003269 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003270 fi
3271 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003272 fi
ths8a16d272008-07-19 09:56:24 +00003273fi
3274
3275##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003276# netmap support probe
3277# Apart from looking for netmap headers, we make sure that the host API version
3278# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3279# a minor/major version number. Minor new features will be marked with values up
3280# to 15, and if something happens that requires a change to the backend we will
3281# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003282if test "$netmap" != "no" ; then
3283 cat > $TMPC << EOF
3284#include <inttypes.h>
3285#include <net/if.h>
3286#include <net/netmap.h>
3287#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003288#if (NETMAP_API < 11) || (NETMAP_API > 15)
3289#error
3290#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003291int main(void) { return 0; }
3292EOF
3293 if compile_prog "" "" ; then
3294 netmap=yes
3295 else
3296 if test "$netmap" = "yes" ; then
3297 feature_not_found "netmap"
3298 fi
3299 netmap=no
3300 fi
3301fi
3302
3303##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003304# libcap-ng library probe
3305if test "$cap_ng" != "no" ; then
3306 cap_libs="-lcap-ng"
3307 cat > $TMPC << EOF
3308#include <cap-ng.h>
3309int main(void)
3310{
3311 capng_capability_to_name(CAPNG_EFFECTIVE);
3312 return 0;
3313}
3314EOF
3315 if compile_prog "" "$cap_libs" ; then
3316 cap_ng=yes
3317 libs_tools="$cap_libs $libs_tools"
3318 else
3319 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003320 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003321 fi
3322 cap_ng=no
3323 fi
3324fi
3325
3326##########################################
malcc2de5c92008-06-28 19:13:06 +00003327# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003328
malcc2de5c92008-06-28 19:13:06 +00003329audio_drv_probe()
3330{
3331 drv=$1
3332 hdr=$2
3333 lib=$3
3334 exp=$4
3335 cfl=$5
3336 cat > $TMPC << EOF
3337#include <$hdr>
3338int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003339EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003340 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003341 :
3342 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003343 error_exit "$drv check failed" \
3344 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003345 fi
3346}
3347
Stefan Weil89138852016-05-16 15:10:20 +02003348audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003349for drv in $audio_drv_list; do
3350 case $drv in
3351 alsa)
3352 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003353 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003354 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003355 ;;
3356
malcb8e59f12008-07-02 21:03:08 +00003357 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003358 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3359 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003360 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003361 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003362 ;;
3363
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003364 sdl)
3365 if test "$sdl" = "no"; then
3366 error_exit "sdl not found or disabled, can not use sdl audio driver"
3367 fi
3368 ;;
3369
Juan Quintela997e6902009-08-03 14:46:29 +02003370 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003371 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003372 ;;
3373
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003374 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003375 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003376 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003377 ;;
3378
3379 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003380 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003381 ;;
3382
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003383 wav)
3384 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003385 ;;
3386
malce4c63a62008-07-19 16:15:16 +00003387 *)
malc1c9b2a52008-07-19 16:57:30 +00003388 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003389 error_exit "Unknown driver '$drv' selected" \
3390 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003391 }
3392 ;;
malcc2de5c92008-06-28 19:13:06 +00003393 esac
3394done
ths8f28f3f2007-01-05 21:25:54 +00003395
balrog4d3b6f62008-02-10 16:33:14 +00003396##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003397# BrlAPI probe
3398
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003399if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003400 brlapi_libs="-lbrlapi"
3401 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003402#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003403#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003404int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3405EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003406 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003407 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003408 else
3409 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003410 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003411 fi
3412 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003413 fi
3414fi
aurel322e4d9fb2008-04-08 06:01:02 +00003415
3416##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003417# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003418if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003419 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003420 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3421 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003422 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003423 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003424 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003425 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003426 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003427 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003428#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003429#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003430#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003431int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003432 wchar_t wch = L'w';
3433 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003434 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003435 addwstr(L"wide chars\n");
3436 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003437 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003438 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003439}
balrog4d3b6f62008-02-10 16:33:14 +00003440EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003441 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003442 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003443 # Make sure we get the wide character prototypes
3444 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003445 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003446 for curses_lib in $curses_lib_list; do
3447 unset IFS
3448 if compile_prog "$curses_inc" "$curses_lib" ; then
3449 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003450 break
3451 fi
3452 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003453 if test "$curses_found" = yes ; then
3454 break
3455 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003456 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003457 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003458 if test "$curses_found" = "yes" ; then
3459 curses=yes
3460 else
3461 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003462 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003463 fi
3464 curses=no
3465 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003466fi
balrog4d3b6f62008-02-10 16:33:14 +00003467
blueswir1414f0da2008-08-15 18:20:52 +00003468##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003469# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003470if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003471 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003472 curlconfig="$pkg_config libcurl"
3473 else
3474 curlconfig=curl-config
3475 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003476 cat > $TMPC << EOF
3477#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003478int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003479EOF
Stefan Weil89138852016-05-16 15:10:20 +02003480 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3481 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003482 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003483 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003484 else
3485 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003486 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003487 fi
3488 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003489 fi
3490fi # test "$curl"
3491
3492##########################################
balrogfb599c92008-09-28 23:49:55 +00003493# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003494if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003495 cat > $TMPC << EOF
3496#include <bluetooth/bluetooth.h>
3497int main(void) { return bt_error(0); }
3498EOF
Stefan Weil89138852016-05-16 15:10:20 +02003499 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3500 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003501 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003502 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003503 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003504 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003505 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003506 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003507 fi
balroge820e3f2008-09-30 02:27:44 +00003508 bluez="no"
3509 fi
balrogfb599c92008-09-28 23:49:55 +00003510fi
3511
3512##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003513# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003514
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003515glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003516glib_modules=gthread-2.0
3517if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003518 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003519fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003520
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003521# This workaround is required due to a bug in pkg-config file for glib as it
3522# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3523
3524if test "$static" = yes -a "$mingw32" = yes; then
3525 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3526fi
3527
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003528for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003529 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003530 glib_cflags=$($pkg_config --cflags $i)
3531 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003532 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003533 LIBS="$glib_libs $LIBS"
3534 libs_qga="$glib_libs $libs_qga"
3535 else
3536 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3537 fi
3538done
3539
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003540# Sanity check that the current size_t matches the
3541# size that glib thinks it should be. This catches
3542# problems on multi-arch where people try to build
3543# 32-bit QEMU while pointing at 64-bit glib headers
3544cat > $TMPC <<EOF
3545#include <glib.h>
3546#include <unistd.h>
3547
3548#define QEMU_BUILD_BUG_ON(x) \
3549 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3550
3551int main(void) {
3552 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3553 return 0;
3554}
3555EOF
3556
Stefan Weil5919e032016-04-28 23:33:41 +02003557if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003558 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3559 "You probably need to set PKG_CONFIG_LIBDIR"\
3560 "to point to the right pkg-config files for your"\
3561 "build target"
3562fi
3563
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003564# g_test_trap_subprocess added in 2.38. Used by some tests.
3565glib_subprocess=yes
Marc-André Lureaua0492232017-01-04 21:57:22 +01003566if ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003567 glib_subprocess=no
3568fi
3569
John Snowbbbf2e02015-03-25 18:57:38 -04003570# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3571cat > $TMPC << EOF
3572#include <glib.h>
3573int main(void) { return 0; }
3574EOF
3575if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3576 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3577 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3578 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3579 fi
3580fi
3581
Fam Zhenge26110c2014-02-10 14:48:57 +08003582##########################################
3583# SHA command probe for modules
3584if test "$modules" = yes; then
3585 shacmd_probe="sha1sum sha1 shasum"
3586 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003587 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003588 shacmd="$c"
3589 break
3590 fi
3591 done
3592 if test "$shacmd" = ""; then
3593 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3594 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003595fi
3596
3597##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003598# pixman support probe
3599
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003600if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003601 pixman_cflags=
3602 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003603elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003604 pixman_cflags=$($pkg_config --cflags pixman-1)
3605 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003606else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003607 error_exit "pixman >= 0.21.8 not present." \
3608 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003609fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003610
3611##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003612# libmpathpersist probe
3613
3614if test "$mpath" != "no" ; then
3615 cat > $TMPC <<EOF
3616#include <libudev.h>
3617#include <mpath_persist.h>
3618unsigned mpath_mx_alloc_len = 1024;
3619int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003620static struct config *multipath_conf;
3621extern struct udev *udev;
3622extern struct config *get_multipath_config(void);
3623extern void put_multipath_config(struct config *conf);
3624struct udev *udev;
3625struct config *get_multipath_config(void) { return multipath_conf; }
3626void put_multipath_config(struct config *conf) { }
3627
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003628int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003629 udev = udev_new();
3630 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003631 return 0;
3632}
3633EOF
3634 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3635 mpathpersist=yes
3636 else
3637 mpathpersist=no
3638 fi
3639else
3640 mpathpersist=no
3641fi
3642
3643##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303644# libcap probe
3645
3646if test "$cap" != "no" ; then
3647 cat > $TMPC <<EOF
3648#include <stdio.h>
3649#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003650int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303651EOF
3652 if compile_prog "" "-lcap" ; then
3653 cap=yes
3654 else
3655 cap=no
3656 fi
3657fi
3658
3659##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003660# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003661PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003662
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003663pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003664cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003665#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003666static void *f(void *p) { return NULL; }
3667int main(void) {
3668 pthread_t thread;
3669 pthread_create(&thread, 0, f, 0);
3670 return 0;
3671}
blueswir1414f0da2008-08-15 18:20:52 +00003672EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003673if compile_prog "" "" ; then
3674 pthread=yes
3675else
3676 for pthread_lib in $PTHREADLIBS_LIST; do
3677 if compile_prog "" "$pthread_lib" ; then
3678 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003679 found=no
3680 for lib_entry in $LIBS; do
3681 if test "$lib_entry" = "$pthread_lib"; then
3682 found=yes
3683 break
3684 fi
3685 done
3686 if test "$found" = "no"; then
3687 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003688 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003689 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003690 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003691 break
3692 fi
3693 done
3694fi
blueswir1414f0da2008-08-15 18:20:52 +00003695
Anthony Liguori4617e592009-08-25 17:21:56 -05003696if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003697 error_exit "pthread check failed" \
3698 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003699fi
3700
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003701# check for pthread_setname_np
3702pthread_setname_np=no
3703cat > $TMPC << EOF
3704#include <pthread.h>
3705
3706static void *f(void *p) { return NULL; }
3707int main(void)
3708{
3709 pthread_t thread;
3710 pthread_create(&thread, 0, f, 0);
3711 pthread_setname_np(thread, "QEMU");
3712 return 0;
3713}
3714EOF
3715if compile_prog "" "$pthread_lib" ; then
3716 pthread_setname_np=yes
3717fi
3718
aliguoribf9298b2008-12-05 20:05:26 +00003719##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003720# rbd probe
3721if test "$rbd" != "no" ; then
3722 cat > $TMPC <<EOF
3723#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003724#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003725int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003726 rados_t cluster;
3727 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003728 return 0;
3729}
3730EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003731 rbd_libs="-lrbd -lrados"
3732 if compile_prog "" "$rbd_libs" ; then
3733 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003734 else
3735 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003736 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003737 fi
3738 rbd=no
3739 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003740fi
3741
3742##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003743# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003744min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003745if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003746 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003747 libssh2_cflags=$($pkg_config libssh2 --cflags)
3748 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003749 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003750 else
3751 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003752 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003753 fi
3754 libssh2=no
3755 fi
3756fi
3757
3758##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003759# libssh2_sftp_fsync probe
3760
3761if test "$libssh2" = "yes"; then
3762 cat > $TMPC <<EOF
3763#include <stdio.h>
3764#include <libssh2.h>
3765#include <libssh2_sftp.h>
3766int main(void) {
3767 LIBSSH2_SESSION *session;
3768 LIBSSH2_SFTP *sftp;
3769 LIBSSH2_SFTP_HANDLE *sftp_handle;
3770 session = libssh2_session_init ();
3771 sftp = libssh2_sftp_init (session);
3772 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3773 libssh2_sftp_fsync (sftp_handle);
3774 return 0;
3775}
3776EOF
3777 # libssh2_cflags/libssh2_libs defined in previous test.
3778 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3779 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3780 fi
3781fi
3782
3783##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003784# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003785
3786if test "$linux_aio" != "no" ; then
3787 cat > $TMPC <<EOF
3788#include <libaio.h>
3789#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003790#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003791int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3792EOF
3793 if compile_prog "" "-laio" ; then
3794 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003795 else
3796 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003797 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003798 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003799 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003800 fi
3801fi
3802
3803##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003804# TPM passthrough is only on x86 Linux
3805
3806if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3807 tpm_passthrough=$tpm
3808else
3809 tpm_passthrough=no
3810fi
3811
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003812# TPM emulator is for all posix systems
3813if test "$mingw32" != "yes"; then
3814 tpm_emulator=$tpm
3815else
3816 tpm_emulator=no
3817fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003818##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003819# attr probe
3820
3821if test "$attr" != "no" ; then
3822 cat > $TMPC <<EOF
3823#include <stdio.h>
3824#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003825#ifdef CONFIG_LIBATTR
3826#include <attr/xattr.h>
3827#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003828#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003829#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003830int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3831EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003832 if compile_prog "" "" ; then
3833 attr=yes
3834 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003835 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003836 attr=yes
3837 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003838 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003839 else
3840 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003841 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003842 fi
3843 attr=no
3844 fi
3845fi
3846
3847##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003848# iovec probe
3849cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003850#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003851#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003852#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003853int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003854EOF
3855iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003856if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003857 iovec=yes
3858fi
3859
aurel32f652e6a2008-12-16 10:43:48 +00003860##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003861# preadv probe
3862cat > $TMPC <<EOF
3863#include <sys/types.h>
3864#include <sys/uio.h>
3865#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003866int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003867EOF
3868preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003869if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003870 preadv=yes
3871fi
3872
3873##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003874# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003875# fdt support is mandatory for at least some target architectures,
3876# so insist on it if we're building those system emulators.
3877fdt_required=no
3878for target in $target_list; do
3879 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003880 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003881 fdt_required=yes
3882 ;;
3883 esac
3884done
3885
3886if test "$fdt_required" = "yes"; then
3887 if test "$fdt" = "no"; then
3888 error_exit "fdt disabled but some requested targets require it." \
3889 "You can turn off fdt only if you also disable all the system emulation" \
3890 "targets which need it (by specifying a cut down --target-list)."
3891 fi
3892 fdt=yes
3893fi
3894
Juan Quintela2df87df2009-08-12 18:29:54 +02003895if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003896 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003897 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003898 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003899 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003900#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003901#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003902int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003903EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003904 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003905 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003906 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003907 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003908 # have GIT checkout, so activate dtc submodule
3909 if test -e "${source_path}/.git" ; then
3910 git_submodules="${git_submodules} dtc"
3911 fi
3912 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003913 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003914 mkdir -p dtc
3915 if [ "$pwd_is_source_path" != "y" ] ; then
3916 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3917 symlink "$source_path/dtc/scripts" "dtc/scripts"
3918 fi
3919 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003920 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3921 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003922 elif test "$fdt" = "yes" ; then
3923 # Not a git build & no libfdt found, prompt for system install
3924 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3925 "Please install the DTC (libfdt) devel package"
3926 else
3927 # don't have and don't want
3928 fdt_libs=
3929 fdt=no
3930 fi
aurel32f652e6a2008-12-16 10:43:48 +00003931 fi
3932fi
3933
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003934libs_softmmu="$libs_softmmu $fdt_libs"
3935
Michael Walle20ff0752011-03-07 23:32:39 +01003936##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003937# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003938
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003939if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003940 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003941 if $pkg_config $opengl_pkgs; then
3942 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3943 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003944 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003945 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3946 gtk_gl="yes"
3947 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003948 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003949 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003950 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003951 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003952 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003953 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003954 opengl_libs=""
3955 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003956 fi
3957fi
3958
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003959if test "$opengl" = "yes"; then
3960 cat > $TMPC << EOF
3961#include <epoxy/egl.h>
3962#ifndef EGL_MESA_image_dma_buf_export
3963# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3964#endif
3965int main(void) { return 0; }
3966EOF
3967 if compile_prog "" "" ; then
3968 opengl_dmabuf=yes
3969 fi
3970fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003971
Klim Kireeved279a02018-01-12 12:01:19 +03003972##########################################
3973# libxml2 probe
3974if test "$libxml2" != "no" ; then
3975 if $pkg_config --exists libxml-2.0; then
3976 libxml2="yes"
3977 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3978 libxml2_libs=$($pkg_config --libs libxml-2.0)
3979 else
3980 if test "$libxml2" = "yes"; then
3981 feature_not_found "libxml2" "Install libxml2 devel"
3982 fi
3983 libxml2="no"
3984 fi
3985fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003986
Bharata B Raoeb100392012-09-24 14:42:45 +05303987##########################################
3988# glusterfs probe
3989if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003990 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303991 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003992 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3993 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003994 if $pkg_config --atleast-version=4 glusterfs-api; then
3995 glusterfs_xlator_opt="yes"
3996 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003997 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303998 glusterfs_discard="yes"
3999 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304000 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304001 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304002 glusterfs_zerofill="yes"
4003 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304004 else
4005 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004006 feature_not_found "GlusterFS backend support" \
4007 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304008 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304009 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304010 fi
4011fi
4012
aurel3239386ac2009-04-15 19:48:17 +00004013# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004014# emulator. This is done because older glibc versions don't
4015# have syscall stubs for these implemented. In that case we
4016# don't provide them even if kernel supports them.
4017#
4018inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004019cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004020#include <sys/inotify.h>
4021
4022int
4023main(void)
4024{
4025 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004026 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004027}
4028EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004029if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004030 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004031fi
4032
Riku Voipioc05c7a72010-03-26 15:25:11 +00004033inotify1=no
4034cat > $TMPC << EOF
4035#include <sys/inotify.h>
4036
4037int
4038main(void)
4039{
4040 /* try to start inotify */
4041 return inotify_init1(0);
4042}
4043EOF
4044if compile_prog "" "" ; then
4045 inotify1=yes
4046fi
4047
Riku Voipio099d6b02009-05-05 12:10:04 +03004048# check if pipe2 is there
4049pipe2=no
4050cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004051#include <unistd.h>
4052#include <fcntl.h>
4053
4054int main(void)
4055{
4056 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004057 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004058}
4059EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004060if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004061 pipe2=yes
4062fi
4063
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004064# check if accept4 is there
4065accept4=no
4066cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004067#include <sys/socket.h>
4068#include <stddef.h>
4069
4070int main(void)
4071{
4072 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4073 return 0;
4074}
4075EOF
4076if compile_prog "" "" ; then
4077 accept4=yes
4078fi
4079
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304080# check if tee/splice is there. vmsplice was added same time.
4081splice=no
4082cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304083#include <unistd.h>
4084#include <fcntl.h>
4085#include <limits.h>
4086
4087int main(void)
4088{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004089 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304090 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4091 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4092 return 0;
4093}
4094EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004095if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304096 splice=yes
4097fi
4098
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004099##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004100# libnuma probe
4101
4102if test "$numa" != "no" ; then
4103 cat > $TMPC << EOF
4104#include <numa.h>
4105int main(void) { return numa_available(); }
4106EOF
4107
4108 if compile_prog "" "-lnuma" ; then
4109 numa=yes
4110 libs_softmmu="-lnuma $libs_softmmu"
4111 else
4112 if test "$numa" = "yes" ; then
4113 feature_not_found "numa" "install numactl devel"
4114 fi
4115 numa=no
4116 fi
4117fi
4118
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004119if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4120 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4121 exit 1
4122fi
4123
Yang Zhong5a22ab72017-12-20 21:16:46 +08004124# Even if malloc_trim() is available, these non-libc memory allocators
4125# do not support it.
4126if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4127 if test "$malloc_trim" = "yes" ; then
4128 echo "Disabling malloc_trim with non-libc memory allocator"
4129 fi
4130 malloc_trim="no"
4131fi
4132
4133#######################################
4134# malloc_trim
4135
4136if test "$malloc_trim" != "no" ; then
4137 cat > $TMPC << EOF
4138#include <malloc.h>
4139int main(void) { malloc_trim(0); return 0; }
4140EOF
4141 if compile_prog "" "" ; then
4142 malloc_trim="yes"
4143 else
4144 malloc_trim="no"
4145 fi
4146fi
4147
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004148##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004149# tcmalloc probe
4150
4151if test "$tcmalloc" = "yes" ; then
4152 cat > $TMPC << EOF
4153#include <stdlib.h>
4154int main(void) { malloc(1); return 0; }
4155EOF
4156
4157 if compile_prog "" "-ltcmalloc" ; then
4158 LIBS="-ltcmalloc $LIBS"
4159 else
4160 feature_not_found "tcmalloc" "install gperftools devel"
4161 fi
4162fi
4163
4164##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004165# jemalloc probe
4166
4167if test "$jemalloc" = "yes" ; then
4168 cat > $TMPC << EOF
4169#include <stdlib.h>
4170int main(void) { malloc(1); return 0; }
4171EOF
4172
4173 if compile_prog "" "-ljemalloc" ; then
4174 LIBS="-ljemalloc $LIBS"
4175 else
4176 feature_not_found "jemalloc" "install jemalloc devel"
4177 fi
4178fi
4179
4180##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004181# signalfd probe
4182signalfd="no"
4183cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004184#include <unistd.h>
4185#include <sys/syscall.h>
4186#include <signal.h>
4187int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4188EOF
4189
4190if compile_prog "" "" ; then
4191 signalfd=yes
4192fi
4193
Riku Voipioc2882b92009-08-12 15:08:24 +03004194# check if eventfd is supported
4195eventfd=no
4196cat > $TMPC << EOF
4197#include <sys/eventfd.h>
4198
4199int main(void)
4200{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004201 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004202}
4203EOF
4204if compile_prog "" "" ; then
4205 eventfd=yes
4206fi
4207
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004208# check if memfd is supported
4209memfd=no
4210cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004211#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004212
4213int main(void)
4214{
4215 return memfd_create("foo", MFD_ALLOW_SEALING);
4216}
4217EOF
4218if compile_prog "" "" ; then
4219 memfd=yes
4220fi
4221
4222
4223
Ulrich Hechtd0927932009-09-17 20:22:14 +03004224# check for fallocate
4225fallocate=no
4226cat > $TMPC << EOF
4227#include <fcntl.h>
4228
4229int main(void)
4230{
4231 fallocate(0, 0, 0, 0);
4232 return 0;
4233}
4234EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004235if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004236 fallocate=yes
4237fi
4238
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004239# check for fallocate hole punching
4240fallocate_punch_hole=no
4241cat > $TMPC << EOF
4242#include <fcntl.h>
4243#include <linux/falloc.h>
4244
4245int main(void)
4246{
4247 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4248 return 0;
4249}
4250EOF
4251if compile_prog "" "" ; then
4252 fallocate_punch_hole=yes
4253fi
4254
Denis V. Lunevb953f072015-01-30 11:42:14 +03004255# check that fallocate supports range zeroing inside the file
4256fallocate_zero_range=no
4257cat > $TMPC << EOF
4258#include <fcntl.h>
4259#include <linux/falloc.h>
4260
4261int main(void)
4262{
4263 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4264 return 0;
4265}
4266EOF
4267if compile_prog "" "" ; then
4268 fallocate_zero_range=yes
4269fi
4270
Kevin Wolfed911432014-09-29 17:12:59 +02004271# check for posix_fallocate
4272posix_fallocate=no
4273cat > $TMPC << EOF
4274#include <fcntl.h>
4275
4276int main(void)
4277{
4278 posix_fallocate(0, 0, 0);
4279 return 0;
4280}
4281EOF
4282if compile_prog "" "" ; then
4283 posix_fallocate=yes
4284fi
4285
Peter Maydellc727f472011-01-06 11:05:10 +00004286# check for sync_file_range
4287sync_file_range=no
4288cat > $TMPC << EOF
4289#include <fcntl.h>
4290
4291int main(void)
4292{
4293 sync_file_range(0, 0, 0, 0);
4294 return 0;
4295}
4296EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004297if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004298 sync_file_range=yes
4299fi
4300
Peter Maydelldace20d2011-01-10 13:11:24 +00004301# check for linux/fiemap.h and FS_IOC_FIEMAP
4302fiemap=no
4303cat > $TMPC << EOF
4304#include <sys/ioctl.h>
4305#include <linux/fs.h>
4306#include <linux/fiemap.h>
4307
4308int main(void)
4309{
4310 ioctl(0, FS_IOC_FIEMAP, 0);
4311 return 0;
4312}
4313EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004314if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004315 fiemap=yes
4316fi
4317
Ulrich Hechtd0927932009-09-17 20:22:14 +03004318# check for dup3
4319dup3=no
4320cat > $TMPC << EOF
4321#include <unistd.h>
4322
4323int main(void)
4324{
4325 dup3(0, 0, 0);
4326 return 0;
4327}
4328EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004329if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004330 dup3=yes
4331fi
4332
Alex Bligh4e0c6522013-08-21 16:02:43 +01004333# check for ppoll support
4334ppoll=no
4335cat > $TMPC << EOF
4336#include <poll.h>
4337
4338int main(void)
4339{
4340 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4341 ppoll(&pfd, 1, 0, 0);
4342 return 0;
4343}
4344EOF
4345if compile_prog "" "" ; then
4346 ppoll=yes
4347fi
4348
Alex Blighcd758dd2013-08-21 16:02:44 +01004349# check for prctl(PR_SET_TIMERSLACK , ... ) support
4350prctl_pr_set_timerslack=no
4351cat > $TMPC << EOF
4352#include <sys/prctl.h>
4353
4354int main(void)
4355{
4356 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4357 return 0;
4358}
4359EOF
4360if compile_prog "" "" ; then
4361 prctl_pr_set_timerslack=yes
4362fi
4363
Peter Maydell3b6edd12011-02-15 18:35:05 +00004364# check for epoll support
4365epoll=no
4366cat > $TMPC << EOF
4367#include <sys/epoll.h>
4368
4369int main(void)
4370{
4371 epoll_create(0);
4372 return 0;
4373}
4374EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004375if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004376 epoll=yes
4377fi
4378
Peter Maydell227f0212016-06-06 19:58:11 +01004379# epoll_create1 is a later addition
4380# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004381epoll_create1=no
4382cat > $TMPC << EOF
4383#include <sys/epoll.h>
4384
4385int main(void)
4386{
Peter Maydell19e83f62011-04-26 16:56:40 +01004387 /* Note that we use epoll_create1 as a value, not as
4388 * a function being called. This is necessary so that on
4389 * old SPARC glibc versions where the function was present in
4390 * the library but not declared in the header file we will
4391 * fail the configure check. (Otherwise we will get a compiler
4392 * warning but not an error, and will proceed to fail the
4393 * qemu compile where we compile with -Werror.)
4394 */
Blue Swirlc075a722012-08-09 20:21:25 +00004395 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004396}
4397EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004398if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004399 epoll_create1=yes
4400fi
4401
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004402# check for sendfile support
4403sendfile=no
4404cat > $TMPC << EOF
4405#include <sys/sendfile.h>
4406
4407int main(void)
4408{
4409 return sendfile(0, 0, 0, 0);
4410}
4411EOF
4412if compile_prog "" "" ; then
4413 sendfile=yes
4414fi
4415
Riku Voipio51834342014-06-22 11:25:42 +01004416# check for timerfd support (glibc 2.8 and newer)
4417timerfd=no
4418cat > $TMPC << EOF
4419#include <sys/timerfd.h>
4420
4421int main(void)
4422{
4423 return(timerfd_create(CLOCK_REALTIME, 0));
4424}
4425EOF
4426if compile_prog "" "" ; then
4427 timerfd=yes
4428fi
4429
Riku Voipio9af5c902014-08-12 15:58:57 +03004430# check for setns and unshare support
4431setns=no
4432cat > $TMPC << EOF
4433#include <sched.h>
4434
4435int main(void)
4436{
4437 int ret;
4438 ret = setns(0, 0);
4439 ret = unshare(0);
4440 return ret;
4441}
4442EOF
4443if compile_prog "" "" ; then
4444 setns=yes
4445fi
4446
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004447# clock_adjtime probe
4448clock_adjtime=no
4449cat > $TMPC <<EOF
4450#include <time.h>
4451
4452int main(void)
4453{
4454 return clock_adjtime(0, 0);
4455}
4456EOF
4457clock_adjtime=no
4458if compile_prog "" "" ; then
4459 clock_adjtime=yes
4460fi
4461
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004462# syncfs probe
4463syncfs=no
4464cat > $TMPC <<EOF
4465#include <unistd.h>
4466
4467int main(void)
4468{
4469 return syncfs(0);
4470}
4471EOF
4472syncfs=no
4473if compile_prog "" "" ; then
4474 syncfs=yes
4475fi
4476
pbrookcc8ae6d2006-04-23 17:57:59 +00004477# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004478if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004479 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004480 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004481 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004482 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004483 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004484 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004485 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004486 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004487fi
4488
Stefan Weilf514f412009-10-11 12:44:07 +02004489# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004490byteswap_h=no
4491cat > $TMPC << EOF
4492#include <byteswap.h>
4493int main(void) { return bswap_32(0); }
4494EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004495if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004496 byteswap_h=yes
4497fi
4498
Stefan Weil75f13592013-01-05 12:17:38 +01004499# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004500bswap_h=no
4501cat > $TMPC << EOF
4502#include <sys/endian.h>
4503#include <sys/types.h>
4504#include <machine/bswap.h>
4505int main(void) { return bswap32(0); }
4506EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004507if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004508 bswap_h=yes
4509fi
4510
aliguorida93a1f2008-12-12 20:02:52 +00004511##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004512# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004513if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004514 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004515 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004516 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4517 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004518 else
4519 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004520 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004521 fi
4522 libiscsi="no"
4523 fi
4524fi
4525
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004526##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004527# Do we need libm
4528cat > $TMPC << EOF
4529#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004530int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004531EOF
4532if compile_prog "" "" ; then
4533 :
4534elif compile_prog "" "-lm" ; then
4535 LIBS="-lm $LIBS"
4536 libs_qga="-lm $libs_qga"
4537else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004538 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004539fi
4540
4541##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004542# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004543# uClibc provides 2 versions of clock_gettime(), one with realtime
4544# support and one without. This means that the clock_gettime() don't
4545# need -lrt. We still need it for timer_create() so we check for this
4546# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004547cat > $TMPC <<EOF
4548#include <signal.h>
4549#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004550int main(void) {
4551 timer_create(CLOCK_REALTIME, NULL, NULL);
4552 return clock_gettime(CLOCK_REALTIME, NULL);
4553}
aliguorida93a1f2008-12-12 20:02:52 +00004554EOF
4555
Juan Quintela52166aa2009-08-03 14:46:03 +02004556if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004557 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004558# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004559elif compile_prog "" "$pthread_lib -lrt" ; then
4560 LIBS="$LIBS -lrt"
4561 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004562fi
4563
Blue Swirl31ff5042009-09-12 12:33:07 +00004564if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004565 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004566 libs_softmmu="-lutil $libs_softmmu"
4567fi
4568
Blue Swirlde5071c2009-09-12 09:58:46 +00004569##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004570# spice probe
4571if test "$spice" != "no" ; then
4572 cat > $TMPC << EOF
4573#include <spice.h>
4574int main(void) { spice_server_new(); return 0; }
4575EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004576 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4577 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004578 if $pkg_config --atleast-version=0.12.0 spice-server && \
4579 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004580 compile_prog "$spice_cflags" "$spice_libs" ; then
4581 spice="yes"
4582 libs_softmmu="$libs_softmmu $spice_libs"
4583 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004584 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4585 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004586 else
4587 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004588 feature_not_found "spice" \
4589 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004590 fi
4591 spice="no"
4592 fi
4593fi
4594
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004595# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004596if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004597 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004598 libcacard_cflags=$($pkg_config --cflags libcacard)
4599 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004600 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004601 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004602 if test "$smartcard" = "yes"; then
4603 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004604 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004605 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004606 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004607fi
4608
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004609# check for libusb
4610if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004611 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004612 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004613 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4614 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004615 else
4616 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004617 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004618 fi
4619 libusb="no"
4620 fi
4621fi
4622
Hans de Goede69354a82011-07-19 11:04:10 +02004623# check for usbredirparser for usb network redirection support
4624if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004625 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004626 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004627 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4628 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004629 else
4630 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004631 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004632 fi
4633 usb_redir="no"
4634 fi
4635fi
4636
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004637##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004638# check if we have VSS SDK headers for win
4639
4640if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4641 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004642 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004643 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4644 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004645 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004646 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4647 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004648 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004649 esac
4650 cat > $TMPC << EOF
4651#define __MIDL_user_allocate_free_DEFINED__
4652#include <inc/win2003/vss.h>
4653int main(void) { return VSS_CTX_BACKUP; }
4654EOF
4655 if compile_prog "$vss_win32_include" "" ; then
4656 guest_agent_with_vss="yes"
4657 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004658 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004659 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004660 else
4661 if test "$vss_win32_sdk" != "" ; then
4662 echo "ERROR: Please download and install Microsoft VSS SDK:"
4663 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4664 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4665 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4666 echo "ERROR: The headers are extracted in the directory \`inc'."
4667 feature_not_found "VSS support"
4668 fi
4669 guest_agent_with_vss="no"
4670 fi
4671fi
4672
4673##########################################
4674# lookup Windows platform SDK (if not specified)
4675# The SDK is needed only to build .tlb (type library) file of guest agent
4676# VSS provider from the source. It is usually unnecessary because the
4677# pre-compiled .tlb file is included.
4678
4679if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4680 if test -z "$win_sdk"; then
4681 programfiles="$PROGRAMFILES"
4682 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4683 if test -n "$programfiles"; then
4684 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4685 else
4686 feature_not_found "Windows SDK"
4687 fi
4688 elif test "$win_sdk" = "no"; then
4689 win_sdk=""
4690 fi
4691fi
4692
4693##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004694# check if mingw environment provides a recent ntddscsi.h
4695if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4696 cat > $TMPC << EOF
4697#include <windows.h>
4698#include <ntddscsi.h>
4699int main(void) {
4700#if !defined(IOCTL_SCSI_GET_ADDRESS)
4701#error Missing required ioctl definitions
4702#endif
4703 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4704 return addr.Lun;
4705}
4706EOF
4707 if compile_prog "" "" ; then
4708 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004709 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004710 fi
4711fi
4712
4713##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004714# virgl renderer probe
4715
4716if test "$virglrenderer" != "no" ; then
4717 cat > $TMPC << EOF
4718#include <virglrenderer.h>
4719int main(void) { virgl_renderer_poll(); return 0; }
4720EOF
4721 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4722 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004723 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004724 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4725 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4726 virglrenderer="yes"
4727 else
4728 if test "$virglrenderer" = "yes" ; then
4729 feature_not_found "virglrenderer"
4730 fi
4731 virglrenderer="no"
4732 fi
4733fi
4734
4735##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004736# capstone
4737
Richard Hendersone219c492017-09-28 09:01:23 -07004738case "$capstone" in
4739 "" | yes)
4740 if $pkg_config capstone; then
4741 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004742 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004743 capstone=git
4744 elif test -e "${source_path}/capstone/Makefile" ; then
4745 capstone=internal
4746 elif test -z "$capstone" ; then
4747 capstone=no
4748 else
4749 feature_not_found "capstone" "Install capstone devel or git submodule"
4750 fi
4751 ;;
4752
4753 system)
4754 if ! $pkg_config capstone; then
4755 feature_not_found "capstone" "Install capstone devel"
4756 fi
4757 ;;
4758esac
4759
4760case "$capstone" in
4761 git | internal)
4762 if test "$capstone" = git; then
4763 git_submodules="${git_submodules} capstone"
4764 fi
4765 mkdir -p capstone
4766 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4767 if test "$mingw32" = "yes"; then
4768 LIBCAPSTONE=capstone.lib
4769 else
4770 LIBCAPSTONE=libcapstone.a
4771 fi
4772 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4773 ;;
4774
4775 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004776 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4777 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004778 ;;
4779
4780 no)
4781 ;;
4782 *)
4783 error_exit "Unknown state for capstone: $capstone"
4784 ;;
4785esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004786
4787##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004788# check if we have fdatasync
4789
4790fdatasync=no
4791cat > $TMPC << EOF
4792#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004793int main(void) {
4794#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4795return fdatasync(0);
4796#else
Stefan Weile172fe12012-04-06 21:33:20 +02004797#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004798#endif
4799}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004800EOF
4801if compile_prog "" "" ; then
4802 fdatasync=yes
4803fi
4804
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004805##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004806# check if we have madvise
4807
4808madvise=no
4809cat > $TMPC << EOF
4810#include <sys/types.h>
4811#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004812#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004813int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4814EOF
4815if compile_prog "" "" ; then
4816 madvise=yes
4817fi
4818
4819##########################################
4820# check if we have posix_madvise
4821
4822posix_madvise=no
4823cat > $TMPC << EOF
4824#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004825#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004826int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4827EOF
4828if compile_prog "" "" ; then
4829 posix_madvise=yes
4830fi
4831
4832##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004833# check if we have posix_memalign()
4834
4835posix_memalign=no
4836cat > $TMPC << EOF
4837#include <stdlib.h>
4838int main(void) {
4839 void *p;
4840 return posix_memalign(&p, 8, 8);
4841}
4842EOF
4843if compile_prog "" "" ; then
4844 posix_memalign=yes
4845fi
4846
4847##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004848# check if we have posix_syslog
4849
4850posix_syslog=no
4851cat > $TMPC << EOF
4852#include <syslog.h>
4853int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4854EOF
4855if compile_prog "" "" ; then
4856 posix_syslog=yes
4857fi
4858
4859##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004860# check if we have sem_timedwait
4861
4862sem_timedwait=no
4863cat > $TMPC << EOF
4864#include <semaphore.h>
4865int main(void) { return sem_timedwait(0, 0); }
4866EOF
4867if compile_prog "" "" ; then
4868 sem_timedwait=yes
4869fi
4870
4871##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004872# check if we have strchrnul
4873
4874strchrnul=no
4875cat > $TMPC << EOF
4876#include <string.h>
4877int main(void);
4878// Use a haystack that the compiler shouldn't be able to constant fold
4879char *haystack = (char*)&main;
4880int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4881EOF
4882if compile_prog "" "" ; then
4883 strchrnul=yes
4884fi
4885
4886##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004887# check if trace backend exists
4888
Lluís Vilanova5b808272014-05-27 15:02:14 +02004889$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004890if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004891 error_exit "invalid trace backends" \
4892 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004893fi
4894
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004895##########################################
4896# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004897if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004898 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004899#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004900int main(void) { return 0; }
4901EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004902 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004903 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004904 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004905 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004906 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004907 fi
4908 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004909 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004910 else
4911 urcu_bp_libs="-lurcu-bp"
4912 fi
4913
4914 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4915 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004916 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004917 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004918 fi
4919fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004920
4921##########################################
4922# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004923if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004924 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004925 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004926 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004927 trace_backend_stap="no"
4928 if has 'stap' ; then
4929 trace_backend_stap="yes"
4930 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004931fi
4932
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004933##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004934# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304935
Peter Maydell7c2acc72013-04-08 12:11:27 +01004936# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004937# is sigcontext. On Windows the only valid backend is the Windows
4938# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004939
4940ucontext_works=no
4941if test "$darwin" != "yes"; then
4942 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304943#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004944#ifdef __stub_makecontext
4945#error Ignoring glibc stub makecontext which will always fail
4946#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004947int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304948EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004949 if compile_prog "" "" ; then
4950 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304951 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004952fi
4953
4954if test "$coroutine" = ""; then
4955 if test "$mingw32" = "yes"; then
4956 coroutine=win32
4957 elif test "$ucontext_works" = "yes"; then
4958 coroutine=ucontext
4959 else
4960 coroutine=sigaltstack
4961 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004962else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004963 case $coroutine in
4964 windows)
4965 if test "$mingw32" != "yes"; then
4966 error_exit "'windows' coroutine backend only valid for Windows"
4967 fi
4968 # Unfortunately the user visible backend name doesn't match the
4969 # coroutine-*.c filename for this case, so we have to adjust it here.
4970 coroutine=win32
4971 ;;
4972 ucontext)
4973 if test "$ucontext_works" != "yes"; then
4974 feature_not_found "ucontext"
4975 fi
4976 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004977 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004978 if test "$mingw32" = "yes"; then
4979 error_exit "only the 'windows' coroutine backend is valid for Windows"
4980 fi
4981 ;;
4982 *)
4983 error_exit "unknown coroutine backend $coroutine"
4984 ;;
4985 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304986fi
4987
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004988if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004989 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004990fi
4991
Peter Lieven7d992e42016-09-27 11:58:45 +02004992if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02004993 if test "$coroutine_pool" = "yes"; then
4994 echo "WARN: disabling coroutine pool for stack usage debugging"
4995 coroutine_pool=no
4996 fi
4997fi
4998
4999
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305000##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305001# check if we have open_by_handle_at
5002
Stefan Weil4e1797f2012-06-18 22:11:06 +02005003open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305004cat > $TMPC << EOF
5005#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005006#if !defined(AT_EMPTY_PATH)
5007# error missing definition
5008#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005009int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005010#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305011EOF
5012if compile_prog "" "" ; then
5013 open_by_handle_at=yes
5014fi
5015
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305016########################################
5017# check if we have linux/magic.h
5018
5019linux_magic_h=no
5020cat > $TMPC << EOF
5021#include <linux/magic.h>
5022int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005023 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305024}
5025EOF
5026if compile_prog "" "" ; then
5027 linux_magic_h=yes
5028fi
5029
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005030########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005031# check whether we can disable warning option with a pragma (this is needed
5032# to silence warnings in the headers of some versions of external libraries).
5033# This test has to be compiled with -Werror as otherwise an unknown pragma is
5034# only a warning.
5035#
5036# If we can't selectively disable warning in the code, disable -Werror so that
5037# the build doesn't fail anyway.
5038
Peter Maydell06d71fa2012-07-30 16:13:07 +01005039pragma_disable_unused_but_set=no
5040cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005041#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005042#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005043#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005044
Peter Maydell06d71fa2012-07-30 16:13:07 +01005045int main(void) {
5046 return 0;
5047}
5048EOF
5049if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005050 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005051else
5052 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005053fi
5054
5055########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005056# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005057
5058valgrind_h=no
5059cat > $TMPC << EOF
5060#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005061int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005062 return 0;
5063}
5064EOF
5065if compile_prog "" "" ; then
5066 valgrind_h=yes
5067fi
5068
5069########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005070# check if environ is declared
5071
5072has_environ=no
5073cat > $TMPC << EOF
5074#include <unistd.h>
5075int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005076 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005077 return 0;
5078}
5079EOF
5080if compile_prog "" "" ; then
5081 has_environ=yes
5082fi
5083
Richard Henderson76a347e2012-12-28 14:17:02 -08005084########################################
5085# check if cpuid.h is usable.
5086
Richard Henderson76a347e2012-12-28 14:17:02 -08005087cat > $TMPC << EOF
5088#include <cpuid.h>
5089int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005090 unsigned a, b, c, d;
5091 int max = __get_cpuid_max(0, 0);
5092
5093 if (max >= 1) {
5094 __cpuid(1, a, b, c, d);
5095 }
5096
5097 if (max >= 7) {
5098 __cpuid_count(7, 0, a, b, c, d);
5099 }
5100
5101 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005102}
5103EOF
5104if compile_prog "" "" ; then
5105 cpuid_h=yes
5106fi
5107
Richard Henderson5dd89902017-07-18 18:40:18 -10005108##########################################
5109# avx2 optimization requirement check
5110#
5111# There is no point enabling this if cpuid.h is not usable,
5112# since we won't be able to select the new routines.
5113
5114if test $cpuid_h = yes; then
5115 cat > $TMPC << EOF
5116#pragma GCC push_options
5117#pragma GCC target("avx2")
5118#include <cpuid.h>
5119#include <immintrin.h>
5120static int bar(void *a) {
5121 __m256i x = *(__m256i *)a;
5122 return _mm256_testz_si256(x, x);
5123}
5124int main(int argc, char *argv[]) { return bar(argv[0]); }
5125EOF
5126 if compile_object "" ; then
5127 avx2_opt="yes"
5128 fi
5129fi
5130
Richard Hendersonf5401662013-02-16 12:46:59 -08005131########################################
5132# check if __[u]int128_t is usable.
5133
5134int128=no
5135cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01005136#if defined(__clang_major__) && defined(__clang_minor__)
5137# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5138# error __int128_t does not work in CLANG before 3.2
5139# endif
5140#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08005141__int128_t a;
5142__uint128_t b;
5143int main (void) {
5144 a = a + b;
5145 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005146 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005147 return 0;
5148}
5149EOF
5150if compile_prog "" "" ; then
5151 int128=yes
5152fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005153
Richard Henderson7ebee432016-06-29 21:10:59 -07005154#########################################
5155# See if 128-bit atomic operations are supported.
5156
5157atomic128=no
5158if test "$int128" = "yes"; then
5159 cat > $TMPC << EOF
5160int main(void)
5161{
5162 unsigned __int128 x = 0, y = 0;
5163 y = __atomic_load_16(&x, 0);
5164 __atomic_store_16(&x, y, 0);
5165 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5166 return 0;
5167}
5168EOF
5169 if compile_prog "" "" ; then
5170 atomic128=yes
5171 fi
5172fi
5173
Richard Hendersondf79b992016-09-02 12:23:57 -07005174#########################################
5175# See if 64-bit atomic operations are supported.
5176# Note that without __atomic builtins, we can only
5177# assume atomic loads/stores max at pointer size.
5178
5179cat > $TMPC << EOF
5180#include <stdint.h>
5181int main(void)
5182{
5183 uint64_t x = 0, y = 0;
5184#ifdef __ATOMIC_RELAXED
5185 y = __atomic_load_8(&x, 0);
5186 __atomic_store_8(&x, y, 0);
5187 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5188 __atomic_exchange_8(&x, y, 0);
5189 __atomic_fetch_add_8(&x, y, 0);
5190#else
5191 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5192 __sync_lock_test_and_set(&x, y);
5193 __sync_val_compare_and_swap(&x, y, 0);
5194 __sync_fetch_and_add(&x, y);
5195#endif
5196 return 0;
5197}
5198EOF
5199if compile_prog "" "" ; then
5200 atomic64=yes
5201fi
5202
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005203########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005204# See if 16-byte vector operations are supported.
5205# Even without a vector unit the compiler may expand these.
5206# There is a bug in old GCC for PPC that crashes here.
5207# Unfortunately it's the system compiler for Centos 7.
5208
5209cat > $TMPC << EOF
5210typedef unsigned char U1 __attribute__((vector_size(16)));
5211typedef unsigned short U2 __attribute__((vector_size(16)));
5212typedef unsigned int U4 __attribute__((vector_size(16)));
5213typedef unsigned long long U8 __attribute__((vector_size(16)));
5214typedef signed char S1 __attribute__((vector_size(16)));
5215typedef signed short S2 __attribute__((vector_size(16)));
5216typedef signed int S4 __attribute__((vector_size(16)));
5217typedef signed long long S8 __attribute__((vector_size(16)));
5218static U1 a1, b1;
5219static U2 a2, b2;
5220static U4 a4, b4;
5221static U8 a8, b8;
5222static S1 c1;
5223static S2 c2;
5224static S4 c4;
5225static S8 c8;
5226static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005227void helper(void *d, void *a, int shift, int i);
5228void helper(void *d, void *a, int shift, int i)
5229{
5230 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5231 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5232 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5233 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5234}
Richard Hendersondb432672017-09-15 14:11:45 -07005235int main(void)
5236{
5237 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5238 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5239 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5240 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5241 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5242 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5243 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5244 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5245 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5246 return 0;
5247}
5248EOF
5249
5250vector16=no
5251if compile_prog "" "" ; then
5252 vector16=yes
5253fi
5254
5255########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005256# check if getauxval is available.
5257
5258getauxval=no
5259cat > $TMPC << EOF
5260#include <sys/auxv.h>
5261int main(void) {
5262 return getauxval(AT_HWCAP) == 0;
5263}
5264EOF
5265if compile_prog "" "" ; then
5266 getauxval=yes
5267fi
5268
John Snowfd0e6052015-03-25 18:57:39 -04005269########################################
5270# check if ccache is interfering with
5271# semantic analysis of macros
5272
John Snow5e4dfd32015-10-28 13:56:40 -04005273unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005274ccache_cpp2=no
5275cat > $TMPC << EOF
5276static const int Z = 1;
5277#define fn() ({ Z; })
5278#define TAUT(X) ((X) == Z)
5279#define PAREN(X, Y) (X == Y)
5280#define ID(X) (X)
5281int main(int argc, char *argv[])
5282{
5283 int x = 0, y = 0;
5284 x = ID(x);
5285 x = fn();
5286 fn();
5287 if (PAREN(x, y)) return 0;
5288 if (TAUT(Z)) return 0;
5289 return 0;
5290}
5291EOF
5292
5293if ! compile_object "-Werror"; then
5294 ccache_cpp2=yes
5295fi
5296
John Snowb553a042015-11-03 15:43:42 -05005297#################################################
5298# clang does not support glibc + FORTIFY_SOURCE.
5299
5300if test "$fortify_source" != "no"; then
5301 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5302 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005303 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005304 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005305 fortify_source="no";
5306 else
5307 fortify_source="yes"
5308 fi
5309fi
5310
Fam Zheng1efad062018-06-01 17:26:43 +08005311###############################################
5312# Check if copy_file_range is provided by glibc
5313have_copy_file_range=no
5314cat > $TMPC << EOF
5315#include <unistd.h>
5316int main(void) {
5317 copy_file_range(0, NULL, 0, NULL, 0, 0);
5318 return 0;
5319}
5320EOF
5321if compile_prog "" "" ; then
5322 have_copy_file_range=yes
5323fi
5324
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305325##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005326# check if struct fsxattr is available via linux/fs.h
5327
5328have_fsxattr=no
5329cat > $TMPC << EOF
5330#include <linux/fs.h>
5331struct fsxattr foo;
5332int main(void) {
5333 return 0;
5334}
5335EOF
5336if compile_prog "" "" ; then
5337 have_fsxattr=yes
5338fi
5339
Peter Maydellb66e10e2016-06-08 18:34:32 +01005340##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005341# check for usable membarrier system call
5342if test "$membarrier" = "yes"; then
5343 have_membarrier=no
5344 if test "$mingw32" = "yes" ; then
5345 have_membarrier=yes
5346 elif test "$linux" = "yes" ; then
5347 cat > $TMPC << EOF
5348 #include <linux/membarrier.h>
5349 #include <sys/syscall.h>
5350 #include <unistd.h>
5351 #include <stdlib.h>
5352 int main(void) {
5353 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5354 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5355 exit(0);
5356 }
5357EOF
5358 if compile_prog "" "" ; then
5359 have_membarrier=yes
5360 fi
5361 fi
5362 if test "$have_membarrier" = "no"; then
5363 feature_not_found "membarrier" "membarrier system call not available"
5364 fi
5365else
5366 # Do not enable it by default even for Mingw32, because it doesn't
5367 # work on Wine.
5368 membarrier=no
5369fi
5370
5371##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005372# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005373have_rtnetlink=no
5374cat > $TMPC << EOF
5375#include <linux/rtnetlink.h>
5376int main(void) {
5377 return IFLA_PROTO_DOWN;
5378}
5379EOF
5380if compile_prog "" "" ; then
5381 have_rtnetlink=yes
5382fi
5383
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005384##########################################
5385# check for usable AF_VSOCK environment
5386have_af_vsock=no
5387cat > $TMPC << EOF
5388#include <errno.h>
5389#include <sys/types.h>
5390#include <sys/socket.h>
5391#if !defined(AF_VSOCK)
5392# error missing AF_VSOCK flag
5393#endif
5394#include <linux/vm_sockets.h>
5395int main(void) {
5396 int sock, ret;
5397 struct sockaddr_vm svm;
5398 socklen_t len = sizeof(svm);
5399 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5400 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5401 if ((ret == -1) && (errno == ENOTCONN)) {
5402 return 0;
5403 }
5404 return -1;
5405}
5406EOF
5407if compile_prog "" "" ; then
5408 have_af_vsock=yes
5409fi
5410
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005411##########################################
5412# check for usable AF_ALG environment
5413hava_afalg=no
5414cat > $TMPC << EOF
5415#include <errno.h>
5416#include <sys/types.h>
5417#include <sys/socket.h>
5418#include <linux/if_alg.h>
5419int main(void) {
5420 int sock;
5421 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5422 return sock;
5423}
5424EOF
5425if compile_prog "" "" ; then
5426 have_afalg=yes
5427fi
5428if test "$crypto_afalg" = "yes"
5429then
5430 if test "$have_afalg" != "yes"
5431 then
5432 error_exit "AF_ALG requested but could not be detected"
5433 fi
5434fi
5435
5436
James Clarke6969ec62016-06-06 12:02:50 +01005437#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005438# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005439if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005440 cat > $TMPC << EOF
5441#include <Hypervisor/hv.h>
5442int main() { return 0;}
5443EOF
5444 if ! compile_object ""; then
5445 hvf='no'
5446 else
5447 hvf='yes'
5448 LDFLAGS="-framework Hypervisor $LDFLAGS"
5449 fi
5450fi
5451
5452#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005453# Sparc implicitly links with --relax, which is
5454# incompatible with -r, so --no-relax should be
5455# given. It does no harm to give it on other
5456# platforms too.
5457
5458# Note: the prototype is needed since QEMU_CFLAGS
5459# contains -Wmissing-prototypes
5460cat > $TMPC << EOF
5461extern int foo(void);
5462int foo(void) { return 0; }
5463EOF
5464if ! compile_object ""; then
5465 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5466fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005467for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5468 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5469 LD_REL_FLAGS=$i
5470 break
5471 fi
5472done
5473if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5474 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005475fi
5476
Jan Vesely277abf12016-04-29 13:15:23 -04005477##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005478# check for sysmacros.h
5479
5480have_sysmacros=no
5481cat > $TMPC << EOF
5482#include <sys/sysmacros.h>
5483int main(void) {
5484 return makedev(0, 0);
5485}
5486EOF
5487if compile_prog "" "" ; then
5488 have_sysmacros=yes
5489fi
5490
5491##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005492# Veritas HyperScale block driver VxHS
5493# Check if libvxhs is installed
5494
5495if test "$vxhs" != "no" ; then
5496 cat > $TMPC <<EOF
5497#include <stdint.h>
5498#include <qnio/qnio_api.h>
5499
5500void *vxhs_callback;
5501
5502int main(void) {
5503 iio_init(QNIO_VERSION, vxhs_callback);
5504 return 0;
5505}
5506EOF
5507 vxhs_libs="-lvxhs -lssl"
5508 if compile_prog "" "$vxhs_libs" ; then
5509 vxhs=yes
5510 else
5511 if test "$vxhs" = "yes" ; then
5512 feature_not_found "vxhs block device" "Install libvxhs See github"
5513 fi
5514 vxhs=no
5515 fi
5516fi
5517
5518##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005519# check for _Static_assert()
5520
5521have_static_assert=no
5522cat > $TMPC << EOF
5523_Static_assert(1, "success");
5524int main(void) {
5525 return 0;
5526}
5527EOF
5528if compile_prog "" "" ; then
5529 have_static_assert=yes
5530fi
5531
5532##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005533# check for utmpx.h, it is missing e.g. on OpenBSD
5534
5535have_utmpx=no
5536cat > $TMPC << EOF
5537#include <utmpx.h>
5538struct utmpx user_info;
5539int main(void) {
5540 return 0;
5541}
5542EOF
5543if compile_prog "" "" ; then
5544 have_utmpx=yes
5545fi
5546
5547##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005548# checks for sanitizers
5549
Marc-André Lureau247724c2018-01-16 16:11:51 +01005550have_asan=no
5551have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005552have_asan_iface_h=no
5553have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005554
5555if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005556 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005557 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5558 have_asan=yes
5559 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005560
5561 # we could use a simple skeleton for flags checks, but this also
5562 # detect the static linking issue of ubsan, see also:
5563 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5564 cat > $TMPC << EOF
5565#include <stdlib.h>
5566int main(void) {
5567 void *tmp = malloc(10);
5568 return *(int *)(tmp + 2);
5569}
5570EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005571 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5572 have_ubsan=yes
5573 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005574
5575 if check_include "sanitizer/asan_interface.h" ; then
5576 have_asan_iface_h=yes
5577 fi
5578
5579 cat > $TMPC << EOF
5580#include <sanitizer/asan_interface.h>
5581int main(void) {
5582 __sanitizer_start_switch_fiber(0, 0, 0);
5583 return 0;
5584}
5585EOF
5586 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5587 have_asan_iface_fiber=yes
5588 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005589fi
5590
5591##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005592# Docker and cross-compiler support
5593#
5594# This is specifically for building test
5595# cases for foreign architectures, not
5596# cross-compiling QEMU itself.
5597
5598if has "docker"; then
5599 docker=$($python $source_path/tests/docker/docker.py probe)
5600fi
5601
5602##########################################
Junyan He17824402018-07-18 15:47:59 +08005603# check for libpmem
5604
5605if test "$libpmem" != "no"; then
5606 if $pkg_config --exists "libpmem"; then
5607 libpmem="yes"
5608 libpmem_libs=$($pkg_config --libs libpmem)
5609 libpmem_cflags=$($pkg_config --cflags libpmem)
5610 libs_softmmu="$libs_softmmu $libpmem_libs"
5611 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5612 else
5613 if test "$libpmem" = "yes" ; then
5614 feature_not_found "libpmem" "Install nvml or pmdk"
5615 fi
5616 libpmem="no"
5617 fi
5618fi
5619
5620##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005621# End of CC checks
5622# After here, no more $cc or $ld runs
5623
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005624write_c_skeleton
5625
Blue Swirl1d728c32012-05-01 18:45:39 +00005626if test "$gcov" = "yes" ; then
5627 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5628 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005629elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005630 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005631elif test "$debug" = "no"; then
5632 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005633fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005634
Marc-André Lureau247724c2018-01-16 16:11:51 +01005635if test "$have_asan" = "yes"; then
5636 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005637 if test "$have_asan_iface_h" = "no" ; then
5638 echo "ASAN build enabled, but ASAN header missing." \
5639 "Without code annotation, the report may be inferior."
5640 elif test "$have_asan_iface_fiber" = "no" ; then
5641 echo "ASAN build enabled, but ASAN header is too old." \
5642 "Without code annotation, the report may be inferior."
5643 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005644fi
5645if test "$have_ubsan" = "yes"; then
5646 CFLAGS="-fsanitize=undefined $CFLAGS"
5647fi
5648
Peter Lieven6542aa92014-02-03 10:26:13 +01005649##########################################
5650# Do we have libnfs
5651if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005652 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005653 libnfs="yes"
5654 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005655 else
5656 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005657 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005658 fi
5659 libnfs="no"
5660 fi
5661fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005662
Peter Maydell6ca026c2012-07-18 15:10:18 +01005663# Now we've finished running tests it's OK to add -Werror to the compiler flags
5664if test "$werror" = "yes"; then
5665 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5666fi
5667
Juan Quintelae86ecd42009-08-03 14:45:59 +02005668if test "$solaris" = "no" ; then
5669 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005670 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005671 fi
5672fi
5673
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005674# test if pod2man has --utf8 option
5675if pod2man --help | grep -q utf8; then
5676 POD2MAN="pod2man --utf8"
5677else
5678 POD2MAN="pod2man"
5679fi
5680
Blue Swirl952afb72010-09-19 08:36:34 +00005681# Use ASLR, no-SEH and DEP if available
5682if test "$mingw32" = "yes" ; then
5683 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005684 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005685 LDFLAGS="-Wl,$flag $LDFLAGS"
5686 fi
5687 done
5688fi
5689
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005690qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005691qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005692qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005693qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005694
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005695# We can only support ivshmem if we have eventfd
5696if [ "$eventfd" = "yes" ]; then
5697 ivshmem=yes
5698fi
5699
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005700tools=""
5701if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02005702 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005703 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5704 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005705 fi
5706 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005707 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005708 fi
5709fi
5710if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005711 if test "$linux" = yes; then
5712 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005713 virtfs=yes
5714 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5715 else
5716 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005717 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305718 fi
Andreas Färber17500372012-05-01 01:12:03 +02005719 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005720 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005721 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5722 mpath=yes
5723 else
5724 if test "$mpath" = yes; then
5725 error_exit "Multipath requires libmpathpersist devel"
5726 fi
5727 mpath=no
5728 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005729 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5730 else
5731 if test "$virtfs" = yes; then
5732 error_exit "VirtFS is supported only on Linux"
5733 fi
5734 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005735 if test "$mpath" = yes; then
5736 error_exit "Multipath is supported only on Linux"
5737 fi
5738 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305739 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005740 if test "$xkbcommon" = "yes"; then
5741 tools="qemu-keymap\$(EXESUF) $tools"
5742 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005743fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005744
5745# Probe for guest agent support/options
5746
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005747if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005748 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005749 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005750 guest_agent=yes
5751 elif [ "$guest_agent" != yes ]; then
5752 guest_agent=no
5753 else
5754 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005755 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005756fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005757
Michael Roth9d6bc272015-08-26 10:49:13 -05005758# Guest agent Window MSI package
5759
5760if test "$guest_agent" != yes; then
5761 if test "$guest_agent_msi" = yes; then
5762 error_exit "MSI guest agent package requires guest agent enabled"
5763 fi
5764 guest_agent_msi=no
5765elif test "$mingw32" != "yes"; then
5766 if test "$guest_agent_msi" = "yes"; then
5767 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5768 fi
5769 guest_agent_msi=no
5770elif ! has wixl; then
5771 if test "$guest_agent_msi" = "yes"; then
5772 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5773 fi
5774 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005775else
5776 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5777 # disabled explicitly
5778 if test "$guest_agent_msi" != "no"; then
5779 guest_agent_msi=yes
5780 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005781fi
5782
Michael Roth1a349042015-08-26 11:14:31 -05005783if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005784 if test "$guest_agent_with_vss" = "yes"; then
5785 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5786 fi
5787
5788 if test "$QEMU_GA_MANUFACTURER" = ""; then
5789 QEMU_GA_MANUFACTURER=QEMU
5790 fi
5791
5792 if test "$QEMU_GA_DISTRO" = ""; then
5793 QEMU_GA_DISTRO=Linux
5794 fi
5795
5796 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005797 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005798 fi
5799
Stefan Weil89138852016-05-16 15:10:20 +02005800 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005801
5802 case "$cpu" in
5803 x86_64)
5804 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5805 ;;
5806 i386)
5807 QEMU_GA_MSI_ARCH="-D Arch=32"
5808 ;;
5809 *)
5810 error_exit "CPU $cpu not supported for building installation package"
5811 ;;
5812 esac
5813fi
5814
Paolo Bonzinica35f782010-05-26 16:08:29 +02005815# Mac OS X ships with a broken assembler
5816roms=
5817if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5818 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5819 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005820 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005821 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5822 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5823 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005824 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5825 ld_i386_emulation="$emu"
5826 roms="optionrom"
5827 break
5828 fi
5829 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005830fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005831if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005832 roms="$roms spapr-rtas"
5833fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005834
Christian Borntraeger9933c302013-04-23 01:23:03 +00005835if test "$cpu" = "s390x" ; then
5836 roms="$roms s390-ccw"
5837fi
5838
Richard Henderson964c6fa2013-06-21 19:10:16 -07005839# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005840if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005841 textseg_addr=
5842 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005843 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5844 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005845 textseg_addr=0x60000000
5846 ;;
5847 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005848 # A 256M aligned address, high in the address space, with enough
5849 # room for the code_gen_buffer above it before the stack.
5850 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005851 ;;
5852 esac
5853 if [ -n "$textseg_addr" ]; then
5854 cat > $TMPC <<EOF
5855 int main(void) { return 0; }
5856EOF
5857 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5858 if ! compile_prog "" "$textseg_ldflags"; then
5859 # In case ld does not support -Ttext-segment, edit the default linker
5860 # script via sed to set the .text start addr. This is needed on FreeBSD
5861 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005862 if ! $ld --verbose >/dev/null 2>&1; then
5863 error_exit \
5864 "We need to link the QEMU user mode binaries at a" \
5865 "specific text address. Unfortunately your linker" \
5866 "doesn't support either the -Ttext-segment option or" \
5867 "printing the default linker script with --verbose." \
5868 "If you don't want the user mode binaries, pass the" \
5869 "--disable-user option to configure."
5870 fi
5871
Richard Henderson964c6fa2013-06-21 19:10:16 -07005872 $ld --verbose | sed \
5873 -e '1,/==================================================/d' \
5874 -e '/==================================================/,$d' \
5875 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5876 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5877 textseg_ldflags="-Wl,-T../config-host.ld"
5878 fi
5879 fi
5880fi
5881
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005882# Check that the C++ compiler exists and works with the C compiler.
5883# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5884if has $cxx; then
5885 cat > $TMPC <<EOF
5886int c_function(void);
5887int main(void) { return c_function(); }
5888EOF
5889
5890 compile_object
5891
5892 cat > $TMPCXX <<EOF
5893extern "C" {
5894 int c_function(void);
5895}
5896int c_function(void) { return 42; }
5897EOF
5898
5899 update_cxxflags
5900
5901 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5902 # C++ compiler $cxx works ok with C compiler $cc
5903 :
5904 else
5905 echo "C++ compiler $cxx does not work with C compiler $cc"
5906 echo "Disabling C++ specific optional code"
5907 cxx=
5908 fi
5909else
5910 echo "No C++ compiler available; disabling C++ specific optional code"
5911 cxx=
5912fi
5913
Cole Robinson02d34f62016-05-06 14:03:09 -04005914echo_version() {
5915 if test "$1" = "yes" ; then
5916 echo "($2)"
5917 fi
5918}
5919
Jan Kiszka50e12062014-10-02 10:03:55 +02005920# prepend pixman and ftd flags after all config tests are done
5921QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005922QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005923libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005924
bellard43ce4df2003-06-09 19:53:12 +00005925echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005926echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005927echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005928echo "binary directory $(eval echo $bindir)"
5929echo "library directory $(eval echo $libdir)"
5930echo "module directory $(eval echo $qemu_moddir)"
5931echo "libexec directory $(eval echo $libexecdir)"
5932echo "include directory $(eval echo $includedir)"
5933echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005934if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005935echo "local state directory $(eval echo $local_statedir)"
5936echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005937echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005938else
5939echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005940echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005941fi
bellard5a671352003-10-01 00:13:48 +00005942echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005943echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005944echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005945echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005946echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005947echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005948echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005949echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005950echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005951echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005952echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005953echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005954echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005955echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005956echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005957if test "$slirp" = "yes" ; then
5958 echo "smbd $smbd"
5959fi
Fam Zheng17969262014-02-10 14:48:56 +08005960echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005961echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005962echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005963echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005964echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005965echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005966echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005967echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005968echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005969if test "$darwin" = "yes" ; then
5970 echo "Cocoa support $cocoa"
5971fi
Stefan Weil89138852016-05-16 15:10:20 +02005972echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5973echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005974echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005975echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005976echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005977echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005978echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005979echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005980echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02005981echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005982echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005983echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005984echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02005985echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02005986echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005987echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005988echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005989echo "Block whitelist (rw) $block_drv_rw_whitelist"
5990echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305991echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005992echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01005993echo "VNC support $vnc"
5994if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005995 echo "VNC SASL support $vnc_sasl"
5996 echo "VNC JPEG support $vnc_jpeg"
5997 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005998fi
blueswir131422552007-04-16 18:27:06 +00005999if test -n "$sparc_cpu"; then
6000 echo "Target Sparc Arch $sparc_cpu"
6001fi
aliguorie37630c2009-04-22 15:19:10 +00006002echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006003if test "$xen" = "yes" ; then
6004 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00006005 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00006006fi
aurel322e4d9fb2008-04-08 06:01:02 +00006007echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006008echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006009echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006010echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006011echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006012echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006013echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006014echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006015echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006016echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006017echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006018echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006019echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006020echo "TCG support $tcg"
6021if test "$tcg" = "yes" ; then
6022 echo "TCG debug enabled $debug_tcg"
6023 echo "TCG interpreter $tcg_interpreter"
6024fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006025echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006026echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006027echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006028echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006029echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006030echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006031echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006032echo "madvise $madvise"
6033echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006034echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006035echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006036echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006037echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006038echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006039echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006040echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006041echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006042if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006043echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006044fi
Stefan Weil89138852016-05-16 15:10:20 +02006045echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006046echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006047echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006048echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006049echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006050echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006051echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006052echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006053echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006054echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006055echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006056echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006057echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006058echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006059echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006060echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006061echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006062echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006063echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006064echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306065echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006066echo "gcov $gcov_tool"
6067echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006068echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006069echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006070echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006071echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006072echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006073echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006074echo "lzo support $lzo"
6075echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006076echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006077echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006078echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006079echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006080echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006081echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006082echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006083echo "VxHS block device $vxhs"
Richard Henderson8ca80762017-09-14 09:41:12 -07006084echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006085echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006086echo "libpmem support $libpmem"
bellard67b915a2004-03-31 23:37:16 +00006087
Stefan Weil1ba16962011-07-29 22:40:45 +02006088if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006089echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006090fi
bellard97a847b2003-08-10 21:36:04 +00006091
Daniel P. Berrangeb7715af2017-12-12 11:34:40 +00006092if test "$gtkabi" = "2.0"; then
6093 echo
6094 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
6095 echo "WARNING: future releases. Please switch to using GTK 3.0"
6096fi
6097
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006098if test "$sdlabi" = "1.2"; then
6099 echo
6100 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6101 echo "WARNING: future releases. Please switch to using SDL 2.0"
6102fi
6103
Peter Maydell898be3e2017-03-21 14:31:57 +00006104if test "$supported_cpu" = "no"; then
6105 echo
6106 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6107 echo
6108 echo "CPU host architecture $cpu support is not currently maintained."
6109 echo "The QEMU project intends to remove support for this host CPU in"
6110 echo "a future release if nobody volunteers to maintain it and to"
6111 echo "provide a build host for our continuous integration setup."
6112 echo "configure has succeeded and you can continue to build, but"
6113 echo "if you care about QEMU on this platform you should contact"
6114 echo "us upstream at qemu-devel@nongnu.org."
6115fi
6116
6117if test "$supported_os" = "no"; then
6118 echo
6119 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6120 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006121 echo "Host OS $targetos support is not currently maintained."
6122 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006123 echo "a future release if nobody volunteers to maintain it and to"
6124 echo "provide a build host for our continuous integration setup."
6125 echo "configure has succeeded and you can continue to build, but"
6126 echo "if you care about QEMU on this platform you should contact"
6127 echo "us upstream at qemu-devel@nongnu.org."
6128fi
6129
Juan Quintela98ec69a2009-07-16 18:34:18 +02006130config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006131
Stefan Weildbd99ae2013-01-01 18:33:44 +01006132echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6133
Juan Quintela98ec69a2009-07-16 18:34:18 +02006134echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006135echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006136
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006137echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006138echo "prefix=$prefix" >> $config_host_mak
6139echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006140echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006141echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006142echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006143echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006144echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006145echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006146echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006147echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006148echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006149echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006150if test "$mingw32" = "no" ; then
6151 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6152fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006153echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006154echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006155echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006156echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006157echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006158echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006159
Juan Quintela98ec69a2009-07-16 18:34:18 +02006160echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006161
aurel32f8393942009-04-13 18:45:38 +00006162if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006163 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006164fi
aliguori1625af82009-04-05 17:41:02 +00006165if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006166 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006167fi
bellard7d132992003-03-06 23:23:54 +00006168if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006169 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006170fi
bellard67b915a2004-03-31 23:37:16 +00006171if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006172 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006173 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006174 version_major=${rc_version%%.*}
6175 rc_version=${rc_version#*.}
6176 version_minor=${rc_version%%.*}
6177 rc_version=${rc_version#*.}
6178 version_subminor=${rc_version%%.*}
6179 version_micro=0
6180 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6181 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006182 if test "$guest_agent_with_vss" = "yes" ; then
6183 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006184 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006185 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6186 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006187 if test "$guest_agent_ntddscsi" = "yes" ; then
6188 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6189 fi
Michael Roth1a349042015-08-26 11:14:31 -05006190 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006191 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006192 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6193 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6194 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6195 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6196 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6197 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6198 fi
pbrook210fa552007-02-27 21:04:49 +00006199else
Juan Quintela35f4df22009-07-27 16:13:07 +02006200 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006201fi
blueswir1128ab2f2008-08-15 18:33:42 +00006202
Mark McLoughlindffcb712009-10-22 17:49:11 +01006203if test "$linux" = "yes" ; then
6204 echo "CONFIG_LINUX=y" >> $config_host_mak
6205fi
6206
bellard83fb7ad2004-07-05 21:25:26 +00006207if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006208 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006209fi
malcb29fe3e2008-11-18 01:42:22 +00006210
bellardec530c82006-04-25 22:36:06 +00006211if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006212 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006213fi
Andreas Färber179cf402010-09-20 00:50:43 +02006214if test "$haiku" = "yes" ; then
6215 echo "CONFIG_HAIKU=y" >> $config_host_mak
6216fi
bellard97a847b2003-08-10 21:36:04 +00006217if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006218 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006219fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006220if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006221 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006222fi
bellardc20709a2004-04-21 23:27:19 +00006223if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006224 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006225 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006226fi
ths8a16d272008-07-19 09:56:24 +00006227if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006228 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006229 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006230fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006231if test "$netmap" = "yes" ; then
6232 echo "CONFIG_NETMAP=y" >> $config_host_mak
6233fi
Gonglei015a33b2014-07-01 20:58:08 +08006234if test "$l2tpv3" = "yes" ; then
6235 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6236fi
Corey Bryant47e98652012-01-26 09:42:26 -05006237if test "$cap_ng" = "yes" ; then
6238 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6239fi
Juan Quintela2358a492009-07-27 16:13:25 +02006240echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006241for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006242 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006243 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006244 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006245 echo "$def=m" >> $config_host_mak ;;
6246 *)
6247 echo "$def=y" >> $config_host_mak ;;
6248 esac
malc0c58ac12008-06-25 21:04:05 +00006249done
Fam Zhengb1149912017-09-07 16:29:13 +08006250echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6251echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6252echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6253echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6254echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006255if test "$audio_pt_int" = "yes" ; then
6256 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6257fi
malcd5631632009-10-10 01:13:41 +04006258if test "$audio_win_int" = "yes" ; then
6259 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6260fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006261echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6262echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006263if test "$vnc" = "yes" ; then
6264 echo "CONFIG_VNC=y" >> $config_host_mak
6265fi
aliguori2f9606b2009-03-06 20:27:28 +00006266if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006267 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006268fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006269if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006270 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006271fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006272if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006273 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006274fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006275if test "$xkbcommon" = "yes" ; then
6276 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6277 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6278fi
aliguori76655d62009-03-06 20:27:37 +00006279if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006280 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006281fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006282if test "$xfs" = "yes" ; then
6283 echo "CONFIG_XFS=y" >> $config_host_mak
6284fi
Stefan Weil89138852016-05-16 15:10:20 +02006285qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006286echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006287echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006288echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006289echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006290if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006291 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006292fi
Fam Zheng17969262014-02-10 14:48:56 +08006293if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006294 # $shacmd can generate a hash started with digit, which the compiler doesn't
6295 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006296 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006297 echo "CONFIG_MODULES=y" >> $config_host_mak
6298fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006299if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6300 echo "CONFIG_X11=y" >> $config_host_mak
6301 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6302 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6303fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006304if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006305 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006306 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006307 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006308 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006309fi
6310if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006311 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006312fi
6313if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006314 echo "CONFIG_CURSES=m" >> $config_host_mak
6315 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6316 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006317fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006318if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006319 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006320fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006321if test "$accept4" = "yes" ; then
6322 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6323fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306324if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006325 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306326fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006327if test "$eventfd" = "yes" ; then
6328 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6329fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006330if test "$memfd" = "yes" ; then
6331 echo "CONFIG_MEMFD=y" >> $config_host_mak
6332fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006333if test "$fallocate" = "yes" ; then
6334 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6335fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006336if test "$fallocate_punch_hole" = "yes" ; then
6337 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6338fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006339if test "$fallocate_zero_range" = "yes" ; then
6340 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6341fi
Kevin Wolfed911432014-09-29 17:12:59 +02006342if test "$posix_fallocate" = "yes" ; then
6343 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6344fi
Peter Maydellc727f472011-01-06 11:05:10 +00006345if test "$sync_file_range" = "yes" ; then
6346 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6347fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006348if test "$fiemap" = "yes" ; then
6349 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6350fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006351if test "$dup3" = "yes" ; then
6352 echo "CONFIG_DUP3=y" >> $config_host_mak
6353fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006354if test "$ppoll" = "yes" ; then
6355 echo "CONFIG_PPOLL=y" >> $config_host_mak
6356fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006357if test "$prctl_pr_set_timerslack" = "yes" ; then
6358 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6359fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006360if test "$epoll" = "yes" ; then
6361 echo "CONFIG_EPOLL=y" >> $config_host_mak
6362fi
6363if test "$epoll_create1" = "yes" ; then
6364 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6365fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006366if test "$sendfile" = "yes" ; then
6367 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6368fi
Riku Voipio51834342014-06-22 11:25:42 +01006369if test "$timerfd" = "yes" ; then
6370 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6371fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006372if test "$setns" = "yes" ; then
6373 echo "CONFIG_SETNS=y" >> $config_host_mak
6374fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006375if test "$clock_adjtime" = "yes" ; then
6376 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6377fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006378if test "$syncfs" = "yes" ; then
6379 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6380fi
aurel323b3f24a2009-04-15 16:12:13 +00006381if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006382 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006383fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006384if test "$inotify1" = "yes" ; then
6385 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6386fi
Peter Maydell401bc052017-09-05 13:19:32 +01006387if test "$sem_timedwait" = "yes" ; then
6388 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6389fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006390if test "$strchrnul" = "yes" ; then
6391 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6392fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006393if test "$byteswap_h" = "yes" ; then
6394 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6395fi
6396if test "$bswap_h" = "yes" ; then
6397 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6398fi
Alexander Graf769ce762009-05-11 17:41:42 +02006399if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006400 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006401 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006402 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006403fi
aurel322e4d9fb2008-04-08 06:01:02 +00006404if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006405 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006406 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006407fi
balrogfb599c92008-09-28 23:49:55 +00006408if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006409 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006410 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006411fi
Dr. David Alan Gilbertd46f7c92015-06-24 10:45:42 +01006412if test "$glib_subprocess" = "yes" ; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03006413 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6414fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006415if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006416 echo "CONFIG_GTK=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006417 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006418 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006419 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006420 if test "$gtk_gl" = "yes" ; then
6421 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6422 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006423fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006424echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006425if test "$gnutls" = "yes" ; then
6426 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6427fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09006428if test "$gnutls_rnd" = "yes" ; then
6429 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6430fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006431if test "$gcrypt" = "yes" ; then
6432 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006433 if test "$gcrypt_hmac" = "yes" ; then
6434 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6435 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01006436 if test "$gcrypt_kdf" = "yes" ; then
6437 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6438 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006439fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006440if test "$nettle" = "yes" ; then
6441 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006442 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01006443 if test "$nettle_kdf" = "yes" ; then
6444 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6445 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006446fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006447if test "$tasn1" = "yes" ; then
6448 echo "CONFIG_TASN1=y" >> $config_host_mak
6449fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006450if test "$have_ifaddrs_h" = "yes" ; then
6451 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6452fi
Eric Blake6b39b062016-10-11 10:46:23 -05006453if test "$have_broken_size_max" = "yes" ; then
6454 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6455fi
Jan Vesely277abf12016-04-29 13:15:23 -04006456
6457# Work around a system header bug with some kernel/XFS header
6458# versions where they both try to define 'struct fsxattr':
6459# xfs headers will not try to redefine structs from linux headers
6460# if this macro is set.
6461if test "$have_fsxattr" = "yes" ; then
6462 echo "HAVE_FSXATTR=y" >> $config_host_mak
6463fi
Fam Zheng1efad062018-06-01 17:26:43 +08006464if test "$have_copy_file_range" = "yes" ; then
6465 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6466fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006467if test "$vte" = "yes" ; then
6468 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006469 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006470 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006471fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006472if test "$virglrenderer" = "yes" ; then
6473 echo "CONFIG_VIRGL=y" >> $config_host_mak
6474 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6475 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6476fi
aliguorie37630c2009-04-22 15:19:10 +00006477if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006478 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006479 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006480 if test "$xen_pv_domain_build" = "yes" ; then
6481 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6482 fi
aliguorie37630c2009-04-22 15:19:10 +00006483fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006484if test "$linux_aio" = "yes" ; then
6485 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6486fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006487if test "$attr" = "yes" ; then
6488 echo "CONFIG_ATTR=y" >> $config_host_mak
6489fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006490if test "$libattr" = "yes" ; then
6491 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6492fi
Meador Inge983eef52012-02-24 14:00:42 +05306493if test "$virtfs" = "yes" ; then
6494 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006495fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006496if test "$mpath" = "yes" ; then
6497 echo "CONFIG_MPATH=y" >> $config_host_mak
6498fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006499if test "$vhost_scsi" = "yes" ; then
6500 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6501fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006502if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006503 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6504fi
Gonglei042cea22018-03-01 21:46:28 +08006505if test "$vhost_crypto" = "yes" ; then
6506 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6507fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006508if test "$vhost_vsock" = "yes" ; then
6509 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6510fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006511if test "$vhost_user" = "yes" ; then
6512 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6513fi
ths77755342008-11-27 15:45:16 +00006514if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006515 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006516fi
aliguoribf9298b2008-12-05 20:05:26 +00006517if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006518 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006519fi
aliguoriceb42de2009-04-07 18:43:28 +00006520if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006521 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006522fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006523if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006524 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006525fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006526if test "$membarrier" = "yes" ; then
6527 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6528fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006529if test "$signalfd" = "yes" ; then
6530 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6531fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006532if test "$tcg" = "yes"; then
6533 echo "CONFIG_TCG=y" >> $config_host_mak
6534 if test "$tcg_interpreter" = "yes" ; then
6535 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6536 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006537fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006538if test "$fdatasync" = "yes" ; then
6539 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6540fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006541if test "$madvise" = "yes" ; then
6542 echo "CONFIG_MADVISE=y" >> $config_host_mak
6543fi
6544if test "$posix_madvise" = "yes" ; then
6545 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6546fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006547if test "$posix_memalign" = "yes" ; then
6548 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6549fi
bellard97a847b2003-08-10 21:36:04 +00006550
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006551if test "$spice" = "yes" ; then
6552 echo "CONFIG_SPICE=y" >> $config_host_mak
6553fi
6554
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006555if test "$smartcard" = "yes" ; then
6556 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006557 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6558 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006559fi
6560
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006561if test "$libusb" = "yes" ; then
6562 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006563 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6564 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006565fi
6566
Hans de Goede69354a82011-07-19 11:04:10 +02006567if test "$usb_redir" = "yes" ; then
6568 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006569 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6570 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006571fi
6572
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006573if test "$opengl" = "yes" ; then
6574 echo "CONFIG_OPENGL=y" >> $config_host_mak
6575 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006576 if test "$opengl_dmabuf" = "yes" ; then
6577 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6578 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006579fi
6580
Yang Zhong5a22ab72017-12-20 21:16:46 +08006581if test "$malloc_trim" = "yes" ; then
6582 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6583fi
6584
Liang Li99f2dbd2016-03-08 13:53:16 +08006585if test "$avx2_opt" = "yes" ; then
6586 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6587fi
6588
qiaonuohan607dacd2014-02-18 14:11:30 +08006589if test "$lzo" = "yes" ; then
6590 echo "CONFIG_LZO=y" >> $config_host_mak
6591fi
6592
6593if test "$snappy" = "yes" ; then
6594 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6595fi
6596
Peter Wu6b383c02015-01-06 18:48:14 +01006597if test "$bzip2" = "yes" ; then
6598 echo "CONFIG_BZIP2=y" >> $config_host_mak
6599 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6600fi
6601
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006602if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006603 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006604 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6605 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006606fi
6607
Peter Lieven6542aa92014-02-03 10:26:13 +01006608if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006609 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6610 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006611fi
6612
Eduardo Otubof7945732012-08-14 18:44:05 -03006613if test "$seccomp" = "yes"; then
6614 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006615 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6616 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006617fi
6618
bellard83fb7ad2004-07-05 21:25:26 +00006619# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006620if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006621 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006622fi
6623
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006624if test "$localtime_r" = "yes" ; then
6625 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6626fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006627if test "$qom_cast_debug" = "yes" ; then
6628 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6629fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006630if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006631 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006632 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6633 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006634fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006635
Peter Maydell7c2acc72013-04-08 12:11:27 +01006636echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006637if test "$coroutine_pool" = "yes" ; then
6638 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6639else
6640 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6641fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306642
Peter Lieven7d992e42016-09-27 11:58:45 +02006643if test "$debug_stack_usage" = "yes" ; then
6644 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6645fi
6646
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006647if test "$crypto_afalg" = "yes" ; then
6648 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6649fi
6650
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306651if test "$open_by_handle_at" = "yes" ; then
6652 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6653fi
6654
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306655if test "$linux_magic_h" = "yes" ; then
6656 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6657fi
6658
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006659if test "$pragma_diagnostic_available" = "yes" ; then
6660 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006661fi
6662
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006663if test "$valgrind_h" = "yes" ; then
6664 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6665fi
6666
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006667if test "$have_asan_iface_fiber" = "yes" ; then
6668 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6669fi
6670
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006671if test "$has_environ" = "yes" ; then
6672 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6673fi
6674
Richard Henderson76a347e2012-12-28 14:17:02 -08006675if test "$cpuid_h" = "yes" ; then
6676 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6677fi
6678
Richard Hendersonf5401662013-02-16 12:46:59 -08006679if test "$int128" = "yes" ; then
6680 echo "CONFIG_INT128=y" >> $config_host_mak
6681fi
6682
Richard Henderson7ebee432016-06-29 21:10:59 -07006683if test "$atomic128" = "yes" ; then
6684 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6685fi
6686
Richard Hendersondf79b992016-09-02 12:23:57 -07006687if test "$atomic64" = "yes" ; then
6688 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6689fi
6690
Richard Hendersondb432672017-09-15 14:11:45 -07006691if test "$vector16" = "yes" ; then
6692 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6693fi
6694
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006695if test "$getauxval" = "yes" ; then
6696 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6697fi
6698
Bharata B Raoeb100392012-09-24 14:42:45 +05306699if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006700 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006701 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6702 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306703fi
6704
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006705if test "$glusterfs_xlator_opt" = "yes" ; then
6706 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6707fi
6708
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306709if test "$glusterfs_discard" = "yes" ; then
6710 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6711fi
6712
Niels de Vosdf3a4292017-05-28 12:01:14 +05306713if test "$glusterfs_fallocate" = "yes" ; then
6714 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6715fi
6716
Bharata B Rao7c815372013-12-21 14:51:25 +05306717if test "$glusterfs_zerofill" = "yes" ; then
6718 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6719fi
6720
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006721if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006722 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006723 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6724 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006725fi
6726
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006727if test "$live_block_migration" = "yes" ; then
6728 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6729fi
6730
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006731if test "$tpm" = "yes"; then
6732 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006733 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006734 if test "$tpm_passthrough" = "yes"; then
6735 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6736 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006737 # TPM emulator support?
6738 if test "$tpm_emulator" = "yes"; then
6739 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6740 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006741fi
6742
Lluís Vilanova5b808272014-05-27 15:02:14 +02006743echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6744if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02006745 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306746fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006747if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02006748 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6749 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006750 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006751fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006752if have_backend "log"; then
6753 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02006754fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006755if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02006756 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6757fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006758if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006759 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6760 if test "$trace_backend_stap" = "yes" ; then
6761 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6762 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006763fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006764if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006765 if test "$linux" = "yes" ; then
6766 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006767 else
Stewart Smith21684af2014-01-24 12:39:10 +11006768 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006769 fi
6770fi
Paul Durrant0a852412016-08-04 14:44:14 +01006771if have_backend "syslog"; then
6772 if test "$posix_syslog" = "yes" ; then
6773 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6774 else
6775 feature_not_found "syslog(trace backend)" "syslog not available"
6776 fi
6777fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006778echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6779
Michael R. Hines2da776d2013-07-22 10:01:54 -04006780if test "$rdma" = "yes" ; then
6781 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006782 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006783fi
6784
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006785if test "$pvrdma" = "yes" ; then
6786 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6787fi
6788
Laurent Vivier575b22b2016-06-02 22:14:15 +02006789if test "$have_rtnetlink" = "yes" ; then
6790 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6791fi
6792
Klim Kireeved279a02018-01-12 12:01:19 +03006793if test "$libxml2" = "yes" ; then
6794 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6795 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6796 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6797fi
6798
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006799if test "$replication" = "yes" ; then
6800 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6801fi
6802
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006803if test "$have_af_vsock" = "yes" ; then
6804 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6805fi
6806
Christopher Covington4d043512016-12-28 15:04:33 -05006807if test "$have_sysmacros" = "yes" ; then
6808 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6809fi
6810
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006811if test "$have_static_assert" = "yes" ; then
6812 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6813fi
6814
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006815if test "$have_utmpx" = "yes" ; then
6816 echo "HAVE_UTMPX=y" >> $config_host_mak
6817fi
6818
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006819if test "$ivshmem" = "yes" ; then
6820 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6821fi
Richard Hendersone219c492017-09-28 09:01:23 -07006822if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006823 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6824fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006825if test "$debug_mutex" = "yes" ; then
6826 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6827fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006828
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006829# Hold two types of flag:
6830# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6831# a thread we have a handle to
6832# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6833# platform
6834if test "$pthread_setname_np" = "yes" ; then
6835 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6836 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6837fi
6838
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006839if test "$vxhs" = "yes" ; then
6840 echo "CONFIG_VXHS=y" >> $config_host_mak
6841 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6842fi
6843
Junyan He17824402018-07-18 15:47:59 +08006844if test "$libpmem" = "yes" ; then
6845 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6846fi
6847
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006848if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006849 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006850elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006851 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006852elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006853 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006854elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006855 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006856elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006857 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006858else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006859 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006860fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006861QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006862
Juan Quintela98ec69a2009-07-16 18:34:18 +02006863echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006864echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006865echo "MAKE=$make" >> $config_host_mak
6866echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006867echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6868echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006869echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6870echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006871echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006872echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006873if $iasl -h > /dev/null 2>&1; then
6874 echo "IASL=$iasl" >> $config_host_mak
6875fi
Juan Quintela804edf22009-07-27 16:12:49 +02006876echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006877echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006878echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006879echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006880echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006881echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006882echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006883echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006884echo "OBJCOPY=$objcopy" >> $config_host_mak
6885echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006886echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006887echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006888echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006889echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006890echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006891echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006892echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006893echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006894if test "$sparse" = "yes" ; then
6895 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006896 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006897 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006898 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6899 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6900fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006901if test "$cross_prefix" != ""; then
6902 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6903else
6904 echo "AUTOCONF_HOST := " >> $config_host_mak
6905fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006906echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006907echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006908echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006909echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006910echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006911echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006912echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006913echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006914echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006915echo "DSOSUF=$DSOSUF" >> $config_host_mak
6916echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006917echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006918echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6919echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006920echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006921echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006922if test "$gcov" = "yes" ; then
6923 echo "CONFIG_GCOV=y" >> $config_host_mak
6924 echo "GCOV=$gcov_tool" >> $config_host_mak
6925fi
Juan Quintela804edf22009-07-27 16:12:49 +02006926
Alex Bennée51a12b52018-04-04 14:24:39 +01006927if test "$docker" != "no"; then
6928 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6929fi
6930
Peter Maydell6efd7512011-11-30 11:59:04 +00006931# use included Linux headers
6932if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006933 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006934 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006935 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006936 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006937 ;;
6938 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006939 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006940 ;;
6941 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006942 linux_arch=s390
6943 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006944 aarch64)
6945 linux_arch=arm64
6946 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006947 mips64)
6948 linux_arch=mips
6949 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006950 *)
6951 # For most CPUs the kernel architecture name and QEMU CPU name match.
6952 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006953 ;;
6954 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006955 # For non-KVM architectures we will not have asm headers
6956 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6957 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6958 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006959fi
6960
bellard1d14ffa2005-10-30 18:58:22 +00006961for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006962target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006963config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006964target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006965target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006966
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006967case "$target_name" in
Michael Weiser722dd7b2018-01-11 13:25:32 +00006968 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
Juan Quintelaea2d6a32009-07-16 18:34:10 +02006969 target_bigendian=yes
6970 ;;
6971esac
bellard97a847b2003-08-10 21:36:04 +00006972target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006973target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006974target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006975target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006976case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006977 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006978 target_softmmu="yes"
6979 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006980 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00006981 target_user_only="yes"
6982 target_linux_user="yes"
6983 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006984 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00006985 target_user_only="yes"
6986 target_bsd_user="yes"
6987 ;;
pbrook9e407a82007-05-26 16:38:53 +00006988 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006989 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00006990 exit 1
6991 ;;
6992esac
ths831b7822007-01-18 20:06:33 +00006993
Alex Bennéed75402b2018-04-04 20:27:05 +01006994target_compiler=""
6995target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01006996target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01006997
bellard97a847b2003-08-10 21:36:04 +00006998mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02006999echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007000
pbrooke5fe0c52006-06-11 13:32:59 +00007001bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007002mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007003interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007004gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007005
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007006TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007007TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007008TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007009
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007010case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007011 i386)
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007012 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007013 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007014 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007015 ;;
7016 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007017 TARGET_BASE_ARCH=i386
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007018 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007019 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007020 ;;
7021 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007022 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007023 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007024 ;;
7025 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007026 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007027 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007028 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007029 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007030 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007031 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007032 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007033 aarch64|aarch64_be)
7034 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007035 TARGET_BASE_ARCH=arm
7036 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007037 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007038 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007039 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007040 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007041 ;;
aurel322408a522008-04-20 20:19:44 +00007042 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007043 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007044 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007045 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007046 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007047 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007048 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007049 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007050 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007051 ;;
aurel322408a522008-04-20 20:19:44 +00007052 m68k)
aurel322408a522008-04-20 20:19:44 +00007053 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007054 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007055 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007056 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007057 microblaze|microblazeel)
7058 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007059 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007060 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007061 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007062 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007063 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007064 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007065 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007066 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007067 ;;
7068 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08007069 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007070 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007071 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007072 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007073 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007074 ;;
7075 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007076 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007077 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007078 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007079 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007080 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007081 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007082 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007083 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007084 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007085 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007086 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007087 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007088 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007089 TARGET_ARCH=openrisc
7090 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007091 ;;
aurel322408a522008-04-20 20:19:44 +00007092 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007093 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007094 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007095 ;;
7096 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007097 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007098 TARGET_ABI_DIR=ppc
aurel32c8b35322009-01-24 15:07:34 +00007099 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007100 target_compiler=$cross_cc_ppcemb
aurel322408a522008-04-20 20:19:44 +00007101 ;;
7102 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007103 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007104 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307105 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007106 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007107 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007108 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007109 ppc64le)
7110 TARGET_ARCH=ppc64
7111 TARGET_BASE_ARCH=ppc
7112 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307113 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007114 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007115 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007116 ;;
aurel322408a522008-04-20 20:19:44 +00007117 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007118 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007119 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007120 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007121 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007122 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007123 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007124 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007125 riscv32)
7126 TARGET_BASE_ARCH=riscv
7127 TARGET_ABI_DIR=riscv
7128 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007129 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007130 ;;
7131 riscv64)
7132 TARGET_BASE_ARCH=riscv
7133 TARGET_ABI_DIR=riscv
7134 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007135 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007136 ;;
aurel322408a522008-04-20 20:19:44 +00007137 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007138 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007139 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007140 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007141 ;;
7142 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007143 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007144 ;;
7145 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007146 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007147 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007148 ;;
7149 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007150 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007151 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007152 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007153 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007154 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007155 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007156 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007157 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007158 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007159 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007160 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007161 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007162 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007163 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007164 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007165 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007166 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007167 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007168 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007169 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007170 xtensa|xtensaeb)
7171 TARGET_ARCH=xtensa
Max Filippov9fb40342017-03-06 17:17:43 -08007172 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007173 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007174 ;;
aurel322408a522008-04-20 20:19:44 +00007175 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007176 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007177 ;;
7178esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007179# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7180if [ "$TARGET_BASE_ARCH" = "" ]; then
7181 TARGET_BASE_ARCH=$TARGET_ARCH
7182fi
7183
Alex Bennéed75402b2018-04-04 20:27:05 +01007184# Do we have a cross compiler for this target?
7185if has $target_compiler; then
7186
7187 write_c_skeleton
7188
Alex Bennée716a5072018-04-10 12:19:40 +01007189 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007190 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007191 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007192 target_compiler=""
7193 else
7194 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7195 target_compiler_static="n"
7196 fi
7197 else
7198 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7199 target_compiler_static="y"
7200 fi
7201else
7202 target_compiler=""
7203fi
7204
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007205symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7206
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007207upper() {
7208 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7209}
7210
Stefan Weil89138852016-05-16 15:10:20 +02007211target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007212echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007213echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007214echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007215if [ "$TARGET_ABI_DIR" = "" ]; then
7216 TARGET_ABI_DIR=$TARGET_ARCH
7217fi
Juan Quintela25be2102009-10-07 02:41:00 +02007218echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007219if [ "$HOST_VARIANT_DIR" != "" ]; then
7220 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7221fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007222
7223if supported_xen_target $target; then
7224 echo "CONFIG_XEN=y" >> $config_target_mak
7225 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007226 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007227 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007228fi
7229if supported_kvm_target $target; then
7230 echo "CONFIG_KVM=y" >> $config_target_mak
7231 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007232 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007233 if test "$vhost_user" = "yes" ; then
7234 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7235 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007236 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007237fi
7238if supported_hax_target $target; then
7239 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007240fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007241if supported_hvf_target $target; then
7242 echo "CONFIG_HVF=y" >> $config_target_mak
7243fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007244if supported_whpx_target $target; then
7245 echo "CONFIG_WHPX=y" >> $config_target_mak
7246fi
bellardde83cd02003-06-15 20:25:43 +00007247if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007248 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007249fi
7250if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007251 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007252 if test "$mttcg" = "yes" ; then
7253 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7254 fi
bellardde83cd02003-06-15 20:25:43 +00007255fi
bellard997344f2003-10-27 21:10:39 +00007256if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007257 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007258 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007259fi
ths831b7822007-01-18 20:06:33 +00007260if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007261 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007262fi
pbrook56aebc82008-10-11 17:55:29 +00007263list=""
7264if test ! -z "$gdb_xml_files" ; then
7265 for x in $gdb_xml_files; do
7266 list="$list $source_path/gdb-xml/$x"
7267 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007268 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007269fi
bellardde83cd02003-06-15 20:25:43 +00007270
pbrooke5fe0c52006-06-11 13:32:59 +00007271if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007272 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007273fi
blueswir184778502008-10-26 20:33:16 +00007274if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007275 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007276fi
bellard5b0753e2005-03-01 21:37:28 +00007277
Alex Bennéed75402b2018-04-04 20:27:05 +01007278if test -n "$target_compiler"; then
7279 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7280
7281 if test -n "$target_compiler_static"; then
7282 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7283 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007284
7285 if test -n "$target_compiler_cflags"; then
7286 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7287 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007288fi
7289
Alex Bennée716a5072018-04-10 12:19:40 +01007290
Juan Quintela4afddb52009-08-03 14:46:45 +02007291# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007292
Juan Quintela4afddb52009-08-03 14:46:45 +02007293cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007294ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007295
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007296disas_config() {
7297 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7298 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7299}
7300
Juan Quintela64656022009-08-03 14:46:53 +02007301for i in $ARCH $TARGET_BASE_ARCH ; do
7302 case "$i" in
7303 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007304 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007305 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007306 aarch64)
7307 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007308 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007309 fi
7310 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007311 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007312 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007313 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007314 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007315 fi
Juan Quintela64656022009-08-03 14:46:53 +02007316 ;;
7317 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007318 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007319 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007320 hppa)
7321 disas_config "HPPA"
7322 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007323 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007324 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007325 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007326 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007327 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007328 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007329 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007330 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007331 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007332 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007333 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007334 ;;
7335 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007336 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02007337 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007338 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007339 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007340 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007341 nios2)
7342 disas_config "NIOS2"
7343 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007344 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007345 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007346 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007347 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007348 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007349 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007350 riscv)
7351 disas_config "RISCV"
7352 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007353 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007354 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007355 ;;
7356 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007357 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007358 ;;
7359 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007360 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007361 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007362 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007363 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007364 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007365 esac
7366done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007367if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007368 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007369fi
Juan Quintela64656022009-08-03 14:46:53 +02007370
Juan Quintela6ee71262009-08-03 14:46:47 +02007371case "$ARCH" in
7372alpha)
7373 # Ensure there's only a single GP
7374 cflags="-msmall-data $cflags"
7375;;
7376esac
7377
Juan Quintelad02c1db2009-08-03 14:46:50 +02007378if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007379 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007380 if test "$target_linux_user" = "yes" ; then
7381 cflags="-p $cflags"
7382 ldflags="-p $ldflags"
7383 fi
7384 if test "$target_softmmu" = "yes" ; then
7385 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007386 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007387 fi
7388fi
7389
Juan Quintela9b8e1112009-08-03 14:46:46 +02007390if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007391 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007392fi
Juan Quintelafa282482009-07-22 22:37:39 +02007393
Christian Borntraegere9a35912017-08-23 12:16:23 +02007394# Newer kernels on s390 check for an S390_PGSTE program header and
7395# enable the pgste page table extensions in that case. This makes
7396# the vm.allocate_pgste sysctl unnecessary. We enable this program
7397# header if
7398# - we build on s390x
7399# - we build the system emulation for s390x (qemu-system-s390x)
7400# - KVM is enabled
7401# - the linker supports --s390-pgste
7402if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7403 if ld_has --s390-pgste ; then
7404 ldflags="-Wl,--s390-pgste $ldflags"
7405 fi
7406fi
7407
Juan Quintela25be2102009-10-07 02:41:00 +02007408echo "LDFLAGS+=$ldflags" >> $config_target_mak
7409echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007410
bellard97a847b2003-08-10 21:36:04 +00007411done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007412
Alex Bennéed75402b2018-04-04 20:27:05 +01007413if test -n "$enabled_cross_compilers"; then
7414 echo
7415 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7416fi
7417
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007418if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007419 echo "config-host.h: subdir-dtc" >> $config_host_mak
7420fi
Richard Hendersone219c492017-09-28 09:01:23 -07007421if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7422 echo "config-host.h: subdir-capstone" >> $config_host_mak
7423fi
7424if test -n "$LIBCAPSTONE"; then
7425 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7426fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007427
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007428if test "$numa" = "yes"; then
7429 echo "CONFIG_NUMA=y" >> $config_host_mak
7430fi
7431
John Snowfd0e6052015-03-25 18:57:39 -04007432if test "$ccache_cpp2" = "yes"; then
7433 echo "export CCACHE_CPP2=y" >> $config_host_mak
7434fi
7435
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007436# build tree in object directory in case the source is not in the current directory
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007437DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02007438DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007439DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007440DIRS="$DIRS roms/seabios roms/vgabios"
Anthony Liguoric09015d2012-01-10 13:10:42 -06007441FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7442FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02007443FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007444FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02007445FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007446FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007447FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01007448FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01007449FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07007450for bios_file in \
7451 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007452 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007453 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007454 $source_path/pc-bios/*.rom \
7455 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007456 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007457 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007458 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007459 $source_path/pc-bios/palcode-*
7460do
Stefan Weil89138852016-05-16 15:10:20 +02007461 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007462done
Stefan Weil89138852016-05-16 15:10:20 +02007463for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007464do
Stefan Weil89138852016-05-16 15:10:20 +02007465 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007466done
Su Hang645d3cb2018-08-16 14:05:28 +01007467for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7468do
7469 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7470done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007471mkdir -p $DIRS
7472for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007473 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007474 symlink "$source_path/$f" "$f"
7475 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007476done
Paul Brook1ad21342009-05-19 16:17:58 +01007477
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007478# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007479for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007480 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007481 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007482 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007483 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007484 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007485 echo "CC=$cc" >> $config_mak
7486 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007487 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007488 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007489 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007490 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007491 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007492done
7493
Marc-André Lureaufe310172016-06-15 13:06:00 +02007494# set up tests data directory
Philippe Mathieu-Daudé1b145d52018-06-12 14:34:37 -03007495for tests_subdir in acceptance data; do
7496 if [ ! -e tests/$tests_subdir ]; then
7497 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7498 fi
7499done
Marc-André Lureaufe310172016-06-15 13:06:00 +02007500
Max Reitz76c75602014-05-24 23:24:56 +02007501# set up qemu-iotests in this build directory
7502iotests_common_env="tests/qemu-iotests/common.env"
7503iotests_check="tests/qemu-iotests/check"
7504
7505echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7506echo >> "$iotests_common_env"
7507echo "export PYTHON='$python'" >> "$iotests_common_env"
7508
7509if [ ! -e "$iotests_check" ]; then
7510 symlink "$source_path/$iotests_check" "$iotests_check"
7511fi
7512
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007513# Save the configure command line for later reuse.
7514cat <<EOD >config.status
7515#!/bin/sh
7516# Generated by configure.
7517# Run this file to recreate the current configuration.
7518# Compiler output produced by configure, useful for debugging
7519# configure, is in config.log if it exists.
7520EOD
7521printf "exec" >>config.status
7522printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007523echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007524chmod +x config.status
7525
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007526rm -r "$TMPDIR1"