blob: af0c1490959acd27389fb9db9b29fb84f2ef1fa7 [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
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003615 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003616 cat > $TMPC <<EOF
3617#include <libudev.h>
3618#include <mpath_persist.h>
3619unsigned mpath_mx_alloc_len = 1024;
3620int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003621static struct config *multipath_conf;
3622extern struct udev *udev;
3623extern struct config *get_multipath_config(void);
3624extern void put_multipath_config(struct config *conf);
3625struct udev *udev;
3626struct config *get_multipath_config(void) { return multipath_conf; }
3627void put_multipath_config(struct config *conf) { }
3628
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003629int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003630 udev = udev_new();
3631 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003632 return 0;
3633}
3634EOF
3635 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3636 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003637 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003638 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003639 # probe for the old API
3640 cat > $TMPC <<EOF
3641#include <libudev.h>
3642#include <mpath_persist.h>
3643unsigned mpath_mx_alloc_len = 1024;
3644int logsink;
3645int main(void) {
3646 struct udev *udev = udev_new();
3647 mpath_lib_init(udev);
3648 return 0;
3649}
3650EOF
3651 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3652 mpathpersist=yes
3653 mpathpersist_new_api=no
3654 else
3655 mpathpersist=no
3656 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003657 fi
3658else
3659 mpathpersist=no
3660fi
3661
3662##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303663# libcap probe
3664
3665if test "$cap" != "no" ; then
3666 cat > $TMPC <<EOF
3667#include <stdio.h>
3668#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003669int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303670EOF
3671 if compile_prog "" "-lcap" ; then
3672 cap=yes
3673 else
3674 cap=no
3675 fi
3676fi
3677
3678##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003679# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003680PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003681
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003682pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003683cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003684#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003685static void *f(void *p) { return NULL; }
3686int main(void) {
3687 pthread_t thread;
3688 pthread_create(&thread, 0, f, 0);
3689 return 0;
3690}
blueswir1414f0da2008-08-15 18:20:52 +00003691EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003692if compile_prog "" "" ; then
3693 pthread=yes
3694else
3695 for pthread_lib in $PTHREADLIBS_LIST; do
3696 if compile_prog "" "$pthread_lib" ; then
3697 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003698 found=no
3699 for lib_entry in $LIBS; do
3700 if test "$lib_entry" = "$pthread_lib"; then
3701 found=yes
3702 break
3703 fi
3704 done
3705 if test "$found" = "no"; then
3706 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003707 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003708 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003709 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003710 break
3711 fi
3712 done
3713fi
blueswir1414f0da2008-08-15 18:20:52 +00003714
Anthony Liguori4617e592009-08-25 17:21:56 -05003715if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003716 error_exit "pthread check failed" \
3717 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003718fi
3719
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003720# check for pthread_setname_np
3721pthread_setname_np=no
3722cat > $TMPC << EOF
3723#include <pthread.h>
3724
3725static void *f(void *p) { return NULL; }
3726int main(void)
3727{
3728 pthread_t thread;
3729 pthread_create(&thread, 0, f, 0);
3730 pthread_setname_np(thread, "QEMU");
3731 return 0;
3732}
3733EOF
3734if compile_prog "" "$pthread_lib" ; then
3735 pthread_setname_np=yes
3736fi
3737
aliguoribf9298b2008-12-05 20:05:26 +00003738##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003739# rbd probe
3740if test "$rbd" != "no" ; then
3741 cat > $TMPC <<EOF
3742#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003743#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003744int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003745 rados_t cluster;
3746 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003747 return 0;
3748}
3749EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003750 rbd_libs="-lrbd -lrados"
3751 if compile_prog "" "$rbd_libs" ; then
3752 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003753 else
3754 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003755 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003756 fi
3757 rbd=no
3758 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003759fi
3760
3761##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003762# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003763min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003764if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003765 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003766 libssh2_cflags=$($pkg_config libssh2 --cflags)
3767 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003768 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003769 else
3770 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003771 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003772 fi
3773 libssh2=no
3774 fi
3775fi
3776
3777##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003778# libssh2_sftp_fsync probe
3779
3780if test "$libssh2" = "yes"; then
3781 cat > $TMPC <<EOF
3782#include <stdio.h>
3783#include <libssh2.h>
3784#include <libssh2_sftp.h>
3785int main(void) {
3786 LIBSSH2_SESSION *session;
3787 LIBSSH2_SFTP *sftp;
3788 LIBSSH2_SFTP_HANDLE *sftp_handle;
3789 session = libssh2_session_init ();
3790 sftp = libssh2_sftp_init (session);
3791 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3792 libssh2_sftp_fsync (sftp_handle);
3793 return 0;
3794}
3795EOF
3796 # libssh2_cflags/libssh2_libs defined in previous test.
3797 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3798 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3799 fi
3800fi
3801
3802##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003803# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003804
3805if test "$linux_aio" != "no" ; then
3806 cat > $TMPC <<EOF
3807#include <libaio.h>
3808#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003809#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003810int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3811EOF
3812 if compile_prog "" "-laio" ; then
3813 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003814 else
3815 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003816 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003817 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003818 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003819 fi
3820fi
3821
3822##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003823# TPM passthrough is only on x86 Linux
3824
3825if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3826 tpm_passthrough=$tpm
3827else
3828 tpm_passthrough=no
3829fi
3830
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003831# TPM emulator is for all posix systems
3832if test "$mingw32" != "yes"; then
3833 tpm_emulator=$tpm
3834else
3835 tpm_emulator=no
3836fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003837##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003838# attr probe
3839
3840if test "$attr" != "no" ; then
3841 cat > $TMPC <<EOF
3842#include <stdio.h>
3843#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003844#ifdef CONFIG_LIBATTR
3845#include <attr/xattr.h>
3846#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003847#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003848#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003849int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3850EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003851 if compile_prog "" "" ; then
3852 attr=yes
3853 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003854 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003855 attr=yes
3856 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003857 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003858 else
3859 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003860 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003861 fi
3862 attr=no
3863 fi
3864fi
3865
3866##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003867# iovec probe
3868cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003869#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003870#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003871#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003872int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003873EOF
3874iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003875if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003876 iovec=yes
3877fi
3878
aurel32f652e6a2008-12-16 10:43:48 +00003879##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003880# preadv probe
3881cat > $TMPC <<EOF
3882#include <sys/types.h>
3883#include <sys/uio.h>
3884#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003885int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003886EOF
3887preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003888if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003889 preadv=yes
3890fi
3891
3892##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003893# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003894# fdt support is mandatory for at least some target architectures,
3895# so insist on it if we're building those system emulators.
3896fdt_required=no
3897for target in $target_list; do
3898 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003899 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003900 fdt_required=yes
3901 ;;
3902 esac
3903done
3904
3905if test "$fdt_required" = "yes"; then
3906 if test "$fdt" = "no"; then
3907 error_exit "fdt disabled but some requested targets require it." \
3908 "You can turn off fdt only if you also disable all the system emulation" \
3909 "targets which need it (by specifying a cut down --target-list)."
3910 fi
3911 fdt=yes
3912fi
3913
Juan Quintela2df87df2009-08-12 18:29:54 +02003914if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003915 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003916 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003917 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003918 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003919#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003920#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003921int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003922EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003923 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003924 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003925 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003926 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003927 # have GIT checkout, so activate dtc submodule
3928 if test -e "${source_path}/.git" ; then
3929 git_submodules="${git_submodules} dtc"
3930 fi
3931 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003932 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003933 mkdir -p dtc
3934 if [ "$pwd_is_source_path" != "y" ] ; then
3935 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3936 symlink "$source_path/dtc/scripts" "dtc/scripts"
3937 fi
3938 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003939 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3940 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003941 elif test "$fdt" = "yes" ; then
3942 # Not a git build & no libfdt found, prompt for system install
3943 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3944 "Please install the DTC (libfdt) devel package"
3945 else
3946 # don't have and don't want
3947 fdt_libs=
3948 fdt=no
3949 fi
aurel32f652e6a2008-12-16 10:43:48 +00003950 fi
3951fi
3952
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003953libs_softmmu="$libs_softmmu $fdt_libs"
3954
Michael Walle20ff0752011-03-07 23:32:39 +01003955##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003956# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003957
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003958if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003959 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003960 if $pkg_config $opengl_pkgs; then
3961 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3962 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003963 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003964 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3965 gtk_gl="yes"
3966 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003967 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003968 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003969 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003970 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003971 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003972 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003973 opengl_libs=""
3974 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003975 fi
3976fi
3977
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003978if test "$opengl" = "yes"; then
3979 cat > $TMPC << EOF
3980#include <epoxy/egl.h>
3981#ifndef EGL_MESA_image_dma_buf_export
3982# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3983#endif
3984int main(void) { return 0; }
3985EOF
3986 if compile_prog "" "" ; then
3987 opengl_dmabuf=yes
3988 fi
3989fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003990
Klim Kireeved279a02018-01-12 12:01:19 +03003991##########################################
3992# libxml2 probe
3993if test "$libxml2" != "no" ; then
3994 if $pkg_config --exists libxml-2.0; then
3995 libxml2="yes"
3996 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3997 libxml2_libs=$($pkg_config --libs libxml-2.0)
3998 else
3999 if test "$libxml2" = "yes"; then
4000 feature_not_found "libxml2" "Install libxml2 devel"
4001 fi
4002 libxml2="no"
4003 fi
4004fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004005
Bharata B Raoeb100392012-09-24 14:42:45 +05304006##########################################
4007# glusterfs probe
4008if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004009 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304010 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004011 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4012 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004013 if $pkg_config --atleast-version=4 glusterfs-api; then
4014 glusterfs_xlator_opt="yes"
4015 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004016 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304017 glusterfs_discard="yes"
4018 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304019 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304020 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304021 glusterfs_zerofill="yes"
4022 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304023 else
4024 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004025 feature_not_found "GlusterFS backend support" \
4026 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304027 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304028 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304029 fi
4030fi
4031
aurel3239386ac2009-04-15 19:48:17 +00004032# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004033# emulator. This is done because older glibc versions don't
4034# have syscall stubs for these implemented. In that case we
4035# don't provide them even if kernel supports them.
4036#
4037inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004038cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004039#include <sys/inotify.h>
4040
4041int
4042main(void)
4043{
4044 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004045 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004046}
4047EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004048if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004049 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004050fi
4051
Riku Voipioc05c7a72010-03-26 15:25:11 +00004052inotify1=no
4053cat > $TMPC << EOF
4054#include <sys/inotify.h>
4055
4056int
4057main(void)
4058{
4059 /* try to start inotify */
4060 return inotify_init1(0);
4061}
4062EOF
4063if compile_prog "" "" ; then
4064 inotify1=yes
4065fi
4066
Riku Voipio099d6b02009-05-05 12:10:04 +03004067# check if pipe2 is there
4068pipe2=no
4069cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004070#include <unistd.h>
4071#include <fcntl.h>
4072
4073int main(void)
4074{
4075 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004076 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004077}
4078EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004079if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004080 pipe2=yes
4081fi
4082
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004083# check if accept4 is there
4084accept4=no
4085cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004086#include <sys/socket.h>
4087#include <stddef.h>
4088
4089int main(void)
4090{
4091 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4092 return 0;
4093}
4094EOF
4095if compile_prog "" "" ; then
4096 accept4=yes
4097fi
4098
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304099# check if tee/splice is there. vmsplice was added same time.
4100splice=no
4101cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304102#include <unistd.h>
4103#include <fcntl.h>
4104#include <limits.h>
4105
4106int main(void)
4107{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004108 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304109 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4110 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4111 return 0;
4112}
4113EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004114if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304115 splice=yes
4116fi
4117
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004118##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004119# libnuma probe
4120
4121if test "$numa" != "no" ; then
4122 cat > $TMPC << EOF
4123#include <numa.h>
4124int main(void) { return numa_available(); }
4125EOF
4126
4127 if compile_prog "" "-lnuma" ; then
4128 numa=yes
4129 libs_softmmu="-lnuma $libs_softmmu"
4130 else
4131 if test "$numa" = "yes" ; then
4132 feature_not_found "numa" "install numactl devel"
4133 fi
4134 numa=no
4135 fi
4136fi
4137
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004138if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4139 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4140 exit 1
4141fi
4142
Yang Zhong5a22ab72017-12-20 21:16:46 +08004143# Even if malloc_trim() is available, these non-libc memory allocators
4144# do not support it.
4145if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4146 if test "$malloc_trim" = "yes" ; then
4147 echo "Disabling malloc_trim with non-libc memory allocator"
4148 fi
4149 malloc_trim="no"
4150fi
4151
4152#######################################
4153# malloc_trim
4154
4155if test "$malloc_trim" != "no" ; then
4156 cat > $TMPC << EOF
4157#include <malloc.h>
4158int main(void) { malloc_trim(0); return 0; }
4159EOF
4160 if compile_prog "" "" ; then
4161 malloc_trim="yes"
4162 else
4163 malloc_trim="no"
4164 fi
4165fi
4166
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004167##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004168# tcmalloc probe
4169
4170if test "$tcmalloc" = "yes" ; then
4171 cat > $TMPC << EOF
4172#include <stdlib.h>
4173int main(void) { malloc(1); return 0; }
4174EOF
4175
4176 if compile_prog "" "-ltcmalloc" ; then
4177 LIBS="-ltcmalloc $LIBS"
4178 else
4179 feature_not_found "tcmalloc" "install gperftools devel"
4180 fi
4181fi
4182
4183##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004184# jemalloc probe
4185
4186if test "$jemalloc" = "yes" ; then
4187 cat > $TMPC << EOF
4188#include <stdlib.h>
4189int main(void) { malloc(1); return 0; }
4190EOF
4191
4192 if compile_prog "" "-ljemalloc" ; then
4193 LIBS="-ljemalloc $LIBS"
4194 else
4195 feature_not_found "jemalloc" "install jemalloc devel"
4196 fi
4197fi
4198
4199##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004200# signalfd probe
4201signalfd="no"
4202cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004203#include <unistd.h>
4204#include <sys/syscall.h>
4205#include <signal.h>
4206int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4207EOF
4208
4209if compile_prog "" "" ; then
4210 signalfd=yes
4211fi
4212
Riku Voipioc2882b92009-08-12 15:08:24 +03004213# check if eventfd is supported
4214eventfd=no
4215cat > $TMPC << EOF
4216#include <sys/eventfd.h>
4217
4218int main(void)
4219{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004220 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004221}
4222EOF
4223if compile_prog "" "" ; then
4224 eventfd=yes
4225fi
4226
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004227# check if memfd is supported
4228memfd=no
4229cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004230#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004231
4232int main(void)
4233{
4234 return memfd_create("foo", MFD_ALLOW_SEALING);
4235}
4236EOF
4237if compile_prog "" "" ; then
4238 memfd=yes
4239fi
4240
4241
4242
Ulrich Hechtd0927932009-09-17 20:22:14 +03004243# check for fallocate
4244fallocate=no
4245cat > $TMPC << EOF
4246#include <fcntl.h>
4247
4248int main(void)
4249{
4250 fallocate(0, 0, 0, 0);
4251 return 0;
4252}
4253EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004254if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004255 fallocate=yes
4256fi
4257
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004258# check for fallocate hole punching
4259fallocate_punch_hole=no
4260cat > $TMPC << EOF
4261#include <fcntl.h>
4262#include <linux/falloc.h>
4263
4264int main(void)
4265{
4266 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4267 return 0;
4268}
4269EOF
4270if compile_prog "" "" ; then
4271 fallocate_punch_hole=yes
4272fi
4273
Denis V. Lunevb953f072015-01-30 11:42:14 +03004274# check that fallocate supports range zeroing inside the file
4275fallocate_zero_range=no
4276cat > $TMPC << EOF
4277#include <fcntl.h>
4278#include <linux/falloc.h>
4279
4280int main(void)
4281{
4282 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4283 return 0;
4284}
4285EOF
4286if compile_prog "" "" ; then
4287 fallocate_zero_range=yes
4288fi
4289
Kevin Wolfed911432014-09-29 17:12:59 +02004290# check for posix_fallocate
4291posix_fallocate=no
4292cat > $TMPC << EOF
4293#include <fcntl.h>
4294
4295int main(void)
4296{
4297 posix_fallocate(0, 0, 0);
4298 return 0;
4299}
4300EOF
4301if compile_prog "" "" ; then
4302 posix_fallocate=yes
4303fi
4304
Peter Maydellc727f472011-01-06 11:05:10 +00004305# check for sync_file_range
4306sync_file_range=no
4307cat > $TMPC << EOF
4308#include <fcntl.h>
4309
4310int main(void)
4311{
4312 sync_file_range(0, 0, 0, 0);
4313 return 0;
4314}
4315EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004316if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004317 sync_file_range=yes
4318fi
4319
Peter Maydelldace20d2011-01-10 13:11:24 +00004320# check for linux/fiemap.h and FS_IOC_FIEMAP
4321fiemap=no
4322cat > $TMPC << EOF
4323#include <sys/ioctl.h>
4324#include <linux/fs.h>
4325#include <linux/fiemap.h>
4326
4327int main(void)
4328{
4329 ioctl(0, FS_IOC_FIEMAP, 0);
4330 return 0;
4331}
4332EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004333if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004334 fiemap=yes
4335fi
4336
Ulrich Hechtd0927932009-09-17 20:22:14 +03004337# check for dup3
4338dup3=no
4339cat > $TMPC << EOF
4340#include <unistd.h>
4341
4342int main(void)
4343{
4344 dup3(0, 0, 0);
4345 return 0;
4346}
4347EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004348if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004349 dup3=yes
4350fi
4351
Alex Bligh4e0c6522013-08-21 16:02:43 +01004352# check for ppoll support
4353ppoll=no
4354cat > $TMPC << EOF
4355#include <poll.h>
4356
4357int main(void)
4358{
4359 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4360 ppoll(&pfd, 1, 0, 0);
4361 return 0;
4362}
4363EOF
4364if compile_prog "" "" ; then
4365 ppoll=yes
4366fi
4367
Alex Blighcd758dd2013-08-21 16:02:44 +01004368# check for prctl(PR_SET_TIMERSLACK , ... ) support
4369prctl_pr_set_timerslack=no
4370cat > $TMPC << EOF
4371#include <sys/prctl.h>
4372
4373int main(void)
4374{
4375 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4376 return 0;
4377}
4378EOF
4379if compile_prog "" "" ; then
4380 prctl_pr_set_timerslack=yes
4381fi
4382
Peter Maydell3b6edd12011-02-15 18:35:05 +00004383# check for epoll support
4384epoll=no
4385cat > $TMPC << EOF
4386#include <sys/epoll.h>
4387
4388int main(void)
4389{
4390 epoll_create(0);
4391 return 0;
4392}
4393EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004394if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004395 epoll=yes
4396fi
4397
Peter Maydell227f0212016-06-06 19:58:11 +01004398# epoll_create1 is a later addition
4399# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004400epoll_create1=no
4401cat > $TMPC << EOF
4402#include <sys/epoll.h>
4403
4404int main(void)
4405{
Peter Maydell19e83f62011-04-26 16:56:40 +01004406 /* Note that we use epoll_create1 as a value, not as
4407 * a function being called. This is necessary so that on
4408 * old SPARC glibc versions where the function was present in
4409 * the library but not declared in the header file we will
4410 * fail the configure check. (Otherwise we will get a compiler
4411 * warning but not an error, and will proceed to fail the
4412 * qemu compile where we compile with -Werror.)
4413 */
Blue Swirlc075a722012-08-09 20:21:25 +00004414 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004415}
4416EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004417if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004418 epoll_create1=yes
4419fi
4420
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004421# check for sendfile support
4422sendfile=no
4423cat > $TMPC << EOF
4424#include <sys/sendfile.h>
4425
4426int main(void)
4427{
4428 return sendfile(0, 0, 0, 0);
4429}
4430EOF
4431if compile_prog "" "" ; then
4432 sendfile=yes
4433fi
4434
Riku Voipio51834342014-06-22 11:25:42 +01004435# check for timerfd support (glibc 2.8 and newer)
4436timerfd=no
4437cat > $TMPC << EOF
4438#include <sys/timerfd.h>
4439
4440int main(void)
4441{
4442 return(timerfd_create(CLOCK_REALTIME, 0));
4443}
4444EOF
4445if compile_prog "" "" ; then
4446 timerfd=yes
4447fi
4448
Riku Voipio9af5c902014-08-12 15:58:57 +03004449# check for setns and unshare support
4450setns=no
4451cat > $TMPC << EOF
4452#include <sched.h>
4453
4454int main(void)
4455{
4456 int ret;
4457 ret = setns(0, 0);
4458 ret = unshare(0);
4459 return ret;
4460}
4461EOF
4462if compile_prog "" "" ; then
4463 setns=yes
4464fi
4465
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004466# clock_adjtime probe
4467clock_adjtime=no
4468cat > $TMPC <<EOF
4469#include <time.h>
4470
4471int main(void)
4472{
4473 return clock_adjtime(0, 0);
4474}
4475EOF
4476clock_adjtime=no
4477if compile_prog "" "" ; then
4478 clock_adjtime=yes
4479fi
4480
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004481# syncfs probe
4482syncfs=no
4483cat > $TMPC <<EOF
4484#include <unistd.h>
4485
4486int main(void)
4487{
4488 return syncfs(0);
4489}
4490EOF
4491syncfs=no
4492if compile_prog "" "" ; then
4493 syncfs=yes
4494fi
4495
pbrookcc8ae6d2006-04-23 17:57:59 +00004496# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004497if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004498 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004499 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004500 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004501 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004502 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004503 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004504 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004505 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004506fi
4507
Stefan Weilf514f412009-10-11 12:44:07 +02004508# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004509byteswap_h=no
4510cat > $TMPC << EOF
4511#include <byteswap.h>
4512int main(void) { return bswap_32(0); }
4513EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004514if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004515 byteswap_h=yes
4516fi
4517
Stefan Weil75f13592013-01-05 12:17:38 +01004518# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004519bswap_h=no
4520cat > $TMPC << EOF
4521#include <sys/endian.h>
4522#include <sys/types.h>
4523#include <machine/bswap.h>
4524int main(void) { return bswap32(0); }
4525EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004526if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004527 bswap_h=yes
4528fi
4529
aliguorida93a1f2008-12-12 20:02:52 +00004530##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004531# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004532if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004533 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004534 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004535 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4536 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004537 else
4538 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004539 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004540 fi
4541 libiscsi="no"
4542 fi
4543fi
4544
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004545##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004546# Do we need libm
4547cat > $TMPC << EOF
4548#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004549int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004550EOF
4551if compile_prog "" "" ; then
4552 :
4553elif compile_prog "" "-lm" ; then
4554 LIBS="-lm $LIBS"
4555 libs_qga="-lm $libs_qga"
4556else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004557 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004558fi
4559
4560##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004561# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004562# uClibc provides 2 versions of clock_gettime(), one with realtime
4563# support and one without. This means that the clock_gettime() don't
4564# need -lrt. We still need it for timer_create() so we check for this
4565# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004566cat > $TMPC <<EOF
4567#include <signal.h>
4568#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004569int main(void) {
4570 timer_create(CLOCK_REALTIME, NULL, NULL);
4571 return clock_gettime(CLOCK_REALTIME, NULL);
4572}
aliguorida93a1f2008-12-12 20:02:52 +00004573EOF
4574
Juan Quintela52166aa2009-08-03 14:46:03 +02004575if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004576 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004577# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004578elif compile_prog "" "$pthread_lib -lrt" ; then
4579 LIBS="$LIBS -lrt"
4580 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004581fi
4582
Blue Swirl31ff5042009-09-12 12:33:07 +00004583if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004584 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004585 libs_softmmu="-lutil $libs_softmmu"
4586fi
4587
Blue Swirlde5071c2009-09-12 09:58:46 +00004588##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004589# spice probe
4590if test "$spice" != "no" ; then
4591 cat > $TMPC << EOF
4592#include <spice.h>
4593int main(void) { spice_server_new(); return 0; }
4594EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004595 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4596 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004597 if $pkg_config --atleast-version=0.12.0 spice-server && \
4598 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004599 compile_prog "$spice_cflags" "$spice_libs" ; then
4600 spice="yes"
4601 libs_softmmu="$libs_softmmu $spice_libs"
4602 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004603 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4604 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004605 else
4606 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004607 feature_not_found "spice" \
4608 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004609 fi
4610 spice="no"
4611 fi
4612fi
4613
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004614# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004615if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004616 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004617 libcacard_cflags=$($pkg_config --cflags libcacard)
4618 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004619 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004620 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004621 if test "$smartcard" = "yes"; then
4622 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004623 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004624 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004625 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004626fi
4627
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004628# check for libusb
4629if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004630 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004631 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004632 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4633 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004634 else
4635 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004636 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004637 fi
4638 libusb="no"
4639 fi
4640fi
4641
Hans de Goede69354a82011-07-19 11:04:10 +02004642# check for usbredirparser for usb network redirection support
4643if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004644 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004645 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004646 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4647 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004648 else
4649 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004650 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004651 fi
4652 usb_redir="no"
4653 fi
4654fi
4655
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004656##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004657# check if we have VSS SDK headers for win
4658
4659if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4660 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004661 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004662 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4663 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004664 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004665 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4666 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004667 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004668 esac
4669 cat > $TMPC << EOF
4670#define __MIDL_user_allocate_free_DEFINED__
4671#include <inc/win2003/vss.h>
4672int main(void) { return VSS_CTX_BACKUP; }
4673EOF
4674 if compile_prog "$vss_win32_include" "" ; then
4675 guest_agent_with_vss="yes"
4676 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004677 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004678 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004679 else
4680 if test "$vss_win32_sdk" != "" ; then
4681 echo "ERROR: Please download and install Microsoft VSS SDK:"
4682 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4683 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4684 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4685 echo "ERROR: The headers are extracted in the directory \`inc'."
4686 feature_not_found "VSS support"
4687 fi
4688 guest_agent_with_vss="no"
4689 fi
4690fi
4691
4692##########################################
4693# lookup Windows platform SDK (if not specified)
4694# The SDK is needed only to build .tlb (type library) file of guest agent
4695# VSS provider from the source. It is usually unnecessary because the
4696# pre-compiled .tlb file is included.
4697
4698if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4699 if test -z "$win_sdk"; then
4700 programfiles="$PROGRAMFILES"
4701 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4702 if test -n "$programfiles"; then
4703 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4704 else
4705 feature_not_found "Windows SDK"
4706 fi
4707 elif test "$win_sdk" = "no"; then
4708 win_sdk=""
4709 fi
4710fi
4711
4712##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004713# check if mingw environment provides a recent ntddscsi.h
4714if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4715 cat > $TMPC << EOF
4716#include <windows.h>
4717#include <ntddscsi.h>
4718int main(void) {
4719#if !defined(IOCTL_SCSI_GET_ADDRESS)
4720#error Missing required ioctl definitions
4721#endif
4722 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4723 return addr.Lun;
4724}
4725EOF
4726 if compile_prog "" "" ; then
4727 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004728 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004729 fi
4730fi
4731
4732##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004733# virgl renderer probe
4734
4735if test "$virglrenderer" != "no" ; then
4736 cat > $TMPC << EOF
4737#include <virglrenderer.h>
4738int main(void) { virgl_renderer_poll(); return 0; }
4739EOF
4740 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4741 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004742 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004743 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4744 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4745 virglrenderer="yes"
4746 else
4747 if test "$virglrenderer" = "yes" ; then
4748 feature_not_found "virglrenderer"
4749 fi
4750 virglrenderer="no"
4751 fi
4752fi
4753
4754##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004755# capstone
4756
Richard Hendersone219c492017-09-28 09:01:23 -07004757case "$capstone" in
4758 "" | yes)
4759 if $pkg_config capstone; then
4760 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004761 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004762 capstone=git
4763 elif test -e "${source_path}/capstone/Makefile" ; then
4764 capstone=internal
4765 elif test -z "$capstone" ; then
4766 capstone=no
4767 else
4768 feature_not_found "capstone" "Install capstone devel or git submodule"
4769 fi
4770 ;;
4771
4772 system)
4773 if ! $pkg_config capstone; then
4774 feature_not_found "capstone" "Install capstone devel"
4775 fi
4776 ;;
4777esac
4778
4779case "$capstone" in
4780 git | internal)
4781 if test "$capstone" = git; then
4782 git_submodules="${git_submodules} capstone"
4783 fi
4784 mkdir -p capstone
4785 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4786 if test "$mingw32" = "yes"; then
4787 LIBCAPSTONE=capstone.lib
4788 else
4789 LIBCAPSTONE=libcapstone.a
4790 fi
4791 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4792 ;;
4793
4794 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004795 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4796 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004797 ;;
4798
4799 no)
4800 ;;
4801 *)
4802 error_exit "Unknown state for capstone: $capstone"
4803 ;;
4804esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004805
4806##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004807# check if we have fdatasync
4808
4809fdatasync=no
4810cat > $TMPC << EOF
4811#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004812int main(void) {
4813#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4814return fdatasync(0);
4815#else
Stefan Weile172fe12012-04-06 21:33:20 +02004816#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004817#endif
4818}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004819EOF
4820if compile_prog "" "" ; then
4821 fdatasync=yes
4822fi
4823
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004824##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004825# check if we have madvise
4826
4827madvise=no
4828cat > $TMPC << EOF
4829#include <sys/types.h>
4830#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004831#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004832int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4833EOF
4834if compile_prog "" "" ; then
4835 madvise=yes
4836fi
4837
4838##########################################
4839# check if we have posix_madvise
4840
4841posix_madvise=no
4842cat > $TMPC << EOF
4843#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004844#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004845int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4846EOF
4847if compile_prog "" "" ; then
4848 posix_madvise=yes
4849fi
4850
4851##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004852# check if we have posix_memalign()
4853
4854posix_memalign=no
4855cat > $TMPC << EOF
4856#include <stdlib.h>
4857int main(void) {
4858 void *p;
4859 return posix_memalign(&p, 8, 8);
4860}
4861EOF
4862if compile_prog "" "" ; then
4863 posix_memalign=yes
4864fi
4865
4866##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004867# check if we have posix_syslog
4868
4869posix_syslog=no
4870cat > $TMPC << EOF
4871#include <syslog.h>
4872int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4873EOF
4874if compile_prog "" "" ; then
4875 posix_syslog=yes
4876fi
4877
4878##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004879# check if we have sem_timedwait
4880
4881sem_timedwait=no
4882cat > $TMPC << EOF
4883#include <semaphore.h>
4884int main(void) { return sem_timedwait(0, 0); }
4885EOF
4886if compile_prog "" "" ; then
4887 sem_timedwait=yes
4888fi
4889
4890##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004891# check if we have strchrnul
4892
4893strchrnul=no
4894cat > $TMPC << EOF
4895#include <string.h>
4896int main(void);
4897// Use a haystack that the compiler shouldn't be able to constant fold
4898char *haystack = (char*)&main;
4899int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4900EOF
4901if compile_prog "" "" ; then
4902 strchrnul=yes
4903fi
4904
4905##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004906# check if trace backend exists
4907
Lluís Vilanova5b808272014-05-27 15:02:14 +02004908$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004909if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004910 error_exit "invalid trace backends" \
4911 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004912fi
4913
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004914##########################################
4915# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004916if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004917 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004918#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004919int main(void) { return 0; }
4920EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004921 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004922 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004923 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004924 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004925 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004926 fi
4927 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004928 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004929 else
4930 urcu_bp_libs="-lurcu-bp"
4931 fi
4932
4933 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4934 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004935 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004936 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004937 fi
4938fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004939
4940##########################################
4941# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004942if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004943 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004944 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004945 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004946 trace_backend_stap="no"
4947 if has 'stap' ; then
4948 trace_backend_stap="yes"
4949 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004950fi
4951
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004952##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004953# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304954
Peter Maydell7c2acc72013-04-08 12:11:27 +01004955# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004956# is sigcontext. On Windows the only valid backend is the Windows
4957# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004958
4959ucontext_works=no
4960if test "$darwin" != "yes"; then
4961 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304962#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004963#ifdef __stub_makecontext
4964#error Ignoring glibc stub makecontext which will always fail
4965#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004966int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304967EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004968 if compile_prog "" "" ; then
4969 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304970 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004971fi
4972
4973if test "$coroutine" = ""; then
4974 if test "$mingw32" = "yes"; then
4975 coroutine=win32
4976 elif test "$ucontext_works" = "yes"; then
4977 coroutine=ucontext
4978 else
4979 coroutine=sigaltstack
4980 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004981else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004982 case $coroutine in
4983 windows)
4984 if test "$mingw32" != "yes"; then
4985 error_exit "'windows' coroutine backend only valid for Windows"
4986 fi
4987 # Unfortunately the user visible backend name doesn't match the
4988 # coroutine-*.c filename for this case, so we have to adjust it here.
4989 coroutine=win32
4990 ;;
4991 ucontext)
4992 if test "$ucontext_works" != "yes"; then
4993 feature_not_found "ucontext"
4994 fi
4995 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004996 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004997 if test "$mingw32" = "yes"; then
4998 error_exit "only the 'windows' coroutine backend is valid for Windows"
4999 fi
5000 ;;
5001 *)
5002 error_exit "unknown coroutine backend $coroutine"
5003 ;;
5004 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305005fi
5006
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005007if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005008 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005009fi
5010
Peter Lieven7d992e42016-09-27 11:58:45 +02005011if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005012 if test "$coroutine_pool" = "yes"; then
5013 echo "WARN: disabling coroutine pool for stack usage debugging"
5014 coroutine_pool=no
5015 fi
5016fi
5017
5018
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305019##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305020# check if we have open_by_handle_at
5021
Stefan Weil4e1797f2012-06-18 22:11:06 +02005022open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305023cat > $TMPC << EOF
5024#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005025#if !defined(AT_EMPTY_PATH)
5026# error missing definition
5027#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005028int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005029#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305030EOF
5031if compile_prog "" "" ; then
5032 open_by_handle_at=yes
5033fi
5034
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305035########################################
5036# check if we have linux/magic.h
5037
5038linux_magic_h=no
5039cat > $TMPC << EOF
5040#include <linux/magic.h>
5041int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005042 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305043}
5044EOF
5045if compile_prog "" "" ; then
5046 linux_magic_h=yes
5047fi
5048
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005049########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005050# check whether we can disable warning option with a pragma (this is needed
5051# to silence warnings in the headers of some versions of external libraries).
5052# This test has to be compiled with -Werror as otherwise an unknown pragma is
5053# only a warning.
5054#
5055# If we can't selectively disable warning in the code, disable -Werror so that
5056# the build doesn't fail anyway.
5057
Peter Maydell06d71fa2012-07-30 16:13:07 +01005058pragma_disable_unused_but_set=no
5059cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005060#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005061#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005062#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005063
Peter Maydell06d71fa2012-07-30 16:13:07 +01005064int main(void) {
5065 return 0;
5066}
5067EOF
5068if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005069 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005070else
5071 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005072fi
5073
5074########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005075# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005076
5077valgrind_h=no
5078cat > $TMPC << EOF
5079#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005080int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005081 return 0;
5082}
5083EOF
5084if compile_prog "" "" ; then
5085 valgrind_h=yes
5086fi
5087
5088########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005089# check if environ is declared
5090
5091has_environ=no
5092cat > $TMPC << EOF
5093#include <unistd.h>
5094int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005095 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005096 return 0;
5097}
5098EOF
5099if compile_prog "" "" ; then
5100 has_environ=yes
5101fi
5102
Richard Henderson76a347e2012-12-28 14:17:02 -08005103########################################
5104# check if cpuid.h is usable.
5105
Richard Henderson76a347e2012-12-28 14:17:02 -08005106cat > $TMPC << EOF
5107#include <cpuid.h>
5108int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005109 unsigned a, b, c, d;
5110 int max = __get_cpuid_max(0, 0);
5111
5112 if (max >= 1) {
5113 __cpuid(1, a, b, c, d);
5114 }
5115
5116 if (max >= 7) {
5117 __cpuid_count(7, 0, a, b, c, d);
5118 }
5119
5120 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005121}
5122EOF
5123if compile_prog "" "" ; then
5124 cpuid_h=yes
5125fi
5126
Richard Henderson5dd89902017-07-18 18:40:18 -10005127##########################################
5128# avx2 optimization requirement check
5129#
5130# There is no point enabling this if cpuid.h is not usable,
5131# since we won't be able to select the new routines.
5132
5133if test $cpuid_h = yes; then
5134 cat > $TMPC << EOF
5135#pragma GCC push_options
5136#pragma GCC target("avx2")
5137#include <cpuid.h>
5138#include <immintrin.h>
5139static int bar(void *a) {
5140 __m256i x = *(__m256i *)a;
5141 return _mm256_testz_si256(x, x);
5142}
5143int main(int argc, char *argv[]) { return bar(argv[0]); }
5144EOF
5145 if compile_object "" ; then
5146 avx2_opt="yes"
5147 fi
5148fi
5149
Richard Hendersonf5401662013-02-16 12:46:59 -08005150########################################
5151# check if __[u]int128_t is usable.
5152
5153int128=no
5154cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01005155#if defined(__clang_major__) && defined(__clang_minor__)
5156# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5157# error __int128_t does not work in CLANG before 3.2
5158# endif
5159#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08005160__int128_t a;
5161__uint128_t b;
5162int main (void) {
5163 a = a + b;
5164 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005165 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005166 return 0;
5167}
5168EOF
5169if compile_prog "" "" ; then
5170 int128=yes
5171fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005172
Richard Henderson7ebee432016-06-29 21:10:59 -07005173#########################################
5174# See if 128-bit atomic operations are supported.
5175
5176atomic128=no
5177if test "$int128" = "yes"; then
5178 cat > $TMPC << EOF
5179int main(void)
5180{
5181 unsigned __int128 x = 0, y = 0;
5182 y = __atomic_load_16(&x, 0);
5183 __atomic_store_16(&x, y, 0);
5184 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5185 return 0;
5186}
5187EOF
5188 if compile_prog "" "" ; then
5189 atomic128=yes
5190 fi
5191fi
5192
Richard Hendersondf79b992016-09-02 12:23:57 -07005193#########################################
5194# See if 64-bit atomic operations are supported.
5195# Note that without __atomic builtins, we can only
5196# assume atomic loads/stores max at pointer size.
5197
5198cat > $TMPC << EOF
5199#include <stdint.h>
5200int main(void)
5201{
5202 uint64_t x = 0, y = 0;
5203#ifdef __ATOMIC_RELAXED
5204 y = __atomic_load_8(&x, 0);
5205 __atomic_store_8(&x, y, 0);
5206 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5207 __atomic_exchange_8(&x, y, 0);
5208 __atomic_fetch_add_8(&x, y, 0);
5209#else
5210 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5211 __sync_lock_test_and_set(&x, y);
5212 __sync_val_compare_and_swap(&x, y, 0);
5213 __sync_fetch_and_add(&x, y);
5214#endif
5215 return 0;
5216}
5217EOF
5218if compile_prog "" "" ; then
5219 atomic64=yes
5220fi
5221
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005222########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005223# See if 16-byte vector operations are supported.
5224# Even without a vector unit the compiler may expand these.
5225# There is a bug in old GCC for PPC that crashes here.
5226# Unfortunately it's the system compiler for Centos 7.
5227
5228cat > $TMPC << EOF
5229typedef unsigned char U1 __attribute__((vector_size(16)));
5230typedef unsigned short U2 __attribute__((vector_size(16)));
5231typedef unsigned int U4 __attribute__((vector_size(16)));
5232typedef unsigned long long U8 __attribute__((vector_size(16)));
5233typedef signed char S1 __attribute__((vector_size(16)));
5234typedef signed short S2 __attribute__((vector_size(16)));
5235typedef signed int S4 __attribute__((vector_size(16)));
5236typedef signed long long S8 __attribute__((vector_size(16)));
5237static U1 a1, b1;
5238static U2 a2, b2;
5239static U4 a4, b4;
5240static U8 a8, b8;
5241static S1 c1;
5242static S2 c2;
5243static S4 c4;
5244static S8 c8;
5245static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005246void helper(void *d, void *a, int shift, int i);
5247void helper(void *d, void *a, int shift, int i)
5248{
5249 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5250 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5251 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5252 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5253}
Richard Hendersondb432672017-09-15 14:11:45 -07005254int main(void)
5255{
5256 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5257 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5258 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5259 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5260 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5261 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5262 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5263 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5264 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5265 return 0;
5266}
5267EOF
5268
5269vector16=no
5270if compile_prog "" "" ; then
5271 vector16=yes
5272fi
5273
5274########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005275# check if getauxval is available.
5276
5277getauxval=no
5278cat > $TMPC << EOF
5279#include <sys/auxv.h>
5280int main(void) {
5281 return getauxval(AT_HWCAP) == 0;
5282}
5283EOF
5284if compile_prog "" "" ; then
5285 getauxval=yes
5286fi
5287
John Snowfd0e6052015-03-25 18:57:39 -04005288########################################
5289# check if ccache is interfering with
5290# semantic analysis of macros
5291
John Snow5e4dfd32015-10-28 13:56:40 -04005292unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005293ccache_cpp2=no
5294cat > $TMPC << EOF
5295static const int Z = 1;
5296#define fn() ({ Z; })
5297#define TAUT(X) ((X) == Z)
5298#define PAREN(X, Y) (X == Y)
5299#define ID(X) (X)
5300int main(int argc, char *argv[])
5301{
5302 int x = 0, y = 0;
5303 x = ID(x);
5304 x = fn();
5305 fn();
5306 if (PAREN(x, y)) return 0;
5307 if (TAUT(Z)) return 0;
5308 return 0;
5309}
5310EOF
5311
5312if ! compile_object "-Werror"; then
5313 ccache_cpp2=yes
5314fi
5315
John Snowb553a042015-11-03 15:43:42 -05005316#################################################
5317# clang does not support glibc + FORTIFY_SOURCE.
5318
5319if test "$fortify_source" != "no"; then
5320 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5321 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005322 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005323 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005324 fortify_source="no";
5325 else
5326 fortify_source="yes"
5327 fi
5328fi
5329
Fam Zheng1efad062018-06-01 17:26:43 +08005330###############################################
5331# Check if copy_file_range is provided by glibc
5332have_copy_file_range=no
5333cat > $TMPC << EOF
5334#include <unistd.h>
5335int main(void) {
5336 copy_file_range(0, NULL, 0, NULL, 0, 0);
5337 return 0;
5338}
5339EOF
5340if compile_prog "" "" ; then
5341 have_copy_file_range=yes
5342fi
5343
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305344##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005345# check if struct fsxattr is available via linux/fs.h
5346
5347have_fsxattr=no
5348cat > $TMPC << EOF
5349#include <linux/fs.h>
5350struct fsxattr foo;
5351int main(void) {
5352 return 0;
5353}
5354EOF
5355if compile_prog "" "" ; then
5356 have_fsxattr=yes
5357fi
5358
Peter Maydellb66e10e2016-06-08 18:34:32 +01005359##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005360# check for usable membarrier system call
5361if test "$membarrier" = "yes"; then
5362 have_membarrier=no
5363 if test "$mingw32" = "yes" ; then
5364 have_membarrier=yes
5365 elif test "$linux" = "yes" ; then
5366 cat > $TMPC << EOF
5367 #include <linux/membarrier.h>
5368 #include <sys/syscall.h>
5369 #include <unistd.h>
5370 #include <stdlib.h>
5371 int main(void) {
5372 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5373 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5374 exit(0);
5375 }
5376EOF
5377 if compile_prog "" "" ; then
5378 have_membarrier=yes
5379 fi
5380 fi
5381 if test "$have_membarrier" = "no"; then
5382 feature_not_found "membarrier" "membarrier system call not available"
5383 fi
5384else
5385 # Do not enable it by default even for Mingw32, because it doesn't
5386 # work on Wine.
5387 membarrier=no
5388fi
5389
5390##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005391# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005392have_rtnetlink=no
5393cat > $TMPC << EOF
5394#include <linux/rtnetlink.h>
5395int main(void) {
5396 return IFLA_PROTO_DOWN;
5397}
5398EOF
5399if compile_prog "" "" ; then
5400 have_rtnetlink=yes
5401fi
5402
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005403##########################################
5404# check for usable AF_VSOCK environment
5405have_af_vsock=no
5406cat > $TMPC << EOF
5407#include <errno.h>
5408#include <sys/types.h>
5409#include <sys/socket.h>
5410#if !defined(AF_VSOCK)
5411# error missing AF_VSOCK flag
5412#endif
5413#include <linux/vm_sockets.h>
5414int main(void) {
5415 int sock, ret;
5416 struct sockaddr_vm svm;
5417 socklen_t len = sizeof(svm);
5418 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5419 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5420 if ((ret == -1) && (errno == ENOTCONN)) {
5421 return 0;
5422 }
5423 return -1;
5424}
5425EOF
5426if compile_prog "" "" ; then
5427 have_af_vsock=yes
5428fi
5429
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005430##########################################
5431# check for usable AF_ALG environment
5432hava_afalg=no
5433cat > $TMPC << EOF
5434#include <errno.h>
5435#include <sys/types.h>
5436#include <sys/socket.h>
5437#include <linux/if_alg.h>
5438int main(void) {
5439 int sock;
5440 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5441 return sock;
5442}
5443EOF
5444if compile_prog "" "" ; then
5445 have_afalg=yes
5446fi
5447if test "$crypto_afalg" = "yes"
5448then
5449 if test "$have_afalg" != "yes"
5450 then
5451 error_exit "AF_ALG requested but could not be detected"
5452 fi
5453fi
5454
5455
James Clarke6969ec62016-06-06 12:02:50 +01005456#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005457# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005458if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005459 cat > $TMPC << EOF
5460#include <Hypervisor/hv.h>
5461int main() { return 0;}
5462EOF
5463 if ! compile_object ""; then
5464 hvf='no'
5465 else
5466 hvf='yes'
5467 LDFLAGS="-framework Hypervisor $LDFLAGS"
5468 fi
5469fi
5470
5471#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005472# Sparc implicitly links with --relax, which is
5473# incompatible with -r, so --no-relax should be
5474# given. It does no harm to give it on other
5475# platforms too.
5476
5477# Note: the prototype is needed since QEMU_CFLAGS
5478# contains -Wmissing-prototypes
5479cat > $TMPC << EOF
5480extern int foo(void);
5481int foo(void) { return 0; }
5482EOF
5483if ! compile_object ""; then
5484 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5485fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005486for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5487 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5488 LD_REL_FLAGS=$i
5489 break
5490 fi
5491done
5492if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5493 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005494fi
5495
Jan Vesely277abf12016-04-29 13:15:23 -04005496##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005497# check for sysmacros.h
5498
5499have_sysmacros=no
5500cat > $TMPC << EOF
5501#include <sys/sysmacros.h>
5502int main(void) {
5503 return makedev(0, 0);
5504}
5505EOF
5506if compile_prog "" "" ; then
5507 have_sysmacros=yes
5508fi
5509
5510##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005511# Veritas HyperScale block driver VxHS
5512# Check if libvxhs is installed
5513
5514if test "$vxhs" != "no" ; then
5515 cat > $TMPC <<EOF
5516#include <stdint.h>
5517#include <qnio/qnio_api.h>
5518
5519void *vxhs_callback;
5520
5521int main(void) {
5522 iio_init(QNIO_VERSION, vxhs_callback);
5523 return 0;
5524}
5525EOF
5526 vxhs_libs="-lvxhs -lssl"
5527 if compile_prog "" "$vxhs_libs" ; then
5528 vxhs=yes
5529 else
5530 if test "$vxhs" = "yes" ; then
5531 feature_not_found "vxhs block device" "Install libvxhs See github"
5532 fi
5533 vxhs=no
5534 fi
5535fi
5536
5537##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005538# check for _Static_assert()
5539
5540have_static_assert=no
5541cat > $TMPC << EOF
5542_Static_assert(1, "success");
5543int main(void) {
5544 return 0;
5545}
5546EOF
5547if compile_prog "" "" ; then
5548 have_static_assert=yes
5549fi
5550
5551##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005552# check for utmpx.h, it is missing e.g. on OpenBSD
5553
5554have_utmpx=no
5555cat > $TMPC << EOF
5556#include <utmpx.h>
5557struct utmpx user_info;
5558int main(void) {
5559 return 0;
5560}
5561EOF
5562if compile_prog "" "" ; then
5563 have_utmpx=yes
5564fi
5565
5566##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005567# checks for sanitizers
5568
Marc-André Lureau247724c2018-01-16 16:11:51 +01005569have_asan=no
5570have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005571have_asan_iface_h=no
5572have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005573
5574if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005575 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005576 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5577 have_asan=yes
5578 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005579
5580 # we could use a simple skeleton for flags checks, but this also
5581 # detect the static linking issue of ubsan, see also:
5582 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5583 cat > $TMPC << EOF
5584#include <stdlib.h>
5585int main(void) {
5586 void *tmp = malloc(10);
5587 return *(int *)(tmp + 2);
5588}
5589EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005590 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5591 have_ubsan=yes
5592 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005593
5594 if check_include "sanitizer/asan_interface.h" ; then
5595 have_asan_iface_h=yes
5596 fi
5597
5598 cat > $TMPC << EOF
5599#include <sanitizer/asan_interface.h>
5600int main(void) {
5601 __sanitizer_start_switch_fiber(0, 0, 0);
5602 return 0;
5603}
5604EOF
5605 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5606 have_asan_iface_fiber=yes
5607 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005608fi
5609
5610##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005611# Docker and cross-compiler support
5612#
5613# This is specifically for building test
5614# cases for foreign architectures, not
5615# cross-compiling QEMU itself.
5616
5617if has "docker"; then
5618 docker=$($python $source_path/tests/docker/docker.py probe)
5619fi
5620
5621##########################################
Junyan He17824402018-07-18 15:47:59 +08005622# check for libpmem
5623
5624if test "$libpmem" != "no"; then
5625 if $pkg_config --exists "libpmem"; then
5626 libpmem="yes"
5627 libpmem_libs=$($pkg_config --libs libpmem)
5628 libpmem_cflags=$($pkg_config --cflags libpmem)
5629 libs_softmmu="$libs_softmmu $libpmem_libs"
5630 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5631 else
5632 if test "$libpmem" = "yes" ; then
5633 feature_not_found "libpmem" "Install nvml or pmdk"
5634 fi
5635 libpmem="no"
5636 fi
5637fi
5638
5639##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005640# End of CC checks
5641# After here, no more $cc or $ld runs
5642
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005643write_c_skeleton
5644
Blue Swirl1d728c32012-05-01 18:45:39 +00005645if test "$gcov" = "yes" ; then
5646 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5647 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005648elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005649 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005650elif test "$debug" = "no"; then
5651 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005652fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005653
Marc-André Lureau247724c2018-01-16 16:11:51 +01005654if test "$have_asan" = "yes"; then
5655 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005656 if test "$have_asan_iface_h" = "no" ; then
5657 echo "ASAN build enabled, but ASAN header missing." \
5658 "Without code annotation, the report may be inferior."
5659 elif test "$have_asan_iface_fiber" = "no" ; then
5660 echo "ASAN build enabled, but ASAN header is too old." \
5661 "Without code annotation, the report may be inferior."
5662 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005663fi
5664if test "$have_ubsan" = "yes"; then
5665 CFLAGS="-fsanitize=undefined $CFLAGS"
5666fi
5667
Peter Lieven6542aa92014-02-03 10:26:13 +01005668##########################################
5669# Do we have libnfs
5670if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005671 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005672 libnfs="yes"
5673 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005674 else
5675 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005676 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005677 fi
5678 libnfs="no"
5679 fi
5680fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005681
Peter Maydell6ca026c2012-07-18 15:10:18 +01005682# Now we've finished running tests it's OK to add -Werror to the compiler flags
5683if test "$werror" = "yes"; then
5684 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5685fi
5686
Juan Quintelae86ecd42009-08-03 14:45:59 +02005687if test "$solaris" = "no" ; then
5688 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005689 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005690 fi
5691fi
5692
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005693# test if pod2man has --utf8 option
5694if pod2man --help | grep -q utf8; then
5695 POD2MAN="pod2man --utf8"
5696else
5697 POD2MAN="pod2man"
5698fi
5699
Blue Swirl952afb72010-09-19 08:36:34 +00005700# Use ASLR, no-SEH and DEP if available
5701if test "$mingw32" = "yes" ; then
5702 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005703 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005704 LDFLAGS="-Wl,$flag $LDFLAGS"
5705 fi
5706 done
5707fi
5708
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005709qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005710qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005711qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005712qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005713
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005714# We can only support ivshmem if we have eventfd
5715if [ "$eventfd" = "yes" ]; then
5716 ivshmem=yes
5717fi
5718
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005719tools=""
5720if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02005721 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005722 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5723 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005724 fi
5725 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005726 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005727 fi
5728fi
5729if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005730 if test "$linux" = yes; then
5731 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005732 virtfs=yes
5733 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5734 else
5735 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005736 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305737 fi
Andreas Färber17500372012-05-01 01:12:03 +02005738 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005739 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005740 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5741 mpath=yes
5742 else
5743 if test "$mpath" = yes; then
5744 error_exit "Multipath requires libmpathpersist devel"
5745 fi
5746 mpath=no
5747 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005748 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5749 else
5750 if test "$virtfs" = yes; then
5751 error_exit "VirtFS is supported only on Linux"
5752 fi
5753 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005754 if test "$mpath" = yes; then
5755 error_exit "Multipath is supported only on Linux"
5756 fi
5757 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305758 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005759 if test "$xkbcommon" = "yes"; then
5760 tools="qemu-keymap\$(EXESUF) $tools"
5761 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005762fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005763
5764# Probe for guest agent support/options
5765
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005766if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005767 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005768 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005769 guest_agent=yes
5770 elif [ "$guest_agent" != yes ]; then
5771 guest_agent=no
5772 else
5773 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005774 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005775fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005776
Michael Roth9d6bc272015-08-26 10:49:13 -05005777# Guest agent Window MSI package
5778
5779if test "$guest_agent" != yes; then
5780 if test "$guest_agent_msi" = yes; then
5781 error_exit "MSI guest agent package requires guest agent enabled"
5782 fi
5783 guest_agent_msi=no
5784elif test "$mingw32" != "yes"; then
5785 if test "$guest_agent_msi" = "yes"; then
5786 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5787 fi
5788 guest_agent_msi=no
5789elif ! has wixl; then
5790 if test "$guest_agent_msi" = "yes"; then
5791 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5792 fi
5793 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005794else
5795 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5796 # disabled explicitly
5797 if test "$guest_agent_msi" != "no"; then
5798 guest_agent_msi=yes
5799 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005800fi
5801
Michael Roth1a349042015-08-26 11:14:31 -05005802if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005803 if test "$guest_agent_with_vss" = "yes"; then
5804 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5805 fi
5806
5807 if test "$QEMU_GA_MANUFACTURER" = ""; then
5808 QEMU_GA_MANUFACTURER=QEMU
5809 fi
5810
5811 if test "$QEMU_GA_DISTRO" = ""; then
5812 QEMU_GA_DISTRO=Linux
5813 fi
5814
5815 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005816 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005817 fi
5818
Stefan Weil89138852016-05-16 15:10:20 +02005819 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005820
5821 case "$cpu" in
5822 x86_64)
5823 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5824 ;;
5825 i386)
5826 QEMU_GA_MSI_ARCH="-D Arch=32"
5827 ;;
5828 *)
5829 error_exit "CPU $cpu not supported for building installation package"
5830 ;;
5831 esac
5832fi
5833
Paolo Bonzinica35f782010-05-26 16:08:29 +02005834# Mac OS X ships with a broken assembler
5835roms=
5836if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5837 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5838 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005839 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005840 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5841 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5842 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005843 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5844 ld_i386_emulation="$emu"
5845 roms="optionrom"
5846 break
5847 fi
5848 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005849fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005850if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005851 roms="$roms spapr-rtas"
5852fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005853
Christian Borntraeger9933c302013-04-23 01:23:03 +00005854if test "$cpu" = "s390x" ; then
5855 roms="$roms s390-ccw"
5856fi
5857
Richard Henderson964c6fa2013-06-21 19:10:16 -07005858# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005859if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005860 textseg_addr=
5861 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005862 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5863 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005864 textseg_addr=0x60000000
5865 ;;
5866 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005867 # A 256M aligned address, high in the address space, with enough
5868 # room for the code_gen_buffer above it before the stack.
5869 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005870 ;;
5871 esac
5872 if [ -n "$textseg_addr" ]; then
5873 cat > $TMPC <<EOF
5874 int main(void) { return 0; }
5875EOF
5876 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5877 if ! compile_prog "" "$textseg_ldflags"; then
5878 # In case ld does not support -Ttext-segment, edit the default linker
5879 # script via sed to set the .text start addr. This is needed on FreeBSD
5880 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005881 if ! $ld --verbose >/dev/null 2>&1; then
5882 error_exit \
5883 "We need to link the QEMU user mode binaries at a" \
5884 "specific text address. Unfortunately your linker" \
5885 "doesn't support either the -Ttext-segment option or" \
5886 "printing the default linker script with --verbose." \
5887 "If you don't want the user mode binaries, pass the" \
5888 "--disable-user option to configure."
5889 fi
5890
Richard Henderson964c6fa2013-06-21 19:10:16 -07005891 $ld --verbose | sed \
5892 -e '1,/==================================================/d' \
5893 -e '/==================================================/,$d' \
5894 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5895 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5896 textseg_ldflags="-Wl,-T../config-host.ld"
5897 fi
5898 fi
5899fi
5900
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005901# Check that the C++ compiler exists and works with the C compiler.
5902# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5903if has $cxx; then
5904 cat > $TMPC <<EOF
5905int c_function(void);
5906int main(void) { return c_function(); }
5907EOF
5908
5909 compile_object
5910
5911 cat > $TMPCXX <<EOF
5912extern "C" {
5913 int c_function(void);
5914}
5915int c_function(void) { return 42; }
5916EOF
5917
5918 update_cxxflags
5919
5920 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5921 # C++ compiler $cxx works ok with C compiler $cc
5922 :
5923 else
5924 echo "C++ compiler $cxx does not work with C compiler $cc"
5925 echo "Disabling C++ specific optional code"
5926 cxx=
5927 fi
5928else
5929 echo "No C++ compiler available; disabling C++ specific optional code"
5930 cxx=
5931fi
5932
Cole Robinson02d34f62016-05-06 14:03:09 -04005933echo_version() {
5934 if test "$1" = "yes" ; then
5935 echo "($2)"
5936 fi
5937}
5938
Jan Kiszka50e12062014-10-02 10:03:55 +02005939# prepend pixman and ftd flags after all config tests are done
5940QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005941QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005942libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005943
bellard43ce4df2003-06-09 19:53:12 +00005944echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005945echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005946echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005947echo "binary directory $(eval echo $bindir)"
5948echo "library directory $(eval echo $libdir)"
5949echo "module directory $(eval echo $qemu_moddir)"
5950echo "libexec directory $(eval echo $libexecdir)"
5951echo "include directory $(eval echo $includedir)"
5952echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005953if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005954echo "local state directory $(eval echo $local_statedir)"
5955echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005956echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005957else
5958echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005959echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005960fi
bellard5a671352003-10-01 00:13:48 +00005961echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005962echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005963echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005964echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005965echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005966echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005967echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005968echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005969echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005970echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005971echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005972echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005973echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005974echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005975echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005976if test "$slirp" = "yes" ; then
5977 echo "smbd $smbd"
5978fi
Fam Zheng17969262014-02-10 14:48:56 +08005979echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005980echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005981echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005982echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005983echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005984echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005985echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005986echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005987echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005988if test "$darwin" = "yes" ; then
5989 echo "Cocoa support $cocoa"
5990fi
Stefan Weil89138852016-05-16 15:10:20 +02005991echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5992echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005993echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005994echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005995echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005996echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005997echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005998echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005999echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02006000echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01006001echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006002echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00006003echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006004echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006005echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006006echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006007echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006008echo "Block whitelist (rw) $block_drv_rw_whitelist"
6009echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306010echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006011echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006012echo "VNC support $vnc"
6013if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006014 echo "VNC SASL support $vnc_sasl"
6015 echo "VNC JPEG support $vnc_jpeg"
6016 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006017fi
blueswir131422552007-04-16 18:27:06 +00006018if test -n "$sparc_cpu"; then
6019 echo "Target Sparc Arch $sparc_cpu"
6020fi
aliguorie37630c2009-04-22 15:19:10 +00006021echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006022if test "$xen" = "yes" ; then
6023 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00006024 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00006025fi
aurel322e4d9fb2008-04-08 06:01:02 +00006026echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006027echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006028echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006029echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006030echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006031echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006032echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006033echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006034echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006035echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006036echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006037echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006038echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006039echo "TCG support $tcg"
6040if test "$tcg" = "yes" ; then
6041 echo "TCG debug enabled $debug_tcg"
6042 echo "TCG interpreter $tcg_interpreter"
6043fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006044echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006045echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006046echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006047echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006048echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006049echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006050echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006051echo "madvise $madvise"
6052echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006053echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006054echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006055echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006056echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006057echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006058echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006059echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006060echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006061if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006062echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006063fi
Stefan Weil89138852016-05-16 15:10:20 +02006064echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006065echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006066echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006067echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006068echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006069echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006070echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006071echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006072echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006073echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006074echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006075echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006076echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006077echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006078echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006079echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006080echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006081echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006082echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006083echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306084echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006085echo "gcov $gcov_tool"
6086echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006087echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006088echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006089echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006090echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006091echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006092echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006093echo "lzo support $lzo"
6094echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006095echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006096echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006097echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006098echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006099echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006100echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006101echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006102echo "VxHS block device $vxhs"
Richard Henderson8ca80762017-09-14 09:41:12 -07006103echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006104echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006105echo "libpmem support $libpmem"
bellard67b915a2004-03-31 23:37:16 +00006106
Stefan Weil1ba16962011-07-29 22:40:45 +02006107if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006108echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006109fi
bellard97a847b2003-08-10 21:36:04 +00006110
Daniel P. Berrangeb7715af2017-12-12 11:34:40 +00006111if test "$gtkabi" = "2.0"; then
6112 echo
6113 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
6114 echo "WARNING: future releases. Please switch to using GTK 3.0"
6115fi
6116
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006117if test "$sdlabi" = "1.2"; then
6118 echo
6119 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6120 echo "WARNING: future releases. Please switch to using SDL 2.0"
6121fi
6122
Peter Maydell898be3e2017-03-21 14:31:57 +00006123if test "$supported_cpu" = "no"; then
6124 echo
6125 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6126 echo
6127 echo "CPU host architecture $cpu support is not currently maintained."
6128 echo "The QEMU project intends to remove support for this host CPU in"
6129 echo "a future release if nobody volunteers to maintain it and to"
6130 echo "provide a build host for our continuous integration setup."
6131 echo "configure has succeeded and you can continue to build, but"
6132 echo "if you care about QEMU on this platform you should contact"
6133 echo "us upstream at qemu-devel@nongnu.org."
6134fi
6135
6136if test "$supported_os" = "no"; then
6137 echo
6138 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6139 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006140 echo "Host OS $targetos support is not currently maintained."
6141 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006142 echo "a future release if nobody volunteers to maintain it and to"
6143 echo "provide a build host for our continuous integration setup."
6144 echo "configure has succeeded and you can continue to build, but"
6145 echo "if you care about QEMU on this platform you should contact"
6146 echo "us upstream at qemu-devel@nongnu.org."
6147fi
6148
Juan Quintela98ec69a2009-07-16 18:34:18 +02006149config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006150
Stefan Weildbd99ae2013-01-01 18:33:44 +01006151echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6152
Juan Quintela98ec69a2009-07-16 18:34:18 +02006153echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006154echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006155
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006156echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006157echo "prefix=$prefix" >> $config_host_mak
6158echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006159echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006160echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006161echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006162echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006163echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006164echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006165echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006166echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006167echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006168echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006169if test "$mingw32" = "no" ; then
6170 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6171fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006172echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006173echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006174echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006175echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006176echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006177echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006178
Juan Quintela98ec69a2009-07-16 18:34:18 +02006179echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006180
aurel32f8393942009-04-13 18:45:38 +00006181if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006182 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006183fi
aliguori1625af82009-04-05 17:41:02 +00006184if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006185 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006186fi
bellard7d132992003-03-06 23:23:54 +00006187if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006188 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006189fi
bellard67b915a2004-03-31 23:37:16 +00006190if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006191 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006192 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006193 version_major=${rc_version%%.*}
6194 rc_version=${rc_version#*.}
6195 version_minor=${rc_version%%.*}
6196 rc_version=${rc_version#*.}
6197 version_subminor=${rc_version%%.*}
6198 version_micro=0
6199 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6200 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006201 if test "$guest_agent_with_vss" = "yes" ; then
6202 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006203 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006204 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6205 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006206 if test "$guest_agent_ntddscsi" = "yes" ; then
6207 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6208 fi
Michael Roth1a349042015-08-26 11:14:31 -05006209 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006210 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006211 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6212 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6213 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6214 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6215 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6216 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6217 fi
pbrook210fa552007-02-27 21:04:49 +00006218else
Juan Quintela35f4df22009-07-27 16:13:07 +02006219 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006220fi
blueswir1128ab2f2008-08-15 18:33:42 +00006221
Mark McLoughlindffcb712009-10-22 17:49:11 +01006222if test "$linux" = "yes" ; then
6223 echo "CONFIG_LINUX=y" >> $config_host_mak
6224fi
6225
bellard83fb7ad2004-07-05 21:25:26 +00006226if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006227 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006228fi
malcb29fe3e2008-11-18 01:42:22 +00006229
bellardec530c82006-04-25 22:36:06 +00006230if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006231 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006232fi
Andreas Färber179cf402010-09-20 00:50:43 +02006233if test "$haiku" = "yes" ; then
6234 echo "CONFIG_HAIKU=y" >> $config_host_mak
6235fi
bellard97a847b2003-08-10 21:36:04 +00006236if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006237 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006238fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006239if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006240 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006241fi
bellardc20709a2004-04-21 23:27:19 +00006242if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006243 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006244 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006245fi
ths8a16d272008-07-19 09:56:24 +00006246if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006247 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006248 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006249fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006250if test "$netmap" = "yes" ; then
6251 echo "CONFIG_NETMAP=y" >> $config_host_mak
6252fi
Gonglei015a33b2014-07-01 20:58:08 +08006253if test "$l2tpv3" = "yes" ; then
6254 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6255fi
Corey Bryant47e98652012-01-26 09:42:26 -05006256if test "$cap_ng" = "yes" ; then
6257 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6258fi
Juan Quintela2358a492009-07-27 16:13:25 +02006259echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006260for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006261 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006262 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006263 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006264 echo "$def=m" >> $config_host_mak ;;
6265 *)
6266 echo "$def=y" >> $config_host_mak ;;
6267 esac
malc0c58ac12008-06-25 21:04:05 +00006268done
Fam Zhengb1149912017-09-07 16:29:13 +08006269echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6270echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6271echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6272echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6273echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006274if test "$audio_pt_int" = "yes" ; then
6275 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6276fi
malcd5631632009-10-10 01:13:41 +04006277if test "$audio_win_int" = "yes" ; then
6278 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6279fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006280echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6281echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006282if test "$vnc" = "yes" ; then
6283 echo "CONFIG_VNC=y" >> $config_host_mak
6284fi
aliguori2f9606b2009-03-06 20:27:28 +00006285if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006286 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006287fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006288if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006289 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006290fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006291if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006292 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006293fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006294if test "$xkbcommon" = "yes" ; then
6295 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6296 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6297fi
aliguori76655d62009-03-06 20:27:37 +00006298if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006299 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006300fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006301if test "$xfs" = "yes" ; then
6302 echo "CONFIG_XFS=y" >> $config_host_mak
6303fi
Stefan Weil89138852016-05-16 15:10:20 +02006304qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006305echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006306echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006307echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006308echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006309if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006310 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006311fi
Fam Zheng17969262014-02-10 14:48:56 +08006312if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006313 # $shacmd can generate a hash started with digit, which the compiler doesn't
6314 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006315 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006316 echo "CONFIG_MODULES=y" >> $config_host_mak
6317fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006318if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6319 echo "CONFIG_X11=y" >> $config_host_mak
6320 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6321 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6322fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006323if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006324 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006325 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006326 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006327 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006328fi
6329if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006330 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006331fi
6332if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006333 echo "CONFIG_CURSES=m" >> $config_host_mak
6334 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6335 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006336fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006337if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006338 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006339fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006340if test "$accept4" = "yes" ; then
6341 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6342fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306343if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006344 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306345fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006346if test "$eventfd" = "yes" ; then
6347 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6348fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006349if test "$memfd" = "yes" ; then
6350 echo "CONFIG_MEMFD=y" >> $config_host_mak
6351fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006352if test "$fallocate" = "yes" ; then
6353 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6354fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006355if test "$fallocate_punch_hole" = "yes" ; then
6356 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6357fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006358if test "$fallocate_zero_range" = "yes" ; then
6359 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6360fi
Kevin Wolfed911432014-09-29 17:12:59 +02006361if test "$posix_fallocate" = "yes" ; then
6362 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6363fi
Peter Maydellc727f472011-01-06 11:05:10 +00006364if test "$sync_file_range" = "yes" ; then
6365 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6366fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006367if test "$fiemap" = "yes" ; then
6368 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6369fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006370if test "$dup3" = "yes" ; then
6371 echo "CONFIG_DUP3=y" >> $config_host_mak
6372fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006373if test "$ppoll" = "yes" ; then
6374 echo "CONFIG_PPOLL=y" >> $config_host_mak
6375fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006376if test "$prctl_pr_set_timerslack" = "yes" ; then
6377 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6378fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006379if test "$epoll" = "yes" ; then
6380 echo "CONFIG_EPOLL=y" >> $config_host_mak
6381fi
6382if test "$epoll_create1" = "yes" ; then
6383 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6384fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006385if test "$sendfile" = "yes" ; then
6386 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6387fi
Riku Voipio51834342014-06-22 11:25:42 +01006388if test "$timerfd" = "yes" ; then
6389 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6390fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006391if test "$setns" = "yes" ; then
6392 echo "CONFIG_SETNS=y" >> $config_host_mak
6393fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006394if test "$clock_adjtime" = "yes" ; then
6395 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6396fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006397if test "$syncfs" = "yes" ; then
6398 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6399fi
aurel323b3f24a2009-04-15 16:12:13 +00006400if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006401 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006402fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006403if test "$inotify1" = "yes" ; then
6404 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6405fi
Peter Maydell401bc052017-09-05 13:19:32 +01006406if test "$sem_timedwait" = "yes" ; then
6407 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6408fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006409if test "$strchrnul" = "yes" ; then
6410 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6411fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006412if test "$byteswap_h" = "yes" ; then
6413 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6414fi
6415if test "$bswap_h" = "yes" ; then
6416 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6417fi
Alexander Graf769ce762009-05-11 17:41:42 +02006418if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006419 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006420 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006421 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006422fi
aurel322e4d9fb2008-04-08 06:01:02 +00006423if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006424 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006425 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006426fi
balrogfb599c92008-09-28 23:49:55 +00006427if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006428 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006429 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006430fi
Dr. David Alan Gilbertd46f7c92015-06-24 10:45:42 +01006431if test "$glib_subprocess" = "yes" ; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03006432 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6433fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006434if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006435 echo "CONFIG_GTK=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006436 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006437 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006438 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006439 if test "$gtk_gl" = "yes" ; then
6440 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6441 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006442fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006443echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006444if test "$gnutls" = "yes" ; then
6445 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6446fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09006447if test "$gnutls_rnd" = "yes" ; then
6448 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6449fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006450if test "$gcrypt" = "yes" ; then
6451 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006452 if test "$gcrypt_hmac" = "yes" ; then
6453 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6454 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01006455 if test "$gcrypt_kdf" = "yes" ; then
6456 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6457 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006458fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006459if test "$nettle" = "yes" ; then
6460 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006461 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01006462 if test "$nettle_kdf" = "yes" ; then
6463 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6464 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006465fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006466if test "$tasn1" = "yes" ; then
6467 echo "CONFIG_TASN1=y" >> $config_host_mak
6468fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006469if test "$have_ifaddrs_h" = "yes" ; then
6470 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6471fi
Eric Blake6b39b062016-10-11 10:46:23 -05006472if test "$have_broken_size_max" = "yes" ; then
6473 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6474fi
Jan Vesely277abf12016-04-29 13:15:23 -04006475
6476# Work around a system header bug with some kernel/XFS header
6477# versions where they both try to define 'struct fsxattr':
6478# xfs headers will not try to redefine structs from linux headers
6479# if this macro is set.
6480if test "$have_fsxattr" = "yes" ; then
6481 echo "HAVE_FSXATTR=y" >> $config_host_mak
6482fi
Fam Zheng1efad062018-06-01 17:26:43 +08006483if test "$have_copy_file_range" = "yes" ; then
6484 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6485fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006486if test "$vte" = "yes" ; then
6487 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006488 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006489 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006490fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006491if test "$virglrenderer" = "yes" ; then
6492 echo "CONFIG_VIRGL=y" >> $config_host_mak
6493 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6494 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6495fi
aliguorie37630c2009-04-22 15:19:10 +00006496if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006497 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006498 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006499 if test "$xen_pv_domain_build" = "yes" ; then
6500 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6501 fi
aliguorie37630c2009-04-22 15:19:10 +00006502fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006503if test "$linux_aio" = "yes" ; then
6504 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6505fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006506if test "$attr" = "yes" ; then
6507 echo "CONFIG_ATTR=y" >> $config_host_mak
6508fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006509if test "$libattr" = "yes" ; then
6510 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6511fi
Meador Inge983eef52012-02-24 14:00:42 +05306512if test "$virtfs" = "yes" ; then
6513 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006514fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006515if test "$mpath" = "yes" ; then
6516 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006517 if test "$mpathpersist_new_api" = "yes"; then
6518 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6519 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006520fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006521if test "$vhost_scsi" = "yes" ; then
6522 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6523fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006524if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006525 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6526fi
Gonglei042cea22018-03-01 21:46:28 +08006527if test "$vhost_crypto" = "yes" ; then
6528 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6529fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006530if test "$vhost_vsock" = "yes" ; then
6531 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6532fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006533if test "$vhost_user" = "yes" ; then
6534 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6535fi
ths77755342008-11-27 15:45:16 +00006536if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006537 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006538fi
aliguoribf9298b2008-12-05 20:05:26 +00006539if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006540 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006541fi
aliguoriceb42de2009-04-07 18:43:28 +00006542if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006543 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006544fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006545if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006546 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006547fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006548if test "$membarrier" = "yes" ; then
6549 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6550fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006551if test "$signalfd" = "yes" ; then
6552 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6553fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006554if test "$tcg" = "yes"; then
6555 echo "CONFIG_TCG=y" >> $config_host_mak
6556 if test "$tcg_interpreter" = "yes" ; then
6557 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6558 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006559fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006560if test "$fdatasync" = "yes" ; then
6561 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6562fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006563if test "$madvise" = "yes" ; then
6564 echo "CONFIG_MADVISE=y" >> $config_host_mak
6565fi
6566if test "$posix_madvise" = "yes" ; then
6567 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6568fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006569if test "$posix_memalign" = "yes" ; then
6570 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6571fi
bellard97a847b2003-08-10 21:36:04 +00006572
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006573if test "$spice" = "yes" ; then
6574 echo "CONFIG_SPICE=y" >> $config_host_mak
6575fi
6576
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006577if test "$smartcard" = "yes" ; then
6578 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006579 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6580 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006581fi
6582
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006583if test "$libusb" = "yes" ; then
6584 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006585 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6586 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006587fi
6588
Hans de Goede69354a82011-07-19 11:04:10 +02006589if test "$usb_redir" = "yes" ; then
6590 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006591 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6592 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006593fi
6594
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006595if test "$opengl" = "yes" ; then
6596 echo "CONFIG_OPENGL=y" >> $config_host_mak
6597 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006598 if test "$opengl_dmabuf" = "yes" ; then
6599 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6600 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006601fi
6602
Yang Zhong5a22ab72017-12-20 21:16:46 +08006603if test "$malloc_trim" = "yes" ; then
6604 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6605fi
6606
Liang Li99f2dbd2016-03-08 13:53:16 +08006607if test "$avx2_opt" = "yes" ; then
6608 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6609fi
6610
qiaonuohan607dacd2014-02-18 14:11:30 +08006611if test "$lzo" = "yes" ; then
6612 echo "CONFIG_LZO=y" >> $config_host_mak
6613fi
6614
6615if test "$snappy" = "yes" ; then
6616 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6617fi
6618
Peter Wu6b383c02015-01-06 18:48:14 +01006619if test "$bzip2" = "yes" ; then
6620 echo "CONFIG_BZIP2=y" >> $config_host_mak
6621 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6622fi
6623
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006624if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006625 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006626 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6627 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006628fi
6629
Peter Lieven6542aa92014-02-03 10:26:13 +01006630if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006631 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6632 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006633fi
6634
Eduardo Otubof7945732012-08-14 18:44:05 -03006635if test "$seccomp" = "yes"; then
6636 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006637 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6638 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006639fi
6640
bellard83fb7ad2004-07-05 21:25:26 +00006641# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006642if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006643 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006644fi
6645
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006646if test "$localtime_r" = "yes" ; then
6647 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6648fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006649if test "$qom_cast_debug" = "yes" ; then
6650 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6651fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006652if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006653 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006654 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6655 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006656fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006657
Peter Maydell7c2acc72013-04-08 12:11:27 +01006658echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006659if test "$coroutine_pool" = "yes" ; then
6660 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6661else
6662 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6663fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306664
Peter Lieven7d992e42016-09-27 11:58:45 +02006665if test "$debug_stack_usage" = "yes" ; then
6666 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6667fi
6668
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006669if test "$crypto_afalg" = "yes" ; then
6670 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6671fi
6672
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306673if test "$open_by_handle_at" = "yes" ; then
6674 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6675fi
6676
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306677if test "$linux_magic_h" = "yes" ; then
6678 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6679fi
6680
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006681if test "$pragma_diagnostic_available" = "yes" ; then
6682 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006683fi
6684
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006685if test "$valgrind_h" = "yes" ; then
6686 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6687fi
6688
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006689if test "$have_asan_iface_fiber" = "yes" ; then
6690 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6691fi
6692
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006693if test "$has_environ" = "yes" ; then
6694 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6695fi
6696
Richard Henderson76a347e2012-12-28 14:17:02 -08006697if test "$cpuid_h" = "yes" ; then
6698 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6699fi
6700
Richard Hendersonf5401662013-02-16 12:46:59 -08006701if test "$int128" = "yes" ; then
6702 echo "CONFIG_INT128=y" >> $config_host_mak
6703fi
6704
Richard Henderson7ebee432016-06-29 21:10:59 -07006705if test "$atomic128" = "yes" ; then
6706 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6707fi
6708
Richard Hendersondf79b992016-09-02 12:23:57 -07006709if test "$atomic64" = "yes" ; then
6710 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6711fi
6712
Richard Hendersondb432672017-09-15 14:11:45 -07006713if test "$vector16" = "yes" ; then
6714 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6715fi
6716
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006717if test "$getauxval" = "yes" ; then
6718 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6719fi
6720
Bharata B Raoeb100392012-09-24 14:42:45 +05306721if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006722 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006723 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6724 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306725fi
6726
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006727if test "$glusterfs_xlator_opt" = "yes" ; then
6728 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6729fi
6730
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306731if test "$glusterfs_discard" = "yes" ; then
6732 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6733fi
6734
Niels de Vosdf3a4292017-05-28 12:01:14 +05306735if test "$glusterfs_fallocate" = "yes" ; then
6736 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6737fi
6738
Bharata B Rao7c815372013-12-21 14:51:25 +05306739if test "$glusterfs_zerofill" = "yes" ; then
6740 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6741fi
6742
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006743if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006744 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006745 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6746 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006747fi
6748
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006749if test "$live_block_migration" = "yes" ; then
6750 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6751fi
6752
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006753if test "$tpm" = "yes"; then
6754 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006755 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006756 if test "$tpm_passthrough" = "yes"; then
6757 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6758 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006759 # TPM emulator support?
6760 if test "$tpm_emulator" = "yes"; then
6761 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6762 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006763fi
6764
Lluís Vilanova5b808272014-05-27 15:02:14 +02006765echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6766if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02006767 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306768fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006769if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02006770 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6771 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006772 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006773fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006774if have_backend "log"; then
6775 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02006776fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006777if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02006778 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6779fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006780if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006781 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6782 if test "$trace_backend_stap" = "yes" ; then
6783 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6784 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006785fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006786if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006787 if test "$linux" = "yes" ; then
6788 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006789 else
Stewart Smith21684af2014-01-24 12:39:10 +11006790 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006791 fi
6792fi
Paul Durrant0a852412016-08-04 14:44:14 +01006793if have_backend "syslog"; then
6794 if test "$posix_syslog" = "yes" ; then
6795 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6796 else
6797 feature_not_found "syslog(trace backend)" "syslog not available"
6798 fi
6799fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006800echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6801
Michael R. Hines2da776d2013-07-22 10:01:54 -04006802if test "$rdma" = "yes" ; then
6803 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006804 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006805fi
6806
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006807if test "$pvrdma" = "yes" ; then
6808 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6809fi
6810
Laurent Vivier575b22b2016-06-02 22:14:15 +02006811if test "$have_rtnetlink" = "yes" ; then
6812 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6813fi
6814
Klim Kireeved279a02018-01-12 12:01:19 +03006815if test "$libxml2" = "yes" ; then
6816 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6817 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6818 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6819fi
6820
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006821if test "$replication" = "yes" ; then
6822 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6823fi
6824
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006825if test "$have_af_vsock" = "yes" ; then
6826 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6827fi
6828
Christopher Covington4d043512016-12-28 15:04:33 -05006829if test "$have_sysmacros" = "yes" ; then
6830 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6831fi
6832
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006833if test "$have_static_assert" = "yes" ; then
6834 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6835fi
6836
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006837if test "$have_utmpx" = "yes" ; then
6838 echo "HAVE_UTMPX=y" >> $config_host_mak
6839fi
6840
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006841if test "$ivshmem" = "yes" ; then
6842 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6843fi
Richard Hendersone219c492017-09-28 09:01:23 -07006844if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006845 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6846fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006847if test "$debug_mutex" = "yes" ; then
6848 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6849fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006850
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006851# Hold two types of flag:
6852# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6853# a thread we have a handle to
6854# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6855# platform
6856if test "$pthread_setname_np" = "yes" ; then
6857 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6858 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6859fi
6860
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006861if test "$vxhs" = "yes" ; then
6862 echo "CONFIG_VXHS=y" >> $config_host_mak
6863 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6864fi
6865
Junyan He17824402018-07-18 15:47:59 +08006866if test "$libpmem" = "yes" ; then
6867 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6868fi
6869
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006870if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006871 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006872elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006873 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006874elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006875 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006876elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006877 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006878elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006879 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006880else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006881 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006882fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006883QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006884
Juan Quintela98ec69a2009-07-16 18:34:18 +02006885echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006886echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006887echo "MAKE=$make" >> $config_host_mak
6888echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006889echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6890echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006891echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6892echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006893echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006894echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006895if $iasl -h > /dev/null 2>&1; then
6896 echo "IASL=$iasl" >> $config_host_mak
6897fi
Juan Quintela804edf22009-07-27 16:12:49 +02006898echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006899echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006900echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006901echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006902echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006903echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006904echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006905echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006906echo "OBJCOPY=$objcopy" >> $config_host_mak
6907echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006908echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006909echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006910echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006911echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006912echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006913echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006914echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006915echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006916if test "$sparse" = "yes" ; then
6917 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006918 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006919 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006920 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6921 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6922fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006923if test "$cross_prefix" != ""; then
6924 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6925else
6926 echo "AUTOCONF_HOST := " >> $config_host_mak
6927fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006928echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006929echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006930echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006931echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006932echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006933echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006934echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006935echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006936echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006937echo "DSOSUF=$DSOSUF" >> $config_host_mak
6938echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006939echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006940echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6941echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006942echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006943echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006944if test "$gcov" = "yes" ; then
6945 echo "CONFIG_GCOV=y" >> $config_host_mak
6946 echo "GCOV=$gcov_tool" >> $config_host_mak
6947fi
Juan Quintela804edf22009-07-27 16:12:49 +02006948
Alex Bennée51a12b52018-04-04 14:24:39 +01006949if test "$docker" != "no"; then
6950 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6951fi
6952
Peter Maydell6efd7512011-11-30 11:59:04 +00006953# use included Linux headers
6954if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006955 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006956 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006957 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006958 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006959 ;;
6960 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006961 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006962 ;;
6963 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006964 linux_arch=s390
6965 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006966 aarch64)
6967 linux_arch=arm64
6968 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006969 mips64)
6970 linux_arch=mips
6971 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006972 *)
6973 # For most CPUs the kernel architecture name and QEMU CPU name match.
6974 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006975 ;;
6976 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006977 # For non-KVM architectures we will not have asm headers
6978 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6979 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6980 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006981fi
6982
bellard1d14ffa2005-10-30 18:58:22 +00006983for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006984target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006985config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006986target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006987target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006988
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006989case "$target_name" in
Michael Weiser722dd7b2018-01-11 13:25:32 +00006990 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 +02006991 target_bigendian=yes
6992 ;;
6993esac
bellard97a847b2003-08-10 21:36:04 +00006994target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006995target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006996target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006997target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006998case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006999 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00007000 target_softmmu="yes"
7001 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007002 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00007003 target_user_only="yes"
7004 target_linux_user="yes"
7005 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007006 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007007 target_user_only="yes"
7008 target_bsd_user="yes"
7009 ;;
pbrook9e407a82007-05-26 16:38:53 +00007010 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007011 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007012 exit 1
7013 ;;
7014esac
ths831b7822007-01-18 20:06:33 +00007015
Alex Bennéed75402b2018-04-04 20:27:05 +01007016target_compiler=""
7017target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007018target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007019
bellard97a847b2003-08-10 21:36:04 +00007020mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007021echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007022
pbrooke5fe0c52006-06-11 13:32:59 +00007023bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007024mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007025interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007026gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007027
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007028TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007029TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007030TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007031
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007032case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007033 i386)
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007034 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007035 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007036 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007037 ;;
7038 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007039 TARGET_BASE_ARCH=i386
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007040 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007041 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007042 ;;
7043 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007044 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007045 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007046 ;;
7047 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007048 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007049 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007050 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007051 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007052 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007053 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007054 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007055 aarch64|aarch64_be)
7056 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007057 TARGET_BASE_ARCH=arm
7058 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007059 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007060 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 +01007061 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007062 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007063 ;;
aurel322408a522008-04-20 20:19:44 +00007064 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007065 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007066 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007067 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007068 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007069 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007070 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007071 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007072 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007073 ;;
aurel322408a522008-04-20 20:19:44 +00007074 m68k)
aurel322408a522008-04-20 20:19:44 +00007075 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007076 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007077 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007078 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007079 microblaze|microblazeel)
7080 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007081 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007082 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007083 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007084 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007085 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007086 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007087 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007088 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007089 ;;
7090 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08007091 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007092 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007093 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007094 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007095 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007096 ;;
7097 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007098 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007099 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007100 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007101 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007102 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007103 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007104 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007105 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007106 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007107 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007108 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007109 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007110 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007111 TARGET_ARCH=openrisc
7112 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007113 ;;
aurel322408a522008-04-20 20:19:44 +00007114 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007115 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007116 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007117 ;;
7118 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007119 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007120 TARGET_ABI_DIR=ppc
aurel32c8b35322009-01-24 15:07:34 +00007121 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007122 target_compiler=$cross_cc_ppcemb
aurel322408a522008-04-20 20:19:44 +00007123 ;;
7124 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007125 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007126 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307127 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007128 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 +01007129 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007130 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007131 ppc64le)
7132 TARGET_ARCH=ppc64
7133 TARGET_BASE_ARCH=ppc
7134 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307135 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007136 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 +01007137 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007138 ;;
aurel322408a522008-04-20 20:19:44 +00007139 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007140 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007141 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007142 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007143 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007144 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 +01007145 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007146 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007147 riscv32)
7148 TARGET_BASE_ARCH=riscv
7149 TARGET_ABI_DIR=riscv
7150 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007151 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007152 ;;
7153 riscv64)
7154 TARGET_BASE_ARCH=riscv
7155 TARGET_ABI_DIR=riscv
7156 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007157 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007158 ;;
aurel322408a522008-04-20 20:19:44 +00007159 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007160 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007161 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007162 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007163 ;;
7164 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007165 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007166 ;;
7167 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007168 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007169 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007170 ;;
7171 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007172 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007173 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007174 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007175 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007176 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007177 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007178 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007179 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007180 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 +01007181 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007182 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007183 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007184 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007185 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007186 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007187 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007188 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007189 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007190 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007191 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007192 xtensa|xtensaeb)
7193 TARGET_ARCH=xtensa
Max Filippov9fb40342017-03-06 17:17:43 -08007194 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007195 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007196 ;;
aurel322408a522008-04-20 20:19:44 +00007197 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007198 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007199 ;;
7200esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007201# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7202if [ "$TARGET_BASE_ARCH" = "" ]; then
7203 TARGET_BASE_ARCH=$TARGET_ARCH
7204fi
7205
Alex Bennéed75402b2018-04-04 20:27:05 +01007206# Do we have a cross compiler for this target?
7207if has $target_compiler; then
7208
7209 write_c_skeleton
7210
Alex Bennée716a5072018-04-10 12:19:40 +01007211 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007212 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007213 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007214 target_compiler=""
7215 else
7216 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7217 target_compiler_static="n"
7218 fi
7219 else
7220 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7221 target_compiler_static="y"
7222 fi
7223else
7224 target_compiler=""
7225fi
7226
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007227symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7228
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007229upper() {
7230 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7231}
7232
Stefan Weil89138852016-05-16 15:10:20 +02007233target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007234echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007235echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007236echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007237if [ "$TARGET_ABI_DIR" = "" ]; then
7238 TARGET_ABI_DIR=$TARGET_ARCH
7239fi
Juan Quintela25be2102009-10-07 02:41:00 +02007240echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007241if [ "$HOST_VARIANT_DIR" != "" ]; then
7242 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7243fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007244
7245if supported_xen_target $target; then
7246 echo "CONFIG_XEN=y" >> $config_target_mak
7247 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007248 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007249 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007250fi
7251if supported_kvm_target $target; then
7252 echo "CONFIG_KVM=y" >> $config_target_mak
7253 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007254 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007255 if test "$vhost_user" = "yes" ; then
7256 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7257 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007258 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007259fi
7260if supported_hax_target $target; then
7261 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007262fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007263if supported_hvf_target $target; then
7264 echo "CONFIG_HVF=y" >> $config_target_mak
7265fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007266if supported_whpx_target $target; then
7267 echo "CONFIG_WHPX=y" >> $config_target_mak
7268fi
bellardde83cd02003-06-15 20:25:43 +00007269if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007270 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007271fi
7272if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007273 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007274 if test "$mttcg" = "yes" ; then
7275 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7276 fi
bellardde83cd02003-06-15 20:25:43 +00007277fi
bellard997344f2003-10-27 21:10:39 +00007278if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007279 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007280 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007281fi
ths831b7822007-01-18 20:06:33 +00007282if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007283 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007284fi
pbrook56aebc82008-10-11 17:55:29 +00007285list=""
7286if test ! -z "$gdb_xml_files" ; then
7287 for x in $gdb_xml_files; do
7288 list="$list $source_path/gdb-xml/$x"
7289 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007290 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007291fi
bellardde83cd02003-06-15 20:25:43 +00007292
pbrooke5fe0c52006-06-11 13:32:59 +00007293if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007294 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007295fi
blueswir184778502008-10-26 20:33:16 +00007296if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007297 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007298fi
bellard5b0753e2005-03-01 21:37:28 +00007299
Alex Bennéed75402b2018-04-04 20:27:05 +01007300if test -n "$target_compiler"; then
7301 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7302
7303 if test -n "$target_compiler_static"; then
7304 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7305 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007306
7307 if test -n "$target_compiler_cflags"; then
7308 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7309 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007310fi
7311
Alex Bennée716a5072018-04-10 12:19:40 +01007312
Juan Quintela4afddb52009-08-03 14:46:45 +02007313# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007314
Juan Quintela4afddb52009-08-03 14:46:45 +02007315cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007316ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007317
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007318disas_config() {
7319 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7320 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7321}
7322
Juan Quintela64656022009-08-03 14:46:53 +02007323for i in $ARCH $TARGET_BASE_ARCH ; do
7324 case "$i" in
7325 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007326 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007327 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007328 aarch64)
7329 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007330 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007331 fi
7332 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007333 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007334 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007335 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007336 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007337 fi
Juan Quintela64656022009-08-03 14:46:53 +02007338 ;;
7339 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007340 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007341 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007342 hppa)
7343 disas_config "HPPA"
7344 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007345 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007346 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007347 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007348 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007349 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007350 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007351 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007352 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007353 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007354 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007355 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007356 ;;
7357 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007358 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02007359 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007360 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007361 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007362 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007363 nios2)
7364 disas_config "NIOS2"
7365 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007366 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007367 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007368 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007369 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007370 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007371 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007372 riscv)
7373 disas_config "RISCV"
7374 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007375 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007376 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007377 ;;
7378 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007379 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007380 ;;
7381 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007382 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007383 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007384 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007385 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007386 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007387 esac
7388done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007389if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007390 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007391fi
Juan Quintela64656022009-08-03 14:46:53 +02007392
Juan Quintela6ee71262009-08-03 14:46:47 +02007393case "$ARCH" in
7394alpha)
7395 # Ensure there's only a single GP
7396 cflags="-msmall-data $cflags"
7397;;
7398esac
7399
Juan Quintelad02c1db2009-08-03 14:46:50 +02007400if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007401 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007402 if test "$target_linux_user" = "yes" ; then
7403 cflags="-p $cflags"
7404 ldflags="-p $ldflags"
7405 fi
7406 if test "$target_softmmu" = "yes" ; then
7407 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007408 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007409 fi
7410fi
7411
Juan Quintela9b8e1112009-08-03 14:46:46 +02007412if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007413 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007414fi
Juan Quintelafa282482009-07-22 22:37:39 +02007415
Christian Borntraegere9a35912017-08-23 12:16:23 +02007416# Newer kernels on s390 check for an S390_PGSTE program header and
7417# enable the pgste page table extensions in that case. This makes
7418# the vm.allocate_pgste sysctl unnecessary. We enable this program
7419# header if
7420# - we build on s390x
7421# - we build the system emulation for s390x (qemu-system-s390x)
7422# - KVM is enabled
7423# - the linker supports --s390-pgste
7424if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7425 if ld_has --s390-pgste ; then
7426 ldflags="-Wl,--s390-pgste $ldflags"
7427 fi
7428fi
7429
Juan Quintela25be2102009-10-07 02:41:00 +02007430echo "LDFLAGS+=$ldflags" >> $config_target_mak
7431echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007432
bellard97a847b2003-08-10 21:36:04 +00007433done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007434
Alex Bennéed75402b2018-04-04 20:27:05 +01007435if test -n "$enabled_cross_compilers"; then
7436 echo
7437 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7438fi
7439
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007440if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007441 echo "config-host.h: subdir-dtc" >> $config_host_mak
7442fi
Richard Hendersone219c492017-09-28 09:01:23 -07007443if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7444 echo "config-host.h: subdir-capstone" >> $config_host_mak
7445fi
7446if test -n "$LIBCAPSTONE"; then
7447 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7448fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007449
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007450if test "$numa" = "yes"; then
7451 echo "CONFIG_NUMA=y" >> $config_host_mak
7452fi
7453
John Snowfd0e6052015-03-25 18:57:39 -04007454if test "$ccache_cpp2" = "yes"; then
7455 echo "export CCACHE_CPP2=y" >> $config_host_mak
7456fi
7457
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007458# build tree in object directory in case the source is not in the current directory
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007459DIRS="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 +02007460DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007461DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007462DIRS="$DIRS roms/seabios roms/vgabios"
Anthony Liguoric09015d2012-01-10 13:10:42 -06007463FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7464FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02007465FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007466FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02007467FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007468FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007469FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01007470FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01007471FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07007472for bios_file in \
7473 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007474 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007475 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007476 $source_path/pc-bios/*.rom \
7477 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007478 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007479 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007480 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007481 $source_path/pc-bios/palcode-*
7482do
Stefan Weil89138852016-05-16 15:10:20 +02007483 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007484done
Stefan Weil89138852016-05-16 15:10:20 +02007485for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007486do
Stefan Weil89138852016-05-16 15:10:20 +02007487 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007488done
Su Hang645d3cb2018-08-16 14:05:28 +01007489for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7490do
7491 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7492done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007493mkdir -p $DIRS
7494for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007495 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007496 symlink "$source_path/$f" "$f"
7497 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007498done
Paul Brook1ad21342009-05-19 16:17:58 +01007499
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007500# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007501for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007502 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007503 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007504 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007505 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007506 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007507 echo "CC=$cc" >> $config_mak
7508 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007509 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007510 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007511 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007512 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007513 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007514done
7515
Marc-André Lureaufe310172016-06-15 13:06:00 +02007516# set up tests data directory
Philippe Mathieu-Daudé1b145d52018-06-12 14:34:37 -03007517for tests_subdir in acceptance data; do
7518 if [ ! -e tests/$tests_subdir ]; then
7519 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7520 fi
7521done
Marc-André Lureaufe310172016-06-15 13:06:00 +02007522
Max Reitz76c75602014-05-24 23:24:56 +02007523# set up qemu-iotests in this build directory
7524iotests_common_env="tests/qemu-iotests/common.env"
7525iotests_check="tests/qemu-iotests/check"
7526
7527echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7528echo >> "$iotests_common_env"
7529echo "export PYTHON='$python'" >> "$iotests_common_env"
7530
7531if [ ! -e "$iotests_check" ]; then
7532 symlink "$source_path/$iotests_check" "$iotests_check"
7533fi
7534
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007535# Save the configure command line for later reuse.
7536cat <<EOD >config.status
7537#!/bin/sh
7538# Generated by configure.
7539# Run this file to recreate the current configuration.
7540# Compiler output produced by configure, useful for debugging
7541# configure, is in config.log if it exists.
7542EOD
7543printf "exec" >>config.status
7544printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007545echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007546chmod +x config.status
7547
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007548rm -r "$TMPDIR1"