blob: 58862d2ae88afdfd845794fdd9b9a6611a800339 [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
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002231libseccomp_minver="2.2.0"
Eduardo Otubof7945732012-08-14 18:44:05 -03002232if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002233 case "$cpu" in
Marc-André Lureaud0699bd2018-08-22 19:02:49 +02002234 i386|x86_64|mips)
James Hogan5ce43972016-04-08 14:16:34 +01002235 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002236 arm|aarch64)
2237 libseccomp_minver="2.2.3"
2238 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002239 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002240 libseccomp_minver="2.3.0"
2241 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002242 *)
2243 libseccomp_minver=""
2244 ;;
2245 esac
2246
2247 if test "$libseccomp_minver" != "" &&
2248 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002249 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2250 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002251 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002252 else
Andrew Jones693e5912015-09-30 11:59:18 -04002253 if test "$seccomp" = "yes" ; then
2254 if test "$libseccomp_minver" != "" ; then
2255 feature_not_found "libseccomp" \
2256 "Install libseccomp devel >= $libseccomp_minver"
2257 else
2258 feature_not_found "libseccomp" \
2259 "libseccomp is not supported for host cpu $cpu"
2260 fi
2261 fi
2262 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002263 fi
2264fi
2265##########################################
aliguorie37630c2009-04-22 15:19:10 +00002266# xen probe
2267
Juan Quintelafc321b42009-08-12 18:29:55 +02002268if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002269 # Check whether Xen library path is specified via --extra-ldflags to avoid
2270 # overriding this setting with pkg-config output. If not, try pkg-config
2271 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002272
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002273 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2274 $pkg_config --exists xencontrol ; then
2275 xen_ctrl_version="$(printf '%d%02d%02d' \
2276 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2277 xen=yes
2278 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2279 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002280 if $pkg_config --exists xentoolcore; then
2281 xen_pc="$xen_pc xentoolcore"
2282 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002283 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2284 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2285 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2286 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002287
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002288 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002289 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002290
2291 # First we test whether Xen headers and libraries are available.
2292 # If no, we are done and there is no Xen support.
2293 # If yes, more tests are run to detect the Xen version.
2294
2295 # Xen (any)
2296 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002297#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002298int main(void) {
2299 return 0;
2300}
2301EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002302 if ! compile_prog "" "$xen_libs" ; then
2303 # Xen not found
2304 if test "$xen" = "yes" ; then
2305 feature_not_found "xen" "Install xen devel"
2306 fi
2307 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002308
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002309 # Xen unstable
2310 elif
2311 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002312#undef XC_WANT_COMPAT_DEVICEMODEL_API
2313#define __XEN_TOOLS__
2314#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002315#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002316int main(void) {
2317 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002318 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002319
2320 xd = xendevicemodel_open(0, 0);
2321 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2322
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002323 xfmem = xenforeignmemory_open(0, 0);
2324 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2325
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002326 return 0;
2327}
2328EOF
2329 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2330 then
2331 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2332 xen_ctrl_version=41100
2333 xen=yes
2334 elif
2335 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002336#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2337#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002338#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002339int main(void) {
2340 xenforeignmemory_handle *xfmem;
2341
2342 xfmem = xenforeignmemory_open(0, 0);
2343 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002344 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002345
2346 return 0;
2347}
2348EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002349 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002350 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002351 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002352 xen_ctrl_version=41000
2353 xen=yes
2354 elif
2355 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002356#undef XC_WANT_COMPAT_DEVICEMODEL_API
2357#define __XEN_TOOLS__
2358#include <xendevicemodel.h>
2359int main(void) {
2360 xendevicemodel_handle *xd;
2361
2362 xd = xendevicemodel_open(0, 0);
2363 xendevicemodel_close(xd);
2364
2365 return 0;
2366}
2367EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002368 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2369 then
2370 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2371 xen_ctrl_version=40900
2372 xen=yes
2373 elif
2374 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002375/*
2376 * If we have stable libs the we don't want the libxc compat
2377 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002378 *
2379 * Also, check if xengnttab_grant_copy_segment_t is defined and
2380 * grant copy operation is implemented.
2381 */
2382#undef XC_WANT_COMPAT_EVTCHN_API
2383#undef XC_WANT_COMPAT_GNTTAB_API
2384#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2385#include <xenctrl.h>
2386#include <xenstore.h>
2387#include <xenevtchn.h>
2388#include <xengnttab.h>
2389#include <xenforeignmemory.h>
2390#include <stdint.h>
2391#include <xen/hvm/hvm_info_table.h>
2392#if !defined(HVM_MAX_VCPUS)
2393# error HVM_MAX_VCPUS not defined
2394#endif
2395int main(void) {
2396 xc_interface *xc = NULL;
2397 xenforeignmemory_handle *xfmem;
2398 xenevtchn_handle *xe;
2399 xengnttab_handle *xg;
2400 xen_domain_handle_t handle;
2401 xengnttab_grant_copy_segment_t* seg = NULL;
2402
2403 xs_daemon_open();
2404
2405 xc = xc_interface_open(0, 0, 0);
2406 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2407 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2408 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2409 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2410 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2411
2412 xfmem = xenforeignmemory_open(0, 0);
2413 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2414
2415 xe = xenevtchn_open(0, 0);
2416 xenevtchn_fd(xe);
2417
2418 xg = xengnttab_open(0, 0);
2419 xengnttab_grant_copy(xg, 0, seg);
2420
2421 return 0;
2422}
2423EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002424 compile_prog "" "$xen_libs $xen_stable_libs"
2425 then
2426 xen_ctrl_version=40800
2427 xen=yes
2428 elif
2429 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002430/*
2431 * If we have stable libs the we don't want the libxc compat
2432 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002433 */
2434#undef XC_WANT_COMPAT_EVTCHN_API
2435#undef XC_WANT_COMPAT_GNTTAB_API
2436#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2437#include <xenctrl.h>
2438#include <xenstore.h>
2439#include <xenevtchn.h>
2440#include <xengnttab.h>
2441#include <xenforeignmemory.h>
2442#include <stdint.h>
2443#include <xen/hvm/hvm_info_table.h>
2444#if !defined(HVM_MAX_VCPUS)
2445# error HVM_MAX_VCPUS not defined
2446#endif
2447int main(void) {
2448 xc_interface *xc = NULL;
2449 xenforeignmemory_handle *xfmem;
2450 xenevtchn_handle *xe;
2451 xengnttab_handle *xg;
2452 xen_domain_handle_t handle;
2453
2454 xs_daemon_open();
2455
2456 xc = xc_interface_open(0, 0, 0);
2457 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2458 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2459 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2460 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2461 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2462
2463 xfmem = xenforeignmemory_open(0, 0);
2464 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2465
2466 xe = xenevtchn_open(0, 0);
2467 xenevtchn_fd(xe);
2468
2469 xg = xengnttab_open(0, 0);
2470 xengnttab_map_grant_ref(xg, 0, 0, 0);
2471
2472 return 0;
2473}
2474EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002475 compile_prog "" "$xen_libs $xen_stable_libs"
2476 then
2477 xen_ctrl_version=40701
2478 xen=yes
2479 elif
2480 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002481#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002482#include <stdint.h>
2483int main(void) {
2484 xc_interface *xc = NULL;
2485 xen_domain_handle_t handle;
2486 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2487 return 0;
2488}
2489EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002490 compile_prog "" "$xen_libs"
2491 then
2492 xen_ctrl_version=40700
2493 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002494
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002495 # Xen 4.6
2496 elif
2497 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002498#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002499#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002500#include <stdint.h>
2501#include <xen/hvm/hvm_info_table.h>
2502#if !defined(HVM_MAX_VCPUS)
2503# error HVM_MAX_VCPUS not defined
2504#endif
2505int main(void) {
2506 xc_interface *xc;
2507 xs_daemon_open();
2508 xc = xc_interface_open(0, 0, 0);
2509 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2510 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002511 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002512 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002513 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002514 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002515 return 0;
2516}
2517EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002518 compile_prog "" "$xen_libs"
2519 then
2520 xen_ctrl_version=40600
2521 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002522
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002523 # Xen 4.5
2524 elif
2525 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002526#include <xenctrl.h>
2527#include <xenstore.h>
2528#include <stdint.h>
2529#include <xen/hvm/hvm_info_table.h>
2530#if !defined(HVM_MAX_VCPUS)
2531# error HVM_MAX_VCPUS not defined
2532#endif
2533int main(void) {
2534 xc_interface *xc;
2535 xs_daemon_open();
2536 xc = xc_interface_open(0, 0, 0);
2537 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2538 xc_gnttab_open(NULL, 0);
2539 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2540 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002541 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2542 return 0;
2543}
2544EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002545 compile_prog "" "$xen_libs"
2546 then
2547 xen_ctrl_version=40500
2548 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002549
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002550 elif
2551 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002552#include <xenctrl.h>
2553#include <xenstore.h>
2554#include <stdint.h>
2555#include <xen/hvm/hvm_info_table.h>
2556#if !defined(HVM_MAX_VCPUS)
2557# error HVM_MAX_VCPUS not defined
2558#endif
2559int main(void) {
2560 xc_interface *xc;
2561 xs_daemon_open();
2562 xc = xc_interface_open(0, 0, 0);
2563 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2564 xc_gnttab_open(NULL, 0);
2565 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2566 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002567 return 0;
2568}
2569EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002570 compile_prog "" "$xen_libs"
2571 then
2572 xen_ctrl_version=40200
2573 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002574
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002575 else
2576 if test "$xen" = "yes" ; then
2577 feature_not_found "xen (unsupported version)" \
2578 "Install a supported xen (xen 4.2 or newer)"
2579 fi
2580 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002581 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002582
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002583 if test "$xen" = yes; then
2584 if test $xen_ctrl_version -ge 40701 ; then
2585 libs_softmmu="$xen_stable_libs $libs_softmmu"
2586 fi
2587 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002588 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002589 fi
aliguorie37630c2009-04-22 15:19:10 +00002590fi
2591
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002592if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002593 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002594 xen_pci_passthrough=yes
2595 else
2596 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002597 error_exit "User requested feature Xen PCI Passthrough" \
2598 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002599 fi
2600 xen_pci_passthrough=no
2601 fi
2602fi
2603
Ian Campbell64a7ad62016-01-15 13:23:44 +00002604if test "$xen_pv_domain_build" = "yes" &&
2605 test "$xen" != "yes"; then
2606 error_exit "User requested Xen PV domain builder support" \
2607 "which requires Xen support."
2608fi
2609
aliguorie37630c2009-04-22 15:19:10 +00002610##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002611# Windows Hypervisor Platform accelerator (WHPX) check
2612if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002613 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002614 whpx="yes"
2615 else
2616 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002617 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002618 fi
2619 whpx="no"
2620 fi
2621fi
2622
2623##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002624# Sparse probe
2625if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002626 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002627 sparse=yes
2628 else
2629 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002630 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002631 fi
2632 sparse=no
2633 fi
2634fi
2635
2636##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002637# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002638if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002639 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002640 x11_cflags=$($pkg_config --cflags x11)
2641 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002642fi
2643
2644##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002645# GTK probe
2646
2647if test "$gtk" != "no"; then
Peter Xu5a464e62018-04-09 16:23:23 +08002648 if test "$gtkabi" = ""; then
2649 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2650 # Use 2.0 as a fallback if that is available.
2651 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2652 gtkabi=3.0
2653 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2654 gtkabi=2.0
2655 else
2656 gtkabi=3.0
2657 fi
2658 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002659 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002660 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002661 if test "$gtkabi" = "3.0" ; then
2662 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002663 else
2664 gtkversion="2.18.0"
2665 fi
2666 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002667 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2668 gtk_libs=$($pkg_config --libs $gtkpackage)
2669 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002670 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002671 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002672 gtk_cflags="$gtk_cflags $x11_cflags"
2673 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002674 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002675 gtk="yes"
2676 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002677 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002678 else
2679 gtk="no"
2680 fi
2681fi
2682
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002683
2684##########################################
2685# GNUTLS probe
2686
Peter Maydell37371292015-07-24 18:28:08 +01002687gnutls_works() {
2688 # Unfortunately some distros have bad pkg-config information for gnutls
2689 # such that it claims to exist but you get a compiler error if you try
2690 # to use the options returned by --libs. Specifically, Ubuntu for --static
2691 # builds doesn't work:
2692 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2693 #
2694 # So sanity check the cflags/libs before assuming gnutls can be used.
2695 if ! $pkg_config --exists "gnutls"; then
2696 return 1
2697 fi
2698
2699 write_c_skeleton
2700 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2701}
2702
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002703gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002704gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002705if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002706 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002707 gnutls_cflags=$($pkg_config --cflags gnutls)
2708 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002709 libs_softmmu="$gnutls_libs $libs_softmmu"
2710 libs_tools="$gnutls_libs $libs_tools"
2711 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2712 gnutls="yes"
2713
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002714 # gnutls_rnd requires >= 2.11.0
2715 if $pkg_config --exists "gnutls >= 2.11.0"; then
2716 gnutls_rnd="yes"
2717 else
2718 gnutls_rnd="no"
2719 fi
2720
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002721 if $pkg_config --exists 'gnutls >= 3.0'; then
2722 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002723 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002724 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002725 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002726 *gcrypt*)
2727 gnutls_gcrypt=yes
2728 gnutls_nettle=no
2729 ;;
2730 *nettle*)
2731 gnutls_gcrypt=no
2732 gnutls_nettle=yes
2733 ;;
2734 *)
2735 gnutls_gcrypt=yes
2736 gnutls_nettle=no
2737 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002738 esac
2739 else
2740 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002741 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002742 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002743 elif test "$gnutls" = "yes"; then
2744 feature_not_found "gnutls" "Install gnutls devel"
2745 else
2746 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002747 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002748 fi
2749else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002750 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002751fi
2752
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002753
2754# If user didn't give a --disable/enable-gcrypt flag,
2755# then mark as disabled if user requested nettle
2756# explicitly, or if gnutls links to nettle
2757if test -z "$gcrypt"
2758then
2759 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2760 then
2761 gcrypt="no"
2762 fi
2763fi
2764
2765# If user didn't give a --disable/enable-nettle flag,
2766# then mark as disabled if user requested gcrypt
2767# explicitly, or if gnutls links to gcrypt
2768if test -z "$nettle"
2769then
2770 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2771 then
2772 nettle="no"
2773 fi
2774fi
2775
2776has_libgcrypt_config() {
2777 if ! has "libgcrypt-config"
2778 then
2779 return 1
2780 fi
2781
2782 if test -n "$cross_prefix"
2783 then
Stefan Weil89138852016-05-16 15:10:20 +02002784 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002785 if test "$host-" != $cross_prefix
2786 then
2787 return 1
2788 fi
2789 fi
2790
2791 return 0
2792}
2793
2794if test "$gcrypt" != "no"; then
2795 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002796 gcrypt_cflags=$(libgcrypt-config --cflags)
2797 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002798 # Debian has remove -lgpg-error from libgcrypt-config
2799 # as it "spreads unnecessary dependencies" which in
2800 # turn breaks static builds...
2801 if test "$static" = "yes"
2802 then
2803 gcrypt_libs="$gcrypt_libs -lgpg-error"
2804 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002805 libs_softmmu="$gcrypt_libs $libs_softmmu"
2806 libs_tools="$gcrypt_libs $libs_tools"
2807 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002808 gcrypt="yes"
2809 if test -z "$nettle"; then
2810 nettle="no"
2811 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002812
2813 cat > $TMPC << EOF
2814#include <gcrypt.h>
2815int main(void) {
2816 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2817 GCRY_MD_SHA256,
2818 NULL, 0, 0, 0, NULL);
2819 return 0;
2820}
2821EOF
2822 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2823 gcrypt_kdf=yes
2824 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002825
2826 cat > $TMPC << EOF
2827#include <gcrypt.h>
2828int main(void) {
2829 gcry_mac_hd_t handle;
2830 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2831 GCRY_MAC_FLAG_SECURE, NULL);
2832 return 0;
2833}
2834EOF
2835 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2836 gcrypt_hmac=yes
2837 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002838 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002839 if test "$gcrypt" = "yes"; then
2840 feature_not_found "gcrypt" "Install gcrypt devel"
2841 else
2842 gcrypt="no"
2843 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002844 fi
2845fi
2846
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002847
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002848if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002849 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002850 nettle_cflags=$($pkg_config --cflags nettle)
2851 nettle_libs=$($pkg_config --libs nettle)
2852 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002853 libs_softmmu="$nettle_libs $libs_softmmu"
2854 libs_tools="$nettle_libs $libs_tools"
2855 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002856 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002857
2858 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002859#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002860#include <nettle/pbkdf2.h>
2861int main(void) {
2862 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2863 return 0;
2864}
2865EOF
2866 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2867 nettle_kdf=yes
2868 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002869 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002870 if test "$nettle" = "yes"; then
2871 feature_not_found "nettle" "Install nettle devel"
2872 else
2873 nettle="no"
2874 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002875 fi
2876fi
2877
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002878if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2879then
2880 error_exit "Only one of gcrypt & nettle can be enabled"
2881fi
2882
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002883##########################################
2884# libtasn1 - only for the TLS creds/session test suite
2885
2886tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002887tasn1_cflags=""
2888tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002889if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002890 tasn1_cflags=$($pkg_config --cflags libtasn1)
2891 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002892else
2893 tasn1=no
2894fi
2895
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002896
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002897##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002898# getifaddrs (for tests/test-io-channel-socket )
2899
2900have_ifaddrs_h=yes
2901if ! check_include "ifaddrs.h" ; then
2902 have_ifaddrs_h=no
2903fi
2904
2905##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002906# VTE probe
2907
2908if test "$vte" != "no"; then
2909 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002910 vteminversion="0.32.0"
2911 if $pkg_config --exists "vte-2.91"; then
2912 vtepackage="vte-2.91"
2913 else
2914 vtepackage="vte-2.90"
2915 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002916 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002917 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002918 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002919 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002920 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002921 vte_cflags=$($pkg_config --cflags $vtepackage)
2922 vte_libs=$($pkg_config --libs $vtepackage)
2923 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002924 vte="yes"
2925 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002926 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002927 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002928 else
2929 feature_not_found "vte" "Install libvte devel"
2930 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002931 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002932 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002933 fi
2934fi
2935
2936##########################################
bellard11d9f692004-04-02 20:55:59 +00002937# SDL probe
2938
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002939# Look for sdl configuration program (pkg-config or sdl-config). Try
2940# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002941
Peter Xuc6093a02018-04-10 13:40:34 +08002942sdl_probe ()
2943{
2944 sdl_too_old=no
2945 if test "$sdlabi" = ""; then
2946 if $pkg_config --exists "sdl2"; then
2947 sdlabi=2.0
2948 elif $pkg_config --exists "sdl"; then
2949 sdlabi=1.2
2950 else
2951 sdlabi=2.0
2952 fi
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002953 fi
bellard11d9f692004-04-02 20:55:59 +00002954
Peter Xuc6093a02018-04-10 13:40:34 +08002955 if test $sdlabi = "2.0"; then
2956 sdl_config=$sdl2_config
2957 sdlname=sdl2
2958 sdlconfigname=sdl2_config
2959 elif test $sdlabi = "1.2"; then
2960 sdlname=sdl
2961 sdlconfigname=sdl_config
2962 else
2963 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2964 fi
2965
2966 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2967 sdl_config=$sdlconfigname
2968 fi
2969
2970 if $pkg_config $sdlname --exists; then
2971 sdlconfig="$pkg_config $sdlname"
2972 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2973 elif has ${sdl_config}; then
2974 sdlconfig="$sdl_config"
2975 sdlversion=$($sdlconfig --version)
2976 else
2977 if test "$sdl" = "yes" ; then
2978 feature_not_found "sdl" "Install SDL2-devel"
2979 fi
2980 sdl=no
2981 # no need to do the rest
2982 return
2983 fi
2984 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2985 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2986 fi
2987
Juan Quintelaac119f92009-07-27 16:13:15 +02002988 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002989#include <SDL.h>
2990#undef main /* We don't want SDL to override our main() */
2991int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2992EOF
Stefan Weil89138852016-05-16 15:10:20 +02002993 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002994 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002995 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002996 if $pkg_config $sdlname --exists; then
2997 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2998 else
2999 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3000 fi
TeLeMan74f42e12010-02-08 13:56:44 +08003001 else
Stefan Weil89138852016-05-16 15:10:20 +02003002 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08003003 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003004 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02003005 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003006 sdl_too_old=yes
3007 else
Peter Maydella30878e2015-08-14 16:10:52 +01003008 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02003009 fi
aliguoricd01b4a2008-08-21 19:25:45 +00003010
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003011 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02003012 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01003013 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02003014 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3015 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02003016 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02003017 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003018 :
3019 else
3020 sdl=no
3021 fi
3022 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02003023 else # sdl not found
3024 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003025 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02003026 fi
3027 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02003028 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08003029}
3030
3031if test "$sdl" != "no" ; then
3032 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02003033fi
bellard11d9f692004-04-02 20:55:59 +00003034
aliguori5368a422009-03-03 17:37:21 +00003035if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02003036 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00003037#include <SDL.h>
3038#if defined(SDL_VIDEO_DRIVER_X11)
3039#include <X11/XKBlib.h>
3040#else
3041#error No x11 support
3042#endif
3043int main(void) { return 0; }
3044EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06003045 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003046 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003047 sdl_cflags="$sdl_cflags $x11_cflags"
3048 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003049 fi
aliguori5368a422009-03-03 17:37:21 +00003050fi
3051
ths8f28f3f2007-01-05 21:25:54 +00003052##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003053# RDMA needs OpenFabrics libraries
3054if test "$rdma" != "no" ; then
3055 cat > $TMPC <<EOF
3056#include <rdma/rdma_cma.h>
3057int main(void) { return 0; }
3058EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003059 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003060 if compile_prog "" "$rdma_libs" ; then
3061 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003062 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003063 else
3064 if test "$rdma" = "yes" ; then
3065 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003066 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003067 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003068 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003069 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3070 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3071 fi
3072 rdma="no"
3073 fi
3074fi
3075
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03003076##########################################
3077# PVRDMA detection
3078
3079cat > $TMPC <<EOF &&
3080#include <sys/mman.h>
3081
3082int
3083main(void)
3084{
3085 char buf = 0;
3086 void *addr = &buf;
3087 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3088
3089 return 0;
3090}
3091EOF
3092
3093if test "$rdma" = "yes" ; then
3094 case "$pvrdma" in
3095 "")
3096 if compile_prog "" ""; then
3097 pvrdma="yes"
3098 else
3099 pvrdma="no"
3100 fi
3101 ;;
3102 "yes")
3103 if ! compile_prog "" ""; then
3104 error_exit "PVRDMA is not supported since mremap is not implemented"
3105 fi
3106 pvrdma="yes"
3107 ;;
3108 "no")
3109 pvrdma="no"
3110 ;;
3111 esac
3112else
3113 if test "$pvrdma" = "yes" ; then
3114 error_exit "PVRDMA requires rdma suppport"
3115 fi
3116 pvrdma="no"
3117fi
ths8d5d2d42007-08-25 01:37:51 +00003118
3119##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003120# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003121if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003122 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003123#include <sasl/sasl.h>
3124#include <stdio.h>
3125int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3126EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003127 # Assuming Cyrus-SASL installed in /usr prefix
3128 vnc_sasl_cflags=""
3129 vnc_sasl_libs="-lsasl2"
3130 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3131 vnc_sasl=yes
3132 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003133 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003134 else
3135 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003136 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003137 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003138 vnc_sasl=no
3139 fi
aliguori2f9606b2009-03-06 20:27:28 +00003140fi
3141
3142##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003143# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003144if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003145cat > $TMPC <<EOF
3146#include <stdio.h>
3147#include <jpeglib.h>
3148int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3149EOF
3150 vnc_jpeg_cflags=""
3151 vnc_jpeg_libs="-ljpeg"
3152 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3153 vnc_jpeg=yes
3154 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003155 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003156 else
3157 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003158 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003159 fi
3160 vnc_jpeg=no
3161 fi
3162fi
3163
3164##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003165# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003166if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003167cat > $TMPC <<EOF
3168//#include <stdio.h>
3169#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003170#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003171int main(void) {
3172 png_structp png_ptr;
3173 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003174 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003175}
3176EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003177 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003178 vnc_png_cflags=$($pkg_config libpng --cflags)
3179 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003180 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003181 vnc_png_cflags=""
3182 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003183 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003184 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3185 vnc_png=yes
3186 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003187 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003188 else
3189 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003190 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003191 fi
3192 vnc_png=no
3193 fi
3194fi
3195
3196##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003197# xkbcommon probe
3198if test "$xkbcommon" != "no" ; then
3199 if $pkg_config xkbcommon --exists; then
3200 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3201 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3202 xkbcommon=yes
3203 else
3204 if test "$xkbcommon" = "yes" ; then
3205 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3206 fi
3207 xkbcommon=no
3208 fi
3209fi
3210
3211##########################################
aliguori76655d62009-03-06 20:27:37 +00003212# fnmatch() probe, used for ACL routines
3213fnmatch="no"
3214cat > $TMPC << EOF
3215#include <fnmatch.h>
3216int main(void)
3217{
3218 fnmatch("foo", "foo", 0);
3219 return 0;
3220}
3221EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003222if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003223 fnmatch="yes"
3224fi
3225
3226##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003227# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003228if test "$xfs" != "no" ; then
3229 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003230#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003231#include <xfs/xfs.h>
3232int main(void)
3233{
3234 xfsctl(NULL, 0, 0, NULL);
3235 return 0;
3236}
3237EOF
3238 if compile_prog "" "" ; then
3239 xfs="yes"
3240 else
3241 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003242 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003243 fi
3244 xfs=no
3245 fi
3246fi
3247
3248##########################################
ths8a16d272008-07-19 09:56:24 +00003249# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003250if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003251 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003252 cat > $TMPC << EOF
3253#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003254int main(void)
3255{
3256 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003257 char s[] = "";
3258 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003259 return 0;
3260}
ths8a16d272008-07-19 09:56:24 +00003261EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003262 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003263 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003264 else
3265 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003266 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003267 fi
3268 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003269 fi
ths8a16d272008-07-19 09:56:24 +00003270fi
3271
3272##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003273# netmap support probe
3274# Apart from looking for netmap headers, we make sure that the host API version
3275# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3276# a minor/major version number. Minor new features will be marked with values up
3277# to 15, and if something happens that requires a change to the backend we will
3278# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003279if test "$netmap" != "no" ; then
3280 cat > $TMPC << EOF
3281#include <inttypes.h>
3282#include <net/if.h>
3283#include <net/netmap.h>
3284#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003285#if (NETMAP_API < 11) || (NETMAP_API > 15)
3286#error
3287#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003288int main(void) { return 0; }
3289EOF
3290 if compile_prog "" "" ; then
3291 netmap=yes
3292 else
3293 if test "$netmap" = "yes" ; then
3294 feature_not_found "netmap"
3295 fi
3296 netmap=no
3297 fi
3298fi
3299
3300##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003301# libcap-ng library probe
3302if test "$cap_ng" != "no" ; then
3303 cap_libs="-lcap-ng"
3304 cat > $TMPC << EOF
3305#include <cap-ng.h>
3306int main(void)
3307{
3308 capng_capability_to_name(CAPNG_EFFECTIVE);
3309 return 0;
3310}
3311EOF
3312 if compile_prog "" "$cap_libs" ; then
3313 cap_ng=yes
3314 libs_tools="$cap_libs $libs_tools"
3315 else
3316 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003317 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003318 fi
3319 cap_ng=no
3320 fi
3321fi
3322
3323##########################################
malcc2de5c92008-06-28 19:13:06 +00003324# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003325
malcc2de5c92008-06-28 19:13:06 +00003326audio_drv_probe()
3327{
3328 drv=$1
3329 hdr=$2
3330 lib=$3
3331 exp=$4
3332 cfl=$5
3333 cat > $TMPC << EOF
3334#include <$hdr>
3335int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003336EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003337 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003338 :
3339 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003340 error_exit "$drv check failed" \
3341 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003342 fi
3343}
3344
Stefan Weil89138852016-05-16 15:10:20 +02003345audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003346for drv in $audio_drv_list; do
3347 case $drv in
3348 alsa)
3349 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003350 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003351 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003352 ;;
3353
malcb8e59f12008-07-02 21:03:08 +00003354 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003355 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3356 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003357 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003358 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003359 ;;
3360
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003361 sdl)
3362 if test "$sdl" = "no"; then
3363 error_exit "sdl not found or disabled, can not use sdl audio driver"
3364 fi
3365 ;;
3366
Juan Quintela997e6902009-08-03 14:46:29 +02003367 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003368 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003369 ;;
3370
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003371 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003372 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003373 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003374 ;;
3375
3376 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003377 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003378 ;;
3379
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003380 wav)
3381 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003382 ;;
3383
malce4c63a62008-07-19 16:15:16 +00003384 *)
malc1c9b2a52008-07-19 16:57:30 +00003385 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003386 error_exit "Unknown driver '$drv' selected" \
3387 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003388 }
3389 ;;
malcc2de5c92008-06-28 19:13:06 +00003390 esac
3391done
ths8f28f3f2007-01-05 21:25:54 +00003392
balrog4d3b6f62008-02-10 16:33:14 +00003393##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003394# BrlAPI probe
3395
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003396if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003397 brlapi_libs="-lbrlapi"
3398 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003399#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003400#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003401int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3402EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003403 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003404 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003405 else
3406 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003407 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003408 fi
3409 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003410 fi
3411fi
aurel322e4d9fb2008-04-08 06:01:02 +00003412
3413##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003414# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003415if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003416 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003417 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3418 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003419 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003420 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003421 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003422 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003423 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003424 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003425#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003426#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003427#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003428int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003429 wchar_t wch = L'w';
3430 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003431 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003432 addwstr(L"wide chars\n");
3433 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003434 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003435 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003436}
balrog4d3b6f62008-02-10 16:33:14 +00003437EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003438 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003439 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003440 # Make sure we get the wide character prototypes
3441 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003442 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003443 for curses_lib in $curses_lib_list; do
3444 unset IFS
3445 if compile_prog "$curses_inc" "$curses_lib" ; then
3446 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003447 break
3448 fi
3449 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003450 if test "$curses_found" = yes ; then
3451 break
3452 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003453 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003454 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003455 if test "$curses_found" = "yes" ; then
3456 curses=yes
3457 else
3458 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003459 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003460 fi
3461 curses=no
3462 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003463fi
balrog4d3b6f62008-02-10 16:33:14 +00003464
blueswir1414f0da2008-08-15 18:20:52 +00003465##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003466# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003467if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003468 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003469 curlconfig="$pkg_config libcurl"
3470 else
3471 curlconfig=curl-config
3472 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003473 cat > $TMPC << EOF
3474#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003475int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003476EOF
Stefan Weil89138852016-05-16 15:10:20 +02003477 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3478 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003479 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003480 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003481 else
3482 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003483 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003484 fi
3485 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003486 fi
3487fi # test "$curl"
3488
3489##########################################
balrogfb599c92008-09-28 23:49:55 +00003490# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003491if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003492 cat > $TMPC << EOF
3493#include <bluetooth/bluetooth.h>
3494int main(void) { return bt_error(0); }
3495EOF
Stefan Weil89138852016-05-16 15:10:20 +02003496 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3497 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003498 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003499 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003500 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003501 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003502 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003503 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003504 fi
balroge820e3f2008-09-30 02:27:44 +00003505 bluez="no"
3506 fi
balrogfb599c92008-09-28 23:49:55 +00003507fi
3508
3509##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003510# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003511
Daniel P. Berrangée7b3af82018-05-04 15:34:46 +01003512glib_req_ver=2.40
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003513glib_modules=gthread-2.0
3514if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003515 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003516fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003517
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003518# This workaround is required due to a bug in pkg-config file for glib as it
3519# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3520
3521if test "$static" = yes -a "$mingw32" = yes; then
3522 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3523fi
3524
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003525for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003526 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003527 glib_cflags=$($pkg_config --cflags $i)
3528 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003529 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003530 LIBS="$glib_libs $LIBS"
3531 libs_qga="$glib_libs $libs_qga"
3532 else
3533 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3534 fi
3535done
3536
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003537# Sanity check that the current size_t matches the
3538# size that glib thinks it should be. This catches
3539# problems on multi-arch where people try to build
3540# 32-bit QEMU while pointing at 64-bit glib headers
3541cat > $TMPC <<EOF
3542#include <glib.h>
3543#include <unistd.h>
3544
3545#define QEMU_BUILD_BUG_ON(x) \
3546 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3547
3548int main(void) {
3549 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3550 return 0;
3551}
3552EOF
3553
Stefan Weil5919e032016-04-28 23:33:41 +02003554if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003555 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3556 "You probably need to set PKG_CONFIG_LIBDIR"\
3557 "to point to the right pkg-config files for your"\
3558 "build target"
3559fi
3560
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003561# g_test_trap_subprocess added in 2.38. Used by some tests.
3562glib_subprocess=yes
Marc-André Lureaua0492232017-01-04 21:57:22 +01003563if ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003564 glib_subprocess=no
3565fi
3566
John Snowbbbf2e02015-03-25 18:57:38 -04003567# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3568cat > $TMPC << EOF
3569#include <glib.h>
3570int main(void) { return 0; }
3571EOF
3572if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3573 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3574 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3575 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3576 fi
3577fi
3578
Fam Zhenge26110c2014-02-10 14:48:57 +08003579##########################################
3580# SHA command probe for modules
3581if test "$modules" = yes; then
3582 shacmd_probe="sha1sum sha1 shasum"
3583 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003584 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003585 shacmd="$c"
3586 break
3587 fi
3588 done
3589 if test "$shacmd" = ""; then
3590 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3591 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003592fi
3593
3594##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003595# pixman support probe
3596
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003597if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003598 pixman_cflags=
3599 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003600elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003601 pixman_cflags=$($pkg_config --cflags pixman-1)
3602 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003603else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003604 error_exit "pixman >= 0.21.8 not present." \
3605 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003606fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003607
3608##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003609# libmpathpersist probe
3610
3611if test "$mpath" != "no" ; then
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003612 # probe for the new API
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003613 cat > $TMPC <<EOF
3614#include <libudev.h>
3615#include <mpath_persist.h>
3616unsigned mpath_mx_alloc_len = 1024;
3617int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003618static struct config *multipath_conf;
3619extern struct udev *udev;
3620extern struct config *get_multipath_config(void);
3621extern void put_multipath_config(struct config *conf);
3622struct udev *udev;
3623struct config *get_multipath_config(void) { return multipath_conf; }
3624void put_multipath_config(struct config *conf) { }
3625
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003626int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003627 udev = udev_new();
3628 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003629 return 0;
3630}
3631EOF
3632 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3633 mpathpersist=yes
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003634 mpathpersist_new_api=yes
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003635 else
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03003636 # probe for the old API
3637 cat > $TMPC <<EOF
3638#include <libudev.h>
3639#include <mpath_persist.h>
3640unsigned mpath_mx_alloc_len = 1024;
3641int logsink;
3642int main(void) {
3643 struct udev *udev = udev_new();
3644 mpath_lib_init(udev);
3645 return 0;
3646}
3647EOF
3648 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3649 mpathpersist=yes
3650 mpathpersist_new_api=no
3651 else
3652 mpathpersist=no
3653 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003654 fi
3655else
3656 mpathpersist=no
3657fi
3658
3659##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303660# libcap probe
3661
3662if test "$cap" != "no" ; then
3663 cat > $TMPC <<EOF
3664#include <stdio.h>
3665#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003666int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303667EOF
3668 if compile_prog "" "-lcap" ; then
3669 cap=yes
3670 else
3671 cap=no
3672 fi
3673fi
3674
3675##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003676# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003677PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003678
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003679pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003680cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003681#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003682static void *f(void *p) { return NULL; }
3683int main(void) {
3684 pthread_t thread;
3685 pthread_create(&thread, 0, f, 0);
3686 return 0;
3687}
blueswir1414f0da2008-08-15 18:20:52 +00003688EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003689if compile_prog "" "" ; then
3690 pthread=yes
3691else
3692 for pthread_lib in $PTHREADLIBS_LIST; do
3693 if compile_prog "" "$pthread_lib" ; then
3694 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003695 found=no
3696 for lib_entry in $LIBS; do
3697 if test "$lib_entry" = "$pthread_lib"; then
3698 found=yes
3699 break
3700 fi
3701 done
3702 if test "$found" = "no"; then
3703 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003704 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003705 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003706 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003707 break
3708 fi
3709 done
3710fi
blueswir1414f0da2008-08-15 18:20:52 +00003711
Anthony Liguori4617e592009-08-25 17:21:56 -05003712if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003713 error_exit "pthread check failed" \
3714 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003715fi
3716
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003717# check for pthread_setname_np
3718pthread_setname_np=no
3719cat > $TMPC << EOF
3720#include <pthread.h>
3721
3722static void *f(void *p) { return NULL; }
3723int main(void)
3724{
3725 pthread_t thread;
3726 pthread_create(&thread, 0, f, 0);
3727 pthread_setname_np(thread, "QEMU");
3728 return 0;
3729}
3730EOF
3731if compile_prog "" "$pthread_lib" ; then
3732 pthread_setname_np=yes
3733fi
3734
aliguoribf9298b2008-12-05 20:05:26 +00003735##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003736# rbd probe
3737if test "$rbd" != "no" ; then
3738 cat > $TMPC <<EOF
3739#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003740#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003741int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003742 rados_t cluster;
3743 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003744 return 0;
3745}
3746EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003747 rbd_libs="-lrbd -lrados"
3748 if compile_prog "" "$rbd_libs" ; then
3749 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003750 else
3751 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003752 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003753 fi
3754 rbd=no
3755 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003756fi
3757
3758##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003759# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003760min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003761if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003762 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003763 libssh2_cflags=$($pkg_config libssh2 --cflags)
3764 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003765 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003766 else
3767 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003768 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003769 fi
3770 libssh2=no
3771 fi
3772fi
3773
3774##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003775# libssh2_sftp_fsync probe
3776
3777if test "$libssh2" = "yes"; then
3778 cat > $TMPC <<EOF
3779#include <stdio.h>
3780#include <libssh2.h>
3781#include <libssh2_sftp.h>
3782int main(void) {
3783 LIBSSH2_SESSION *session;
3784 LIBSSH2_SFTP *sftp;
3785 LIBSSH2_SFTP_HANDLE *sftp_handle;
3786 session = libssh2_session_init ();
3787 sftp = libssh2_sftp_init (session);
3788 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3789 libssh2_sftp_fsync (sftp_handle);
3790 return 0;
3791}
3792EOF
3793 # libssh2_cflags/libssh2_libs defined in previous test.
3794 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3795 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3796 fi
3797fi
3798
3799##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003800# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003801
3802if test "$linux_aio" != "no" ; then
3803 cat > $TMPC <<EOF
3804#include <libaio.h>
3805#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003806#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003807int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3808EOF
3809 if compile_prog "" "-laio" ; then
3810 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003811 else
3812 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003813 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003814 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003815 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003816 fi
3817fi
3818
3819##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003820# TPM passthrough is only on x86 Linux
3821
3822if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3823 tpm_passthrough=$tpm
3824else
3825 tpm_passthrough=no
3826fi
3827
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003828# TPM emulator is for all posix systems
3829if test "$mingw32" != "yes"; then
3830 tpm_emulator=$tpm
3831else
3832 tpm_emulator=no
3833fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003834##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003835# attr probe
3836
3837if test "$attr" != "no" ; then
3838 cat > $TMPC <<EOF
3839#include <stdio.h>
3840#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003841#ifdef CONFIG_LIBATTR
3842#include <attr/xattr.h>
3843#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003844#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003845#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003846int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3847EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003848 if compile_prog "" "" ; then
3849 attr=yes
3850 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003851 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003852 attr=yes
3853 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003854 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003855 else
3856 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003857 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003858 fi
3859 attr=no
3860 fi
3861fi
3862
3863##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003864# iovec probe
3865cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003866#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003867#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003868#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003869int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003870EOF
3871iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003872if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003873 iovec=yes
3874fi
3875
aurel32f652e6a2008-12-16 10:43:48 +00003876##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003877# preadv probe
3878cat > $TMPC <<EOF
3879#include <sys/types.h>
3880#include <sys/uio.h>
3881#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003882int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003883EOF
3884preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003885if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003886 preadv=yes
3887fi
3888
3889##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003890# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003891# fdt support is mandatory for at least some target architectures,
3892# so insist on it if we're building those system emulators.
3893fdt_required=no
3894for target in $target_list; do
3895 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003896 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003897 fdt_required=yes
3898 ;;
3899 esac
3900done
3901
3902if test "$fdt_required" = "yes"; then
3903 if test "$fdt" = "no"; then
3904 error_exit "fdt disabled but some requested targets require it." \
3905 "You can turn off fdt only if you also disable all the system emulation" \
3906 "targets which need it (by specifying a cut down --target-list)."
3907 fi
3908 fdt=yes
3909fi
3910
Juan Quintela2df87df2009-08-12 18:29:54 +02003911if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003912 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003913 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003914 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003915 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003916#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003917#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003918int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003919EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003920 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003921 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003922 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003923 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003924 # have GIT checkout, so activate dtc submodule
3925 if test -e "${source_path}/.git" ; then
3926 git_submodules="${git_submodules} dtc"
3927 fi
3928 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003929 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003930 mkdir -p dtc
3931 if [ "$pwd_is_source_path" != "y" ] ; then
3932 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3933 symlink "$source_path/dtc/scripts" "dtc/scripts"
3934 fi
3935 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003936 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3937 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003938 elif test "$fdt" = "yes" ; then
3939 # Not a git build & no libfdt found, prompt for system install
3940 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3941 "Please install the DTC (libfdt) devel package"
3942 else
3943 # don't have and don't want
3944 fdt_libs=
3945 fdt=no
3946 fi
aurel32f652e6a2008-12-16 10:43:48 +00003947 fi
3948fi
3949
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003950libs_softmmu="$libs_softmmu $fdt_libs"
3951
Michael Walle20ff0752011-03-07 23:32:39 +01003952##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003953# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003954
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003955if test "$opengl" != "no" ; then
Michael Tokarev4939a1d2018-06-30 19:54:48 +03003956 opengl_pkgs="epoxy gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003957 if $pkg_config $opengl_pkgs; then
3958 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3959 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003960 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003961 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3962 gtk_gl="yes"
3963 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003964 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003965 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003966 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003967 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003968 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003969 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003970 opengl_libs=""
3971 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003972 fi
3973fi
3974
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003975if test "$opengl" = "yes"; then
3976 cat > $TMPC << EOF
3977#include <epoxy/egl.h>
3978#ifndef EGL_MESA_image_dma_buf_export
3979# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3980#endif
3981int main(void) { return 0; }
3982EOF
3983 if compile_prog "" "" ; then
3984 opengl_dmabuf=yes
3985 fi
3986fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003987
Klim Kireeved279a02018-01-12 12:01:19 +03003988##########################################
3989# libxml2 probe
3990if test "$libxml2" != "no" ; then
3991 if $pkg_config --exists libxml-2.0; then
3992 libxml2="yes"
3993 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3994 libxml2_libs=$($pkg_config --libs libxml-2.0)
3995 else
3996 if test "$libxml2" = "yes"; then
3997 feature_not_found "libxml2" "Install libxml2 devel"
3998 fi
3999 libxml2="no"
4000 fi
4001fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03004002
Bharata B Raoeb100392012-09-24 14:42:45 +05304003##########################################
4004# glusterfs probe
4005if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004006 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05304007 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02004008 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4009 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04004010 if $pkg_config --atleast-version=4 glusterfs-api; then
4011 glusterfs_xlator_opt="yes"
4012 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004013 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05304014 glusterfs_discard="yes"
4015 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05304016 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05304017 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05304018 glusterfs_zerofill="yes"
4019 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05304020 else
4021 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004022 feature_not_found "GlusterFS backend support" \
4023 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05304024 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05304025 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05304026 fi
4027fi
4028
aurel3239386ac2009-04-15 19:48:17 +00004029# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00004030# emulator. This is done because older glibc versions don't
4031# have syscall stubs for these implemented. In that case we
4032# don't provide them even if kernel supports them.
4033#
4034inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03004035cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00004036#include <sys/inotify.h>
4037
4038int
4039main(void)
4040{
4041 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00004042 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00004043}
4044EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004045if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03004046 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00004047fi
4048
Riku Voipioc05c7a72010-03-26 15:25:11 +00004049inotify1=no
4050cat > $TMPC << EOF
4051#include <sys/inotify.h>
4052
4053int
4054main(void)
4055{
4056 /* try to start inotify */
4057 return inotify_init1(0);
4058}
4059EOF
4060if compile_prog "" "" ; then
4061 inotify1=yes
4062fi
4063
Riku Voipio099d6b02009-05-05 12:10:04 +03004064# check if pipe2 is there
4065pipe2=no
4066cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03004067#include <unistd.h>
4068#include <fcntl.h>
4069
4070int main(void)
4071{
4072 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06004073 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03004074}
4075EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004076if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03004077 pipe2=yes
4078fi
4079
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004080# check if accept4 is there
4081accept4=no
4082cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01004083#include <sys/socket.h>
4084#include <stddef.h>
4085
4086int main(void)
4087{
4088 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4089 return 0;
4090}
4091EOF
4092if compile_prog "" "" ; then
4093 accept4=yes
4094fi
4095
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304096# check if tee/splice is there. vmsplice was added same time.
4097splice=no
4098cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304099#include <unistd.h>
4100#include <fcntl.h>
4101#include <limits.h>
4102
4103int main(void)
4104{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004105 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304106 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4107 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4108 return 0;
4109}
4110EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004111if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304112 splice=yes
4113fi
4114
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004115##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004116# libnuma probe
4117
4118if test "$numa" != "no" ; then
4119 cat > $TMPC << EOF
4120#include <numa.h>
4121int main(void) { return numa_available(); }
4122EOF
4123
4124 if compile_prog "" "-lnuma" ; then
4125 numa=yes
4126 libs_softmmu="-lnuma $libs_softmmu"
4127 else
4128 if test "$numa" = "yes" ; then
4129 feature_not_found "numa" "install numactl devel"
4130 fi
4131 numa=no
4132 fi
4133fi
4134
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004135if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4136 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4137 exit 1
4138fi
4139
Yang Zhong5a22ab72017-12-20 21:16:46 +08004140# Even if malloc_trim() is available, these non-libc memory allocators
4141# do not support it.
4142if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4143 if test "$malloc_trim" = "yes" ; then
4144 echo "Disabling malloc_trim with non-libc memory allocator"
4145 fi
4146 malloc_trim="no"
4147fi
4148
4149#######################################
4150# malloc_trim
4151
4152if test "$malloc_trim" != "no" ; then
4153 cat > $TMPC << EOF
4154#include <malloc.h>
4155int main(void) { malloc_trim(0); return 0; }
4156EOF
4157 if compile_prog "" "" ; then
4158 malloc_trim="yes"
4159 else
4160 malloc_trim="no"
4161 fi
4162fi
4163
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004164##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004165# tcmalloc probe
4166
4167if test "$tcmalloc" = "yes" ; then
4168 cat > $TMPC << EOF
4169#include <stdlib.h>
4170int main(void) { malloc(1); return 0; }
4171EOF
4172
4173 if compile_prog "" "-ltcmalloc" ; then
4174 LIBS="-ltcmalloc $LIBS"
4175 else
4176 feature_not_found "tcmalloc" "install gperftools devel"
4177 fi
4178fi
4179
4180##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004181# jemalloc probe
4182
4183if test "$jemalloc" = "yes" ; then
4184 cat > $TMPC << EOF
4185#include <stdlib.h>
4186int main(void) { malloc(1); return 0; }
4187EOF
4188
4189 if compile_prog "" "-ljemalloc" ; then
4190 LIBS="-ljemalloc $LIBS"
4191 else
4192 feature_not_found "jemalloc" "install jemalloc devel"
4193 fi
4194fi
4195
4196##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004197# signalfd probe
4198signalfd="no"
4199cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004200#include <unistd.h>
4201#include <sys/syscall.h>
4202#include <signal.h>
4203int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4204EOF
4205
4206if compile_prog "" "" ; then
4207 signalfd=yes
4208fi
4209
Riku Voipioc2882b92009-08-12 15:08:24 +03004210# check if eventfd is supported
4211eventfd=no
4212cat > $TMPC << EOF
4213#include <sys/eventfd.h>
4214
4215int main(void)
4216{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004217 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004218}
4219EOF
4220if compile_prog "" "" ; then
4221 eventfd=yes
4222fi
4223
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004224# check if memfd is supported
4225memfd=no
4226cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004227#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004228
4229int main(void)
4230{
4231 return memfd_create("foo", MFD_ALLOW_SEALING);
4232}
4233EOF
4234if compile_prog "" "" ; then
4235 memfd=yes
4236fi
4237
4238
4239
Ulrich Hechtd0927932009-09-17 20:22:14 +03004240# check for fallocate
4241fallocate=no
4242cat > $TMPC << EOF
4243#include <fcntl.h>
4244
4245int main(void)
4246{
4247 fallocate(0, 0, 0, 0);
4248 return 0;
4249}
4250EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004251if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004252 fallocate=yes
4253fi
4254
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004255# check for fallocate hole punching
4256fallocate_punch_hole=no
4257cat > $TMPC << EOF
4258#include <fcntl.h>
4259#include <linux/falloc.h>
4260
4261int main(void)
4262{
4263 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4264 return 0;
4265}
4266EOF
4267if compile_prog "" "" ; then
4268 fallocate_punch_hole=yes
4269fi
4270
Denis V. Lunevb953f072015-01-30 11:42:14 +03004271# check that fallocate supports range zeroing inside the file
4272fallocate_zero_range=no
4273cat > $TMPC << EOF
4274#include <fcntl.h>
4275#include <linux/falloc.h>
4276
4277int main(void)
4278{
4279 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4280 return 0;
4281}
4282EOF
4283if compile_prog "" "" ; then
4284 fallocate_zero_range=yes
4285fi
4286
Kevin Wolfed911432014-09-29 17:12:59 +02004287# check for posix_fallocate
4288posix_fallocate=no
4289cat > $TMPC << EOF
4290#include <fcntl.h>
4291
4292int main(void)
4293{
4294 posix_fallocate(0, 0, 0);
4295 return 0;
4296}
4297EOF
4298if compile_prog "" "" ; then
4299 posix_fallocate=yes
4300fi
4301
Peter Maydellc727f472011-01-06 11:05:10 +00004302# check for sync_file_range
4303sync_file_range=no
4304cat > $TMPC << EOF
4305#include <fcntl.h>
4306
4307int main(void)
4308{
4309 sync_file_range(0, 0, 0, 0);
4310 return 0;
4311}
4312EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004313if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004314 sync_file_range=yes
4315fi
4316
Peter Maydelldace20d2011-01-10 13:11:24 +00004317# check for linux/fiemap.h and FS_IOC_FIEMAP
4318fiemap=no
4319cat > $TMPC << EOF
4320#include <sys/ioctl.h>
4321#include <linux/fs.h>
4322#include <linux/fiemap.h>
4323
4324int main(void)
4325{
4326 ioctl(0, FS_IOC_FIEMAP, 0);
4327 return 0;
4328}
4329EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004330if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004331 fiemap=yes
4332fi
4333
Ulrich Hechtd0927932009-09-17 20:22:14 +03004334# check for dup3
4335dup3=no
4336cat > $TMPC << EOF
4337#include <unistd.h>
4338
4339int main(void)
4340{
4341 dup3(0, 0, 0);
4342 return 0;
4343}
4344EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004345if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004346 dup3=yes
4347fi
4348
Alex Bligh4e0c6522013-08-21 16:02:43 +01004349# check for ppoll support
4350ppoll=no
4351cat > $TMPC << EOF
4352#include <poll.h>
4353
4354int main(void)
4355{
4356 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4357 ppoll(&pfd, 1, 0, 0);
4358 return 0;
4359}
4360EOF
4361if compile_prog "" "" ; then
4362 ppoll=yes
4363fi
4364
Alex Blighcd758dd2013-08-21 16:02:44 +01004365# check for prctl(PR_SET_TIMERSLACK , ... ) support
4366prctl_pr_set_timerslack=no
4367cat > $TMPC << EOF
4368#include <sys/prctl.h>
4369
4370int main(void)
4371{
4372 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4373 return 0;
4374}
4375EOF
4376if compile_prog "" "" ; then
4377 prctl_pr_set_timerslack=yes
4378fi
4379
Peter Maydell3b6edd12011-02-15 18:35:05 +00004380# check for epoll support
4381epoll=no
4382cat > $TMPC << EOF
4383#include <sys/epoll.h>
4384
4385int main(void)
4386{
4387 epoll_create(0);
4388 return 0;
4389}
4390EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004391if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004392 epoll=yes
4393fi
4394
Peter Maydell227f0212016-06-06 19:58:11 +01004395# epoll_create1 is a later addition
4396# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004397epoll_create1=no
4398cat > $TMPC << EOF
4399#include <sys/epoll.h>
4400
4401int main(void)
4402{
Peter Maydell19e83f62011-04-26 16:56:40 +01004403 /* Note that we use epoll_create1 as a value, not as
4404 * a function being called. This is necessary so that on
4405 * old SPARC glibc versions where the function was present in
4406 * the library but not declared in the header file we will
4407 * fail the configure check. (Otherwise we will get a compiler
4408 * warning but not an error, and will proceed to fail the
4409 * qemu compile where we compile with -Werror.)
4410 */
Blue Swirlc075a722012-08-09 20:21:25 +00004411 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004412}
4413EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004414if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004415 epoll_create1=yes
4416fi
4417
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004418# check for sendfile support
4419sendfile=no
4420cat > $TMPC << EOF
4421#include <sys/sendfile.h>
4422
4423int main(void)
4424{
4425 return sendfile(0, 0, 0, 0);
4426}
4427EOF
4428if compile_prog "" "" ; then
4429 sendfile=yes
4430fi
4431
Riku Voipio51834342014-06-22 11:25:42 +01004432# check for timerfd support (glibc 2.8 and newer)
4433timerfd=no
4434cat > $TMPC << EOF
4435#include <sys/timerfd.h>
4436
4437int main(void)
4438{
4439 return(timerfd_create(CLOCK_REALTIME, 0));
4440}
4441EOF
4442if compile_prog "" "" ; then
4443 timerfd=yes
4444fi
4445
Riku Voipio9af5c902014-08-12 15:58:57 +03004446# check for setns and unshare support
4447setns=no
4448cat > $TMPC << EOF
4449#include <sched.h>
4450
4451int main(void)
4452{
4453 int ret;
4454 ret = setns(0, 0);
4455 ret = unshare(0);
4456 return ret;
4457}
4458EOF
4459if compile_prog "" "" ; then
4460 setns=yes
4461fi
4462
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004463# clock_adjtime probe
4464clock_adjtime=no
4465cat > $TMPC <<EOF
4466#include <time.h>
4467
4468int main(void)
4469{
4470 return clock_adjtime(0, 0);
4471}
4472EOF
4473clock_adjtime=no
4474if compile_prog "" "" ; then
4475 clock_adjtime=yes
4476fi
4477
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004478# syncfs probe
4479syncfs=no
4480cat > $TMPC <<EOF
4481#include <unistd.h>
4482
4483int main(void)
4484{
4485 return syncfs(0);
4486}
4487EOF
4488syncfs=no
4489if compile_prog "" "" ; then
4490 syncfs=yes
4491fi
4492
pbrookcc8ae6d2006-04-23 17:57:59 +00004493# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004494if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004495 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004496 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004497 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004498 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004499 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004500 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004501 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004502 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004503fi
4504
Stefan Weilf514f412009-10-11 12:44:07 +02004505# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004506byteswap_h=no
4507cat > $TMPC << EOF
4508#include <byteswap.h>
4509int main(void) { return bswap_32(0); }
4510EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004511if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004512 byteswap_h=yes
4513fi
4514
Stefan Weil75f13592013-01-05 12:17:38 +01004515# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004516bswap_h=no
4517cat > $TMPC << EOF
4518#include <sys/endian.h>
4519#include <sys/types.h>
4520#include <machine/bswap.h>
4521int main(void) { return bswap32(0); }
4522EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004523if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004524 bswap_h=yes
4525fi
4526
aliguorida93a1f2008-12-12 20:02:52 +00004527##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004528# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004529if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004530 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004531 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004532 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4533 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004534 else
4535 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004536 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004537 fi
4538 libiscsi="no"
4539 fi
4540fi
4541
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004542##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004543# Do we need libm
4544cat > $TMPC << EOF
4545#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004546int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004547EOF
4548if compile_prog "" "" ; then
4549 :
4550elif compile_prog "" "-lm" ; then
4551 LIBS="-lm $LIBS"
4552 libs_qga="-lm $libs_qga"
4553else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004554 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004555fi
4556
4557##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004558# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004559# uClibc provides 2 versions of clock_gettime(), one with realtime
4560# support and one without. This means that the clock_gettime() don't
4561# need -lrt. We still need it for timer_create() so we check for this
4562# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004563cat > $TMPC <<EOF
4564#include <signal.h>
4565#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004566int main(void) {
4567 timer_create(CLOCK_REALTIME, NULL, NULL);
4568 return clock_gettime(CLOCK_REALTIME, NULL);
4569}
aliguorida93a1f2008-12-12 20:02:52 +00004570EOF
4571
Juan Quintela52166aa2009-08-03 14:46:03 +02004572if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004573 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004574# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004575elif compile_prog "" "$pthread_lib -lrt" ; then
4576 LIBS="$LIBS -lrt"
4577 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004578fi
4579
Blue Swirl31ff5042009-09-12 12:33:07 +00004580if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004581 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004582 libs_softmmu="-lutil $libs_softmmu"
4583fi
4584
Blue Swirlde5071c2009-09-12 09:58:46 +00004585##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004586# spice probe
4587if test "$spice" != "no" ; then
4588 cat > $TMPC << EOF
4589#include <spice.h>
4590int main(void) { spice_server_new(); return 0; }
4591EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004592 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4593 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004594 if $pkg_config --atleast-version=0.12.0 spice-server && \
4595 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004596 compile_prog "$spice_cflags" "$spice_libs" ; then
4597 spice="yes"
4598 libs_softmmu="$libs_softmmu $spice_libs"
4599 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004600 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4601 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004602 else
4603 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004604 feature_not_found "spice" \
4605 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004606 fi
4607 spice="no"
4608 fi
4609fi
4610
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004611# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004612if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004613 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004614 libcacard_cflags=$($pkg_config --cflags libcacard)
4615 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004616 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004617 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004618 if test "$smartcard" = "yes"; then
4619 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004620 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004621 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004622 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004623fi
4624
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004625# check for libusb
4626if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004627 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004628 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004629 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4630 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004631 else
4632 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004633 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004634 fi
4635 libusb="no"
4636 fi
4637fi
4638
Hans de Goede69354a82011-07-19 11:04:10 +02004639# check for usbredirparser for usb network redirection support
4640if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004641 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004642 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004643 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4644 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004645 else
4646 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004647 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004648 fi
4649 usb_redir="no"
4650 fi
4651fi
4652
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004653##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004654# check if we have VSS SDK headers for win
4655
4656if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4657 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004658 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004659 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4660 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004661 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004662 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4663 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004664 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004665 esac
4666 cat > $TMPC << EOF
4667#define __MIDL_user_allocate_free_DEFINED__
4668#include <inc/win2003/vss.h>
4669int main(void) { return VSS_CTX_BACKUP; }
4670EOF
4671 if compile_prog "$vss_win32_include" "" ; then
4672 guest_agent_with_vss="yes"
4673 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004674 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004675 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004676 else
4677 if test "$vss_win32_sdk" != "" ; then
4678 echo "ERROR: Please download and install Microsoft VSS SDK:"
4679 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4680 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4681 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4682 echo "ERROR: The headers are extracted in the directory \`inc'."
4683 feature_not_found "VSS support"
4684 fi
4685 guest_agent_with_vss="no"
4686 fi
4687fi
4688
4689##########################################
4690# lookup Windows platform SDK (if not specified)
4691# The SDK is needed only to build .tlb (type library) file of guest agent
4692# VSS provider from the source. It is usually unnecessary because the
4693# pre-compiled .tlb file is included.
4694
4695if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4696 if test -z "$win_sdk"; then
4697 programfiles="$PROGRAMFILES"
4698 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4699 if test -n "$programfiles"; then
4700 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4701 else
4702 feature_not_found "Windows SDK"
4703 fi
4704 elif test "$win_sdk" = "no"; then
4705 win_sdk=""
4706 fi
4707fi
4708
4709##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004710# check if mingw environment provides a recent ntddscsi.h
4711if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4712 cat > $TMPC << EOF
4713#include <windows.h>
4714#include <ntddscsi.h>
4715int main(void) {
4716#if !defined(IOCTL_SCSI_GET_ADDRESS)
4717#error Missing required ioctl definitions
4718#endif
4719 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4720 return addr.Lun;
4721}
4722EOF
4723 if compile_prog "" "" ; then
4724 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004725 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004726 fi
4727fi
4728
4729##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004730# virgl renderer probe
4731
4732if test "$virglrenderer" != "no" ; then
4733 cat > $TMPC << EOF
4734#include <virglrenderer.h>
4735int main(void) { virgl_renderer_poll(); return 0; }
4736EOF
4737 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4738 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004739 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004740 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4741 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4742 virglrenderer="yes"
4743 else
4744 if test "$virglrenderer" = "yes" ; then
4745 feature_not_found "virglrenderer"
4746 fi
4747 virglrenderer="no"
4748 fi
4749fi
4750
4751##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004752# capstone
4753
Richard Hendersone219c492017-09-28 09:01:23 -07004754case "$capstone" in
4755 "" | yes)
4756 if $pkg_config capstone; then
4757 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004758 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004759 capstone=git
4760 elif test -e "${source_path}/capstone/Makefile" ; then
4761 capstone=internal
4762 elif test -z "$capstone" ; then
4763 capstone=no
4764 else
4765 feature_not_found "capstone" "Install capstone devel or git submodule"
4766 fi
4767 ;;
4768
4769 system)
4770 if ! $pkg_config capstone; then
4771 feature_not_found "capstone" "Install capstone devel"
4772 fi
4773 ;;
4774esac
4775
4776case "$capstone" in
4777 git | internal)
4778 if test "$capstone" = git; then
4779 git_submodules="${git_submodules} capstone"
4780 fi
4781 mkdir -p capstone
4782 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4783 if test "$mingw32" = "yes"; then
4784 LIBCAPSTONE=capstone.lib
4785 else
4786 LIBCAPSTONE=libcapstone.a
4787 fi
4788 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4789 ;;
4790
4791 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004792 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4793 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004794 ;;
4795
4796 no)
4797 ;;
4798 *)
4799 error_exit "Unknown state for capstone: $capstone"
4800 ;;
4801esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004802
4803##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004804# check if we have fdatasync
4805
4806fdatasync=no
4807cat > $TMPC << EOF
4808#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004809int main(void) {
4810#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4811return fdatasync(0);
4812#else
Stefan Weile172fe12012-04-06 21:33:20 +02004813#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004814#endif
4815}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004816EOF
4817if compile_prog "" "" ; then
4818 fdatasync=yes
4819fi
4820
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004821##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004822# check if we have madvise
4823
4824madvise=no
4825cat > $TMPC << EOF
4826#include <sys/types.h>
4827#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004828#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004829int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4830EOF
4831if compile_prog "" "" ; then
4832 madvise=yes
4833fi
4834
4835##########################################
4836# check if we have posix_madvise
4837
4838posix_madvise=no
4839cat > $TMPC << EOF
4840#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004841#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004842int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4843EOF
4844if compile_prog "" "" ; then
4845 posix_madvise=yes
4846fi
4847
4848##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004849# check if we have posix_memalign()
4850
4851posix_memalign=no
4852cat > $TMPC << EOF
4853#include <stdlib.h>
4854int main(void) {
4855 void *p;
4856 return posix_memalign(&p, 8, 8);
4857}
4858EOF
4859if compile_prog "" "" ; then
4860 posix_memalign=yes
4861fi
4862
4863##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004864# check if we have posix_syslog
4865
4866posix_syslog=no
4867cat > $TMPC << EOF
4868#include <syslog.h>
4869int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4870EOF
4871if compile_prog "" "" ; then
4872 posix_syslog=yes
4873fi
4874
4875##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004876# check if we have sem_timedwait
4877
4878sem_timedwait=no
4879cat > $TMPC << EOF
4880#include <semaphore.h>
4881int main(void) { return sem_timedwait(0, 0); }
4882EOF
4883if compile_prog "" "" ; then
4884 sem_timedwait=yes
4885fi
4886
4887##########################################
Keno Fischer5c99fa32018-06-29 12:32:10 +02004888# check if we have strchrnul
4889
4890strchrnul=no
4891cat > $TMPC << EOF
4892#include <string.h>
4893int main(void);
4894// Use a haystack that the compiler shouldn't be able to constant fold
4895char *haystack = (char*)&main;
4896int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4897EOF
4898if compile_prog "" "" ; then
4899 strchrnul=yes
4900fi
4901
4902##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004903# check if trace backend exists
4904
Lluís Vilanova5b808272014-05-27 15:02:14 +02004905$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004906if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004907 error_exit "invalid trace backends" \
4908 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004909fi
4910
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004911##########################################
4912# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004913if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004914 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004915#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004916int main(void) { return 0; }
4917EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004918 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004919 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004920 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004921 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004922 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004923 fi
4924 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004925 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004926 else
4927 urcu_bp_libs="-lurcu-bp"
4928 fi
4929
4930 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4931 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004932 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004933 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004934 fi
4935fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004936
4937##########################################
4938# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004939if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004940 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004941 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004942 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004943 trace_backend_stap="no"
4944 if has 'stap' ; then
4945 trace_backend_stap="yes"
4946 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004947fi
4948
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004949##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004950# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304951
Peter Maydell7c2acc72013-04-08 12:11:27 +01004952# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004953# is sigcontext. On Windows the only valid backend is the Windows
4954# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004955
4956ucontext_works=no
4957if test "$darwin" != "yes"; then
4958 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304959#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004960#ifdef __stub_makecontext
4961#error Ignoring glibc stub makecontext which will always fail
4962#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004963int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304964EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004965 if compile_prog "" "" ; then
4966 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304967 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004968fi
4969
4970if test "$coroutine" = ""; then
4971 if test "$mingw32" = "yes"; then
4972 coroutine=win32
4973 elif test "$ucontext_works" = "yes"; then
4974 coroutine=ucontext
4975 else
4976 coroutine=sigaltstack
4977 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004978else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004979 case $coroutine in
4980 windows)
4981 if test "$mingw32" != "yes"; then
4982 error_exit "'windows' coroutine backend only valid for Windows"
4983 fi
4984 # Unfortunately the user visible backend name doesn't match the
4985 # coroutine-*.c filename for this case, so we have to adjust it here.
4986 coroutine=win32
4987 ;;
4988 ucontext)
4989 if test "$ucontext_works" != "yes"; then
4990 feature_not_found "ucontext"
4991 fi
4992 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004993 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004994 if test "$mingw32" = "yes"; then
4995 error_exit "only the 'windows' coroutine backend is valid for Windows"
4996 fi
4997 ;;
4998 *)
4999 error_exit "unknown coroutine backend $coroutine"
5000 ;;
5001 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305002fi
5003
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005004if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01005005 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005006fi
5007
Peter Lieven7d992e42016-09-27 11:58:45 +02005008if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02005009 if test "$coroutine_pool" = "yes"; then
5010 echo "WARN: disabling coroutine pool for stack usage debugging"
5011 coroutine_pool=no
5012 fi
5013fi
5014
5015
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305016##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305017# check if we have open_by_handle_at
5018
Stefan Weil4e1797f2012-06-18 22:11:06 +02005019open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305020cat > $TMPC << EOF
5021#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00005022#if !defined(AT_EMPTY_PATH)
5023# error missing definition
5024#else
Stefan Weil75cafad2011-12-17 09:27:29 +01005025int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00005026#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305027EOF
5028if compile_prog "" "" ; then
5029 open_by_handle_at=yes
5030fi
5031
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305032########################################
5033# check if we have linux/magic.h
5034
5035linux_magic_h=no
5036cat > $TMPC << EOF
5037#include <linux/magic.h>
5038int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01005039 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305040}
5041EOF
5042if compile_prog "" "" ; then
5043 linux_magic_h=yes
5044fi
5045
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005046########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01005047# check whether we can disable warning option with a pragma (this is needed
5048# to silence warnings in the headers of some versions of external libraries).
5049# This test has to be compiled with -Werror as otherwise an unknown pragma is
5050# only a warning.
5051#
5052# If we can't selectively disable warning in the code, disable -Werror so that
5053# the build doesn't fail anyway.
5054
Peter Maydell06d71fa2012-07-30 16:13:07 +01005055pragma_disable_unused_but_set=no
5056cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005057#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01005058#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02005059#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01005060
Peter Maydell06d71fa2012-07-30 16:13:07 +01005061int main(void) {
5062 return 0;
5063}
5064EOF
5065if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005066 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01005067else
5068 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01005069fi
5070
5071########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02005072# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005073
5074valgrind_h=no
5075cat > $TMPC << EOF
5076#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005077int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005078 return 0;
5079}
5080EOF
5081if compile_prog "" "" ; then
5082 valgrind_h=yes
5083fi
5084
5085########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005086# check if environ is declared
5087
5088has_environ=no
5089cat > $TMPC << EOF
5090#include <unistd.h>
5091int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00005092 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005093 return 0;
5094}
5095EOF
5096if compile_prog "" "" ; then
5097 has_environ=yes
5098fi
5099
Richard Henderson76a347e2012-12-28 14:17:02 -08005100########################################
5101# check if cpuid.h is usable.
5102
Richard Henderson76a347e2012-12-28 14:17:02 -08005103cat > $TMPC << EOF
5104#include <cpuid.h>
5105int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00005106 unsigned a, b, c, d;
5107 int max = __get_cpuid_max(0, 0);
5108
5109 if (max >= 1) {
5110 __cpuid(1, a, b, c, d);
5111 }
5112
5113 if (max >= 7) {
5114 __cpuid_count(7, 0, a, b, c, d);
5115 }
5116
5117 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005118}
5119EOF
5120if compile_prog "" "" ; then
5121 cpuid_h=yes
5122fi
5123
Richard Henderson5dd89902017-07-18 18:40:18 -10005124##########################################
5125# avx2 optimization requirement check
5126#
5127# There is no point enabling this if cpuid.h is not usable,
5128# since we won't be able to select the new routines.
5129
5130if test $cpuid_h = yes; then
5131 cat > $TMPC << EOF
5132#pragma GCC push_options
5133#pragma GCC target("avx2")
5134#include <cpuid.h>
5135#include <immintrin.h>
5136static int bar(void *a) {
5137 __m256i x = *(__m256i *)a;
5138 return _mm256_testz_si256(x, x);
5139}
5140int main(int argc, char *argv[]) { return bar(argv[0]); }
5141EOF
5142 if compile_object "" ; then
5143 avx2_opt="yes"
5144 fi
5145fi
5146
Richard Hendersonf5401662013-02-16 12:46:59 -08005147########################################
5148# check if __[u]int128_t is usable.
5149
5150int128=no
5151cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01005152#if defined(__clang_major__) && defined(__clang_minor__)
5153# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5154# error __int128_t does not work in CLANG before 3.2
5155# endif
5156#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08005157__int128_t a;
5158__uint128_t b;
5159int main (void) {
5160 a = a + b;
5161 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005162 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005163 return 0;
5164}
5165EOF
5166if compile_prog "" "" ; then
5167 int128=yes
5168fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005169
Richard Henderson7ebee432016-06-29 21:10:59 -07005170#########################################
5171# See if 128-bit atomic operations are supported.
5172
5173atomic128=no
5174if test "$int128" = "yes"; then
5175 cat > $TMPC << EOF
5176int main(void)
5177{
5178 unsigned __int128 x = 0, y = 0;
5179 y = __atomic_load_16(&x, 0);
5180 __atomic_store_16(&x, y, 0);
5181 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5182 return 0;
5183}
5184EOF
5185 if compile_prog "" "" ; then
5186 atomic128=yes
5187 fi
5188fi
5189
Richard Hendersondf79b992016-09-02 12:23:57 -07005190#########################################
5191# See if 64-bit atomic operations are supported.
5192# Note that without __atomic builtins, we can only
5193# assume atomic loads/stores max at pointer size.
5194
5195cat > $TMPC << EOF
5196#include <stdint.h>
5197int main(void)
5198{
5199 uint64_t x = 0, y = 0;
5200#ifdef __ATOMIC_RELAXED
5201 y = __atomic_load_8(&x, 0);
5202 __atomic_store_8(&x, y, 0);
5203 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5204 __atomic_exchange_8(&x, y, 0);
5205 __atomic_fetch_add_8(&x, y, 0);
5206#else
5207 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5208 __sync_lock_test_and_set(&x, y);
5209 __sync_val_compare_and_swap(&x, y, 0);
5210 __sync_fetch_and_add(&x, y);
5211#endif
5212 return 0;
5213}
5214EOF
5215if compile_prog "" "" ; then
5216 atomic64=yes
5217fi
5218
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005219########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005220# See if 16-byte vector operations are supported.
5221# Even without a vector unit the compiler may expand these.
5222# There is a bug in old GCC for PPC that crashes here.
5223# Unfortunately it's the system compiler for Centos 7.
5224
5225cat > $TMPC << EOF
5226typedef unsigned char U1 __attribute__((vector_size(16)));
5227typedef unsigned short U2 __attribute__((vector_size(16)));
5228typedef unsigned int U4 __attribute__((vector_size(16)));
5229typedef unsigned long long U8 __attribute__((vector_size(16)));
5230typedef signed char S1 __attribute__((vector_size(16)));
5231typedef signed short S2 __attribute__((vector_size(16)));
5232typedef signed int S4 __attribute__((vector_size(16)));
5233typedef signed long long S8 __attribute__((vector_size(16)));
5234static U1 a1, b1;
5235static U2 a2, b2;
5236static U4 a4, b4;
5237static U8 a8, b8;
5238static S1 c1;
5239static S2 c2;
5240static S4 c4;
5241static S8 c8;
5242static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005243void helper(void *d, void *a, int shift, int i);
5244void helper(void *d, void *a, int shift, int i)
5245{
5246 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5247 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5248 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5249 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5250}
Richard Hendersondb432672017-09-15 14:11:45 -07005251int main(void)
5252{
5253 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5254 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5255 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
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 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5260 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5261 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5262 return 0;
5263}
5264EOF
5265
5266vector16=no
5267if compile_prog "" "" ; then
5268 vector16=yes
5269fi
5270
5271########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005272# check if getauxval is available.
5273
5274getauxval=no
5275cat > $TMPC << EOF
5276#include <sys/auxv.h>
5277int main(void) {
5278 return getauxval(AT_HWCAP) == 0;
5279}
5280EOF
5281if compile_prog "" "" ; then
5282 getauxval=yes
5283fi
5284
John Snowfd0e6052015-03-25 18:57:39 -04005285########################################
5286# check if ccache is interfering with
5287# semantic analysis of macros
5288
John Snow5e4dfd32015-10-28 13:56:40 -04005289unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005290ccache_cpp2=no
5291cat > $TMPC << EOF
5292static const int Z = 1;
5293#define fn() ({ Z; })
5294#define TAUT(X) ((X) == Z)
5295#define PAREN(X, Y) (X == Y)
5296#define ID(X) (X)
5297int main(int argc, char *argv[])
5298{
5299 int x = 0, y = 0;
5300 x = ID(x);
5301 x = fn();
5302 fn();
5303 if (PAREN(x, y)) return 0;
5304 if (TAUT(Z)) return 0;
5305 return 0;
5306}
5307EOF
5308
5309if ! compile_object "-Werror"; then
5310 ccache_cpp2=yes
5311fi
5312
John Snowb553a042015-11-03 15:43:42 -05005313#################################################
5314# clang does not support glibc + FORTIFY_SOURCE.
5315
5316if test "$fortify_source" != "no"; then
5317 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5318 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005319 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005320 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005321 fortify_source="no";
5322 else
5323 fortify_source="yes"
5324 fi
5325fi
5326
Fam Zheng1efad062018-06-01 17:26:43 +08005327###############################################
5328# Check if copy_file_range is provided by glibc
5329have_copy_file_range=no
5330cat > $TMPC << EOF
5331#include <unistd.h>
5332int main(void) {
5333 copy_file_range(0, NULL, 0, NULL, 0, 0);
5334 return 0;
5335}
5336EOF
5337if compile_prog "" "" ; then
5338 have_copy_file_range=yes
5339fi
5340
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305341##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005342# check if struct fsxattr is available via linux/fs.h
5343
5344have_fsxattr=no
5345cat > $TMPC << EOF
5346#include <linux/fs.h>
5347struct fsxattr foo;
5348int main(void) {
5349 return 0;
5350}
5351EOF
5352if compile_prog "" "" ; then
5353 have_fsxattr=yes
5354fi
5355
Peter Maydellb66e10e2016-06-08 18:34:32 +01005356##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005357# check for usable membarrier system call
5358if test "$membarrier" = "yes"; then
5359 have_membarrier=no
5360 if test "$mingw32" = "yes" ; then
5361 have_membarrier=yes
5362 elif test "$linux" = "yes" ; then
5363 cat > $TMPC << EOF
5364 #include <linux/membarrier.h>
5365 #include <sys/syscall.h>
5366 #include <unistd.h>
5367 #include <stdlib.h>
5368 int main(void) {
5369 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5370 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5371 exit(0);
5372 }
5373EOF
5374 if compile_prog "" "" ; then
5375 have_membarrier=yes
5376 fi
5377 fi
5378 if test "$have_membarrier" = "no"; then
5379 feature_not_found "membarrier" "membarrier system call not available"
5380 fi
5381else
5382 # Do not enable it by default even for Mingw32, because it doesn't
5383 # work on Wine.
5384 membarrier=no
5385fi
5386
5387##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005388# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005389have_rtnetlink=no
5390cat > $TMPC << EOF
5391#include <linux/rtnetlink.h>
5392int main(void) {
5393 return IFLA_PROTO_DOWN;
5394}
5395EOF
5396if compile_prog "" "" ; then
5397 have_rtnetlink=yes
5398fi
5399
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005400##########################################
5401# check for usable AF_VSOCK environment
5402have_af_vsock=no
5403cat > $TMPC << EOF
5404#include <errno.h>
5405#include <sys/types.h>
5406#include <sys/socket.h>
5407#if !defined(AF_VSOCK)
5408# error missing AF_VSOCK flag
5409#endif
5410#include <linux/vm_sockets.h>
5411int main(void) {
5412 int sock, ret;
5413 struct sockaddr_vm svm;
5414 socklen_t len = sizeof(svm);
5415 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5416 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5417 if ((ret == -1) && (errno == ENOTCONN)) {
5418 return 0;
5419 }
5420 return -1;
5421}
5422EOF
5423if compile_prog "" "" ; then
5424 have_af_vsock=yes
5425fi
5426
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005427##########################################
5428# check for usable AF_ALG environment
5429hava_afalg=no
5430cat > $TMPC << EOF
5431#include <errno.h>
5432#include <sys/types.h>
5433#include <sys/socket.h>
5434#include <linux/if_alg.h>
5435int main(void) {
5436 int sock;
5437 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5438 return sock;
5439}
5440EOF
5441if compile_prog "" "" ; then
5442 have_afalg=yes
5443fi
5444if test "$crypto_afalg" = "yes"
5445then
5446 if test "$have_afalg" != "yes"
5447 then
5448 error_exit "AF_ALG requested but could not be detected"
5449 fi
5450fi
5451
5452
James Clarke6969ec62016-06-06 12:02:50 +01005453#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005454# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005455if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005456 cat > $TMPC << EOF
5457#include <Hypervisor/hv.h>
5458int main() { return 0;}
5459EOF
5460 if ! compile_object ""; then
5461 hvf='no'
5462 else
5463 hvf='yes'
5464 LDFLAGS="-framework Hypervisor $LDFLAGS"
5465 fi
5466fi
5467
5468#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005469# Sparc implicitly links with --relax, which is
5470# incompatible with -r, so --no-relax should be
5471# given. It does no harm to give it on other
5472# platforms too.
5473
5474# Note: the prototype is needed since QEMU_CFLAGS
5475# contains -Wmissing-prototypes
5476cat > $TMPC << EOF
5477extern int foo(void);
5478int foo(void) { return 0; }
5479EOF
5480if ! compile_object ""; then
5481 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5482fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005483for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5484 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5485 LD_REL_FLAGS=$i
5486 break
5487 fi
5488done
5489if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5490 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005491fi
5492
Jan Vesely277abf12016-04-29 13:15:23 -04005493##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005494# check for sysmacros.h
5495
5496have_sysmacros=no
5497cat > $TMPC << EOF
5498#include <sys/sysmacros.h>
5499int main(void) {
5500 return makedev(0, 0);
5501}
5502EOF
5503if compile_prog "" "" ; then
5504 have_sysmacros=yes
5505fi
5506
5507##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005508# Veritas HyperScale block driver VxHS
5509# Check if libvxhs is installed
5510
5511if test "$vxhs" != "no" ; then
5512 cat > $TMPC <<EOF
5513#include <stdint.h>
5514#include <qnio/qnio_api.h>
5515
5516void *vxhs_callback;
5517
5518int main(void) {
5519 iio_init(QNIO_VERSION, vxhs_callback);
5520 return 0;
5521}
5522EOF
5523 vxhs_libs="-lvxhs -lssl"
5524 if compile_prog "" "$vxhs_libs" ; then
5525 vxhs=yes
5526 else
5527 if test "$vxhs" = "yes" ; then
5528 feature_not_found "vxhs block device" "Install libvxhs See github"
5529 fi
5530 vxhs=no
5531 fi
5532fi
5533
5534##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005535# check for _Static_assert()
5536
5537have_static_assert=no
5538cat > $TMPC << EOF
5539_Static_assert(1, "success");
5540int main(void) {
5541 return 0;
5542}
5543EOF
5544if compile_prog "" "" ; then
5545 have_static_assert=yes
5546fi
5547
5548##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005549# check for utmpx.h, it is missing e.g. on OpenBSD
5550
5551have_utmpx=no
5552cat > $TMPC << EOF
5553#include <utmpx.h>
5554struct utmpx user_info;
5555int main(void) {
5556 return 0;
5557}
5558EOF
5559if compile_prog "" "" ; then
5560 have_utmpx=yes
5561fi
5562
5563##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005564# checks for sanitizers
5565
Marc-André Lureau247724c2018-01-16 16:11:51 +01005566have_asan=no
5567have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005568have_asan_iface_h=no
5569have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005570
5571if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005572 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005573 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5574 have_asan=yes
5575 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005576
5577 # we could use a simple skeleton for flags checks, but this also
5578 # detect the static linking issue of ubsan, see also:
5579 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5580 cat > $TMPC << EOF
5581#include <stdlib.h>
5582int main(void) {
5583 void *tmp = malloc(10);
5584 return *(int *)(tmp + 2);
5585}
5586EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005587 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5588 have_ubsan=yes
5589 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005590
5591 if check_include "sanitizer/asan_interface.h" ; then
5592 have_asan_iface_h=yes
5593 fi
5594
5595 cat > $TMPC << EOF
5596#include <sanitizer/asan_interface.h>
5597int main(void) {
5598 __sanitizer_start_switch_fiber(0, 0, 0);
5599 return 0;
5600}
5601EOF
5602 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5603 have_asan_iface_fiber=yes
5604 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005605fi
5606
5607##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005608# Docker and cross-compiler support
5609#
5610# This is specifically for building test
5611# cases for foreign architectures, not
5612# cross-compiling QEMU itself.
5613
5614if has "docker"; then
5615 docker=$($python $source_path/tests/docker/docker.py probe)
5616fi
5617
5618##########################################
Junyan He17824402018-07-18 15:47:59 +08005619# check for libpmem
5620
5621if test "$libpmem" != "no"; then
5622 if $pkg_config --exists "libpmem"; then
5623 libpmem="yes"
5624 libpmem_libs=$($pkg_config --libs libpmem)
5625 libpmem_cflags=$($pkg_config --cflags libpmem)
5626 libs_softmmu="$libs_softmmu $libpmem_libs"
5627 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5628 else
5629 if test "$libpmem" = "yes" ; then
5630 feature_not_found "libpmem" "Install nvml or pmdk"
5631 fi
5632 libpmem="no"
5633 fi
5634fi
5635
5636##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005637# End of CC checks
5638# After here, no more $cc or $ld runs
5639
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005640write_c_skeleton
5641
Blue Swirl1d728c32012-05-01 18:45:39 +00005642if test "$gcov" = "yes" ; then
5643 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5644 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005645elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005646 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005647elif test "$debug" = "no"; then
5648 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005649fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005650
Marc-André Lureau247724c2018-01-16 16:11:51 +01005651if test "$have_asan" = "yes"; then
5652 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005653 if test "$have_asan_iface_h" = "no" ; then
5654 echo "ASAN build enabled, but ASAN header missing." \
5655 "Without code annotation, the report may be inferior."
5656 elif test "$have_asan_iface_fiber" = "no" ; then
5657 echo "ASAN build enabled, but ASAN header is too old." \
5658 "Without code annotation, the report may be inferior."
5659 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005660fi
5661if test "$have_ubsan" = "yes"; then
5662 CFLAGS="-fsanitize=undefined $CFLAGS"
5663fi
5664
Peter Lieven6542aa92014-02-03 10:26:13 +01005665##########################################
5666# Do we have libnfs
5667if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005668 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005669 libnfs="yes"
5670 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005671 else
5672 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005673 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005674 fi
5675 libnfs="no"
5676 fi
5677fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005678
Peter Maydell6ca026c2012-07-18 15:10:18 +01005679# Now we've finished running tests it's OK to add -Werror to the compiler flags
5680if test "$werror" = "yes"; then
5681 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5682fi
5683
Juan Quintelae86ecd42009-08-03 14:45:59 +02005684if test "$solaris" = "no" ; then
5685 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005686 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005687 fi
5688fi
5689
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005690# test if pod2man has --utf8 option
5691if pod2man --help | grep -q utf8; then
5692 POD2MAN="pod2man --utf8"
5693else
5694 POD2MAN="pod2man"
5695fi
5696
Blue Swirl952afb72010-09-19 08:36:34 +00005697# Use ASLR, no-SEH and DEP if available
5698if test "$mingw32" = "yes" ; then
5699 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005700 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005701 LDFLAGS="-Wl,$flag $LDFLAGS"
5702 fi
5703 done
5704fi
5705
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005706qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005707qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005708qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005709qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005710
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005711# We can only support ivshmem if we have eventfd
5712if [ "$eventfd" = "yes" ]; then
5713 ivshmem=yes
5714fi
5715
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005716tools=""
5717if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02005718 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005719 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5720 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005721 fi
5722 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005723 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005724 fi
5725fi
5726if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005727 if test "$linux" = yes; then
5728 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005729 virtfs=yes
5730 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5731 else
5732 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005733 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305734 fi
Andreas Färber17500372012-05-01 01:12:03 +02005735 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005736 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005737 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5738 mpath=yes
5739 else
5740 if test "$mpath" = yes; then
5741 error_exit "Multipath requires libmpathpersist devel"
5742 fi
5743 mpath=no
5744 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005745 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5746 else
5747 if test "$virtfs" = yes; then
5748 error_exit "VirtFS is supported only on Linux"
5749 fi
5750 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005751 if test "$mpath" = yes; then
5752 error_exit "Multipath is supported only on Linux"
5753 fi
5754 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305755 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005756 if test "$xkbcommon" = "yes"; then
5757 tools="qemu-keymap\$(EXESUF) $tools"
5758 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005759fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005760
5761# Probe for guest agent support/options
5762
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005763if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005764 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005765 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005766 guest_agent=yes
5767 elif [ "$guest_agent" != yes ]; then
5768 guest_agent=no
5769 else
5770 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005771 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005772fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005773
Michael Roth9d6bc272015-08-26 10:49:13 -05005774# Guest agent Window MSI package
5775
5776if test "$guest_agent" != yes; then
5777 if test "$guest_agent_msi" = yes; then
5778 error_exit "MSI guest agent package requires guest agent enabled"
5779 fi
5780 guest_agent_msi=no
5781elif test "$mingw32" != "yes"; then
5782 if test "$guest_agent_msi" = "yes"; then
5783 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5784 fi
5785 guest_agent_msi=no
5786elif ! has wixl; then
5787 if test "$guest_agent_msi" = "yes"; then
5788 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5789 fi
5790 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005791else
5792 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5793 # disabled explicitly
5794 if test "$guest_agent_msi" != "no"; then
5795 guest_agent_msi=yes
5796 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005797fi
5798
Michael Roth1a349042015-08-26 11:14:31 -05005799if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005800 if test "$guest_agent_with_vss" = "yes"; then
5801 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5802 fi
5803
5804 if test "$QEMU_GA_MANUFACTURER" = ""; then
5805 QEMU_GA_MANUFACTURER=QEMU
5806 fi
5807
5808 if test "$QEMU_GA_DISTRO" = ""; then
5809 QEMU_GA_DISTRO=Linux
5810 fi
5811
5812 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005813 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005814 fi
5815
Stefan Weil89138852016-05-16 15:10:20 +02005816 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005817
5818 case "$cpu" in
5819 x86_64)
5820 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5821 ;;
5822 i386)
5823 QEMU_GA_MSI_ARCH="-D Arch=32"
5824 ;;
5825 *)
5826 error_exit "CPU $cpu not supported for building installation package"
5827 ;;
5828 esac
5829fi
5830
Paolo Bonzinica35f782010-05-26 16:08:29 +02005831# Mac OS X ships with a broken assembler
5832roms=
5833if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5834 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5835 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005836 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005837 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5838 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5839 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005840 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5841 ld_i386_emulation="$emu"
5842 roms="optionrom"
5843 break
5844 fi
5845 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005846fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005847if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005848 roms="$roms spapr-rtas"
5849fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005850
Christian Borntraeger9933c302013-04-23 01:23:03 +00005851if test "$cpu" = "s390x" ; then
5852 roms="$roms s390-ccw"
5853fi
5854
Richard Henderson964c6fa2013-06-21 19:10:16 -07005855# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005856if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005857 textseg_addr=
5858 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005859 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5860 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005861 textseg_addr=0x60000000
5862 ;;
5863 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005864 # A 256M aligned address, high in the address space, with enough
5865 # room for the code_gen_buffer above it before the stack.
5866 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005867 ;;
5868 esac
5869 if [ -n "$textseg_addr" ]; then
5870 cat > $TMPC <<EOF
5871 int main(void) { return 0; }
5872EOF
5873 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5874 if ! compile_prog "" "$textseg_ldflags"; then
5875 # In case ld does not support -Ttext-segment, edit the default linker
5876 # script via sed to set the .text start addr. This is needed on FreeBSD
5877 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005878 if ! $ld --verbose >/dev/null 2>&1; then
5879 error_exit \
5880 "We need to link the QEMU user mode binaries at a" \
5881 "specific text address. Unfortunately your linker" \
5882 "doesn't support either the -Ttext-segment option or" \
5883 "printing the default linker script with --verbose." \
5884 "If you don't want the user mode binaries, pass the" \
5885 "--disable-user option to configure."
5886 fi
5887
Richard Henderson964c6fa2013-06-21 19:10:16 -07005888 $ld --verbose | sed \
5889 -e '1,/==================================================/d' \
5890 -e '/==================================================/,$d' \
5891 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5892 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5893 textseg_ldflags="-Wl,-T../config-host.ld"
5894 fi
5895 fi
5896fi
5897
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005898# Check that the C++ compiler exists and works with the C compiler.
5899# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5900if has $cxx; then
5901 cat > $TMPC <<EOF
5902int c_function(void);
5903int main(void) { return c_function(); }
5904EOF
5905
5906 compile_object
5907
5908 cat > $TMPCXX <<EOF
5909extern "C" {
5910 int c_function(void);
5911}
5912int c_function(void) { return 42; }
5913EOF
5914
5915 update_cxxflags
5916
5917 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5918 # C++ compiler $cxx works ok with C compiler $cc
5919 :
5920 else
5921 echo "C++ compiler $cxx does not work with C compiler $cc"
5922 echo "Disabling C++ specific optional code"
5923 cxx=
5924 fi
5925else
5926 echo "No C++ compiler available; disabling C++ specific optional code"
5927 cxx=
5928fi
5929
Cole Robinson02d34f62016-05-06 14:03:09 -04005930echo_version() {
5931 if test "$1" = "yes" ; then
5932 echo "($2)"
5933 fi
5934}
5935
Jan Kiszka50e12062014-10-02 10:03:55 +02005936# prepend pixman and ftd flags after all config tests are done
5937QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005938QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005939libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005940
bellard43ce4df2003-06-09 19:53:12 +00005941echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005942echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005943echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005944echo "binary directory $(eval echo $bindir)"
5945echo "library directory $(eval echo $libdir)"
5946echo "module directory $(eval echo $qemu_moddir)"
5947echo "libexec directory $(eval echo $libexecdir)"
5948echo "include directory $(eval echo $includedir)"
5949echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005950if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005951echo "local state directory $(eval echo $local_statedir)"
5952echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005953echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005954else
5955echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005956echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005957fi
bellard5a671352003-10-01 00:13:48 +00005958echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005959echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005960echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005961echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005962echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005963echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005964echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005965echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005966echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005967echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005968echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005969echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005970echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005971echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005972echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005973if test "$slirp" = "yes" ; then
5974 echo "smbd $smbd"
5975fi
Fam Zheng17969262014-02-10 14:48:56 +08005976echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005977echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005978echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005979echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005980echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005981echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005982echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005983echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005984echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005985if test "$darwin" = "yes" ; then
5986 echo "Cocoa support $cocoa"
5987fi
Stefan Weil89138852016-05-16 15:10:20 +02005988echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5989echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005990echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005991echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005992echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005993echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005994echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005995echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005996echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02005997echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005998echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005999echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00006000echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02006001echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02006002echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00006003echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00006004echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006005echo "Block whitelist (rw) $block_drv_rw_whitelist"
6006echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05306007echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006008echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01006009echo "VNC support $vnc"
6010if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01006011 echo "VNC SASL support $vnc_sasl"
6012 echo "VNC JPEG support $vnc_jpeg"
6013 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01006014fi
blueswir131422552007-04-16 18:27:06 +00006015if test -n "$sparc_cpu"; then
6016 echo "Target Sparc Arch $sparc_cpu"
6017fi
aliguorie37630c2009-04-22 15:19:10 +00006018echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00006019if test "$xen" = "yes" ; then
6020 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00006021 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00006022fi
aurel322e4d9fb2008-04-08 06:01:02 +00006023echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02006024echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02006025echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02006026echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00006027echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01006028echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006029echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006030echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00006031echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02006032echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006033echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05006034echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006035echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006036echo "TCG support $tcg"
6037if test "$tcg" = "yes" ; then
6038 echo "TCG debug enabled $debug_tcg"
6039 echo "TCG interpreter $tcg_interpreter"
6040fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08006041echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04006042echo "RDMA support $rdma"
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006043echo "PVRDMA support $pvrdma"
aurel32f652e6a2008-12-16 10:43:48 +00006044echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006045echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00006046echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006047echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00006048echo "madvise $madvise"
6049echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006050echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05006051echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006052echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08006053echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006054echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006055echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006056echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02006057echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01006058if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01006059echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01006060fi
Stefan Weil89138852016-05-16 15:10:20 +02006061echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006062echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006063echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006064echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006065echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02006066echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006067echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006068echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006069echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01006070echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05006071echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006072echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05006073echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05006074echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03006075echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01006076echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006077echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02006078echo "debug stack usage $debug_stack_usage"
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006079echo "mutex debugging $debug_mutex"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006080echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05306081echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00006082echo "gcov $gcov_tool"
6083echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05006084echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006085echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006086echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006087echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02006088echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006089echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08006090echo "lzo support $lzo"
6091echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01006092echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006093echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03006094echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08006095echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02006096echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08006097echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006098echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006099echo "VxHS block device $vxhs"
Richard Henderson8ca80762017-09-14 09:41:12 -07006100echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01006101echo "docker $docker"
Junyan He17824402018-07-18 15:47:59 +08006102echo "libpmem support $libpmem"
bellard67b915a2004-03-31 23:37:16 +00006103
Stefan Weil1ba16962011-07-29 22:40:45 +02006104if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00006105echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00006106fi
bellard97a847b2003-08-10 21:36:04 +00006107
Daniel P. Berrangeb7715af2017-12-12 11:34:40 +00006108if test "$gtkabi" = "2.0"; then
6109 echo
6110 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
6111 echo "WARNING: future releases. Please switch to using GTK 3.0"
6112fi
6113
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00006114if test "$sdlabi" = "1.2"; then
6115 echo
6116 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6117 echo "WARNING: future releases. Please switch to using SDL 2.0"
6118fi
6119
Peter Maydell898be3e2017-03-21 14:31:57 +00006120if test "$supported_cpu" = "no"; then
6121 echo
6122 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6123 echo
6124 echo "CPU host architecture $cpu support is not currently maintained."
6125 echo "The QEMU project intends to remove support for this host CPU in"
6126 echo "a future release if nobody volunteers to maintain it and to"
6127 echo "provide a build host for our continuous integration setup."
6128 echo "configure has succeeded and you can continue to build, but"
6129 echo "if you care about QEMU on this platform you should contact"
6130 echo "us upstream at qemu-devel@nongnu.org."
6131fi
6132
6133if test "$supported_os" = "no"; then
6134 echo
6135 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6136 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00006137 echo "Host OS $targetos support is not currently maintained."
6138 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006139 echo "a future release if nobody volunteers to maintain it and to"
6140 echo "provide a build host for our continuous integration setup."
6141 echo "configure has succeeded and you can continue to build, but"
6142 echo "if you care about QEMU on this platform you should contact"
6143 echo "us upstream at qemu-devel@nongnu.org."
6144fi
6145
Juan Quintela98ec69a2009-07-16 18:34:18 +02006146config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006147
Stefan Weildbd99ae2013-01-01 18:33:44 +01006148echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6149
Juan Quintela98ec69a2009-07-16 18:34:18 +02006150echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006151echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006152
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006153echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006154echo "prefix=$prefix" >> $config_host_mak
6155echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006156echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006157echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006158echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006159echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006160echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006161echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006162echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006163echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006164echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006165echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006166if test "$mingw32" = "no" ; then
6167 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6168fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006169echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006170echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006171echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006172echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006173echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006174echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006175
Juan Quintela98ec69a2009-07-16 18:34:18 +02006176echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006177
aurel32f8393942009-04-13 18:45:38 +00006178if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006179 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006180fi
aliguori1625af82009-04-05 17:41:02 +00006181if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006182 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006183fi
bellard7d132992003-03-06 23:23:54 +00006184if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006185 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006186fi
bellard67b915a2004-03-31 23:37:16 +00006187if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006188 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006189 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006190 version_major=${rc_version%%.*}
6191 rc_version=${rc_version#*.}
6192 version_minor=${rc_version%%.*}
6193 rc_version=${rc_version#*.}
6194 version_subminor=${rc_version%%.*}
6195 version_micro=0
6196 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6197 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006198 if test "$guest_agent_with_vss" = "yes" ; then
6199 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006200 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006201 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6202 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006203 if test "$guest_agent_ntddscsi" = "yes" ; then
6204 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6205 fi
Michael Roth1a349042015-08-26 11:14:31 -05006206 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006207 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006208 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6209 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6210 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6211 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6212 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6213 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6214 fi
pbrook210fa552007-02-27 21:04:49 +00006215else
Juan Quintela35f4df22009-07-27 16:13:07 +02006216 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006217fi
blueswir1128ab2f2008-08-15 18:33:42 +00006218
Mark McLoughlindffcb712009-10-22 17:49:11 +01006219if test "$linux" = "yes" ; then
6220 echo "CONFIG_LINUX=y" >> $config_host_mak
6221fi
6222
bellard83fb7ad2004-07-05 21:25:26 +00006223if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006224 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006225fi
malcb29fe3e2008-11-18 01:42:22 +00006226
bellardec530c82006-04-25 22:36:06 +00006227if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006228 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006229fi
Andreas Färber179cf402010-09-20 00:50:43 +02006230if test "$haiku" = "yes" ; then
6231 echo "CONFIG_HAIKU=y" >> $config_host_mak
6232fi
bellard97a847b2003-08-10 21:36:04 +00006233if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006234 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006235fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006236if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006237 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006238fi
bellardc20709a2004-04-21 23:27:19 +00006239if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006240 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006241 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006242fi
ths8a16d272008-07-19 09:56:24 +00006243if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006244 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006245 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006246fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006247if test "$netmap" = "yes" ; then
6248 echo "CONFIG_NETMAP=y" >> $config_host_mak
6249fi
Gonglei015a33b2014-07-01 20:58:08 +08006250if test "$l2tpv3" = "yes" ; then
6251 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6252fi
Corey Bryant47e98652012-01-26 09:42:26 -05006253if test "$cap_ng" = "yes" ; then
6254 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6255fi
Juan Quintela2358a492009-07-27 16:13:25 +02006256echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006257for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006258 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006259 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006260 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006261 echo "$def=m" >> $config_host_mak ;;
6262 *)
6263 echo "$def=y" >> $config_host_mak ;;
6264 esac
malc0c58ac12008-06-25 21:04:05 +00006265done
Fam Zhengb1149912017-09-07 16:29:13 +08006266echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6267echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6268echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6269echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6270echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006271if test "$audio_pt_int" = "yes" ; then
6272 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6273fi
malcd5631632009-10-10 01:13:41 +04006274if test "$audio_win_int" = "yes" ; then
6275 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6276fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006277echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6278echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006279if test "$vnc" = "yes" ; then
6280 echo "CONFIG_VNC=y" >> $config_host_mak
6281fi
aliguori2f9606b2009-03-06 20:27:28 +00006282if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006283 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006284fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006285if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006286 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006287fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006288if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006289 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006290fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006291if test "$xkbcommon" = "yes" ; then
6292 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6293 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6294fi
aliguori76655d62009-03-06 20:27:37 +00006295if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006296 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006297fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006298if test "$xfs" = "yes" ; then
6299 echo "CONFIG_XFS=y" >> $config_host_mak
6300fi
Stefan Weil89138852016-05-16 15:10:20 +02006301qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006302echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006303echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006304echo "SRC_PATH=$source_path" >> $config_host_mak
Alex Bennée2b1f35b2018-07-04 07:30:11 +01006305echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006306if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006307 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006308fi
Fam Zheng17969262014-02-10 14:48:56 +08006309if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006310 # $shacmd can generate a hash started with digit, which the compiler doesn't
6311 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006312 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006313 echo "CONFIG_MODULES=y" >> $config_host_mak
6314fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006315if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6316 echo "CONFIG_X11=y" >> $config_host_mak
6317 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6318 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6319fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006320if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006321 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006322 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006323 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006324 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006325fi
6326if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006327 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006328fi
6329if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006330 echo "CONFIG_CURSES=m" >> $config_host_mak
6331 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6332 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006333fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006334if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006335 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006336fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006337if test "$accept4" = "yes" ; then
6338 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6339fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306340if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006341 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306342fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006343if test "$eventfd" = "yes" ; then
6344 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6345fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006346if test "$memfd" = "yes" ; then
6347 echo "CONFIG_MEMFD=y" >> $config_host_mak
6348fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006349if test "$fallocate" = "yes" ; then
6350 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6351fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006352if test "$fallocate_punch_hole" = "yes" ; then
6353 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6354fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006355if test "$fallocate_zero_range" = "yes" ; then
6356 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6357fi
Kevin Wolfed911432014-09-29 17:12:59 +02006358if test "$posix_fallocate" = "yes" ; then
6359 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6360fi
Peter Maydellc727f472011-01-06 11:05:10 +00006361if test "$sync_file_range" = "yes" ; then
6362 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6363fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006364if test "$fiemap" = "yes" ; then
6365 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6366fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006367if test "$dup3" = "yes" ; then
6368 echo "CONFIG_DUP3=y" >> $config_host_mak
6369fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006370if test "$ppoll" = "yes" ; then
6371 echo "CONFIG_PPOLL=y" >> $config_host_mak
6372fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006373if test "$prctl_pr_set_timerslack" = "yes" ; then
6374 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6375fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006376if test "$epoll" = "yes" ; then
6377 echo "CONFIG_EPOLL=y" >> $config_host_mak
6378fi
6379if test "$epoll_create1" = "yes" ; then
6380 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6381fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006382if test "$sendfile" = "yes" ; then
6383 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6384fi
Riku Voipio51834342014-06-22 11:25:42 +01006385if test "$timerfd" = "yes" ; then
6386 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6387fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006388if test "$setns" = "yes" ; then
6389 echo "CONFIG_SETNS=y" >> $config_host_mak
6390fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006391if test "$clock_adjtime" = "yes" ; then
6392 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6393fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006394if test "$syncfs" = "yes" ; then
6395 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6396fi
aurel323b3f24a2009-04-15 16:12:13 +00006397if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006398 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006399fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006400if test "$inotify1" = "yes" ; then
6401 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6402fi
Peter Maydell401bc052017-09-05 13:19:32 +01006403if test "$sem_timedwait" = "yes" ; then
6404 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6405fi
Keno Fischer5c99fa32018-06-29 12:32:10 +02006406if test "$strchrnul" = "yes" ; then
6407 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6408fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006409if test "$byteswap_h" = "yes" ; then
6410 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6411fi
6412if test "$bswap_h" = "yes" ; then
6413 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6414fi
Alexander Graf769ce762009-05-11 17:41:42 +02006415if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006416 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006417 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006418 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006419fi
aurel322e4d9fb2008-04-08 06:01:02 +00006420if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006421 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006422 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006423fi
balrogfb599c92008-09-28 23:49:55 +00006424if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006425 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006426 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006427fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006428if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006429 echo "CONFIG_GTK=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006430 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006431 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006432 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006433 if test "$gtk_gl" = "yes" ; then
6434 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6435 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006436fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006437echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006438if test "$gnutls" = "yes" ; then
6439 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6440fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09006441if test "$gnutls_rnd" = "yes" ; then
6442 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6443fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006444if test "$gcrypt" = "yes" ; then
6445 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006446 if test "$gcrypt_hmac" = "yes" ; then
6447 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6448 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01006449 if test "$gcrypt_kdf" = "yes" ; then
6450 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6451 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006452fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006453if test "$nettle" = "yes" ; then
6454 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006455 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01006456 if test "$nettle_kdf" = "yes" ; then
6457 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6458 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006459fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006460if test "$tasn1" = "yes" ; then
6461 echo "CONFIG_TASN1=y" >> $config_host_mak
6462fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006463if test "$have_ifaddrs_h" = "yes" ; then
6464 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6465fi
Eric Blake6b39b062016-10-11 10:46:23 -05006466if test "$have_broken_size_max" = "yes" ; then
6467 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6468fi
Jan Vesely277abf12016-04-29 13:15:23 -04006469
6470# Work around a system header bug with some kernel/XFS header
6471# versions where they both try to define 'struct fsxattr':
6472# xfs headers will not try to redefine structs from linux headers
6473# if this macro is set.
6474if test "$have_fsxattr" = "yes" ; then
6475 echo "HAVE_FSXATTR=y" >> $config_host_mak
6476fi
Fam Zheng1efad062018-06-01 17:26:43 +08006477if test "$have_copy_file_range" = "yes" ; then
6478 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6479fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006480if test "$vte" = "yes" ; then
6481 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006482 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006483 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006484fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006485if test "$virglrenderer" = "yes" ; then
6486 echo "CONFIG_VIRGL=y" >> $config_host_mak
6487 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6488 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6489fi
aliguorie37630c2009-04-22 15:19:10 +00006490if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006491 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006492 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006493 if test "$xen_pv_domain_build" = "yes" ; then
6494 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6495 fi
aliguorie37630c2009-04-22 15:19:10 +00006496fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006497if test "$linux_aio" = "yes" ; then
6498 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6499fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006500if test "$attr" = "yes" ; then
6501 echo "CONFIG_ATTR=y" >> $config_host_mak
6502fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006503if test "$libattr" = "yes" ; then
6504 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6505fi
Meador Inge983eef52012-02-24 14:00:42 +05306506if test "$virtfs" = "yes" ; then
6507 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006508fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006509if test "$mpath" = "yes" ; then
6510 echo "CONFIG_MPATH=y" >> $config_host_mak
Murilo Opsfelder Araujo1b0578f2018-08-10 11:11:16 -03006511 if test "$mpathpersist_new_api" = "yes"; then
6512 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6513 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006514fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006515if test "$vhost_scsi" = "yes" ; then
6516 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6517fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006518if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006519 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6520fi
Gonglei042cea22018-03-01 21:46:28 +08006521if test "$vhost_crypto" = "yes" ; then
6522 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6523fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006524if test "$vhost_vsock" = "yes" ; then
6525 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6526fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006527if test "$vhost_user" = "yes" ; then
6528 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6529fi
ths77755342008-11-27 15:45:16 +00006530if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006531 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006532fi
aliguoribf9298b2008-12-05 20:05:26 +00006533if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006534 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006535fi
aliguoriceb42de2009-04-07 18:43:28 +00006536if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006537 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006538fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006539if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006540 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006541fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006542if test "$membarrier" = "yes" ; then
6543 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6544fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006545if test "$signalfd" = "yes" ; then
6546 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6547fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006548if test "$tcg" = "yes"; then
6549 echo "CONFIG_TCG=y" >> $config_host_mak
6550 if test "$tcg_interpreter" = "yes" ; then
6551 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6552 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006553fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006554if test "$fdatasync" = "yes" ; then
6555 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6556fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006557if test "$madvise" = "yes" ; then
6558 echo "CONFIG_MADVISE=y" >> $config_host_mak
6559fi
6560if test "$posix_madvise" = "yes" ; then
6561 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6562fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006563if test "$posix_memalign" = "yes" ; then
6564 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6565fi
bellard97a847b2003-08-10 21:36:04 +00006566
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006567if test "$spice" = "yes" ; then
6568 echo "CONFIG_SPICE=y" >> $config_host_mak
6569fi
6570
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006571if test "$smartcard" = "yes" ; then
6572 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006573 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6574 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006575fi
6576
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006577if test "$libusb" = "yes" ; then
6578 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006579 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6580 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006581fi
6582
Hans de Goede69354a82011-07-19 11:04:10 +02006583if test "$usb_redir" = "yes" ; then
6584 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006585 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6586 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006587fi
6588
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006589if test "$opengl" = "yes" ; then
6590 echo "CONFIG_OPENGL=y" >> $config_host_mak
6591 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006592 if test "$opengl_dmabuf" = "yes" ; then
6593 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6594 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006595fi
6596
Yang Zhong5a22ab72017-12-20 21:16:46 +08006597if test "$malloc_trim" = "yes" ; then
6598 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6599fi
6600
Liang Li99f2dbd2016-03-08 13:53:16 +08006601if test "$avx2_opt" = "yes" ; then
6602 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6603fi
6604
qiaonuohan607dacd2014-02-18 14:11:30 +08006605if test "$lzo" = "yes" ; then
6606 echo "CONFIG_LZO=y" >> $config_host_mak
6607fi
6608
6609if test "$snappy" = "yes" ; then
6610 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6611fi
6612
Peter Wu6b383c02015-01-06 18:48:14 +01006613if test "$bzip2" = "yes" ; then
6614 echo "CONFIG_BZIP2=y" >> $config_host_mak
6615 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6616fi
6617
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006618if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006619 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006620 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6621 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006622fi
6623
Peter Lieven6542aa92014-02-03 10:26:13 +01006624if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006625 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6626 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006627fi
6628
Eduardo Otubof7945732012-08-14 18:44:05 -03006629if test "$seccomp" = "yes"; then
6630 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006631 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6632 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006633fi
6634
bellard83fb7ad2004-07-05 21:25:26 +00006635# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006636if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006637 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006638fi
6639
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006640if test "$localtime_r" = "yes" ; then
6641 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6642fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006643if test "$qom_cast_debug" = "yes" ; then
6644 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6645fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006646if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006647 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006648 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6649 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006650fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006651
Peter Maydell7c2acc72013-04-08 12:11:27 +01006652echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006653if test "$coroutine_pool" = "yes" ; then
6654 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6655else
6656 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6657fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306658
Peter Lieven7d992e42016-09-27 11:58:45 +02006659if test "$debug_stack_usage" = "yes" ; then
6660 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6661fi
6662
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006663if test "$crypto_afalg" = "yes" ; then
6664 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6665fi
6666
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306667if test "$open_by_handle_at" = "yes" ; then
6668 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6669fi
6670
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306671if test "$linux_magic_h" = "yes" ; then
6672 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6673fi
6674
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006675if test "$pragma_diagnostic_available" = "yes" ; then
6676 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006677fi
6678
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006679if test "$valgrind_h" = "yes" ; then
6680 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6681fi
6682
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006683if test "$have_asan_iface_fiber" = "yes" ; then
6684 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6685fi
6686
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006687if test "$has_environ" = "yes" ; then
6688 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6689fi
6690
Richard Henderson76a347e2012-12-28 14:17:02 -08006691if test "$cpuid_h" = "yes" ; then
6692 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6693fi
6694
Richard Hendersonf5401662013-02-16 12:46:59 -08006695if test "$int128" = "yes" ; then
6696 echo "CONFIG_INT128=y" >> $config_host_mak
6697fi
6698
Richard Henderson7ebee432016-06-29 21:10:59 -07006699if test "$atomic128" = "yes" ; then
6700 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6701fi
6702
Richard Hendersondf79b992016-09-02 12:23:57 -07006703if test "$atomic64" = "yes" ; then
6704 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6705fi
6706
Richard Hendersondb432672017-09-15 14:11:45 -07006707if test "$vector16" = "yes" ; then
6708 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6709fi
6710
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006711if test "$getauxval" = "yes" ; then
6712 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6713fi
6714
Bharata B Raoeb100392012-09-24 14:42:45 +05306715if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006716 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006717 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6718 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306719fi
6720
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006721if test "$glusterfs_xlator_opt" = "yes" ; then
6722 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6723fi
6724
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306725if test "$glusterfs_discard" = "yes" ; then
6726 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6727fi
6728
Niels de Vosdf3a4292017-05-28 12:01:14 +05306729if test "$glusterfs_fallocate" = "yes" ; then
6730 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6731fi
6732
Bharata B Rao7c815372013-12-21 14:51:25 +05306733if test "$glusterfs_zerofill" = "yes" ; then
6734 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6735fi
6736
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006737if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006738 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006739 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6740 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006741fi
6742
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006743if test "$live_block_migration" = "yes" ; then
6744 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6745fi
6746
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006747if test "$tpm" = "yes"; then
6748 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006749 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006750 if test "$tpm_passthrough" = "yes"; then
6751 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6752 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006753 # TPM emulator support?
6754 if test "$tpm_emulator" = "yes"; then
6755 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6756 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006757fi
6758
Lluís Vilanova5b808272014-05-27 15:02:14 +02006759echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6760if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02006761 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306762fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006763if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02006764 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6765 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006766 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006767fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006768if have_backend "log"; then
6769 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02006770fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006771if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02006772 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6773fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006774if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006775 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6776 if test "$trace_backend_stap" = "yes" ; then
6777 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6778 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006779fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006780if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006781 if test "$linux" = "yes" ; then
6782 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006783 else
Stewart Smith21684af2014-01-24 12:39:10 +11006784 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006785 fi
6786fi
Paul Durrant0a852412016-08-04 14:44:14 +01006787if have_backend "syslog"; then
6788 if test "$posix_syslog" = "yes" ; then
6789 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6790 else
6791 feature_not_found "syslog(trace backend)" "syslog not available"
6792 fi
6793fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006794echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6795
Michael R. Hines2da776d2013-07-22 10:01:54 -04006796if test "$rdma" = "yes" ; then
6797 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006798 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006799fi
6800
Marcel Apfelbaum21ab34c2018-08-16 18:16:37 +03006801if test "$pvrdma" = "yes" ; then
6802 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6803fi
6804
Laurent Vivier575b22b2016-06-02 22:14:15 +02006805if test "$have_rtnetlink" = "yes" ; then
6806 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6807fi
6808
Klim Kireeved279a02018-01-12 12:01:19 +03006809if test "$libxml2" = "yes" ; then
6810 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6811 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6812 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6813fi
6814
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006815if test "$replication" = "yes" ; then
6816 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6817fi
6818
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006819if test "$have_af_vsock" = "yes" ; then
6820 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6821fi
6822
Christopher Covington4d043512016-12-28 15:04:33 -05006823if test "$have_sysmacros" = "yes" ; then
6824 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6825fi
6826
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006827if test "$have_static_assert" = "yes" ; then
6828 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6829fi
6830
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006831if test "$have_utmpx" = "yes" ; then
6832 echo "HAVE_UTMPX=y" >> $config_host_mak
6833fi
6834
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006835if test "$ivshmem" = "yes" ; then
6836 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6837fi
Richard Hendersone219c492017-09-28 09:01:23 -07006838if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006839 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6840fi
Paolo Bonziniba59fb72018-06-13 14:23:08 +02006841if test "$debug_mutex" = "yes" ; then
6842 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6843fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006844
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006845# Hold two types of flag:
6846# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6847# a thread we have a handle to
6848# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6849# platform
6850if test "$pthread_setname_np" = "yes" ; then
6851 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6852 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6853fi
6854
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006855if test "$vxhs" = "yes" ; then
6856 echo "CONFIG_VXHS=y" >> $config_host_mak
6857 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6858fi
6859
Junyan He17824402018-07-18 15:47:59 +08006860if test "$libpmem" = "yes" ; then
6861 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6862fi
6863
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006864if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006865 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006866elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006867 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006868elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006869 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006870elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006871 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006872elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006873 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006874else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006875 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006876fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006877QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006878
Juan Quintela98ec69a2009-07-16 18:34:18 +02006879echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006880echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006881echo "MAKE=$make" >> $config_host_mak
6882echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006883echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6884echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006885echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6886echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006887echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006888echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006889if $iasl -h > /dev/null 2>&1; then
6890 echo "IASL=$iasl" >> $config_host_mak
6891fi
Juan Quintela804edf22009-07-27 16:12:49 +02006892echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006893echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006894echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006895echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006896echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006897echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006898echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006899echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006900echo "OBJCOPY=$objcopy" >> $config_host_mak
6901echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006902echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006903echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006904echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006905echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006906echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006907echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006908echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006909echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006910if test "$sparse" = "yes" ; then
6911 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006912 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006913 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006914 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6915 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6916fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006917if test "$cross_prefix" != ""; then
6918 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6919else
6920 echo "AUTOCONF_HOST := " >> $config_host_mak
6921fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006922echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006923echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006924echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006925echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006926echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006927echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006928echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006929echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006930echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006931echo "DSOSUF=$DSOSUF" >> $config_host_mak
6932echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006933echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006934echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6935echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006936echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006937echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006938if test "$gcov" = "yes" ; then
6939 echo "CONFIG_GCOV=y" >> $config_host_mak
6940 echo "GCOV=$gcov_tool" >> $config_host_mak
6941fi
Juan Quintela804edf22009-07-27 16:12:49 +02006942
Alex Bennée51a12b52018-04-04 14:24:39 +01006943if test "$docker" != "no"; then
6944 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6945fi
6946
Peter Maydell6efd7512011-11-30 11:59:04 +00006947# use included Linux headers
6948if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006949 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006950 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006951 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006952 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006953 ;;
6954 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006955 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006956 ;;
6957 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006958 linux_arch=s390
6959 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006960 aarch64)
6961 linux_arch=arm64
6962 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006963 mips64)
6964 linux_arch=mips
6965 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006966 *)
6967 # For most CPUs the kernel architecture name and QEMU CPU name match.
6968 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006969 ;;
6970 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006971 # For non-KVM architectures we will not have asm headers
6972 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6973 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6974 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006975fi
6976
bellard1d14ffa2005-10-30 18:58:22 +00006977for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006978target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006979config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006980target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006981target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006982
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006983case "$target_name" in
Michael Weiser722dd7b2018-01-11 13:25:32 +00006984 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 +02006985 target_bigendian=yes
6986 ;;
6987esac
bellard97a847b2003-08-10 21:36:04 +00006988target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006989target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006990target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006991target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006992case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006993 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006994 target_softmmu="yes"
6995 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006996 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00006997 target_user_only="yes"
6998 target_linux_user="yes"
6999 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007000 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00007001 target_user_only="yes"
7002 target_bsd_user="yes"
7003 ;;
pbrook9e407a82007-05-26 16:38:53 +00007004 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007005 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00007006 exit 1
7007 ;;
7008esac
ths831b7822007-01-18 20:06:33 +00007009
Alex Bennéed75402b2018-04-04 20:27:05 +01007010target_compiler=""
7011target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01007012target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01007013
bellard97a847b2003-08-10 21:36:04 +00007014mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02007015echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007016
pbrooke5fe0c52006-06-11 13:32:59 +00007017bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00007018mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02007019interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00007020gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00007021
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007022TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02007023TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02007024TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02007025
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007026case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00007027 i386)
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007028 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007029 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01007030 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00007031 ;;
7032 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007033 TARGET_BASE_ARCH=i386
Abdallah Bouassidab8158192017-06-01 11:33:15 +02007034 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007035 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00007036 ;;
7037 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11007038 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007039 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00007040 ;;
7041 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007042 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00007043 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007044 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00007045 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007046 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01007047 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00007048 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00007049 aarch64|aarch64_be)
7050 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01007051 TARGET_BASE_ARCH=arm
7052 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00007053 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01007054 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 +01007055 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01007056 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01007057 ;;
aurel322408a522008-04-20 20:19:44 +00007058 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01007059 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00007060 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08007061 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08007062 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007063 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08007064 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01007065 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007066 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01007067 ;;
aurel322408a522008-04-20 20:19:44 +00007068 m68k)
aurel322408a522008-04-20 20:19:44 +00007069 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02007070 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007071 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00007072 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007073 microblaze|microblazeel)
7074 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007075 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02007076 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01007077 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02007078 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02007079 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007080 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007081 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02007082 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007083 ;;
7084 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08007085 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007086 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007087 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02007088 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08007089 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007090 ;;
7091 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007092 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007093 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01007094 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02007095 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007096 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007097 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01007098 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04007099 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007100 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01007101 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01007102 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007103 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01007104 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08007105 TARGET_ARCH=openrisc
7106 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08007107 ;;
aurel322408a522008-04-20 20:19:44 +00007108 ppc)
aurel32c8b35322009-01-24 15:07:34 +00007109 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007110 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00007111 ;;
7112 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007113 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007114 TARGET_ABI_DIR=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_ppcemb
aurel322408a522008-04-20 20:19:44 +00007117 ;;
7118 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007119 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007120 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307121 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007122 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01007123 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00007124 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05007125 ppc64le)
7126 TARGET_ARCH=ppc64
7127 TARGET_BASE_ARCH=ppc
7128 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05307129 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01007130 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 +01007131 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05007132 ;;
aurel322408a522008-04-20 20:19:44 +00007133 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007134 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007135 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007136 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02007137 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01007138 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 +01007139 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00007140 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007141 riscv32)
7142 TARGET_BASE_ARCH=riscv
7143 TARGET_ABI_DIR=riscv
7144 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01007145 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13007146 ;;
7147 riscv64)
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_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13007152 ;;
aurel322408a522008-04-20 20:19:44 +00007153 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007154 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007155 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007156 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007157 ;;
7158 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007159 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007160 ;;
7161 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007162 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007163 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007164 ;;
7165 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007166 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007167 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007168 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007169 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007170 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007171 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007172 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007173 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007174 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 +01007175 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007176 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007177 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007178 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007179 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007180 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007181 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007182 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007183 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007184 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007185 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007186 xtensa|xtensaeb)
7187 TARGET_ARCH=xtensa
Max Filippov9fb40342017-03-06 17:17:43 -08007188 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007189 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007190 ;;
aurel322408a522008-04-20 20:19:44 +00007191 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007192 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007193 ;;
7194esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007195# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7196if [ "$TARGET_BASE_ARCH" = "" ]; then
7197 TARGET_BASE_ARCH=$TARGET_ARCH
7198fi
7199
Alex Bennéed75402b2018-04-04 20:27:05 +01007200# Do we have a cross compiler for this target?
7201if has $target_compiler; then
7202
7203 write_c_skeleton
7204
Alex Bennée716a5072018-04-10 12:19:40 +01007205 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007206 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007207 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007208 target_compiler=""
7209 else
7210 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7211 target_compiler_static="n"
7212 fi
7213 else
7214 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7215 target_compiler_static="y"
7216 fi
7217else
7218 target_compiler=""
7219fi
7220
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007221symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7222
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007223upper() {
7224 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7225}
7226
Stefan Weil89138852016-05-16 15:10:20 +02007227target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007228echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007229echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007230echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007231if [ "$TARGET_ABI_DIR" = "" ]; then
7232 TARGET_ABI_DIR=$TARGET_ARCH
7233fi
Juan Quintela25be2102009-10-07 02:41:00 +02007234echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007235if [ "$HOST_VARIANT_DIR" != "" ]; then
7236 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7237fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007238
7239if supported_xen_target $target; then
7240 echo "CONFIG_XEN=y" >> $config_target_mak
7241 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007242 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007243 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007244fi
7245if supported_kvm_target $target; then
7246 echo "CONFIG_KVM=y" >> $config_target_mak
7247 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007248 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007249 if test "$vhost_user" = "yes" ; then
7250 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7251 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007252 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007253fi
7254if supported_hax_target $target; then
7255 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007256fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007257if supported_hvf_target $target; then
7258 echo "CONFIG_HVF=y" >> $config_target_mak
7259fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007260if supported_whpx_target $target; then
7261 echo "CONFIG_WHPX=y" >> $config_target_mak
7262fi
bellardde83cd02003-06-15 20:25:43 +00007263if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007264 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007265fi
7266if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007267 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007268 if test "$mttcg" = "yes" ; then
7269 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7270 fi
bellardde83cd02003-06-15 20:25:43 +00007271fi
bellard997344f2003-10-27 21:10:39 +00007272if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007273 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007274 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007275fi
ths831b7822007-01-18 20:06:33 +00007276if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007277 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007278fi
pbrook56aebc82008-10-11 17:55:29 +00007279list=""
7280if test ! -z "$gdb_xml_files" ; then
7281 for x in $gdb_xml_files; do
7282 list="$list $source_path/gdb-xml/$x"
7283 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007284 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007285fi
bellardde83cd02003-06-15 20:25:43 +00007286
pbrooke5fe0c52006-06-11 13:32:59 +00007287if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007288 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007289fi
blueswir184778502008-10-26 20:33:16 +00007290if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007291 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007292fi
bellard5b0753e2005-03-01 21:37:28 +00007293
Alex Bennéed75402b2018-04-04 20:27:05 +01007294if test -n "$target_compiler"; then
7295 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7296
7297 if test -n "$target_compiler_static"; then
7298 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7299 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007300
7301 if test -n "$target_compiler_cflags"; then
7302 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7303 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007304fi
7305
Alex Bennée716a5072018-04-10 12:19:40 +01007306
Juan Quintela4afddb52009-08-03 14:46:45 +02007307# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007308
Juan Quintela4afddb52009-08-03 14:46:45 +02007309cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007310ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007311
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007312disas_config() {
7313 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7314 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7315}
7316
Juan Quintela64656022009-08-03 14:46:53 +02007317for i in $ARCH $TARGET_BASE_ARCH ; do
7318 case "$i" in
7319 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007320 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007321 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007322 aarch64)
7323 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007324 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007325 fi
7326 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007327 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007328 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007329 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007330 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007331 fi
Juan Quintela64656022009-08-03 14:46:53 +02007332 ;;
7333 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007334 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007335 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007336 hppa)
7337 disas_config "HPPA"
7338 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007339 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007340 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007341 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007342 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007343 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007344 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007345 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007346 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007347 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007348 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007349 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007350 ;;
7351 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007352 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02007353 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007354 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007355 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007356 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007357 nios2)
7358 disas_config "NIOS2"
7359 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007360 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007361 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007362 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007363 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007364 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007365 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007366 riscv)
7367 disas_config "RISCV"
7368 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007369 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007370 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007371 ;;
7372 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007373 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007374 ;;
7375 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007376 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007377 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007378 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007379 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007380 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007381 esac
7382done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007383if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007384 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007385fi
Juan Quintela64656022009-08-03 14:46:53 +02007386
Juan Quintela6ee71262009-08-03 14:46:47 +02007387case "$ARCH" in
7388alpha)
7389 # Ensure there's only a single GP
7390 cflags="-msmall-data $cflags"
7391;;
7392esac
7393
Juan Quintelad02c1db2009-08-03 14:46:50 +02007394if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007395 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007396 if test "$target_linux_user" = "yes" ; then
7397 cflags="-p $cflags"
7398 ldflags="-p $ldflags"
7399 fi
7400 if test "$target_softmmu" = "yes" ; then
7401 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007402 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007403 fi
7404fi
7405
Juan Quintela9b8e1112009-08-03 14:46:46 +02007406if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007407 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007408fi
Juan Quintelafa282482009-07-22 22:37:39 +02007409
Christian Borntraegere9a35912017-08-23 12:16:23 +02007410# Newer kernels on s390 check for an S390_PGSTE program header and
7411# enable the pgste page table extensions in that case. This makes
7412# the vm.allocate_pgste sysctl unnecessary. We enable this program
7413# header if
7414# - we build on s390x
7415# - we build the system emulation for s390x (qemu-system-s390x)
7416# - KVM is enabled
7417# - the linker supports --s390-pgste
7418if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7419 if ld_has --s390-pgste ; then
7420 ldflags="-Wl,--s390-pgste $ldflags"
7421 fi
7422fi
7423
Juan Quintela25be2102009-10-07 02:41:00 +02007424echo "LDFLAGS+=$ldflags" >> $config_target_mak
7425echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007426
bellard97a847b2003-08-10 21:36:04 +00007427done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007428
Alex Bennéed75402b2018-04-04 20:27:05 +01007429if test -n "$enabled_cross_compilers"; then
7430 echo
7431 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7432fi
7433
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007434if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007435 echo "config-host.h: subdir-dtc" >> $config_host_mak
7436fi
Richard Hendersone219c492017-09-28 09:01:23 -07007437if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7438 echo "config-host.h: subdir-capstone" >> $config_host_mak
7439fi
7440if test -n "$LIBCAPSTONE"; then
7441 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7442fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007443
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007444if test "$numa" = "yes"; then
7445 echo "CONFIG_NUMA=y" >> $config_host_mak
7446fi
7447
John Snowfd0e6052015-03-25 18:57:39 -04007448if test "$ccache_cpp2" = "yes"; then
7449 echo "export CCACHE_CPP2=y" >> $config_host_mak
7450fi
7451
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007452# build tree in object directory in case the source is not in the current directory
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007453DIRS="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 +02007454DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007455DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007456DIRS="$DIRS roms/seabios roms/vgabios"
Anthony Liguoric09015d2012-01-10 13:10:42 -06007457FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7458FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02007459FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007460FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02007461FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007462FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007463FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01007464FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01007465FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07007466for bios_file in \
7467 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007468 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007469 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007470 $source_path/pc-bios/*.rom \
7471 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007472 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007473 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007474 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007475 $source_path/pc-bios/palcode-*
7476do
Stefan Weil89138852016-05-16 15:10:20 +02007477 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007478done
Stefan Weil89138852016-05-16 15:10:20 +02007479for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007480do
Stefan Weil89138852016-05-16 15:10:20 +02007481 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007482done
Su Hang645d3cb2018-08-16 14:05:28 +01007483for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7484do
7485 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7486done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007487mkdir -p $DIRS
7488for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007489 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007490 symlink "$source_path/$f" "$f"
7491 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007492done
Paul Brook1ad21342009-05-19 16:17:58 +01007493
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007494# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007495for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007496 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007497 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007498 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007499 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007500 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007501 echo "CC=$cc" >> $config_mak
7502 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007503 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007504 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007505 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007506 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007507 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007508done
7509
Marc-André Lureaufe310172016-06-15 13:06:00 +02007510# set up tests data directory
Philippe Mathieu-Daudé1b145d52018-06-12 14:34:37 -03007511for tests_subdir in acceptance data; do
7512 if [ ! -e tests/$tests_subdir ]; then
7513 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7514 fi
7515done
Marc-André Lureaufe310172016-06-15 13:06:00 +02007516
Max Reitz76c75602014-05-24 23:24:56 +02007517# set up qemu-iotests in this build directory
7518iotests_common_env="tests/qemu-iotests/common.env"
7519iotests_check="tests/qemu-iotests/check"
7520
7521echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7522echo >> "$iotests_common_env"
7523echo "export PYTHON='$python'" >> "$iotests_common_env"
7524
7525if [ ! -e "$iotests_check" ]; then
7526 symlink "$source_path/$iotests_check" "$iotests_check"
7527fi
7528
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007529# Save the configure command line for later reuse.
7530cat <<EOD >config.status
7531#!/bin/sh
7532# Generated by configure.
7533# Run this file to recreate the current configuration.
7534# Compiler output produced by configure, useful for debugging
7535# configure, is in config.log if it exists.
7536EOD
7537printf "exec" >>config.status
7538printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007539echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007540chmod +x config.status
7541
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007542rm -r "$TMPDIR1"