blob: 259938e177927ecfbe477208be2e91031b4e388a [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=""
303fi
Daniel P. Berrangecc84d632017-10-20 15:02:43 +0100304git="git"
aliguoriac0df512008-12-29 17:14:15 +0000305
Stefan Weilafb63eb2012-09-26 22:04:38 +0200306# Don't accept a target_list environment variable.
307unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100308
309# Default value for a variable defining feature "foo".
310# * foo="no" feature will only be used if --enable-foo arg is given
311# * foo="" feature will be searched for, and if found, will be used
312# unless --disable-foo is given
313# * foo="yes" this value will only be set by --enable-foo flag.
314# feature will searched for,
315# if not found, configure exits with error
316#
317# Always add --enable-foo and --disable-foo command line args.
318# Distributions want to ensure that several features are compiled in, and it
319# is impossible without a --enable-foo that exits if a feature is not found.
320
321bluez=""
322brlapi=""
323curl=""
324curses=""
325docs=""
326fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100327netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100328sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400329sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530330virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200331mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100332vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100333sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100334vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100335vnc_sasl=""
336vnc_jpeg=""
337vnc_png=""
Gerd Hoffmann6a021532017-10-05 17:33:28 +0200338xkbcommon=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100339xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000340xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000341xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000342xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100343linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500344cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100345attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200346libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100347xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200348tcg="yes"
Paolo Bonzinia40161c2018-02-16 10:05:23 +0100349membarrier=""
Bradd41a75a2011-07-26 23:11:26 -0400350vhost_net="no"
Gonglei042cea22018-03-01 21:46:28 +0800351vhost_crypto="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000352vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100353vhost_vsock="no"
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200354vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400355kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100356hax="no"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500357hvf="no"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -0800358whpx="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400359rdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100360gprof="no"
361debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100362debug="no"
Marc-André Lureau247724c2018-01-16 16:11:51 +0100363sanitizers="no"
John Snowb553a042015-11-03 15:43:42 -0500364fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100365strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200366tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100367bigendian="no"
368mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000369gcov="no"
370gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100371EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800372DSOSUF=".so"
373LDFLAGS_SHARED="-shared"
374modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100375prefix="/usr/local"
376mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300377datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200378firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300379qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100380bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300381libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400382libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200383includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100384sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300385local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100386confsuffix="/qemu"
387slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100388oss_lib=""
389bsd="no"
390linux="no"
391solaris="no"
392profiler="no"
393cocoa="no"
394softmmu="yes"
395linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100396bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100397blobs="yes"
398pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200399pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200400qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300401trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100402trace_file="trace"
403spice=""
404rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200405smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100406libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200407usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100408opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100409opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000410cpuid_h="no"
Liang Li99f2dbd2016-03-08 13:53:16 +0800411avx2_opt="no"
Alon Levy1ece9902011-07-26 12:30:40 +0300412zlib="yes"
Richard Henderson8ca80762017-09-14 09:41:12 -0700413capstone=""
Stefan Weilb25c9df2014-04-29 08:21:16 +0200414lzo=""
415snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100416bzip2=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400417guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400418guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500419guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300420guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400421vss_win32_sdk=""
422win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100423want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100424libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100425libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100426coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200427coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200428debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400429crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300430seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530431glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400432glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530433glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530434glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530435glusterfs_zerofill="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600436gtk=""
Stefan Weil9e04c682014-05-17 16:29:18 +0200437gtkabi=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200438gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100439tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100440gnutls=""
Daniel P. Berrangeb917da42015-10-31 14:39:52 +0900441gnutls_rnd=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100442nettle=""
Daniel P. Berrangefff2f982016-03-29 15:47:51 +0100443nettle_kdf="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100444gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800445gcrypt_hmac="no"
Daniel P. Berrange37788f22015-10-14 13:14:04 +0100446gcrypt_kdf="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100447vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200448virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400449tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100450libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100451live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800452numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800453tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200454jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800455replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700456vxhs=""
Klim Kireeved279a02018-01-12 12:01:19 +0300457libxml2=""
Alex Bennée51a12b52018-04-04 14:24:39 +0100458docker="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100459
Alex Bennéed75402b2018-04-04 20:27:05 +0100460# cross compilers defaults, can be overridden with --cross-cc-ARCH
461cross_cc_aarch64="aarch64-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100462cross_cc_aarch64_be="$cross_cc_aarch64"
463cross_cc_cflags_aarch64_be="-mbig-endian"
Alex Bennéed75402b2018-04-04 20:27:05 +0100464cross_cc_arm="arm-linux-gnueabihf-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100465cross_cc_cflags_armeb="-mbig-endian"
Alex Bennée716a5072018-04-10 12:19:40 +0100466cross_cc_i386="i386-pc-linux-gnu-gcc"
467cross_cc_cflags_i386=""
Alex Bennéed75402b2018-04-04 20:27:05 +0100468cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed422b2b2018-04-13 11:07:58 +0100469cross_cc_powerpc="powerpc-linux-gnu-gcc"
Alex Bennéed75402b2018-04-04 20:27:05 +0100470
471enabled_cross_compilers=""
472
Peter Maydell898be3e2017-03-21 14:31:57 +0000473supported_cpu="no"
474supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100475bogus_os="no"
Yang Zhong5a22ab72017-12-20 21:16:46 +0800476malloc_trim=""
Peter Maydell898be3e2017-03-21 14:31:57 +0000477
aliguoriac0df512008-12-29 17:14:15 +0000478# parse CC options first
479for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200480 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000481 case "$opt" in
482 --cross-prefix=*) cross_prefix="$optarg"
483 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100484 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000485 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400486 --cxx=*) CXX="$optarg"
487 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100488 --source-path=*) source_path="$optarg"
489 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200490 --cpu=*) cpu="$optarg"
491 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100492 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200493 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100494 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100495 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100496 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100497 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200498 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100499 --enable-debug-info) debug_info="yes"
500 ;;
501 --disable-debug-info) debug_info="no"
502 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100503 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
504 ;;
Alex Bennéed422b2b2018-04-13 11:07:58 +0100505 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
506 eval "cross_cc_cflags_${cc_arch}=\$optarg"
507 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100508 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
509 eval "cross_cc_${cc_arch}=\$optarg"
510 ;;
aliguoriac0df512008-12-29 17:14:15 +0000511 esac
512done
aliguoriac0df512008-12-29 17:14:15 +0000513# OS specific
514# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100515# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000516
Peter Maydelle49d0212012-12-07 15:39:13 +0000517# Preferred compiler:
518# ${CC} (if set)
519# ${cross_prefix}gcc (if cross-prefix specified)
520# system compiler
521if test -z "${CC}${cross_prefix}"; then
522 cc="$host_cc"
523else
524 cc="${CC-${cross_prefix}gcc}"
525fi
526
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400527if test -z "${CXX}${cross_prefix}"; then
528 cxx="c++"
529else
530 cxx="${CXX-${cross_prefix}g++}"
531fi
532
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500533ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700534as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700535ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000536cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500537objcopy="${OBJCOPY-${cross_prefix}objcopy}"
538ld="${LD-${cross_prefix}ld}"
Alistair Francis9f81aeb2017-11-07 17:10:46 -0800539ranlib="${RANLIB-${cross_prefix}ranlib}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200540nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500541strip="${STRIP-${cross_prefix}strip}"
542windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300543pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
544query_pkg_config() {
545 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
546}
547pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500548sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000549sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000550
Peter Maydell45d285a2013-10-21 21:03:06 +0100551# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
552ARFLAGS="${ARFLAGS-rv}"
553
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200554# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100555# We use -fwrapv to tell the compiler that we require a C dialect where
556# left shift of signed integers is well defined and has the expected
557# 2s-complement style results. (Both clang and gcc agree that it
558# provides these semantics.)
559QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400560QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100561QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200562QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +0200563QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100564if test "$debug_info" = "yes"; then
565 CFLAGS="-g $CFLAGS"
566 LDFLAGS="-g $LDFLAGS"
567fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200568
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100569# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200570source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100571
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300572# running configure in the source tree?
573# we know that's the case if configure is there.
574if test -f "./configure"; then
575 pwd_is_source_path="y"
576else
577 pwd_is_source_path="n"
578fi
579
aliguoriac0df512008-12-29 17:14:15 +0000580check_define() {
581cat > $TMPC <<EOF
582#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000583#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000584#endif
585int main(void) { return 0; }
586EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200587 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000588}
589
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200590check_include() {
591cat > $TMPC <<EOF
592#include <$1>
593int main(void) { return 0; }
594EOF
595 compile_object
596}
597
John Snow93b25862015-03-25 18:57:37 -0400598write_c_skeleton() {
599 cat > $TMPC <<EOF
600int main(void) { return 0; }
601EOF
602}
603
Peter Maydellbbea4052012-08-14 15:35:34 +0100604if check_define __linux__ ; then
605 targetos="Linux"
606elif check_define _WIN32 ; then
607 targetos='MINGW32'
608elif check_define __OpenBSD__ ; then
609 targetos='OpenBSD'
610elif check_define __sun__ ; then
611 targetos='SunOS'
612elif check_define __HAIKU__ ; then
613 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100614elif check_define __FreeBSD__ ; then
615 targetos='FreeBSD'
616elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
617 targetos='GNU/kFreeBSD'
618elif check_define __DragonFly__ ; then
619 targetos='DragonFly'
620elif check_define __NetBSD__; then
621 targetos='NetBSD'
622elif check_define __APPLE__; then
623 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100624else
Peter Maydell951fedf2017-07-13 16:15:32 +0100625 # This is a fatal error, but don't report it yet, because we
626 # might be going to just print the --help text, or it might
627 # be the result of a missing compiler.
628 targetos='bogus'
629 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100630fi
631
632# Some host OSes need non-standard checks for which CPU to use.
633# Note that these checks are broken for cross-compilation: if you're
634# cross-compiling to one of these OSes then you'll need to specify
635# the correct CPU with the --cpu option.
636case $targetos in
637Darwin)
638 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
639 # run 64-bit userspace code.
640 # If the user didn't specify a CPU explicitly and the kernel says this is
641 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
642 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
643 cpu="x86_64"
644 fi
645 ;;
646SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200647 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100648 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
649 cpu="x86_64"
650 fi
651esac
652
Juan Quintela2ff6b912009-08-03 14:45:55 +0200653if test ! -z "$cpu" ; then
654 # command line argument
655 :
656elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000657 cpu="i386"
658elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700659 if check_define __ILP32__ ; then
660 cpu="x32"
661 else
662 cpu="x86_64"
663 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000664elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000665 if check_define __arch64__ ; then
666 cpu="sparc64"
667 else
668 cpu="sparc"
669 fi
malcfdf7ed92009-01-14 18:39:52 +0000670elif check_define _ARCH_PPC ; then
671 if check_define _ARCH_PPC64 ; then
672 cpu="ppc64"
673 else
674 cpu="ppc"
675 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200676elif check_define __mips__ ; then
677 cpu="mips"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200678elif check_define __s390__ ; then
679 if check_define __s390x__ ; then
680 cpu="s390x"
681 else
682 cpu="s390"
683 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100684elif check_define __arm__ ; then
685 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100686elif check_define __aarch64__ ; then
687 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000688else
Stefan Weil89138852016-05-16 15:10:20 +0200689 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000690fi
691
Peter Maydell359bc952011-12-24 13:07:25 +0000692ARCH=
693# Normalise host CPU name and set ARCH.
694# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000695case "$cpu" in
Peter Maydell6499fd12017-03-28 11:58:38 +0100696 ppc|ppc64|s390|s390x|sparc64|x32)
Peter Maydell898be3e2017-03-21 14:31:57 +0000697 cpu="$cpu"
698 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100699 eval "cross_cc_${cpu}=\$host_cc"
Peter Maydell898be3e2017-03-21 14:31:57 +0000700 ;;
bellard7d132992003-03-06 23:23:54 +0000701 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000702 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000703 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100704 cross_cc_i386=$host_cc
bellard7d132992003-03-06 23:23:54 +0000705 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000706 x86_64|amd64)
707 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000708 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100709 cross_cc_x86_64=$host_cc
aurel32aaa5fa12008-04-11 22:04:22 +0000710 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100711 armv*b|armv*l|arm)
712 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000713 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100714 cross_cc_arm=$host_cc
bellard7d132992003-03-06 23:23:54 +0000715 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100716 aarch64)
717 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000718 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100719 cross_cc_aarch64=$host_cc
Claudio Fontana1f080312013-06-12 16:20:23 +0100720 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200721 mips*)
722 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000723 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100724 cross_cc_mips=$host_cc
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200725 ;;
blueswir131422552007-04-16 18:27:06 +0000726 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000727 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100728 supported_cpu="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +0100729 cross_cc_sparc=$host_cc
bellardae228532003-05-13 18:59:59 +0000730 ;;
bellard7d132992003-03-06 23:23:54 +0000731 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000732 # This will result in either an error or falling back to TCI later
733 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000734 ;;
735esac
Peter Maydell359bc952011-12-24 13:07:25 +0000736if test -z "$ARCH"; then
737 ARCH="$cpu"
738fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200739
bellard7d132992003-03-06 23:23:54 +0000740# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200741
Stacey Sonadfc3e92014-06-08 09:57:22 -0700742# host *BSD for user mode
743HOST_VARIANT_DIR=""
744
bellard7d132992003-03-06 23:23:54 +0000745case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000746MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200747 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100748 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200749 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200750 if check_include dsound.h; then
751 audio_drv_list="dsound"
752 else
753 audio_drv_list=""
754 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000755 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000756;;
ths5c40d2b2007-06-23 16:03:36 +0000757GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100758 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200759 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200760 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000761;;
bellard7d3505c2004-05-12 19:32:15 +0000762FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200763 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100764 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200765 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200766 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100767 # needed for kinfo_getvmmap(3) in libutil.h
768 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500769 # needed for kinfo_getproc
770 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100771 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700772 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000773 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000774;;
blueswir1c5e97232009-03-07 20:06:23 +0000775DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200776 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100777 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200778 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200779 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700780 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000781;;
bellard7d3505c2004-05-12 19:32:15 +0000782NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200783 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100784 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200785 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200786 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200787 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700788 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200789 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000790;;
791OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200792 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100793 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400794 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200795 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700796 HOST_VARIANT_DIR="openbsd"
Brad Smith0a773d52018-02-16 11:46:20 -0500797 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000798;;
bellard83fb7ad2004-07-05 21:25:26 +0000799Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200800 bsd="yes"
801 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100802 hax="yes"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -0500803 hvf="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800804 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200805 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200806 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200807 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200808 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200809 cocoa="yes"
810 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200811 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200812 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200813 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100814 # Disable attempts to use ObjectiveC features in os/object.h since they
815 # won't work when we're compiling with gcc as a C compiler.
816 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700817 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000818 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000819;;
bellardec530c82006-04-25 22:36:06 +0000820SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200821 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100822 make="${MAKE-gmake}"
823 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400824 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200825 if test -f /usr/include/sys/soundcard.h ; then
826 audio_drv_list="oss"
827 fi
828 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000829# needed for CMSG_ macros in sys/socket.h
830 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
831# needed for TIOCWIN* defines in termios.h
832 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200833 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200834 solarisnetlibs="-lsocket -lnsl -lresolv"
835 LIBS="$solarisnetlibs $LIBS"
836 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000837;;
Andreas Färber179cf402010-09-20 00:50:43 +0200838Haiku)
839 haiku="yes"
840 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
841 LIBS="-lposix_error_mapper -lnetwork $LIBS"
842;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000843Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200844 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200845 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200846 linux="yes"
847 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200848 kvm="yes"
849 vhost_net="yes"
Gonglei042cea22018-03-01 21:46:28 +0800850 vhost_crypto="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000851 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100852 vhost_vsock="yes"
Alexey Kardashevskiya5851402013-05-29 23:30:43 +1000853 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000854 supported_os="yes"
855;;
bellard7d132992003-03-06 23:23:54 +0000856esac
857
bellard7d3505c2004-05-12 19:32:15 +0000858if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000859 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200860 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000861 fi
bellard7d3505c2004-05-12 19:32:15 +0000862fi
863
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100864: ${make=${MAKE-make}}
865: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100866: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400867: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100868
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100869# Default objcc to clang if available, otherwise use CC
870if has clang; then
871 objcc=clang
872else
873 objcc="$cc"
874fi
875
Juan Quintela3457a3f2009-08-03 14:46:07 +0200876if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200877 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800878 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200879 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100880 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
881 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100882 # MinGW needs -mthreads for TLS and macro _MT.
883 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100884 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400885 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100886 if compile_prog "" "-liberty" ; then
887 LIBS="-liberty $LIBS"
888 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200889 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200890 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300891 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300892 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200893 bindir="\${prefix}"
894 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200895 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200896 confsuffix=""
Bishara AbuHattoum105fad62017-08-22 16:55:04 +0300897 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200898fi
899
Anthony Liguori487fefd2009-06-11 13:28:25 -0500900werror=""
bellard85aa5182007-11-11 20:17:03 +0000901
bellard7d132992003-03-06 23:23:54 +0000902for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200903 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000904 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000905 --help|-h) show_help=yes
906 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400907 --version|-V) exec cat $source_path/VERSION
908 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000909 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000910 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000911 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000912 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100913 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000914 ;;
aliguoriac0df512008-12-29 17:14:15 +0000915 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000916 ;;
aliguoriac0df512008-12-29 17:14:15 +0000917 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000918 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000919 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000920 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400921 --cxx=*)
922 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200923 --iasl=*) iasl="$optarg"
924 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100925 --objcc=*) objcc="$optarg"
926 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000927 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000928 ;;
pbrook6a882642006-04-17 13:57:12 +0000929 --install=*) install="$optarg"
930 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000931 --python=*) python="$optarg"
932 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000933 --gcov=*) gcov_tool="$optarg"
934 ;;
Brade2d88302011-09-02 16:53:28 -0400935 --smbd=*) smbd="$optarg"
936 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200937 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000938 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100939 --extra-cxxflags=*)
940 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200941 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000942 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100943 --enable-debug-info)
944 ;;
945 --disable-debug-info)
946 ;;
Alex Bennéed75402b2018-04-04 20:27:05 +0100947 --cross-cc-*)
948 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800949 --enable-modules)
950 modules="yes"
951 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000952 --disable-modules)
953 modules="no"
954 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200955 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000956 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000957 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000958 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +0200959 --enable-trace-backends=*) trace_backends="$optarg"
960 ;;
961 # XXX: backwards compatibility
962 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100963 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100964 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100965 ;;
bellard7d132992003-03-06 23:23:54 +0000966 --enable-gprof) gprof="yes"
967 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000968 --enable-gcov) gcov="yes"
969 ;;
Loïc Minier79427692010-01-31 12:23:45 +0100970 --static)
971 static="yes"
972 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300973 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +0000974 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200975 --mandir=*) mandir="$optarg"
976 ;;
977 --bindir=*) bindir="$optarg"
978 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300979 --libdir=*) libdir="$optarg"
980 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400981 --libexecdir=*) libexecdir="$optarg"
982 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +0200983 --includedir=*) includedir="$optarg"
984 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300985 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200986 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -0300987 --with-confsuffix=*) confsuffix="$optarg"
988 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -0300989 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200990 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +0100991 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -0600992 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300993 --localstatedir=*) local_statedir="$optarg"
994 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200995 --firmwarepath=*) firmwarepath="$optarg"
996 ;;
Olaf Hering181ce1d2018-04-18 09:50:44 +0200997 --host=*|--build=*|\
998 --disable-dependency-tracking|\
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300999 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +04001000 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1001 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1002 # These switches are silently ignored, for compatibility with
1003 # autoconf-generated configure scripts. This allows QEMU's
1004 # configure to be used by RPM and similar macros that set
1005 # lots of directory switches by default.
1006 ;;
bellard97a847b2003-08-10 21:36:04 +00001007 --disable-sdl) sdl="no"
1008 ;;
Juan Quintelac4198152009-08-12 18:29:53 +02001009 --enable-sdl) sdl="yes"
1010 ;;
Dave Airlie47c03742013-12-10 14:05:51 +10001011 --with-sdlabi=*) sdlabi="$optarg"
1012 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +02001013 --disable-qom-cast-debug) qom_cast_debug="no"
1014 ;;
1015 --enable-qom-cast-debug) qom_cast_debug="yes"
1016 ;;
Meador Inge983eef52012-02-24 14:00:42 +05301017 --disable-virtfs) virtfs="no"
1018 ;;
1019 --enable-virtfs) virtfs="yes"
1020 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001021 --disable-mpath) mpath="no"
1022 ;;
1023 --enable-mpath) mpath="yes"
1024 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +01001025 --disable-vnc) vnc="no"
1026 ;;
1027 --enable-vnc) vnc="yes"
1028 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +00001029 --oss-lib=*) oss_lib="$optarg"
1030 ;;
malc0c58ac12008-06-25 21:04:05 +00001031 --audio-drv-list=*) audio_drv_list="$optarg"
1032 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001033 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +08001034 ;;
Stefan Weil89138852016-05-16 15:10:20 +02001035 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +01001036 ;;
aurel32f8393942009-04-13 18:45:38 +00001037 --enable-debug-tcg) debug_tcg="yes"
1038 ;;
1039 --disable-debug-tcg) debug_tcg="no"
1040 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +01001041 --enable-debug)
1042 # Enable debugging options that aren't excessively noisy
1043 debug_tcg="yes"
1044 debug="yes"
1045 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -05001046 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +01001047 ;;
Marc-André Lureau247724c2018-01-16 16:11:51 +01001048 --enable-sanitizers) sanitizers="yes"
1049 ;;
1050 --disable-sanitizers) sanitizers="no"
1051 ;;
aliguori03b4fe72008-10-07 19:16:17 +00001052 --enable-sparse) sparse="yes"
1053 ;;
1054 --disable-sparse) sparse="no"
1055 ;;
aliguori1625af82009-04-05 17:41:02 +00001056 --disable-strip) strip_opt="no"
1057 ;;
aliguori2f9606b2009-03-06 20:27:28 +00001058 --disable-vnc-sasl) vnc_sasl="no"
1059 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +02001060 --enable-vnc-sasl) vnc_sasl="yes"
1061 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +02001062 --disable-vnc-jpeg) vnc_jpeg="no"
1063 ;;
1064 --enable-vnc-jpeg) vnc_jpeg="yes"
1065 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +02001066 --disable-vnc-png) vnc_png="no"
1067 ;;
1068 --enable-vnc-png) vnc_png="yes"
1069 ;;
bellard443f1372004-06-04 11:13:20 +00001070 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +00001071 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +00001072 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +00001073 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +02001074 --enable-vde) vde="yes"
1075 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001076 --disable-netmap) netmap="no"
1077 ;;
1078 --enable-netmap) netmap="yes"
1079 ;;
aliguorie37630c2009-04-22 15:19:10 +00001080 --disable-xen) xen="no"
1081 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001082 --enable-xen) xen="yes"
1083 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001084 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1085 ;;
1086 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1087 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +00001088 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1089 ;;
1090 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1091 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001092 --disable-brlapi) brlapi="no"
1093 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001094 --enable-brlapi) brlapi="yes"
1095 ;;
balrogfb599c92008-09-28 23:49:55 +00001096 --disable-bluez) bluez="no"
1097 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001098 --enable-bluez) bluez="yes"
1099 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001100 --disable-kvm) kvm="no"
1101 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001102 --enable-kvm) kvm="yes"
1103 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001104 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001105 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001106 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001107 ;;
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001108 --disable-hvf) hvf="no"
1109 ;;
1110 --enable-hvf) hvf="yes"
1111 ;;
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001112 --disable-whpx) whpx="no"
1113 ;;
1114 --enable-whpx) whpx="yes"
1115 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001116 --disable-tcg-interpreter) tcg_interpreter="no"
1117 ;;
1118 --enable-tcg-interpreter) tcg_interpreter="yes"
1119 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001120 --disable-cap-ng) cap_ng="no"
1121 ;;
1122 --enable-cap-ng) cap_ng="yes"
1123 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001124 --disable-tcg) tcg="no"
1125 ;;
1126 --enable-tcg) tcg="yes"
1127 ;;
Yang Zhong5a22ab72017-12-20 21:16:46 +08001128 --disable-malloc-trim) malloc_trim="no"
1129 ;;
1130 --enable-malloc-trim) malloc_trim="yes"
1131 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001132 --disable-spice) spice="no"
1133 ;;
1134 --enable-spice) spice="yes"
1135 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001136 --disable-libiscsi) libiscsi="no"
1137 ;;
1138 --enable-libiscsi) libiscsi="yes"
1139 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001140 --disable-libnfs) libnfs="no"
1141 ;;
1142 --enable-libnfs) libnfs="yes"
1143 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001144 --enable-profiler) profiler="yes"
1145 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001146 --disable-cocoa) cocoa="no"
1147 ;;
malcc2de5c92008-06-28 19:13:06 +00001148 --enable-cocoa)
1149 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001150 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001151 ;;
pbrookcad25d62006-03-19 16:31:11 +00001152 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001153 ;;
pbrookcad25d62006-03-19 16:31:11 +00001154 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001155 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001156 --disable-user)
1157 linux_user="no" ;
1158 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001159 ;;
1160 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001161 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001162 ;;
ths831b7822007-01-18 20:06:33 +00001163 --enable-linux-user) linux_user="yes"
1164 ;;
blueswir184778502008-10-26 20:33:16 +00001165 --disable-bsd-user) bsd_user="no"
1166 ;;
1167 --enable-bsd-user) bsd_user="yes"
1168 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001169 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001170 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001171 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001172 ;;
bellard85aa5182007-11-11 20:17:03 +00001173 --enable-werror) werror="yes"
1174 ;;
1175 --disable-werror) werror="no"
1176 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001177 --enable-stack-protector) stack_protector="yes"
1178 ;;
1179 --disable-stack-protector) stack_protector="no"
1180 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001181 --disable-curses) curses="no"
1182 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001183 --enable-curses) curses="yes"
1184 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001185 --disable-curl) curl="no"
1186 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001187 --enable-curl) curl="yes"
1188 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001189 --disable-fdt) fdt="no"
1190 ;;
1191 --enable-fdt) fdt="yes"
1192 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001193 --disable-linux-aio) linux_aio="no"
1194 ;;
1195 --enable-linux-aio) linux_aio="yes"
1196 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001197 --disable-attr) attr="no"
1198 ;;
1199 --enable-attr) attr="yes"
1200 ;;
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001201 --disable-membarrier) membarrier="no"
1202 ;;
1203 --enable-membarrier) membarrier="yes"
1204 ;;
ths77755342008-11-27 15:45:16 +00001205 --disable-blobs) blobs="no"
1206 ;;
Thomas Huth7e563bf2018-02-15 12:06:47 +01001207 --with-pkgversion=*) pkgversion="$optarg"
pbrook4a19f1e2009-04-07 23:17:49 +00001208 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001209 --with-coroutine=*) coroutine="$optarg"
1210 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001211 --disable-coroutine-pool) coroutine_pool="no"
1212 ;;
1213 --enable-coroutine-pool) coroutine_pool="yes"
1214 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001215 --enable-debug-stack-usage) debug_stack_usage="yes"
1216 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001217 --enable-crypto-afalg) crypto_afalg="yes"
1218 ;;
1219 --disable-crypto-afalg) crypto_afalg="no"
1220 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001221 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001222 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001223 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001224 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001225 --disable-vhost-net) vhost_net="no"
1226 ;;
1227 --enable-vhost-net) vhost_net="yes"
1228 ;;
Gonglei042cea22018-03-01 21:46:28 +08001229 --disable-vhost-crypto) vhost_crypto="no"
1230 ;;
1231 --enable-vhost-crypto)
1232 vhost_crypto="yes"
1233 if test "$mingw32" = "yes"; then
1234 error_exit "vhost-crypto isn't available on win32"
1235 fi
1236 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001237 --disable-vhost-scsi) vhost_scsi="no"
1238 ;;
1239 --enable-vhost-scsi) vhost_scsi="yes"
1240 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001241 --disable-vhost-vsock) vhost_vsock="no"
1242 ;;
1243 --enable-vhost-vsock) vhost_vsock="yes"
1244 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001245 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001246 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001247 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001248 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001249 --disable-rbd) rbd="no"
1250 ;;
1251 --enable-rbd) rbd="yes"
1252 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001253 --disable-xfsctl) xfs="no"
1254 ;;
1255 --enable-xfsctl) xfs="yes"
1256 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001257 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001258 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001259 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001260 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001261 --disable-libusb) libusb="no"
1262 ;;
1263 --enable-libusb) libusb="yes"
1264 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001265 --disable-usb-redir) usb_redir="no"
1266 ;;
1267 --enable-usb-redir) usb_redir="yes"
1268 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001269 --disable-zlib-test) zlib="no"
1270 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001271 --disable-lzo) lzo="no"
1272 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001273 --enable-lzo) lzo="yes"
1274 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001275 --disable-snappy) snappy="no"
1276 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001277 --enable-snappy) snappy="yes"
1278 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001279 --disable-bzip2) bzip2="no"
1280 ;;
1281 --enable-bzip2) bzip2="yes"
1282 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001283 --enable-guest-agent) guest_agent="yes"
1284 ;;
1285 --disable-guest-agent) guest_agent="no"
1286 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001287 --enable-guest-agent-msi) guest_agent_msi="yes"
1288 ;;
1289 --disable-guest-agent-msi) guest_agent_msi="no"
1290 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001291 --with-vss-sdk) vss_win32_sdk=""
1292 ;;
1293 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1294 ;;
1295 --without-vss-sdk) vss_win32_sdk="no"
1296 ;;
1297 --with-win-sdk) win_sdk=""
1298 ;;
1299 --with-win-sdk=*) win_sdk="$optarg"
1300 ;;
1301 --without-win-sdk) win_sdk="no"
1302 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001303 --enable-tools) want_tools="yes"
1304 ;;
1305 --disable-tools) want_tools="no"
1306 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001307 --enable-seccomp) seccomp="yes"
1308 ;;
1309 --disable-seccomp) seccomp="no"
1310 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301311 --disable-glusterfs) glusterfs="no"
1312 ;;
1313 --enable-glusterfs) glusterfs="yes"
1314 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001315 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1316 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001317 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001318 --enable-vhdx|--disable-vhdx)
1319 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1320 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001321 --enable-uuid|--disable-uuid)
1322 echo "$0: $opt is obsolete, UUID support is always built" >&2
1323 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001324 --disable-gtk) gtk="no"
1325 ;;
1326 --enable-gtk) gtk="yes"
1327 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001328 --tls-priority=*) tls_priority="$optarg"
1329 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001330 --disable-gnutls) gnutls="no"
1331 ;;
1332 --enable-gnutls) gnutls="yes"
1333 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001334 --disable-nettle) nettle="no"
1335 ;;
1336 --enable-nettle) nettle="yes"
1337 ;;
1338 --disable-gcrypt) gcrypt="no"
1339 ;;
1340 --enable-gcrypt) gcrypt="yes"
1341 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001342 --enable-rdma) rdma="yes"
1343 ;;
1344 --disable-rdma) rdma="no"
1345 ;;
Daniel P. Berrange528de902013-02-25 15:20:44 +00001346 --with-gtkabi=*) gtkabi="$optarg"
1347 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001348 --disable-vte) vte="no"
1349 ;;
1350 --enable-vte) vte="yes"
1351 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001352 --disable-virglrenderer) virglrenderer="no"
1353 ;;
1354 --enable-virglrenderer) virglrenderer="yes"
1355 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001356 --disable-tpm) tpm="no"
1357 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001358 --enable-tpm) tpm="yes"
1359 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001360 --disable-libssh2) libssh2="no"
1361 ;;
1362 --enable-libssh2) libssh2="yes"
1363 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001364 --disable-live-block-migration) live_block_migration="no"
1365 ;;
1366 --enable-live-block-migration) live_block_migration="yes"
1367 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001368 --disable-numa) numa="no"
1369 ;;
1370 --enable-numa) numa="yes"
1371 ;;
Klim Kireeved279a02018-01-12 12:01:19 +03001372 --disable-libxml2) libxml2="no"
1373 ;;
1374 --enable-libxml2) libxml2="yes"
1375 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001376 --disable-tcmalloc) tcmalloc="no"
1377 ;;
1378 --enable-tcmalloc) tcmalloc="yes"
1379 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001380 --disable-jemalloc) jemalloc="no"
1381 ;;
1382 --enable-jemalloc) jemalloc="yes"
1383 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001384 --disable-replication) replication="no"
1385 ;;
1386 --enable-replication) replication="yes"
1387 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001388 --disable-vxhs) vxhs="no"
1389 ;;
1390 --enable-vxhs) vxhs="yes"
1391 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001392 --disable-vhost-user) vhost_user="no"
1393 ;;
1394 --enable-vhost-user)
1395 vhost_user="yes"
1396 if test "$mingw32" = "yes"; then
1397 error_exit "vhost-user isn't available on win32"
1398 fi
1399 ;;
Richard Henderson8ca80762017-09-14 09:41:12 -07001400 --disable-capstone) capstone="no"
1401 ;;
1402 --enable-capstone) capstone="yes"
1403 ;;
Richard Hendersone219c492017-09-28 09:01:23 -07001404 --enable-capstone=git) capstone="git"
1405 ;;
1406 --enable-capstone=system) capstone="system"
1407 ;;
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01001408 --with-git=*) git="$optarg"
1409 ;;
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01001410 --enable-git-update) git_update=yes
1411 ;;
1412 --disable-git-update) git_update=no
1413 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001414 *)
1415 echo "ERROR: unknown option $opt"
1416 echo "Try '$0 --help' for more information"
1417 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001418 ;;
bellard7d132992003-03-06 23:23:54 +00001419 esac
1420done
1421
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001422if test "$vhost_user" = ""; then
1423 if test "$mingw32" = "yes"; then
1424 vhost_user="no"
1425 else
1426 vhost_user="yes"
1427 fi
1428fi
1429
bellard40293e52008-01-31 11:32:10 +00001430case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001431 ppc)
1432 CPU_CFLAGS="-m32"
1433 LDFLAGS="-m32 $LDFLAGS"
1434 ;;
1435 ppc64)
1436 CPU_CFLAGS="-m64"
1437 LDFLAGS="-m64 $LDFLAGS"
1438 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001439 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001440 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1441 LDFLAGS="-m32 -mv8plus $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001442 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001443 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001444 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001445 LDFLAGS="-m64 $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001446 ;;
ths76d83bd2007-11-18 21:22:10 +00001447 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001448 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001449 LDFLAGS="-m31 $LDFLAGS"
1450 ;;
1451 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001452 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001453 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001454 ;;
bellard40293e52008-01-31 11:32:10 +00001455 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001456 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001457 LDFLAGS="-m32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001458 cross_cc_i386=$cc
1459 cross_cc_cflags_i386=$CPU_CFLAGS
bellard40293e52008-01-31 11:32:10 +00001460 ;;
1461 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001462 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1463 # If we truly care, we should simply detect this case at
1464 # runtime and generate the fallback to serial emulation.
1465 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001466 LDFLAGS="-m64 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001467 cross_cc_x86_64=$cc
1468 cross_cc_cflags_x86_64=$CPU_CFLAGS
Paul Brook379f6692009-07-17 12:48:08 +01001469 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001470 x32)
1471 CPU_CFLAGS="-mx32"
1472 LDFLAGS="-mx32 $LDFLAGS"
Alex Bennée716a5072018-04-10 12:19:40 +01001473 cross_cc_i386=$cc
1474 cross_cc_cflags_i386="-m32"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001475 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001476 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001477esac
1478
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001479QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001480
Peter Maydellaffc88c2016-06-13 11:32:24 +01001481# For user-mode emulation the host arch has to be one we explicitly
1482# support, even if we're using TCI.
1483if [ "$ARCH" = "unknown" ]; then
1484 bsd_user="no"
1485 linux_user="no"
1486fi
1487
Peter Maydell60e0df22011-05-03 14:50:13 +01001488default_target_list=""
1489
Peter Maydell6e92f822013-05-20 16:16:15 +01001490mak_wilds=""
1491
1492if [ "$softmmu" = "yes" ]; then
1493 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001494fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001495if [ "$linux_user" = "yes" ]; then
1496 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001497fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001498if [ "$bsd_user" = "yes" ]; then
1499 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001500fi
1501
Peter Maydell6e92f822013-05-20 16:16:15 +01001502for config in $mak_wilds; do
1503 default_target_list="${default_target_list} $(basename "$config" .mak)"
1504done
1505
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001506# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001507trace_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 +01001508
pbrookaf5db582006-04-08 14:26:41 +00001509if test x"$show_help" = x"yes" ; then
1510cat << EOF
1511
1512Usage: configure [options]
1513Options: [defaults in brackets after descriptions]
1514
Stefan Weil08fb77e2013-12-18 22:09:39 +01001515Standard options:
1516 --help print this message
1517 --prefix=PREFIX install in PREFIX [$prefix]
1518 --interp-prefix=PREFIX where to find shared libraries, etc.
1519 use %M for cpu name [$interp_prefix]
1520 --target-list=LIST set target list (default: build everything)
1521$(echo Available targets: $default_target_list | \
1522 fold -s -w 53 | sed -e 's/^/ /')
1523
1524Advanced options (experts only):
1525 --source-path=PATH path of source code [$source_path]
1526 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1527 --cc=CC use C compiler CC [$cc]
1528 --iasl=IASL use ACPI compiler IASL [$iasl]
1529 --host-cc=CC use C compiler CC [$host_cc] for code run at
1530 build time
1531 --cxx=CXX use C++ compiler CXX [$cxx]
1532 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1533 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001534 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001535 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
Alex Bennéed75402b2018-04-04 20:27:05 +01001536 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
Alex Bennéed422b2b2018-04-13 11:07:58 +01001537 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
Stefan Weil08fb77e2013-12-18 22:09:39 +01001538 --make=MAKE use specified make [$make]
1539 --install=INSTALL use specified install [$install]
1540 --python=PYTHON use specified python [$python]
1541 --smbd=SMBD use specified smbd [$smbd]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001542 --with-git=GIT use specified git [$git]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001543 --static enable static build [$static]
1544 --mandir=PATH install man pages in PATH
1545 --datadir=PATH install firmware in PATH$confsuffix
1546 --docdir=PATH install documentation in PATH$confsuffix
1547 --bindir=PATH install binaries in PATH
1548 --libdir=PATH install libraries in PATH
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001549 --libexecdir=PATH install helper binaries in PATH
Stefan Weil08fb77e2013-12-18 22:09:39 +01001550 --sysconfdir=PATH install config in PATH$confsuffix
1551 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001552 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001553 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Thomas Huthdb1b5f12018-03-27 17:09:30 +02001554 --with-pkgversion=VERS use specified string as sub-version of the package
Stefan Weil08fb77e2013-12-18 22:09:39 +01001555 --enable-debug enable common debug build options
Marc-André Lureau247724c2018-01-16 16:11:51 +01001556 --enable-sanitizers enable default sanitizers
Stefan Weil08fb77e2013-12-18 22:09:39 +01001557 --disable-strip disable stripping binaries
1558 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001559 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001560 --audio-drv-list=LIST set audio drivers list:
1561 Available drivers: $audio_possible_drivers
1562 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1563 --block-drv-rw-whitelist=L
1564 set block driver read-write whitelist
1565 (affects only QEMU, not qemu-img)
1566 --block-drv-ro-whitelist=L
1567 set block driver read-only whitelist
1568 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001569 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001570 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001571 --with-trace-file=NAME Full PATH,NAME of file to store traces
1572 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001573 --disable-slirp disable SLIRP userspace network connectivity
1574 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
Yang Zhong5a22ab72017-12-20 21:16:46 +08001575 --enable-malloc-trim enable libc malloc_trim() for memory optimization
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001576 --oss-lib path to OSS library
1577 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001578 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001579 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001580 --enable-gcov enable test coverage analysis with gcov
1581 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001582 --disable-blobs disable installing provided firmware blobs
1583 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1584 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001585 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001586 --enable-gprof QEMU profiling with gprof
1587 --enable-profiler profiler support
1588 --enable-xen-pv-domain-build
1589 xen pv domain builder
1590 --enable-debug-stack-usage
1591 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001592
1593Optional features, enabled with --enable-FEATURE and
1594disabled with --disable-FEATURE, default is enabled if available:
1595
1596 system all system emulation targets
1597 user supported user emulation targets
1598 linux-user all linux usermode emulation targets
1599 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001600 docs build documentation
1601 guest-agent build the QEMU Guest Agent
1602 guest-agent-msi build guest agent Windows MSI installation package
1603 pie Position Independent Executables
1604 modules modules support
1605 debug-tcg TCG debugging (default is disabled)
1606 debug-info debugging information
1607 sparse sparse checker
1608
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001609 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001610 nettle nettle cryptography support
1611 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001612 sdl SDL UI
1613 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1614 gtk gtk UI
1615 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1616 vte vte support for the gtk UI
1617 curses curses UI
1618 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001619 vnc-sasl SASL encryption for VNC server
1620 vnc-jpeg JPEG lossy compression for VNC server
1621 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001622 cocoa Cocoa UI (Mac OS X only)
1623 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001624 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001625 xen xen backend driver support
Anthony PERARD70c292a2018-05-04 10:17:56 +01001626 xen-pci-passthrough PCI passthrough support for Xen
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001627 brlapi BrlAPI (Braile)
1628 curl curl connectivity
Paolo Bonzinia40161c2018-02-16 10:05:23 +01001629 membarrier membarrier system call (for Linux 4.14+ or Windows)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001630 fdt fdt device tree
1631 bluez bluez stack connectivity
1632 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001633 hax HAX acceleration support
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05001634 hvf Hypervisor.framework acceleration support
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08001635 whpx Windows Hypervisor Platform acceleration support
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02001636 rdma Enable RDMA-based migration and PVRDMA support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001637 vde support for vde network
1638 netmap support for netmap network
1639 linux-aio Linux AIO support
1640 cap-ng libcap-ng support
1641 attr attr and xattr support
1642 vhost-net vhost-net acceleration support
Gonglei042cea22018-03-01 21:46:28 +08001643 vhost-crypto vhost-crypto acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001644 spice spice
1645 rbd rados block device (rbd)
1646 libiscsi iscsi support
1647 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001648 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001649 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001650 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001651 usb-redir usb network redirection support
1652 lzo support of lzo compression library
1653 snappy support of snappy compression library
1654 bzip2 support of bzip2 compression library
1655 (for reading bzip2-compressed dmg images)
1656 seccomp seccomp support
1657 coroutine-pool coroutine freelist (better performance)
1658 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001659 tpm TPM support
1660 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001661 numa libnuma support
Klim Kireeved279a02018-01-12 12:01:19 +03001662 libxml2 for Parallels image format
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001663 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001664 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001665 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001666 vhost-vsock virtio sockets device support
1667 opengl opengl support
1668 virglrenderer virgl rendering support
1669 xfsctl xfsctl support
1670 qom-cast-debug cast debugging support
1671 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001672 vxhs Veritas HyperScale vDisk backend support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001673 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001674 vhost-user vhost-user support
Richard Henderson8ca80762017-09-14 09:41:12 -07001675 capstone capstone disassembler support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001676
1677NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001678EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001679exit 0
pbrookaf5db582006-04-08 14:26:41 +00001680fi
1681
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001682if ! has $python; then
1683 error_exit "Python not found. Use --python=/path/to/python"
1684fi
1685
1686# Note that if the Python conditional here evaluates True we will exit
1687# with status 1 which is a shell 'false' value.
Eduardo Habkost7f2b5542018-06-08 11:30:26 -03001688if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1689 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001690 "Use --python=/path/to/python to specify a supported Python."
1691fi
1692
1693# Suppress writing compiled files
1694python="$python -B"
1695
Daniel Henrique Barboza9aae6e52017-11-02 07:09:06 -02001696# Check that the C compiler works. Doing this here before testing
1697# the host CPU ensures that we had a valid CC to autodetect the
1698# $cpu var (and we should bail right here if that's not the case).
1699# It also allows the help message to be printed without a CC.
1700write_c_skeleton;
1701if compile_object ; then
1702 : C compiler works ok
1703else
1704 error_exit "\"$cc\" either does not exist or does not work"
1705fi
1706if ! compile_prog ; then
1707 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1708fi
1709
Peter Maydell359bc952011-12-24 13:07:25 +00001710# Now we have handled --enable-tcg-interpreter and know we're not just
1711# printing the help message, bail out if the host CPU isn't supported.
1712if test "$ARCH" = "unknown"; then
1713 if test "$tcg_interpreter" = "yes" ; then
1714 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001715 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001716 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001717 fi
1718fi
1719
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001720# Consult white-list to determine whether to enable werror
1721# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001722if test -z "$werror" ; then
1723 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001724 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001725 werror="yes"
1726 else
1727 werror="no"
1728 fi
1729fi
1730
Peter Maydellfb59dab2017-03-28 14:01:52 +01001731if test "$bogus_os" = "yes"; then
1732 # Now that we know that we're not printing the help and that
1733 # the compiler works (so the results of the check_defines we used
1734 # to identify the OS are reliable), if we didn't recognize the
1735 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001736 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001737fi
1738
Paolo Bonzini8d050952010-12-23 11:43:52 +01001739gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1740gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001741gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001742gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001743gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001744gcc_flags="-Wno-string-plus-int $gcc_flags"
Gerd Hoffmann0e39c4a2018-03-09 14:59:45 +01001745gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001746# Note that we do not add -Werror to gcc_flags here, because that would
1747# enable it for all configure tests. If a configure test failed due
1748# to -Werror this would just silently disable some features,
1749# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001750
1751cc_has_warning_flag() {
1752 write_c_skeleton;
1753
Peter Maydella1d29d62012-10-27 22:19:07 +01001754 # Use the positive sense of the flag when testing for -Wno-wombat
1755 # support (gcc will happily accept the -Wno- form of unknown
1756 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001757 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1758 compile_prog "-Werror $optflag" ""
1759}
1760
1761for flag in $gcc_flags; do
1762 if cc_has_warning_flag $flag ; then
1763 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001764 fi
1765done
1766
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001767if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001768 cat > $TMPC << EOF
1769int main(int argc, char *argv[])
1770{
1771 char arr[64], *p = arr, *c = argv[0];
1772 while (*c) {
1773 *p++ = *c++;
1774 }
1775 return 0;
1776}
1777EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001778 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001779 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001780 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001781 # We need to check both a compile and a link, since some compiler
1782 # setups fail only on a .c->.o compile and some only at link time
1783 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1784 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001785 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001786 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001787 break
1788 fi
1789 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001790 if test "$stack_protector" = yes; then
1791 if test $sp_on = 0; then
1792 error_exit "Stack protector not supported"
1793 fi
1794 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001795fi
1796
Paolo Bonzini20bc94a2017-10-20 12:11:32 +02001797# Disable -Wmissing-braces on older compilers that warn even for
1798# the "universal" C zero initializer {0}.
1799cat > $TMPC << EOF
1800struct {
1801 int a[2];
1802} x = {0};
1803EOF
1804if compile_object "-Werror" "" ; then
1805 :
1806else
1807 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1808fi
1809
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001810# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1811# large functions that use global variables. The bug is in all releases of
1812# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1813# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1814cat > $TMPC << EOF
1815#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1816int main(void) { return 0; }
1817#else
1818#error No bug in this compiler.
1819#endif
1820EOF
1821if compile_prog "-Werror -fno-gcse" "" ; then
1822 TRANSLATE_OPT_CFLAGS=-fno-gcse
1823fi
1824
Avi Kivity40d64442011-11-15 20:12:17 +02001825if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001826 if test "$modules" = "yes" ; then
1827 error_exit "static and modules are mutually incompatible"
1828 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001829 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001830 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001831 else
1832 pie="no"
1833 fi
1834fi
1835
Emilio G. Cota768b7852015-04-29 13:09:02 +02001836# Unconditional check for compiler __thread support
1837 cat > $TMPC << EOF
1838static __thread int tls_var;
1839int main(void) { return tls_var; }
1840EOF
1841
1842if ! compile_prog "-Werror" "" ; then
1843 error_exit "Your compiler does not support the __thread specifier for " \
1844 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1845fi
1846
Avi Kivity40d64442011-11-15 20:12:17 +02001847if test "$pie" = ""; then
1848 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001849 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001850 ;;
1851 *)
1852 pie="no"
1853 ;;
1854 esac
1855fi
1856
1857if test "$pie" != "no" ; then
1858 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001859
1860#ifdef __linux__
1861# define THREAD __thread
1862#else
1863# define THREAD
1864#endif
1865
1866static THREAD int tls_var;
1867
1868int main(void) { return tls_var; }
1869
Avi Kivity40d64442011-11-15 20:12:17 +02001870EOF
1871 if compile_prog "-fPIE -DPIE" "-pie"; then
1872 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1873 LDFLAGS="-pie $LDFLAGS"
1874 pie="yes"
1875 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1876 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1877 fi
1878 else
1879 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001880 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001881 else
1882 echo "Disabling PIE due to missing toolchain support"
1883 pie="no"
1884 fi
1885 fi
Brad46eef332013-12-10 19:49:08 -05001886
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001887 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001888 CFLAGS_NOPIE="-fno-pie"
1889 LDFLAGS_NOPIE="-nopie"
1890 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001891fi
1892
Paolo Bonzini09dada42013-04-17 16:26:47 +02001893##########################################
1894# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1895# use i686 as default anyway, but for those that don't, an explicit
1896# specification is necessary
1897
1898if test "$cpu" = "i386"; then
1899 cat > $TMPC << EOF
1900static int sfaa(int *ptr)
1901{
1902 return __sync_fetch_and_and(ptr, 0);
1903}
1904
1905int main(void)
1906{
1907 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001908 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001909 sfaa(&val);
1910 return val;
1911}
1912EOF
1913 if ! compile_prog "" "" ; then
1914 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1915 fi
1916fi
1917
1918#########################################
bellardec530c82006-04-25 22:36:06 +00001919# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001920
bellardec530c82006-04-25 22:36:06 +00001921if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001922 if has $install; then
1923 :
1924 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001925 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1926 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1927 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001928 fi
Stefan Weil89138852016-05-16 15:10:20 +02001929 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001930 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1931 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1932 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001933 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001934 if has ar; then
1935 :
1936 else
bellardec530c82006-04-25 22:36:06 +00001937 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001938 error_exit "No path includes ar" \
1939 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001940 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001941 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001942 fi
ths5fafdf22007-09-16 21:08:06 +00001943fi
bellardec530c82006-04-25 22:36:06 +00001944
Stefan Weilafb63eb2012-09-26 22:04:38 +02001945if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001946 for target in $default_target_list; do
1947 supported_target $target 2>/dev/null && \
1948 target_list="$target_list $target"
1949 done
1950 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05001951else
Stefan Weil89138852016-05-16 15:10:20 +02001952 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001953 for target in $target_list; do
1954 # Check that we recognised the target name; this allows a more
1955 # friendly error message than if we let it fall through.
1956 case " $default_target_list " in
1957 *" $target "*)
1958 ;;
1959 *)
1960 error_exit "Unknown target name '$target'"
1961 ;;
1962 esac
1963 supported_target $target || exit 1
1964 done
bellard5327cf42005-01-10 23:18:50 +00001965fi
Peter Maydell25b48332013-05-20 16:16:16 +01001966
Paolo Bonzinif55fe272010-05-26 16:08:17 +02001967# see if system emulation was really requested
1968case " $target_list " in
1969 *"-softmmu "*) softmmu=yes
1970 ;;
1971 *) softmmu=no
1972 ;;
1973esac
bellard5327cf42005-01-10 23:18:50 +00001974
Juan Quintela249247c2009-08-12 18:20:25 +02001975feature_not_found() {
1976 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11001977 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02001978
Peter Maydell76ad07a2013-04-08 12:11:26 +01001979 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11001980 "configure was not able to find it." \
1981 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02001982}
1983
bellard7d132992003-03-06 23:23:54 +00001984# ---
1985# big/little endian test
1986cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04001987short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1988short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1989extern int foo(short *, short *);
1990int main(int argc, char *argv[]) {
1991 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00001992}
1993EOF
1994
Mike Frysinger61cc9192013-06-30 23:30:18 -04001995if compile_object ; then
Alice Frosi12f15c92018-01-30 14:38:28 +01001996 if strings -a $TMPO | grep -q BiGeNdIaN ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04001997 bigendian="yes"
Alice Frosi12f15c92018-01-30 14:38:28 +01001998 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
Mike Frysinger61cc9192013-06-30 23:30:18 -04001999 bigendian="no"
2000 else
2001 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01002002 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04002003else
2004 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00002005fi
2006
Juan Quintelab0a47e72009-08-12 18:29:49 +02002007##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01002008# cocoa implies not SDL or GTK
2009# (the cocoa UI code currently assumes it is always the active UI
2010# and doesn't interact well with other UI frontend code)
2011if test "$cocoa" = "yes"; then
2012 if test "$sdl" = "yes"; then
2013 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2014 fi
2015 if test "$gtk" = "yes"; then
2016 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2017 fi
2018 gtk=no
2019 sdl=no
2020fi
2021
Eric Blake6b39b062016-10-11 10:46:23 -05002022# Some versions of Mac OS X incorrectly define SIZE_MAX
2023cat > $TMPC << EOF
2024#include <stdint.h>
2025#include <stdio.h>
2026int main(int argc, char *argv[]) {
2027 return printf("%zu", SIZE_MAX);
2028}
2029EOF
2030have_broken_size_max=no
2031if ! compile_object -Werror ; then
2032 have_broken_size_max=yes
2033fi
2034
Peter Maydella30878e2015-08-14 16:10:52 +01002035##########################################
Gonglei015a33b2014-07-01 20:58:08 +08002036# L2TPV3 probe
2037
2038cat > $TMPC <<EOF
2039#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04002040#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08002041int main(void) { return sizeof(struct mmsghdr); }
2042EOF
2043if compile_prog "" "" ; then
2044 l2tpv3=yes
2045else
2046 l2tpv3=no
2047fi
2048
2049##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01002050# MinGW / Mingw-w64 localtime_r/gmtime_r check
2051
2052if test "$mingw32" = "yes"; then
2053 # Some versions of MinGW / Mingw-w64 lack localtime_r
2054 # and gmtime_r entirely.
2055 #
2056 # Some versions of Mingw-w64 define a macro for
2057 # localtime_r/gmtime_r.
2058 #
2059 # Some versions of Mingw-w64 will define functions
2060 # for localtime_r/gmtime_r, but only if you have
2061 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2062 # though, unistd.h and pthread.h both define
2063 # that for you.
2064 #
2065 # So this #undef localtime_r and #include <unistd.h>
2066 # are not in fact redundant.
2067cat > $TMPC << EOF
2068#include <unistd.h>
2069#include <time.h>
2070#undef localtime_r
2071int main(void) { localtime_r(NULL, NULL); return 0; }
2072EOF
2073 if compile_prog "" "" ; then
2074 localtime_r="yes"
2075 else
2076 localtime_r="no"
2077 fi
2078fi
2079
2080##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01002081# pkg-config probe
2082
2083if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002084 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01002085fi
2086
2087##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02002088# NPTL probe
2089
Peter Maydell24cb36a2013-07-16 18:45:00 +01002090if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02002091 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00002092#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00002093#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01002094int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00002095#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2096#error bork
2097#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01002098 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00002099}
2100EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01002101 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002102 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02002103 fi
pbrookbd0c5662008-05-29 14:34:11 +00002104fi
2105
Liang Li99f2dbd2016-03-08 13:53:16 +08002106#########################################
balrogac629222008-10-11 09:56:04 +00002107# zlib check
2108
Alon Levy1ece9902011-07-26 12:30:40 +03002109if test "$zlib" != "no" ; then
2110 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00002111#include <zlib.h>
2112int main(void) { zlibVersion(); return 0; }
2113EOF
Alon Levy1ece9902011-07-26 12:30:40 +03002114 if compile_prog "" "-lz" ; then
2115 :
2116 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002117 error_exit "zlib check failed" \
2118 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03002119 fi
balrogac629222008-10-11 09:56:04 +00002120fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00002121LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00002122
2123##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08002124# lzo check
2125
2126if test "$lzo" != "no" ; then
2127 cat > $TMPC << EOF
2128#include <lzo/lzo1x.h>
2129int main(void) { lzo_version(); return 0; }
2130EOF
2131 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002132 libs_softmmu="$libs_softmmu -llzo2"
2133 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002134 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002135 if test "$lzo" = "yes"; then
2136 feature_not_found "liblzo2" "Install liblzo2 devel"
2137 fi
2138 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002139 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002140fi
2141
2142##########################################
2143# snappy check
2144
2145if test "$snappy" != "no" ; then
2146 cat > $TMPC << EOF
2147#include <snappy-c.h>
2148int main(void) { snappy_max_compressed_length(4096); return 0; }
2149EOF
2150 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002151 libs_softmmu="$libs_softmmu -lsnappy"
2152 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002153 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002154 if test "$snappy" = "yes"; then
2155 feature_not_found "libsnappy" "Install libsnappy devel"
2156 fi
2157 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002158 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002159fi
2160
2161##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002162# bzip2 check
2163
2164if test "$bzip2" != "no" ; then
2165 cat > $TMPC << EOF
2166#include <bzlib.h>
2167int main(void) { BZ2_bzlibVersion(); return 0; }
2168EOF
2169 if compile_prog "" "-lbz2" ; then
2170 bzip2="yes"
2171 else
2172 if test "$bzip2" = "yes"; then
2173 feature_not_found "libbzip2" "Install libbzip2 devel"
2174 fi
2175 bzip2="no"
2176 fi
2177fi
2178
2179##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002180# libseccomp check
2181
2182if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002183 case "$cpu" in
2184 i386|x86_64)
dann frazierba060c52015-10-23 15:34:22 -06002185 libseccomp_minver="2.1.0"
Andrew Jones693e5912015-09-30 11:59:18 -04002186 ;;
James Hogan5ce43972016-04-08 14:16:34 +01002187 mips)
2188 libseccomp_minver="2.2.0"
2189 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002190 arm|aarch64)
2191 libseccomp_minver="2.2.3"
2192 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002193 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002194 libseccomp_minver="2.3.0"
2195 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002196 *)
2197 libseccomp_minver=""
2198 ;;
2199 esac
2200
2201 if test "$libseccomp_minver" != "" &&
2202 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002203 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2204 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002205 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002206 else
Andrew Jones693e5912015-09-30 11:59:18 -04002207 if test "$seccomp" = "yes" ; then
2208 if test "$libseccomp_minver" != "" ; then
2209 feature_not_found "libseccomp" \
2210 "Install libseccomp devel >= $libseccomp_minver"
2211 else
2212 feature_not_found "libseccomp" \
2213 "libseccomp is not supported for host cpu $cpu"
2214 fi
2215 fi
2216 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002217 fi
2218fi
2219##########################################
aliguorie37630c2009-04-22 15:19:10 +00002220# xen probe
2221
Juan Quintelafc321b42009-08-12 18:29:55 +02002222if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002223 # Check whether Xen library path is specified via --extra-ldflags to avoid
2224 # overriding this setting with pkg-config output. If not, try pkg-config
2225 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002226
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002227 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2228 $pkg_config --exists xencontrol ; then
2229 xen_ctrl_version="$(printf '%d%02d%02d' \
2230 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2231 xen=yes
2232 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2233 xen_pc="$xen_pc xenevtchn xendevicemodel"
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002234 if $pkg_config --exists xentoolcore; then
2235 xen_pc="$xen_pc xentoolcore"
2236 fi
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002237 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2238 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2239 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2240 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002241
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002242 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002243 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002244
2245 # First we test whether Xen headers and libraries are available.
2246 # If no, we are done and there is no Xen support.
2247 # If yes, more tests are run to detect the Xen version.
2248
2249 # Xen (any)
2250 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002251#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002252int main(void) {
2253 return 0;
2254}
2255EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002256 if ! compile_prog "" "$xen_libs" ; then
2257 # Xen not found
2258 if test "$xen" = "yes" ; then
2259 feature_not_found "xen" "Install xen devel"
2260 fi
2261 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002262
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002263 # Xen unstable
2264 elif
2265 cat > $TMPC <<EOF &&
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002266#undef XC_WANT_COMPAT_DEVICEMODEL_API
2267#define __XEN_TOOLS__
2268#include <xendevicemodel.h>
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002269#include <xenforeignmemory.h>
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002270int main(void) {
2271 xendevicemodel_handle *xd;
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002272 xenforeignmemory_handle *xfmem;
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002273
2274 xd = xendevicemodel_open(0, 0);
2275 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2276
Paul Durrantd3c49eb2018-05-15 17:40:53 +01002277 xfmem = xenforeignmemory_open(0, 0);
2278 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2279
Ross Lagerwall2cbf8902017-10-23 10:27:27 +01002280 return 0;
2281}
2282EOF
2283 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2284 then
2285 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2286 xen_ctrl_version=41100
2287 xen=yes
2288 elif
2289 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002290#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2291#include <xenforeignmemory.h>
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002292#include <xentoolcore.h>
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002293int main(void) {
2294 xenforeignmemory_handle *xfmem;
2295
2296 xfmem = xenforeignmemory_open(0, 0);
2297 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002298 xentoolcore_restrict_all(0);
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002299
2300 return 0;
2301}
2302EOF
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002303 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002304 then
Anthony PERARD58ea9a72017-09-25 16:01:48 +01002305 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002306 xen_ctrl_version=41000
2307 xen=yes
2308 elif
2309 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002310#undef XC_WANT_COMPAT_DEVICEMODEL_API
2311#define __XEN_TOOLS__
2312#include <xendevicemodel.h>
2313int main(void) {
2314 xendevicemodel_handle *xd;
2315
2316 xd = xendevicemodel_open(0, 0);
2317 xendevicemodel_close(xd);
2318
2319 return 0;
2320}
2321EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002322 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2323 then
2324 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2325 xen_ctrl_version=40900
2326 xen=yes
2327 elif
2328 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002329/*
2330 * If we have stable libs the we don't want the libxc compat
2331 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002332 *
2333 * Also, check if xengnttab_grant_copy_segment_t is defined and
2334 * grant copy operation is implemented.
2335 */
2336#undef XC_WANT_COMPAT_EVTCHN_API
2337#undef XC_WANT_COMPAT_GNTTAB_API
2338#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2339#include <xenctrl.h>
2340#include <xenstore.h>
2341#include <xenevtchn.h>
2342#include <xengnttab.h>
2343#include <xenforeignmemory.h>
2344#include <stdint.h>
2345#include <xen/hvm/hvm_info_table.h>
2346#if !defined(HVM_MAX_VCPUS)
2347# error HVM_MAX_VCPUS not defined
2348#endif
2349int main(void) {
2350 xc_interface *xc = NULL;
2351 xenforeignmemory_handle *xfmem;
2352 xenevtchn_handle *xe;
2353 xengnttab_handle *xg;
2354 xen_domain_handle_t handle;
2355 xengnttab_grant_copy_segment_t* seg = NULL;
2356
2357 xs_daemon_open();
2358
2359 xc = xc_interface_open(0, 0, 0);
2360 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2361 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2362 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2363 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2364 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2365
2366 xfmem = xenforeignmemory_open(0, 0);
2367 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2368
2369 xe = xenevtchn_open(0, 0);
2370 xenevtchn_fd(xe);
2371
2372 xg = xengnttab_open(0, 0);
2373 xengnttab_grant_copy(xg, 0, seg);
2374
2375 return 0;
2376}
2377EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002378 compile_prog "" "$xen_libs $xen_stable_libs"
2379 then
2380 xen_ctrl_version=40800
2381 xen=yes
2382 elif
2383 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002384/*
2385 * If we have stable libs the we don't want the libxc compat
2386 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002387 */
2388#undef XC_WANT_COMPAT_EVTCHN_API
2389#undef XC_WANT_COMPAT_GNTTAB_API
2390#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2391#include <xenctrl.h>
2392#include <xenstore.h>
2393#include <xenevtchn.h>
2394#include <xengnttab.h>
2395#include <xenforeignmemory.h>
2396#include <stdint.h>
2397#include <xen/hvm/hvm_info_table.h>
2398#if !defined(HVM_MAX_VCPUS)
2399# error HVM_MAX_VCPUS not defined
2400#endif
2401int main(void) {
2402 xc_interface *xc = NULL;
2403 xenforeignmemory_handle *xfmem;
2404 xenevtchn_handle *xe;
2405 xengnttab_handle *xg;
2406 xen_domain_handle_t handle;
2407
2408 xs_daemon_open();
2409
2410 xc = xc_interface_open(0, 0, 0);
2411 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2412 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2413 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2414 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2415 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2416
2417 xfmem = xenforeignmemory_open(0, 0);
2418 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2419
2420 xe = xenevtchn_open(0, 0);
2421 xenevtchn_fd(xe);
2422
2423 xg = xengnttab_open(0, 0);
2424 xengnttab_map_grant_ref(xg, 0, 0, 0);
2425
2426 return 0;
2427}
2428EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002429 compile_prog "" "$xen_libs $xen_stable_libs"
2430 then
2431 xen_ctrl_version=40701
2432 xen=yes
2433 elif
2434 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002435#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002436#include <stdint.h>
2437int main(void) {
2438 xc_interface *xc = NULL;
2439 xen_domain_handle_t handle;
2440 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2441 return 0;
2442}
2443EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002444 compile_prog "" "$xen_libs"
2445 then
2446 xen_ctrl_version=40700
2447 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002448
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002449 # Xen 4.6
2450 elif
2451 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002452#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002453#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002454#include <stdint.h>
2455#include <xen/hvm/hvm_info_table.h>
2456#if !defined(HVM_MAX_VCPUS)
2457# error HVM_MAX_VCPUS not defined
2458#endif
2459int main(void) {
2460 xc_interface *xc;
2461 xs_daemon_open();
2462 xc = xc_interface_open(0, 0, 0);
2463 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2464 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002465 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002466 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002467 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002468 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002469 return 0;
2470}
2471EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002472 compile_prog "" "$xen_libs"
2473 then
2474 xen_ctrl_version=40600
2475 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002476
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002477 # Xen 4.5
2478 elif
2479 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002480#include <xenctrl.h>
2481#include <xenstore.h>
2482#include <stdint.h>
2483#include <xen/hvm/hvm_info_table.h>
2484#if !defined(HVM_MAX_VCPUS)
2485# error HVM_MAX_VCPUS not defined
2486#endif
2487int main(void) {
2488 xc_interface *xc;
2489 xs_daemon_open();
2490 xc = xc_interface_open(0, 0, 0);
2491 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2492 xc_gnttab_open(NULL, 0);
2493 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2494 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002495 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2496 return 0;
2497}
2498EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002499 compile_prog "" "$xen_libs"
2500 then
2501 xen_ctrl_version=40500
2502 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002503
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002504 elif
2505 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002506#include <xenctrl.h>
2507#include <xenstore.h>
2508#include <stdint.h>
2509#include <xen/hvm/hvm_info_table.h>
2510#if !defined(HVM_MAX_VCPUS)
2511# error HVM_MAX_VCPUS not defined
2512#endif
2513int main(void) {
2514 xc_interface *xc;
2515 xs_daemon_open();
2516 xc = xc_interface_open(0, 0, 0);
2517 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2518 xc_gnttab_open(NULL, 0);
2519 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2520 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002521 return 0;
2522}
2523EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002524 compile_prog "" "$xen_libs"
2525 then
2526 xen_ctrl_version=40200
2527 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002528
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002529 else
2530 if test "$xen" = "yes" ; then
2531 feature_not_found "xen (unsupported version)" \
2532 "Install a supported xen (xen 4.2 or newer)"
2533 fi
2534 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002535 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002536
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002537 if test "$xen" = yes; then
2538 if test $xen_ctrl_version -ge 40701 ; then
2539 libs_softmmu="$xen_stable_libs $libs_softmmu"
2540 fi
2541 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002542 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002543 fi
aliguorie37630c2009-04-22 15:19:10 +00002544fi
2545
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002546if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002547 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002548 xen_pci_passthrough=yes
2549 else
2550 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002551 error_exit "User requested feature Xen PCI Passthrough" \
2552 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002553 fi
2554 xen_pci_passthrough=no
2555 fi
2556fi
2557
Ian Campbell64a7ad62016-01-15 13:23:44 +00002558if test "$xen_pv_domain_build" = "yes" &&
2559 test "$xen" != "yes"; then
2560 error_exit "User requested Xen PV domain builder support" \
2561 "which requires Xen support."
2562fi
2563
aliguorie37630c2009-04-22 15:19:10 +00002564##########################################
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002565# Windows Hypervisor Platform accelerator (WHPX) check
2566if test "$whpx" != "no" ; then
Lucian Petrut327fccb2018-05-15 20:35:21 +03002567 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002568 whpx="yes"
2569 else
2570 if test "$whpx" = "yes"; then
Justin Terry (VM) via Qemu-devel53537bb2018-02-26 09:13:29 -08002571 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08002572 fi
2573 whpx="no"
2574 fi
2575fi
2576
2577##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002578# Sparse probe
2579if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002580 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002581 sparse=yes
2582 else
2583 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002584 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002585 fi
2586 sparse=no
2587 fi
2588fi
2589
2590##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002591# X11 probe
Jeremy Whitef676c672015-01-09 13:08:49 -06002592if $pkg_config --exists "x11"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002593 have_x11=yes
Stefan Weil89138852016-05-16 15:10:20 +02002594 x11_cflags=$($pkg_config --cflags x11)
2595 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002596fi
2597
2598##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002599# GTK probe
2600
2601if test "$gtk" != "no"; then
Peter Xu5a464e62018-04-09 16:23:23 +08002602 if test "$gtkabi" = ""; then
2603 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2604 # Use 2.0 as a fallback if that is available.
2605 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2606 gtkabi=3.0
2607 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2608 gtkabi=2.0
2609 else
2610 gtkabi=3.0
2611 fi
2612 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002613 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002614 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002615 if test "$gtkabi" = "3.0" ; then
2616 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002617 else
2618 gtkversion="2.18.0"
2619 fi
2620 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002621 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2622 gtk_libs=$($pkg_config --libs $gtkpackage)
2623 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002624 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01002625 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06002626 gtk_cflags="$gtk_cflags $x11_cflags"
2627 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002628 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002629 gtk="yes"
2630 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002631 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002632 else
2633 gtk="no"
2634 fi
2635fi
2636
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002637
2638##########################################
2639# GNUTLS probe
2640
Peter Maydell37371292015-07-24 18:28:08 +01002641gnutls_works() {
2642 # Unfortunately some distros have bad pkg-config information for gnutls
2643 # such that it claims to exist but you get a compiler error if you try
2644 # to use the options returned by --libs. Specifically, Ubuntu for --static
2645 # builds doesn't work:
2646 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2647 #
2648 # So sanity check the cflags/libs before assuming gnutls can be used.
2649 if ! $pkg_config --exists "gnutls"; then
2650 return 1
2651 fi
2652
2653 write_c_skeleton
2654 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2655}
2656
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002657gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002658gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002659if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002660 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002661 gnutls_cflags=$($pkg_config --cflags gnutls)
2662 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002663 libs_softmmu="$gnutls_libs $libs_softmmu"
2664 libs_tools="$gnutls_libs $libs_tools"
2665 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2666 gnutls="yes"
2667
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002668 # gnutls_rnd requires >= 2.11.0
2669 if $pkg_config --exists "gnutls >= 2.11.0"; then
2670 gnutls_rnd="yes"
2671 else
2672 gnutls_rnd="no"
2673 fi
2674
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002675 if $pkg_config --exists 'gnutls >= 3.0'; then
2676 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002677 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002678 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002679 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002680 *gcrypt*)
2681 gnutls_gcrypt=yes
2682 gnutls_nettle=no
2683 ;;
2684 *nettle*)
2685 gnutls_gcrypt=no
2686 gnutls_nettle=yes
2687 ;;
2688 *)
2689 gnutls_gcrypt=yes
2690 gnutls_nettle=no
2691 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002692 esac
2693 else
2694 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002695 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002696 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002697 elif test "$gnutls" = "yes"; then
2698 feature_not_found "gnutls" "Install gnutls devel"
2699 else
2700 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002701 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002702 fi
2703else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002704 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002705fi
2706
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002707
2708# If user didn't give a --disable/enable-gcrypt flag,
2709# then mark as disabled if user requested nettle
2710# explicitly, or if gnutls links to nettle
2711if test -z "$gcrypt"
2712then
2713 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2714 then
2715 gcrypt="no"
2716 fi
2717fi
2718
2719# If user didn't give a --disable/enable-nettle flag,
2720# then mark as disabled if user requested gcrypt
2721# explicitly, or if gnutls links to gcrypt
2722if test -z "$nettle"
2723then
2724 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2725 then
2726 nettle="no"
2727 fi
2728fi
2729
2730has_libgcrypt_config() {
2731 if ! has "libgcrypt-config"
2732 then
2733 return 1
2734 fi
2735
2736 if test -n "$cross_prefix"
2737 then
Stefan Weil89138852016-05-16 15:10:20 +02002738 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002739 if test "$host-" != $cross_prefix
2740 then
2741 return 1
2742 fi
2743 fi
2744
2745 return 0
2746}
2747
2748if test "$gcrypt" != "no"; then
2749 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002750 gcrypt_cflags=$(libgcrypt-config --cflags)
2751 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002752 # Debian has remove -lgpg-error from libgcrypt-config
2753 # as it "spreads unnecessary dependencies" which in
2754 # turn breaks static builds...
2755 if test "$static" = "yes"
2756 then
2757 gcrypt_libs="$gcrypt_libs -lgpg-error"
2758 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002759 libs_softmmu="$gcrypt_libs $libs_softmmu"
2760 libs_tools="$gcrypt_libs $libs_tools"
2761 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002762 gcrypt="yes"
2763 if test -z "$nettle"; then
2764 nettle="no"
2765 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002766
2767 cat > $TMPC << EOF
2768#include <gcrypt.h>
2769int main(void) {
2770 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2771 GCRY_MD_SHA256,
2772 NULL, 0, 0, 0, NULL);
2773 return 0;
2774}
2775EOF
2776 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2777 gcrypt_kdf=yes
2778 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002779
2780 cat > $TMPC << EOF
2781#include <gcrypt.h>
2782int main(void) {
2783 gcry_mac_hd_t handle;
2784 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2785 GCRY_MAC_FLAG_SECURE, NULL);
2786 return 0;
2787}
2788EOF
2789 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2790 gcrypt_hmac=yes
2791 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002792 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002793 if test "$gcrypt" = "yes"; then
2794 feature_not_found "gcrypt" "Install gcrypt devel"
2795 else
2796 gcrypt="no"
2797 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002798 fi
2799fi
2800
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002801
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002802if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002803 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002804 nettle_cflags=$($pkg_config --cflags nettle)
2805 nettle_libs=$($pkg_config --libs nettle)
2806 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002807 libs_softmmu="$nettle_libs $libs_softmmu"
2808 libs_tools="$nettle_libs $libs_tools"
2809 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002810 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002811
2812 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002813#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002814#include <nettle/pbkdf2.h>
2815int main(void) {
2816 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2817 return 0;
2818}
2819EOF
2820 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2821 nettle_kdf=yes
2822 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002823 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002824 if test "$nettle" = "yes"; then
2825 feature_not_found "nettle" "Install nettle devel"
2826 else
2827 nettle="no"
2828 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002829 fi
2830fi
2831
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002832if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2833then
2834 error_exit "Only one of gcrypt & nettle can be enabled"
2835fi
2836
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002837##########################################
2838# libtasn1 - only for the TLS creds/session test suite
2839
2840tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002841tasn1_cflags=""
2842tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002843if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002844 tasn1_cflags=$($pkg_config --cflags libtasn1)
2845 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002846else
2847 tasn1=no
2848fi
2849
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002850
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002851##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002852# getifaddrs (for tests/test-io-channel-socket )
2853
2854have_ifaddrs_h=yes
2855if ! check_include "ifaddrs.h" ; then
2856 have_ifaddrs_h=no
2857fi
2858
2859##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002860# VTE probe
2861
2862if test "$vte" != "no"; then
2863 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002864 vteminversion="0.32.0"
2865 if $pkg_config --exists "vte-2.91"; then
2866 vtepackage="vte-2.91"
2867 else
2868 vtepackage="vte-2.90"
2869 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002870 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002871 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002872 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002873 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002874 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002875 vte_cflags=$($pkg_config --cflags $vtepackage)
2876 vte_libs=$($pkg_config --libs $vtepackage)
2877 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002878 vte="yes"
2879 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002880 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002881 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002882 else
2883 feature_not_found "vte" "Install libvte devel"
2884 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002885 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002886 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002887 fi
2888fi
2889
2890##########################################
bellard11d9f692004-04-02 20:55:59 +00002891# SDL probe
2892
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002893# Look for sdl configuration program (pkg-config or sdl-config). Try
2894# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002895
Peter Xuc6093a02018-04-10 13:40:34 +08002896sdl_probe ()
2897{
2898 sdl_too_old=no
2899 if test "$sdlabi" = ""; then
2900 if $pkg_config --exists "sdl2"; then
2901 sdlabi=2.0
2902 elif $pkg_config --exists "sdl"; then
2903 sdlabi=1.2
2904 else
2905 sdlabi=2.0
2906 fi
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002907 fi
bellard11d9f692004-04-02 20:55:59 +00002908
Peter Xuc6093a02018-04-10 13:40:34 +08002909 if test $sdlabi = "2.0"; then
2910 sdl_config=$sdl2_config
2911 sdlname=sdl2
2912 sdlconfigname=sdl2_config
2913 elif test $sdlabi = "1.2"; then
2914 sdlname=sdl
2915 sdlconfigname=sdl_config
2916 else
2917 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2918 fi
2919
2920 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2921 sdl_config=$sdlconfigname
2922 fi
2923
2924 if $pkg_config $sdlname --exists; then
2925 sdlconfig="$pkg_config $sdlname"
2926 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2927 elif has ${sdl_config}; then
2928 sdlconfig="$sdl_config"
2929 sdlversion=$($sdlconfig --version)
2930 else
2931 if test "$sdl" = "yes" ; then
2932 feature_not_found "sdl" "Install SDL2-devel"
2933 fi
2934 sdl=no
2935 # no need to do the rest
2936 return
2937 fi
2938 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2939 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2940 fi
2941
Juan Quintelaac119f92009-07-27 16:13:15 +02002942 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002943#include <SDL.h>
2944#undef main /* We don't want SDL to override our main() */
2945int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2946EOF
Stefan Weil89138852016-05-16 15:10:20 +02002947 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
Gerd Hoffmann2ca5c432018-03-07 16:42:57 +01002948 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
TeLeMan74f42e12010-02-08 13:56:44 +08002949 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002950 if $pkg_config $sdlname --exists; then
2951 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2952 else
2953 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2954 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002955 else
Stefan Weil89138852016-05-16 15:10:20 +02002956 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002957 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002958 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002959 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002960 sdl_too_old=yes
2961 else
Peter Maydella30878e2015-08-14 16:10:52 +01002962 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002963 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002964
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002965 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002966 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002967 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002968 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2969 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002970 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002971 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002972 :
2973 else
2974 sdl=no
2975 fi
2976 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002977 else # sdl not found
2978 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002979 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002980 fi
2981 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002982 fi # sdl compile test
Peter Xuc6093a02018-04-10 13:40:34 +08002983}
2984
2985if test "$sdl" != "no" ; then
2986 sdl_probe
Juan Quintelaa68551b2009-07-27 16:13:09 +02002987fi
bellard11d9f692004-04-02 20:55:59 +00002988
aliguori5368a422009-03-03 17:37:21 +00002989if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002990 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002991#include <SDL.h>
2992#if defined(SDL_VIDEO_DRIVER_X11)
2993#include <X11/XKBlib.h>
2994#else
2995#error No x11 support
2996#endif
2997int main(void) { return 0; }
2998EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002999 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
Gerd Hoffmann87815952018-03-01 11:05:42 +01003000 need_x11=yes
Jeremy Whitef676c672015-01-09 13:08:49 -06003001 sdl_cflags="$sdl_cflags $x11_cflags"
3002 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02003003 fi
aliguori5368a422009-03-03 17:37:21 +00003004fi
3005
ths8f28f3f2007-01-05 21:25:54 +00003006##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04003007# RDMA needs OpenFabrics libraries
3008if test "$rdma" != "no" ; then
3009 cat > $TMPC <<EOF
3010#include <rdma/rdma_cma.h>
3011int main(void) { return 0; }
3012EOF
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003013 rdma_libs="-lrdmacm -libverbs -libumad"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003014 if compile_prog "" "$rdma_libs" ; then
3015 rdma="yes"
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003016 libs_softmmu="$libs_softmmu $rdma_libs"
Michael R. Hines2da776d2013-07-22 10:01:54 -04003017 else
3018 if test "$rdma" = "yes" ; then
3019 error_exit \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003020 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003021 " Your options:" \
Yuval Shaiaef6d4cc2018-02-09 15:23:18 +02003022 " (1) Fast: Install infiniband packages (devel) from your distro." \
Michael R. Hines2da776d2013-07-22 10:01:54 -04003023 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3024 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3025 fi
3026 rdma="no"
3027 fi
3028fi
3029
ths8d5d2d42007-08-25 01:37:51 +00003030
3031##########################################
aliguori2f9606b2009-03-06 20:27:28 +00003032# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003033if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02003034 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00003035#include <sasl/sasl.h>
3036#include <stdio.h>
3037int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3038EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02003039 # Assuming Cyrus-SASL installed in /usr prefix
3040 vnc_sasl_cflags=""
3041 vnc_sasl_libs="-lsasl2"
3042 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3043 vnc_sasl=yes
3044 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003045 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02003046 else
3047 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003048 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00003049 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02003050 vnc_sasl=no
3051 fi
aliguori2f9606b2009-03-06 20:27:28 +00003052fi
3053
3054##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003055# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003056if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003057cat > $TMPC <<EOF
3058#include <stdio.h>
3059#include <jpeglib.h>
3060int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3061EOF
3062 vnc_jpeg_cflags=""
3063 vnc_jpeg_libs="-ljpeg"
3064 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3065 vnc_jpeg=yes
3066 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01003067 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003068 else
3069 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003070 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02003071 fi
3072 vnc_jpeg=no
3073 fi
3074fi
3075
3076##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02003077# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01003078if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02003079cat > $TMPC <<EOF
3080//#include <stdio.h>
3081#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003082#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02003083int main(void) {
3084 png_structp png_ptr;
3085 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01003086 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02003087}
3088EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003089 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02003090 vnc_png_cflags=$($pkg_config libpng --cflags)
3091 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04003092 else
Corentin Charyefe556a2010-07-07 20:57:56 +02003093 vnc_png_cflags=""
3094 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04003095 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02003096 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3097 vnc_png=yes
3098 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04003099 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02003100 else
3101 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003102 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02003103 fi
3104 vnc_png=no
3105 fi
3106fi
3107
3108##########################################
Gerd Hoffmann6a021532017-10-05 17:33:28 +02003109# xkbcommon probe
3110if test "$xkbcommon" != "no" ; then
3111 if $pkg_config xkbcommon --exists; then
3112 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3113 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3114 xkbcommon=yes
3115 else
3116 if test "$xkbcommon" = "yes" ; then
3117 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3118 fi
3119 xkbcommon=no
3120 fi
3121fi
3122
3123##########################################
aliguori76655d62009-03-06 20:27:37 +00003124# fnmatch() probe, used for ACL routines
3125fnmatch="no"
3126cat > $TMPC << EOF
3127#include <fnmatch.h>
3128int main(void)
3129{
3130 fnmatch("foo", "foo", 0);
3131 return 0;
3132}
3133EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003134if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00003135 fnmatch="yes"
3136fi
3137
3138##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06003139# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003140if test "$xfs" != "no" ; then
3141 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01003142#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003143#include <xfs/xfs.h>
3144int main(void)
3145{
3146 xfsctl(NULL, 0, 0, NULL);
3147 return 0;
3148}
3149EOF
3150 if compile_prog "" "" ; then
3151 xfs="yes"
3152 else
3153 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003154 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01003155 fi
3156 xfs=no
3157 fi
3158fi
3159
3160##########################################
ths8a16d272008-07-19 09:56:24 +00003161# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02003162if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003163 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00003164 cat > $TMPC << EOF
3165#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00003166int main(void)
3167{
3168 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01003169 char s[] = "";
3170 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00003171 return 0;
3172}
ths8a16d272008-07-19 09:56:24 +00003173EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003174 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02003175 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02003176 else
3177 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003178 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02003179 fi
3180 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02003181 fi
ths8a16d272008-07-19 09:56:24 +00003182fi
3183
3184##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003185# netmap support probe
3186# Apart from looking for netmap headers, we make sure that the host API version
3187# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3188# a minor/major version number. Minor new features will be marked with values up
3189# to 15, and if something happens that requires a change to the backend we will
3190# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01003191if test "$netmap" != "no" ; then
3192 cat > $TMPC << EOF
3193#include <inttypes.h>
3194#include <net/if.h>
3195#include <net/netmap.h>
3196#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01003197#if (NETMAP_API < 11) || (NETMAP_API > 15)
3198#error
3199#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01003200int main(void) { return 0; }
3201EOF
3202 if compile_prog "" "" ; then
3203 netmap=yes
3204 else
3205 if test "$netmap" = "yes" ; then
3206 feature_not_found "netmap"
3207 fi
3208 netmap=no
3209 fi
3210fi
3211
3212##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003213# libcap-ng library probe
3214if test "$cap_ng" != "no" ; then
3215 cap_libs="-lcap-ng"
3216 cat > $TMPC << EOF
3217#include <cap-ng.h>
3218int main(void)
3219{
3220 capng_capability_to_name(CAPNG_EFFECTIVE);
3221 return 0;
3222}
3223EOF
3224 if compile_prog "" "$cap_libs" ; then
3225 cap_ng=yes
3226 libs_tools="$cap_libs $libs_tools"
3227 else
3228 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003229 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003230 fi
3231 cap_ng=no
3232 fi
3233fi
3234
3235##########################################
malcc2de5c92008-06-28 19:13:06 +00003236# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003237
malcc2de5c92008-06-28 19:13:06 +00003238audio_drv_probe()
3239{
3240 drv=$1
3241 hdr=$2
3242 lib=$3
3243 exp=$4
3244 cfl=$5
3245 cat > $TMPC << EOF
3246#include <$hdr>
3247int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003248EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003249 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003250 :
3251 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003252 error_exit "$drv check failed" \
3253 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003254 fi
3255}
3256
Stefan Weil89138852016-05-16 15:10:20 +02003257audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003258for drv in $audio_drv_list; do
3259 case $drv in
3260 alsa)
3261 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003262 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003263 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003264 ;;
3265
malcb8e59f12008-07-02 21:03:08 +00003266 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003267 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3268 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003269 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003270 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003271 ;;
3272
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003273 sdl)
3274 if test "$sdl" = "no"; then
3275 error_exit "sdl not found or disabled, can not use sdl audio driver"
3276 fi
3277 ;;
3278
Juan Quintela997e6902009-08-03 14:46:29 +02003279 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003280 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003281 ;;
3282
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003283 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003284 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003285 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003286 ;;
3287
3288 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003289 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003290 ;;
3291
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003292 wav)
3293 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003294 ;;
3295
malce4c63a62008-07-19 16:15:16 +00003296 *)
malc1c9b2a52008-07-19 16:57:30 +00003297 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003298 error_exit "Unknown driver '$drv' selected" \
3299 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003300 }
3301 ;;
malcc2de5c92008-06-28 19:13:06 +00003302 esac
3303done
ths8f28f3f2007-01-05 21:25:54 +00003304
balrog4d3b6f62008-02-10 16:33:14 +00003305##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003306# BrlAPI probe
3307
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003308if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003309 brlapi_libs="-lbrlapi"
3310 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003311#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003312#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003313int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3314EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003315 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003316 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003317 else
3318 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003319 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003320 fi
3321 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003322 fi
3323fi
aurel322e4d9fb2008-04-08 06:01:02 +00003324
3325##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003326# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003327if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003328 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003329 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3330 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003331 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003332 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003333 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003334 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003335 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003336 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003337#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003338#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003339#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003340int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003341 wchar_t wch = L'w';
3342 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003343 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003344 addwstr(L"wide chars\n");
3345 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003346 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003347 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003348}
balrog4d3b6f62008-02-10 16:33:14 +00003349EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003350 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003351 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003352 # Make sure we get the wide character prototypes
3353 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003354 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003355 for curses_lib in $curses_lib_list; do
3356 unset IFS
3357 if compile_prog "$curses_inc" "$curses_lib" ; then
3358 curses_found=yes
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003359 break
3360 fi
3361 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003362 if test "$curses_found" = yes ; then
3363 break
3364 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003365 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003366 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003367 if test "$curses_found" = "yes" ; then
3368 curses=yes
3369 else
3370 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003371 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003372 fi
3373 curses=no
3374 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003375fi
balrog4d3b6f62008-02-10 16:33:14 +00003376
blueswir1414f0da2008-08-15 18:20:52 +00003377##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003378# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003379if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003380 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003381 curlconfig="$pkg_config libcurl"
3382 else
3383 curlconfig=curl-config
3384 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003385 cat > $TMPC << EOF
3386#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003387int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003388EOF
Stefan Weil89138852016-05-16 15:10:20 +02003389 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3390 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003391 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003392 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003393 else
3394 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003395 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003396 fi
3397 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003398 fi
3399fi # test "$curl"
3400
3401##########################################
balrogfb599c92008-09-28 23:49:55 +00003402# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003403if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003404 cat > $TMPC << EOF
3405#include <bluetooth/bluetooth.h>
3406int main(void) { return bt_error(0); }
3407EOF
Stefan Weil89138852016-05-16 15:10:20 +02003408 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3409 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003410 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003411 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003412 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003413 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003414 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003415 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003416 fi
balroge820e3f2008-09-30 02:27:44 +00003417 bluez="no"
3418 fi
balrogfb599c92008-09-28 23:49:55 +00003419fi
3420
3421##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003422# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003423
Peter Maydellad04d8c2017-04-03 14:04:15 +01003424if test "$mingw32" = yes; then
3425 glib_req_ver=2.30
3426else
3427 glib_req_ver=2.22
3428fi
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003429glib_modules=gthread-2.0
3430if test "$modules" = yes; then
Gerd Hoffmanna88afc62018-03-08 09:53:00 +01003431 glib_modules="$glib_modules gmodule-export-2.0"
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003432fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003433
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003434# This workaround is required due to a bug in pkg-config file for glib as it
3435# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3436
3437if test "$static" = yes -a "$mingw32" = yes; then
3438 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3439fi
3440
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003441for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003442 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003443 glib_cflags=$($pkg_config --cflags $i)
3444 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003445 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003446 LIBS="$glib_libs $LIBS"
3447 libs_qga="$glib_libs $libs_qga"
3448 else
3449 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3450 fi
3451done
3452
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003453# Sanity check that the current size_t matches the
3454# size that glib thinks it should be. This catches
3455# problems on multi-arch where people try to build
3456# 32-bit QEMU while pointing at 64-bit glib headers
3457cat > $TMPC <<EOF
3458#include <glib.h>
3459#include <unistd.h>
3460
3461#define QEMU_BUILD_BUG_ON(x) \
3462 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3463
3464int main(void) {
3465 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3466 return 0;
3467}
3468EOF
3469
Stefan Weil5919e032016-04-28 23:33:41 +02003470if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003471 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3472 "You probably need to set PKG_CONFIG_LIBDIR"\
3473 "to point to the right pkg-config files for your"\
3474 "build target"
3475fi
3476
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003477# g_test_trap_subprocess added in 2.38. Used by some tests.
3478glib_subprocess=yes
Marc-André Lureaua0492232017-01-04 21:57:22 +01003479if ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003480 glib_subprocess=no
3481fi
3482
John Snowbbbf2e02015-03-25 18:57:38 -04003483# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3484cat > $TMPC << EOF
3485#include <glib.h>
3486int main(void) { return 0; }
3487EOF
3488if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3489 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3490 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3491 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3492 fi
3493fi
3494
Fam Zhenge26110c2014-02-10 14:48:57 +08003495##########################################
3496# SHA command probe for modules
3497if test "$modules" = yes; then
3498 shacmd_probe="sha1sum sha1 shasum"
3499 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003500 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003501 shacmd="$c"
3502 break
3503 fi
3504 done
3505 if test "$shacmd" = ""; then
3506 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3507 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003508fi
3509
3510##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003511# pixman support probe
3512
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003513if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003514 pixman_cflags=
3515 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003516elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003517 pixman_cflags=$($pkg_config --cflags pixman-1)
3518 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003519else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003520 error_exit "pixman >= 0.21.8 not present." \
3521 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003522fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003523
3524##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003525# libmpathpersist probe
3526
3527if test "$mpath" != "no" ; then
3528 cat > $TMPC <<EOF
3529#include <libudev.h>
3530#include <mpath_persist.h>
3531unsigned mpath_mx_alloc_len = 1024;
3532int logsink;
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003533static struct config *multipath_conf;
3534extern struct udev *udev;
3535extern struct config *get_multipath_config(void);
3536extern void put_multipath_config(struct config *conf);
3537struct udev *udev;
3538struct config *get_multipath_config(void) { return multipath_conf; }
3539void put_multipath_config(struct config *conf) { }
3540
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003541int main(void) {
Paolo Bonzinib3f1c8c2017-10-17 20:11:58 +02003542 udev = udev_new();
3543 multipath_conf = mpath_lib_init();
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003544 return 0;
3545}
3546EOF
3547 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3548 mpathpersist=yes
3549 else
3550 mpathpersist=no
3551 fi
3552else
3553 mpathpersist=no
3554fi
3555
3556##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303557# libcap probe
3558
3559if test "$cap" != "no" ; then
3560 cat > $TMPC <<EOF
3561#include <stdio.h>
3562#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003563int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303564EOF
3565 if compile_prog "" "-lcap" ; then
3566 cap=yes
3567 else
3568 cap=no
3569 fi
3570fi
3571
3572##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003573# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003574PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003575
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003576pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003577cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003578#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003579static void *f(void *p) { return NULL; }
3580int main(void) {
3581 pthread_t thread;
3582 pthread_create(&thread, 0, f, 0);
3583 return 0;
3584}
blueswir1414f0da2008-08-15 18:20:52 +00003585EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003586if compile_prog "" "" ; then
3587 pthread=yes
3588else
3589 for pthread_lib in $PTHREADLIBS_LIST; do
3590 if compile_prog "" "$pthread_lib" ; then
3591 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003592 found=no
3593 for lib_entry in $LIBS; do
3594 if test "$lib_entry" = "$pthread_lib"; then
3595 found=yes
3596 break
3597 fi
3598 done
3599 if test "$found" = "no"; then
3600 LIBS="$pthread_lib $LIBS"
Marc-André Lureau14ab3aa2018-01-04 17:05:06 +01003601 libs_qga="$pthread_lib $libs_qga"
Peter Portantee3c56762012-04-20 10:36:12 -04003602 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003603 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003604 break
3605 fi
3606 done
3607fi
blueswir1414f0da2008-08-15 18:20:52 +00003608
Anthony Liguori4617e592009-08-25 17:21:56 -05003609if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003610 error_exit "pthread check failed" \
3611 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003612fi
3613
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003614# check for pthread_setname_np
3615pthread_setname_np=no
3616cat > $TMPC << EOF
3617#include <pthread.h>
3618
3619static void *f(void *p) { return NULL; }
3620int main(void)
3621{
3622 pthread_t thread;
3623 pthread_create(&thread, 0, f, 0);
3624 pthread_setname_np(thread, "QEMU");
3625 return 0;
3626}
3627EOF
3628if compile_prog "" "$pthread_lib" ; then
3629 pthread_setname_np=yes
3630fi
3631
aliguoribf9298b2008-12-05 20:05:26 +00003632##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003633# rbd probe
3634if test "$rbd" != "no" ; then
3635 cat > $TMPC <<EOF
3636#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003637#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003638int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003639 rados_t cluster;
3640 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003641 return 0;
3642}
3643EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003644 rbd_libs="-lrbd -lrados"
3645 if compile_prog "" "$rbd_libs" ; then
3646 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003647 else
3648 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003649 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003650 fi
3651 rbd=no
3652 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003653fi
3654
3655##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003656# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003657min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003658if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003659 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003660 libssh2_cflags=$($pkg_config libssh2 --cflags)
3661 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003662 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003663 else
3664 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003665 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003666 fi
3667 libssh2=no
3668 fi
3669fi
3670
3671##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003672# libssh2_sftp_fsync probe
3673
3674if test "$libssh2" = "yes"; then
3675 cat > $TMPC <<EOF
3676#include <stdio.h>
3677#include <libssh2.h>
3678#include <libssh2_sftp.h>
3679int main(void) {
3680 LIBSSH2_SESSION *session;
3681 LIBSSH2_SFTP *sftp;
3682 LIBSSH2_SFTP_HANDLE *sftp_handle;
3683 session = libssh2_session_init ();
3684 sftp = libssh2_sftp_init (session);
3685 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3686 libssh2_sftp_fsync (sftp_handle);
3687 return 0;
3688}
3689EOF
3690 # libssh2_cflags/libssh2_libs defined in previous test.
3691 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3692 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3693 fi
3694fi
3695
3696##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003697# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003698
3699if test "$linux_aio" != "no" ; then
3700 cat > $TMPC <<EOF
3701#include <libaio.h>
3702#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003703#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003704int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3705EOF
3706 if compile_prog "" "-laio" ; then
3707 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003708 else
3709 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003710 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003711 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003712 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003713 fi
3714fi
3715
3716##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003717# TPM passthrough is only on x86 Linux
3718
3719if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3720 tpm_passthrough=$tpm
3721else
3722 tpm_passthrough=no
3723fi
3724
Amarnath Vallurif4ede812017-09-29 14:10:20 +03003725# TPM emulator is for all posix systems
3726if test "$mingw32" != "yes"; then
3727 tpm_emulator=$tpm
3728else
3729 tpm_emulator=no
3730fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003731##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003732# attr probe
3733
3734if test "$attr" != "no" ; then
3735 cat > $TMPC <<EOF
3736#include <stdio.h>
3737#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003738#ifdef CONFIG_LIBATTR
3739#include <attr/xattr.h>
3740#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003741#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003742#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003743int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3744EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003745 if compile_prog "" "" ; then
3746 attr=yes
3747 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003748 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003749 attr=yes
3750 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003751 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003752 else
3753 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003754 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003755 fi
3756 attr=no
3757 fi
3758fi
3759
3760##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003761# iovec probe
3762cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003763#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003764#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003765#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003766int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003767EOF
3768iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003769if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003770 iovec=yes
3771fi
3772
aurel32f652e6a2008-12-16 10:43:48 +00003773##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003774# preadv probe
3775cat > $TMPC <<EOF
3776#include <sys/types.h>
3777#include <sys/uio.h>
3778#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003779int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003780EOF
3781preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003782if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003783 preadv=yes
3784fi
3785
3786##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003787# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003788# fdt support is mandatory for at least some target architectures,
3789# so insist on it if we're building those system emulators.
3790fdt_required=no
3791for target in $target_list; do
3792 case $target in
KONRAD Frederica6664092018-05-03 17:17:16 +02003793 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003794 fdt_required=yes
3795 ;;
3796 esac
3797done
3798
3799if test "$fdt_required" = "yes"; then
3800 if test "$fdt" = "no"; then
3801 error_exit "fdt disabled but some requested targets require it." \
3802 "You can turn off fdt only if you also disable all the system emulation" \
3803 "targets which need it (by specifying a cut down --target-list)."
3804 fi
3805 fdt=yes
3806fi
3807
Juan Quintela2df87df2009-08-12 18:29:54 +02003808if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003809 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003810 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003811 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003812 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003813#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003814#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003815int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003816EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003817 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003818 # system DTC is good - use it
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003819 fdt=system
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003820 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003821 # have GIT checkout, so activate dtc submodule
3822 if test -e "${source_path}/.git" ; then
3823 git_submodules="${git_submodules} dtc"
3824 fi
3825 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03003826 fdt=git
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003827 mkdir -p dtc
3828 if [ "$pwd_is_source_path" != "y" ] ; then
3829 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3830 symlink "$source_path/dtc/scripts" "dtc/scripts"
3831 fi
3832 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03003833 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3834 fdt_libs="$fdt_libs"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003835 elif test "$fdt" = "yes" ; then
3836 # Not a git build & no libfdt found, prompt for system install
3837 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3838 "Please install the DTC (libfdt) devel package"
3839 else
3840 # don't have and don't want
3841 fdt_libs=
3842 fdt=no
3843 fi
aurel32f652e6a2008-12-16 10:43:48 +00003844 fi
3845fi
3846
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003847libs_softmmu="$libs_softmmu $fdt_libs"
3848
Michael Walle20ff0752011-03-07 23:32:39 +01003849##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003850# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003851
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003852if test "$opengl" != "no" ; then
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003853 opengl_pkgs="epoxy libdrm gbm"
Gerd Hoffmann5f9b1e32018-03-01 11:05:43 +01003854 if $pkg_config $opengl_pkgs; then
3855 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3856 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003857 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003858 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3859 gtk_gl="yes"
3860 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003861 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003862 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003863 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003864 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003865 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003866 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003867 opengl_libs=""
3868 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003869 fi
3870fi
3871
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003872if test "$opengl" = "yes"; then
3873 cat > $TMPC << EOF
3874#include <epoxy/egl.h>
3875#ifndef EGL_MESA_image_dma_buf_export
3876# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3877#endif
3878int main(void) { return 0; }
3879EOF
3880 if compile_prog "" "" ; then
3881 opengl_dmabuf=yes
3882 fi
3883fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003884
Klim Kireeved279a02018-01-12 12:01:19 +03003885##########################################
3886# libxml2 probe
3887if test "$libxml2" != "no" ; then
3888 if $pkg_config --exists libxml-2.0; then
3889 libxml2="yes"
3890 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3891 libxml2_libs=$($pkg_config --libs libxml-2.0)
3892 else
3893 if test "$libxml2" = "yes"; then
3894 feature_not_found "libxml2" "Install libxml2 devel"
3895 fi
3896 libxml2="no"
3897 fi
3898fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003899
Bharata B Raoeb100392012-09-24 14:42:45 +05303900##########################################
3901# glusterfs probe
3902if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003903 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303904 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003905 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3906 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003907 if $pkg_config --atleast-version=4 glusterfs-api; then
3908 glusterfs_xlator_opt="yes"
3909 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003910 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303911 glusterfs_discard="yes"
3912 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303913 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05303914 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05303915 glusterfs_zerofill="yes"
3916 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303917 else
3918 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003919 feature_not_found "GlusterFS backend support" \
3920 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303921 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303922 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303923 fi
3924fi
3925
aurel3239386ac2009-04-15 19:48:17 +00003926# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003927# emulator. This is done because older glibc versions don't
3928# have syscall stubs for these implemented. In that case we
3929# don't provide them even if kernel supports them.
3930#
3931inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003932cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003933#include <sys/inotify.h>
3934
3935int
3936main(void)
3937{
3938 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003939 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003940}
3941EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003942if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003943 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003944fi
3945
Riku Voipioc05c7a72010-03-26 15:25:11 +00003946inotify1=no
3947cat > $TMPC << EOF
3948#include <sys/inotify.h>
3949
3950int
3951main(void)
3952{
3953 /* try to start inotify */
3954 return inotify_init1(0);
3955}
3956EOF
3957if compile_prog "" "" ; then
3958 inotify1=yes
3959fi
3960
Riku Voipio099d6b02009-05-05 12:10:04 +03003961# check if pipe2 is there
3962pipe2=no
3963cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003964#include <unistd.h>
3965#include <fcntl.h>
3966
3967int main(void)
3968{
3969 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003970 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003971}
3972EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003973if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003974 pipe2=yes
3975fi
3976
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003977# check if accept4 is there
3978accept4=no
3979cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003980#include <sys/socket.h>
3981#include <stddef.h>
3982
3983int main(void)
3984{
3985 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3986 return 0;
3987}
3988EOF
3989if compile_prog "" "" ; then
3990 accept4=yes
3991fi
3992
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303993# check if tee/splice is there. vmsplice was added same time.
3994splice=no
3995cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303996#include <unistd.h>
3997#include <fcntl.h>
3998#include <limits.h>
3999
4000int main(void)
4001{
Stefan Weil66ea0f22011-12-17 09:27:35 +01004002 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304003 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4004 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4005 return 0;
4006}
4007EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004008if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05304009 splice=yes
4010fi
4011
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004012##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004013# libnuma probe
4014
4015if test "$numa" != "no" ; then
4016 cat > $TMPC << EOF
4017#include <numa.h>
4018int main(void) { return numa_available(); }
4019EOF
4020
4021 if compile_prog "" "-lnuma" ; then
4022 numa=yes
4023 libs_softmmu="-lnuma $libs_softmmu"
4024 else
4025 if test "$numa" = "yes" ; then
4026 feature_not_found "numa" "install numactl devel"
4027 fi
4028 numa=no
4029 fi
4030fi
4031
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004032if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4033 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4034 exit 1
4035fi
4036
Yang Zhong5a22ab72017-12-20 21:16:46 +08004037# Even if malloc_trim() is available, these non-libc memory allocators
4038# do not support it.
4039if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4040 if test "$malloc_trim" = "yes" ; then
4041 echo "Disabling malloc_trim with non-libc memory allocator"
4042 fi
4043 malloc_trim="no"
4044fi
4045
4046#######################################
4047# malloc_trim
4048
4049if test "$malloc_trim" != "no" ; then
4050 cat > $TMPC << EOF
4051#include <malloc.h>
4052int main(void) { malloc_trim(0); return 0; }
4053EOF
4054 if compile_prog "" "" ; then
4055 malloc_trim="yes"
4056 else
4057 malloc_trim="no"
4058 fi
4059fi
4060
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08004061##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08004062# tcmalloc probe
4063
4064if test "$tcmalloc" = "yes" ; then
4065 cat > $TMPC << EOF
4066#include <stdlib.h>
4067int main(void) { malloc(1); return 0; }
4068EOF
4069
4070 if compile_prog "" "-ltcmalloc" ; then
4071 LIBS="-ltcmalloc $LIBS"
4072 else
4073 feature_not_found "tcmalloc" "install gperftools devel"
4074 fi
4075fi
4076
4077##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02004078# jemalloc probe
4079
4080if test "$jemalloc" = "yes" ; then
4081 cat > $TMPC << EOF
4082#include <stdlib.h>
4083int main(void) { malloc(1); return 0; }
4084EOF
4085
4086 if compile_prog "" "-ljemalloc" ; then
4087 LIBS="-ljemalloc $LIBS"
4088 else
4089 feature_not_found "jemalloc" "install jemalloc devel"
4090 fi
4091fi
4092
4093##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004094# signalfd probe
4095signalfd="no"
4096cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03004097#include <unistd.h>
4098#include <sys/syscall.h>
4099#include <signal.h>
4100int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4101EOF
4102
4103if compile_prog "" "" ; then
4104 signalfd=yes
4105fi
4106
Riku Voipioc2882b92009-08-12 15:08:24 +03004107# check if eventfd is supported
4108eventfd=no
4109cat > $TMPC << EOF
4110#include <sys/eventfd.h>
4111
4112int main(void)
4113{
Stefan Weil55cc7f32011-12-17 09:27:37 +01004114 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03004115}
4116EOF
4117if compile_prog "" "" ; then
4118 eventfd=yes
4119fi
4120
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004121# check if memfd is supported
4122memfd=no
4123cat > $TMPC << EOF
Paolo Bonzini75e5b702017-11-28 11:51:27 +01004124#include <sys/mman.h>
Marc-André Lureau751bcc32015-10-09 17:17:16 +02004125
4126int main(void)
4127{
4128 return memfd_create("foo", MFD_ALLOW_SEALING);
4129}
4130EOF
4131if compile_prog "" "" ; then
4132 memfd=yes
4133fi
4134
4135
4136
Ulrich Hechtd0927932009-09-17 20:22:14 +03004137# check for fallocate
4138fallocate=no
4139cat > $TMPC << EOF
4140#include <fcntl.h>
4141
4142int main(void)
4143{
4144 fallocate(0, 0, 0, 0);
4145 return 0;
4146}
4147EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004148if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004149 fallocate=yes
4150fi
4151
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01004152# check for fallocate hole punching
4153fallocate_punch_hole=no
4154cat > $TMPC << EOF
4155#include <fcntl.h>
4156#include <linux/falloc.h>
4157
4158int main(void)
4159{
4160 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4161 return 0;
4162}
4163EOF
4164if compile_prog "" "" ; then
4165 fallocate_punch_hole=yes
4166fi
4167
Denis V. Lunevb953f072015-01-30 11:42:14 +03004168# check that fallocate supports range zeroing inside the file
4169fallocate_zero_range=no
4170cat > $TMPC << EOF
4171#include <fcntl.h>
4172#include <linux/falloc.h>
4173
4174int main(void)
4175{
4176 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4177 return 0;
4178}
4179EOF
4180if compile_prog "" "" ; then
4181 fallocate_zero_range=yes
4182fi
4183
Kevin Wolfed911432014-09-29 17:12:59 +02004184# check for posix_fallocate
4185posix_fallocate=no
4186cat > $TMPC << EOF
4187#include <fcntl.h>
4188
4189int main(void)
4190{
4191 posix_fallocate(0, 0, 0);
4192 return 0;
4193}
4194EOF
4195if compile_prog "" "" ; then
4196 posix_fallocate=yes
4197fi
4198
Peter Maydellc727f472011-01-06 11:05:10 +00004199# check for sync_file_range
4200sync_file_range=no
4201cat > $TMPC << EOF
4202#include <fcntl.h>
4203
4204int main(void)
4205{
4206 sync_file_range(0, 0, 0, 0);
4207 return 0;
4208}
4209EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004210if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00004211 sync_file_range=yes
4212fi
4213
Peter Maydelldace20d2011-01-10 13:11:24 +00004214# check for linux/fiemap.h and FS_IOC_FIEMAP
4215fiemap=no
4216cat > $TMPC << EOF
4217#include <sys/ioctl.h>
4218#include <linux/fs.h>
4219#include <linux/fiemap.h>
4220
4221int main(void)
4222{
4223 ioctl(0, FS_IOC_FIEMAP, 0);
4224 return 0;
4225}
4226EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004227if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00004228 fiemap=yes
4229fi
4230
Ulrich Hechtd0927932009-09-17 20:22:14 +03004231# check for dup3
4232dup3=no
4233cat > $TMPC << EOF
4234#include <unistd.h>
4235
4236int main(void)
4237{
4238 dup3(0, 0, 0);
4239 return 0;
4240}
4241EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01004242if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03004243 dup3=yes
4244fi
4245
Alex Bligh4e0c6522013-08-21 16:02:43 +01004246# check for ppoll support
4247ppoll=no
4248cat > $TMPC << EOF
4249#include <poll.h>
4250
4251int main(void)
4252{
4253 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4254 ppoll(&pfd, 1, 0, 0);
4255 return 0;
4256}
4257EOF
4258if compile_prog "" "" ; then
4259 ppoll=yes
4260fi
4261
Alex Blighcd758dd2013-08-21 16:02:44 +01004262# check for prctl(PR_SET_TIMERSLACK , ... ) support
4263prctl_pr_set_timerslack=no
4264cat > $TMPC << EOF
4265#include <sys/prctl.h>
4266
4267int main(void)
4268{
4269 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4270 return 0;
4271}
4272EOF
4273if compile_prog "" "" ; then
4274 prctl_pr_set_timerslack=yes
4275fi
4276
Peter Maydell3b6edd12011-02-15 18:35:05 +00004277# check for epoll support
4278epoll=no
4279cat > $TMPC << EOF
4280#include <sys/epoll.h>
4281
4282int main(void)
4283{
4284 epoll_create(0);
4285 return 0;
4286}
4287EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004288if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004289 epoll=yes
4290fi
4291
Peter Maydell227f0212016-06-06 19:58:11 +01004292# epoll_create1 is a later addition
4293# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004294epoll_create1=no
4295cat > $TMPC << EOF
4296#include <sys/epoll.h>
4297
4298int main(void)
4299{
Peter Maydell19e83f62011-04-26 16:56:40 +01004300 /* Note that we use epoll_create1 as a value, not as
4301 * a function being called. This is necessary so that on
4302 * old SPARC glibc versions where the function was present in
4303 * the library but not declared in the header file we will
4304 * fail the configure check. (Otherwise we will get a compiler
4305 * warning but not an error, and will proceed to fail the
4306 * qemu compile where we compile with -Werror.)
4307 */
Blue Swirlc075a722012-08-09 20:21:25 +00004308 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004309}
4310EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004311if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004312 epoll_create1=yes
4313fi
4314
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004315# check for sendfile support
4316sendfile=no
4317cat > $TMPC << EOF
4318#include <sys/sendfile.h>
4319
4320int main(void)
4321{
4322 return sendfile(0, 0, 0, 0);
4323}
4324EOF
4325if compile_prog "" "" ; then
4326 sendfile=yes
4327fi
4328
Riku Voipio51834342014-06-22 11:25:42 +01004329# check for timerfd support (glibc 2.8 and newer)
4330timerfd=no
4331cat > $TMPC << EOF
4332#include <sys/timerfd.h>
4333
4334int main(void)
4335{
4336 return(timerfd_create(CLOCK_REALTIME, 0));
4337}
4338EOF
4339if compile_prog "" "" ; then
4340 timerfd=yes
4341fi
4342
Riku Voipio9af5c902014-08-12 15:58:57 +03004343# check for setns and unshare support
4344setns=no
4345cat > $TMPC << EOF
4346#include <sched.h>
4347
4348int main(void)
4349{
4350 int ret;
4351 ret = setns(0, 0);
4352 ret = unshare(0);
4353 return ret;
4354}
4355EOF
4356if compile_prog "" "" ; then
4357 setns=yes
4358fi
4359
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004360# clock_adjtime probe
4361clock_adjtime=no
4362cat > $TMPC <<EOF
4363#include <time.h>
4364
4365int main(void)
4366{
4367 return clock_adjtime(0, 0);
4368}
4369EOF
4370clock_adjtime=no
4371if compile_prog "" "" ; then
4372 clock_adjtime=yes
4373fi
4374
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004375# syncfs probe
4376syncfs=no
4377cat > $TMPC <<EOF
4378#include <unistd.h>
4379
4380int main(void)
4381{
4382 return syncfs(0);
4383}
4384EOF
4385syncfs=no
4386if compile_prog "" "" ; then
4387 syncfs=yes
4388fi
4389
pbrookcc8ae6d2006-04-23 17:57:59 +00004390# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004391if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004392 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004393 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004394 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004395 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004396 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004397 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004398 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004399 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004400fi
4401
Stefan Weilf514f412009-10-11 12:44:07 +02004402# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004403byteswap_h=no
4404cat > $TMPC << EOF
4405#include <byteswap.h>
4406int main(void) { return bswap_32(0); }
4407EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004408if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004409 byteswap_h=yes
4410fi
4411
Stefan Weil75f13592013-01-05 12:17:38 +01004412# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004413bswap_h=no
4414cat > $TMPC << EOF
4415#include <sys/endian.h>
4416#include <sys/types.h>
4417#include <machine/bswap.h>
4418int main(void) { return bswap32(0); }
4419EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004420if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004421 bswap_h=yes
4422fi
4423
aliguorida93a1f2008-12-12 20:02:52 +00004424##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004425# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004426if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004427 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004428 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004429 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4430 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004431 else
4432 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004433 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004434 fi
4435 libiscsi="no"
4436 fi
4437fi
4438
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004439##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004440# Do we need libm
4441cat > $TMPC << EOF
4442#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004443int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004444EOF
4445if compile_prog "" "" ; then
4446 :
4447elif compile_prog "" "-lm" ; then
4448 LIBS="-lm $LIBS"
4449 libs_qga="-lm $libs_qga"
4450else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004451 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004452fi
4453
4454##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004455# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004456# uClibc provides 2 versions of clock_gettime(), one with realtime
4457# support and one without. This means that the clock_gettime() don't
4458# need -lrt. We still need it for timer_create() so we check for this
4459# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004460cat > $TMPC <<EOF
4461#include <signal.h>
4462#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004463int main(void) {
4464 timer_create(CLOCK_REALTIME, NULL, NULL);
4465 return clock_gettime(CLOCK_REALTIME, NULL);
4466}
aliguorida93a1f2008-12-12 20:02:52 +00004467EOF
4468
Juan Quintela52166aa2009-08-03 14:46:03 +02004469if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004470 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004471# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004472elif compile_prog "" "$pthread_lib -lrt" ; then
4473 LIBS="$LIBS -lrt"
4474 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004475fi
4476
Blue Swirl31ff5042009-09-12 12:33:07 +00004477if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004478 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004479 libs_softmmu="-lutil $libs_softmmu"
4480fi
4481
Blue Swirlde5071c2009-09-12 09:58:46 +00004482##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004483# spice probe
4484if test "$spice" != "no" ; then
4485 cat > $TMPC << EOF
4486#include <spice.h>
4487int main(void) { spice_server_new(); return 0; }
4488EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004489 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4490 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004491 if $pkg_config --atleast-version=0.12.0 spice-server && \
4492 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004493 compile_prog "$spice_cflags" "$spice_libs" ; then
4494 spice="yes"
4495 libs_softmmu="$libs_softmmu $spice_libs"
4496 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004497 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4498 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004499 else
4500 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004501 feature_not_found "spice" \
4502 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004503 fi
4504 spice="no"
4505 fi
4506fi
4507
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004508# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004509if test "$smartcard" != "no"; then
Michal Privoznik0f5c6422018-04-03 12:34:37 +02004510 if $pkg_config --atleast-version=2.5.1 libcacard; then
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004511 libcacard_cflags=$($pkg_config --cflags libcacard)
4512 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004513 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004514 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004515 if test "$smartcard" = "yes"; then
4516 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004517 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004518 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004519 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004520fi
4521
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004522# check for libusb
4523if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004524 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004525 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004526 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4527 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004528 else
4529 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004530 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004531 fi
4532 libusb="no"
4533 fi
4534fi
4535
Hans de Goede69354a82011-07-19 11:04:10 +02004536# check for usbredirparser for usb network redirection support
4537if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004538 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004539 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004540 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4541 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004542 else
4543 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004544 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004545 fi
4546 usb_redir="no"
4547 fi
4548fi
4549
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004550##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004551# check if we have VSS SDK headers for win
4552
4553if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4554 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004555 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004556 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4557 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004558 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004559 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4560 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004561 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004562 esac
4563 cat > $TMPC << EOF
4564#define __MIDL_user_allocate_free_DEFINED__
4565#include <inc/win2003/vss.h>
4566int main(void) { return VSS_CTX_BACKUP; }
4567EOF
4568 if compile_prog "$vss_win32_include" "" ; then
4569 guest_agent_with_vss="yes"
4570 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004571 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004572 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004573 else
4574 if test "$vss_win32_sdk" != "" ; then
4575 echo "ERROR: Please download and install Microsoft VSS SDK:"
4576 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4577 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4578 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4579 echo "ERROR: The headers are extracted in the directory \`inc'."
4580 feature_not_found "VSS support"
4581 fi
4582 guest_agent_with_vss="no"
4583 fi
4584fi
4585
4586##########################################
4587# lookup Windows platform SDK (if not specified)
4588# The SDK is needed only to build .tlb (type library) file of guest agent
4589# VSS provider from the source. It is usually unnecessary because the
4590# pre-compiled .tlb file is included.
4591
4592if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4593 if test -z "$win_sdk"; then
4594 programfiles="$PROGRAMFILES"
4595 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4596 if test -n "$programfiles"; then
4597 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4598 else
4599 feature_not_found "Windows SDK"
4600 fi
4601 elif test "$win_sdk" = "no"; then
4602 win_sdk=""
4603 fi
4604fi
4605
4606##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004607# check if mingw environment provides a recent ntddscsi.h
4608if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4609 cat > $TMPC << EOF
4610#include <windows.h>
4611#include <ntddscsi.h>
4612int main(void) {
4613#if !defined(IOCTL_SCSI_GET_ADDRESS)
4614#error Missing required ioctl definitions
4615#endif
4616 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4617 return addr.Lun;
4618}
4619EOF
4620 if compile_prog "" "" ; then
4621 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004622 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004623 fi
4624fi
4625
4626##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004627# virgl renderer probe
4628
4629if test "$virglrenderer" != "no" ; then
4630 cat > $TMPC << EOF
4631#include <virglrenderer.h>
4632int main(void) { virgl_renderer_poll(); return 0; }
4633EOF
4634 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4635 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
Marc-André Lureau47479c52018-05-25 17:36:09 +02004636 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004637 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4638 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4639 virglrenderer="yes"
4640 else
4641 if test "$virglrenderer" = "yes" ; then
4642 feature_not_found "virglrenderer"
4643 fi
4644 virglrenderer="no"
4645 fi
4646fi
4647
4648##########################################
Richard Henderson8ca80762017-09-14 09:41:12 -07004649# capstone
4650
Richard Hendersone219c492017-09-28 09:01:23 -07004651case "$capstone" in
4652 "" | yes)
4653 if $pkg_config capstone; then
4654 capstone=system
Alexey Kardashevskiy123ac0b2018-01-15 13:35:01 +11004655 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
Richard Hendersone219c492017-09-28 09:01:23 -07004656 capstone=git
4657 elif test -e "${source_path}/capstone/Makefile" ; then
4658 capstone=internal
4659 elif test -z "$capstone" ; then
4660 capstone=no
4661 else
4662 feature_not_found "capstone" "Install capstone devel or git submodule"
4663 fi
4664 ;;
4665
4666 system)
4667 if ! $pkg_config capstone; then
4668 feature_not_found "capstone" "Install capstone devel"
4669 fi
4670 ;;
4671esac
4672
4673case "$capstone" in
4674 git | internal)
4675 if test "$capstone" = git; then
4676 git_submodules="${git_submodules} capstone"
4677 fi
4678 mkdir -p capstone
4679 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4680 if test "$mingw32" = "yes"; then
4681 LIBCAPSTONE=capstone.lib
4682 else
4683 LIBCAPSTONE=libcapstone.a
4684 fi
4685 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4686 ;;
4687
4688 system)
Richard Henderson8ca80762017-09-14 09:41:12 -07004689 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4690 LIBS="$($pkg_config --libs capstone) $LIBS"
Richard Hendersone219c492017-09-28 09:01:23 -07004691 ;;
4692
4693 no)
4694 ;;
4695 *)
4696 error_exit "Unknown state for capstone: $capstone"
4697 ;;
4698esac
Richard Henderson8ca80762017-09-14 09:41:12 -07004699
4700##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004701# check if we have fdatasync
4702
4703fdatasync=no
4704cat > $TMPC << EOF
4705#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004706int main(void) {
4707#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4708return fdatasync(0);
4709#else
Stefan Weile172fe12012-04-06 21:33:20 +02004710#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004711#endif
4712}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004713EOF
4714if compile_prog "" "" ; then
4715 fdatasync=yes
4716fi
4717
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004718##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004719# check if we have madvise
4720
4721madvise=no
4722cat > $TMPC << EOF
4723#include <sys/types.h>
4724#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004725#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004726int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4727EOF
4728if compile_prog "" "" ; then
4729 madvise=yes
4730fi
4731
4732##########################################
4733# check if we have posix_madvise
4734
4735posix_madvise=no
4736cat > $TMPC << EOF
4737#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004738#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004739int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4740EOF
4741if compile_prog "" "" ; then
4742 posix_madvise=yes
4743fi
4744
4745##########################################
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02004746# check if we have posix_memalign()
4747
4748posix_memalign=no
4749cat > $TMPC << EOF
4750#include <stdlib.h>
4751int main(void) {
4752 void *p;
4753 return posix_memalign(&p, 8, 8);
4754}
4755EOF
4756if compile_prog "" "" ; then
4757 posix_memalign=yes
4758fi
4759
4760##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004761# check if we have posix_syslog
4762
4763posix_syslog=no
4764cat > $TMPC << EOF
4765#include <syslog.h>
4766int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4767EOF
4768if compile_prog "" "" ; then
4769 posix_syslog=yes
4770fi
4771
4772##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004773# check if we have sem_timedwait
4774
4775sem_timedwait=no
4776cat > $TMPC << EOF
4777#include <semaphore.h>
4778int main(void) { return sem_timedwait(0, 0); }
4779EOF
4780if compile_prog "" "" ; then
4781 sem_timedwait=yes
4782fi
4783
4784##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004785# check if trace backend exists
4786
Lluís Vilanova5b808272014-05-27 15:02:14 +02004787$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004788if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004789 error_exit "invalid trace backends" \
4790 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004791fi
4792
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004793##########################################
4794# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004795if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004796 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004797#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004798int main(void) { return 0; }
4799EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004800 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004801 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004802 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004803 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004804 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004805 fi
4806 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004807 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004808 else
4809 urcu_bp_libs="-lurcu-bp"
4810 fi
4811
4812 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4813 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004814 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004815 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004816 fi
4817fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004818
4819##########################################
4820# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004821if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004822 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004823 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004824 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004825 trace_backend_stap="no"
4826 if has 'stap' ; then
4827 trace_backend_stap="yes"
4828 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004829fi
4830
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004831##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004832# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304833
Peter Maydell7c2acc72013-04-08 12:11:27 +01004834# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004835# is sigcontext. On Windows the only valid backend is the Windows
4836# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004837
4838ucontext_works=no
4839if test "$darwin" != "yes"; then
4840 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304841#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004842#ifdef __stub_makecontext
4843#error Ignoring glibc stub makecontext which will always fail
4844#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004845int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304846EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004847 if compile_prog "" "" ; then
4848 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304849 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004850fi
4851
4852if test "$coroutine" = ""; then
4853 if test "$mingw32" = "yes"; then
4854 coroutine=win32
4855 elif test "$ucontext_works" = "yes"; then
4856 coroutine=ucontext
4857 else
4858 coroutine=sigaltstack
4859 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004860else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004861 case $coroutine in
4862 windows)
4863 if test "$mingw32" != "yes"; then
4864 error_exit "'windows' coroutine backend only valid for Windows"
4865 fi
4866 # Unfortunately the user visible backend name doesn't match the
4867 # coroutine-*.c filename for this case, so we have to adjust it here.
4868 coroutine=win32
4869 ;;
4870 ucontext)
4871 if test "$ucontext_works" != "yes"; then
4872 feature_not_found "ucontext"
4873 fi
4874 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004875 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004876 if test "$mingw32" = "yes"; then
4877 error_exit "only the 'windows' coroutine backend is valid for Windows"
4878 fi
4879 ;;
4880 *)
4881 error_exit "unknown coroutine backend $coroutine"
4882 ;;
4883 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304884fi
4885
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004886if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004887 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004888fi
4889
Peter Lieven7d992e42016-09-27 11:58:45 +02004890if test "$debug_stack_usage" = "yes"; then
Peter Lieven7d992e42016-09-27 11:58:45 +02004891 if test "$coroutine_pool" = "yes"; then
4892 echo "WARN: disabling coroutine pool for stack usage debugging"
4893 coroutine_pool=no
4894 fi
4895fi
4896
4897
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304898##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304899# check if we have open_by_handle_at
4900
Stefan Weil4e1797f2012-06-18 22:11:06 +02004901open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304902cat > $TMPC << EOF
4903#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004904#if !defined(AT_EMPTY_PATH)
4905# error missing definition
4906#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004907int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004908#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304909EOF
4910if compile_prog "" "" ; then
4911 open_by_handle_at=yes
4912fi
4913
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304914########################################
4915# check if we have linux/magic.h
4916
4917linux_magic_h=no
4918cat > $TMPC << EOF
4919#include <linux/magic.h>
4920int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004921 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304922}
4923EOF
4924if compile_prog "" "" ; then
4925 linux_magic_h=yes
4926fi
4927
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004928########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004929# check whether we can disable warning option with a pragma (this is needed
4930# to silence warnings in the headers of some versions of external libraries).
4931# This test has to be compiled with -Werror as otherwise an unknown pragma is
4932# only a warning.
4933#
4934# If we can't selectively disable warning in the code, disable -Werror so that
4935# the build doesn't fail anyway.
4936
Peter Maydell06d71fa2012-07-30 16:13:07 +01004937pragma_disable_unused_but_set=no
4938cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004939#pragma GCC diagnostic push
Kevin Wolfc95e3082013-02-22 21:08:51 +01004940#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004941#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004942
Peter Maydell06d71fa2012-07-30 16:13:07 +01004943int main(void) {
4944 return 0;
4945}
4946EOF
4947if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004948 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004949else
4950 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004951fi
4952
4953########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004954# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004955
4956valgrind_h=no
4957cat > $TMPC << EOF
4958#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004959int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004960 return 0;
4961}
4962EOF
4963if compile_prog "" "" ; then
4964 valgrind_h=yes
4965fi
4966
4967########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004968# check if environ is declared
4969
4970has_environ=no
4971cat > $TMPC << EOF
4972#include <unistd.h>
4973int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00004974 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004975 return 0;
4976}
4977EOF
4978if compile_prog "" "" ; then
4979 has_environ=yes
4980fi
4981
Richard Henderson76a347e2012-12-28 14:17:02 -08004982########################################
4983# check if cpuid.h is usable.
4984
Richard Henderson76a347e2012-12-28 14:17:02 -08004985cat > $TMPC << EOF
4986#include <cpuid.h>
4987int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00004988 unsigned a, b, c, d;
4989 int max = __get_cpuid_max(0, 0);
4990
4991 if (max >= 1) {
4992 __cpuid(1, a, b, c, d);
4993 }
4994
4995 if (max >= 7) {
4996 __cpuid_count(7, 0, a, b, c, d);
4997 }
4998
4999 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08005000}
5001EOF
5002if compile_prog "" "" ; then
5003 cpuid_h=yes
5004fi
5005
Richard Henderson5dd89902017-07-18 18:40:18 -10005006##########################################
5007# avx2 optimization requirement check
5008#
5009# There is no point enabling this if cpuid.h is not usable,
5010# since we won't be able to select the new routines.
5011
5012if test $cpuid_h = yes; then
5013 cat > $TMPC << EOF
5014#pragma GCC push_options
5015#pragma GCC target("avx2")
5016#include <cpuid.h>
5017#include <immintrin.h>
5018static int bar(void *a) {
5019 __m256i x = *(__m256i *)a;
5020 return _mm256_testz_si256(x, x);
5021}
5022int main(int argc, char *argv[]) { return bar(argv[0]); }
5023EOF
5024 if compile_object "" ; then
5025 avx2_opt="yes"
5026 fi
5027fi
5028
Richard Hendersonf5401662013-02-16 12:46:59 -08005029########################################
5030# check if __[u]int128_t is usable.
5031
5032int128=no
5033cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01005034#if defined(__clang_major__) && defined(__clang_minor__)
5035# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5036# error __int128_t does not work in CLANG before 3.2
5037# endif
5038#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08005039__int128_t a;
5040__uint128_t b;
5041int main (void) {
5042 a = a + b;
5043 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01005044 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08005045 return 0;
5046}
5047EOF
5048if compile_prog "" "" ; then
5049 int128=yes
5050fi
Richard Henderson76a347e2012-12-28 14:17:02 -08005051
Richard Henderson7ebee432016-06-29 21:10:59 -07005052#########################################
5053# See if 128-bit atomic operations are supported.
5054
5055atomic128=no
5056if test "$int128" = "yes"; then
5057 cat > $TMPC << EOF
5058int main(void)
5059{
5060 unsigned __int128 x = 0, y = 0;
5061 y = __atomic_load_16(&x, 0);
5062 __atomic_store_16(&x, y, 0);
5063 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5064 return 0;
5065}
5066EOF
5067 if compile_prog "" "" ; then
5068 atomic128=yes
5069 fi
5070fi
5071
Richard Hendersondf79b992016-09-02 12:23:57 -07005072#########################################
5073# See if 64-bit atomic operations are supported.
5074# Note that without __atomic builtins, we can only
5075# assume atomic loads/stores max at pointer size.
5076
5077cat > $TMPC << EOF
5078#include <stdint.h>
5079int main(void)
5080{
5081 uint64_t x = 0, y = 0;
5082#ifdef __ATOMIC_RELAXED
5083 y = __atomic_load_8(&x, 0);
5084 __atomic_store_8(&x, y, 0);
5085 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5086 __atomic_exchange_8(&x, y, 0);
5087 __atomic_fetch_add_8(&x, y, 0);
5088#else
5089 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5090 __sync_lock_test_and_set(&x, y);
5091 __sync_val_compare_and_swap(&x, y, 0);
5092 __sync_fetch_and_add(&x, y);
5093#endif
5094 return 0;
5095}
5096EOF
5097if compile_prog "" "" ; then
5098 atomic64=yes
5099fi
5100
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005101########################################
Richard Hendersondb432672017-09-15 14:11:45 -07005102# See if 16-byte vector operations are supported.
5103# Even without a vector unit the compiler may expand these.
5104# There is a bug in old GCC for PPC that crashes here.
5105# Unfortunately it's the system compiler for Centos 7.
5106
5107cat > $TMPC << EOF
5108typedef unsigned char U1 __attribute__((vector_size(16)));
5109typedef unsigned short U2 __attribute__((vector_size(16)));
5110typedef unsigned int U4 __attribute__((vector_size(16)));
5111typedef unsigned long long U8 __attribute__((vector_size(16)));
5112typedef signed char S1 __attribute__((vector_size(16)));
5113typedef signed short S2 __attribute__((vector_size(16)));
5114typedef signed int S4 __attribute__((vector_size(16)));
5115typedef signed long long S8 __attribute__((vector_size(16)));
5116static U1 a1, b1;
5117static U2 a2, b2;
5118static U4 a4, b4;
5119static U8 a8, b8;
5120static S1 c1;
5121static S2 c2;
5122static S4 c4;
5123static S8 c8;
5124static int i;
Laurent Vivier74912f62018-03-28 15:31:52 +02005125void helper(void *d, void *a, int shift, int i);
5126void helper(void *d, void *a, int shift, int i)
5127{
5128 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5129 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5130 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5131 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5132}
Richard Hendersondb432672017-09-15 14:11:45 -07005133int main(void)
5134{
5135 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5136 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5137 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5138 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5139 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5140 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5141 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5142 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5143 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5144 return 0;
5145}
5146EOF
5147
5148vector16=no
5149if compile_prog "" "" ; then
5150 vector16=yes
5151fi
5152
5153########################################
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005154# check if getauxval is available.
5155
5156getauxval=no
5157cat > $TMPC << EOF
5158#include <sys/auxv.h>
5159int main(void) {
5160 return getauxval(AT_HWCAP) == 0;
5161}
5162EOF
5163if compile_prog "" "" ; then
5164 getauxval=yes
5165fi
5166
John Snowfd0e6052015-03-25 18:57:39 -04005167########################################
5168# check if ccache is interfering with
5169# semantic analysis of macros
5170
John Snow5e4dfd32015-10-28 13:56:40 -04005171unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04005172ccache_cpp2=no
5173cat > $TMPC << EOF
5174static const int Z = 1;
5175#define fn() ({ Z; })
5176#define TAUT(X) ((X) == Z)
5177#define PAREN(X, Y) (X == Y)
5178#define ID(X) (X)
5179int main(int argc, char *argv[])
5180{
5181 int x = 0, y = 0;
5182 x = ID(x);
5183 x = fn();
5184 fn();
5185 if (PAREN(x, y)) return 0;
5186 if (TAUT(Z)) return 0;
5187 return 0;
5188}
5189EOF
5190
5191if ! compile_object "-Werror"; then
5192 ccache_cpp2=yes
5193fi
5194
John Snowb553a042015-11-03 15:43:42 -05005195#################################################
5196# clang does not support glibc + FORTIFY_SOURCE.
5197
5198if test "$fortify_source" != "no"; then
5199 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5200 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01005201 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05005202 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05005203 fortify_source="no";
5204 else
5205 fortify_source="yes"
5206 fi
5207fi
5208
Fam Zheng1efad062018-06-01 17:26:43 +08005209###############################################
5210# Check if copy_file_range is provided by glibc
5211have_copy_file_range=no
5212cat > $TMPC << EOF
5213#include <unistd.h>
5214int main(void) {
5215 copy_file_range(0, NULL, 0, NULL, 0, 0);
5216 return 0;
5217}
5218EOF
5219if compile_prog "" "" ; then
5220 have_copy_file_range=yes
5221fi
5222
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305223##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04005224# check if struct fsxattr is available via linux/fs.h
5225
5226have_fsxattr=no
5227cat > $TMPC << EOF
5228#include <linux/fs.h>
5229struct fsxattr foo;
5230int main(void) {
5231 return 0;
5232}
5233EOF
5234if compile_prog "" "" ; then
5235 have_fsxattr=yes
5236fi
5237
Peter Maydellb66e10e2016-06-08 18:34:32 +01005238##########################################
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005239# check for usable membarrier system call
5240if test "$membarrier" = "yes"; then
5241 have_membarrier=no
5242 if test "$mingw32" = "yes" ; then
5243 have_membarrier=yes
5244 elif test "$linux" = "yes" ; then
5245 cat > $TMPC << EOF
5246 #include <linux/membarrier.h>
5247 #include <sys/syscall.h>
5248 #include <unistd.h>
5249 #include <stdlib.h>
5250 int main(void) {
5251 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5252 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5253 exit(0);
5254 }
5255EOF
5256 if compile_prog "" "" ; then
5257 have_membarrier=yes
5258 fi
5259 fi
5260 if test "$have_membarrier" = "no"; then
5261 feature_not_found "membarrier" "membarrier system call not available"
5262 fi
5263else
5264 # Do not enable it by default even for Mingw32, because it doesn't
5265 # work on Wine.
5266 membarrier=no
5267fi
5268
5269##########################################
Peter Maydellb66e10e2016-06-08 18:34:32 +01005270# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02005271have_rtnetlink=no
5272cat > $TMPC << EOF
5273#include <linux/rtnetlink.h>
5274int main(void) {
5275 return IFLA_PROTO_DOWN;
5276}
5277EOF
5278if compile_prog "" "" ; then
5279 have_rtnetlink=yes
5280fi
5281
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005282##########################################
5283# check for usable AF_VSOCK environment
5284have_af_vsock=no
5285cat > $TMPC << EOF
5286#include <errno.h>
5287#include <sys/types.h>
5288#include <sys/socket.h>
5289#if !defined(AF_VSOCK)
5290# error missing AF_VSOCK flag
5291#endif
5292#include <linux/vm_sockets.h>
5293int main(void) {
5294 int sock, ret;
5295 struct sockaddr_vm svm;
5296 socklen_t len = sizeof(svm);
5297 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5298 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5299 if ((ret == -1) && (errno == ENOTCONN)) {
5300 return 0;
5301 }
5302 return -1;
5303}
5304EOF
5305if compile_prog "" "" ; then
5306 have_af_vsock=yes
5307fi
5308
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005309##########################################
5310# check for usable AF_ALG environment
5311hava_afalg=no
5312cat > $TMPC << EOF
5313#include <errno.h>
5314#include <sys/types.h>
5315#include <sys/socket.h>
5316#include <linux/if_alg.h>
5317int main(void) {
5318 int sock;
5319 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5320 return sock;
5321}
5322EOF
5323if compile_prog "" "" ; then
5324 have_afalg=yes
5325fi
5326if test "$crypto_afalg" = "yes"
5327then
5328 if test "$have_afalg" != "yes"
5329 then
5330 error_exit "AF_ALG requested but could not be detected"
5331 fi
5332fi
5333
5334
James Clarke6969ec62016-06-06 12:02:50 +01005335#################################################
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005336# Check to see if we have the Hypervisor framework
Peter Maydelld2d08522018-01-08 17:10:42 +00005337if [ "$darwin" = "yes" ] ; then
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005338 cat > $TMPC << EOF
5339#include <Hypervisor/hv.h>
5340int main() { return 0;}
5341EOF
5342 if ! compile_object ""; then
5343 hvf='no'
5344 else
5345 hvf='yes'
5346 LDFLAGS="-framework Hypervisor $LDFLAGS"
5347 fi
5348fi
5349
5350#################################################
James Clarke6969ec62016-06-06 12:02:50 +01005351# Sparc implicitly links with --relax, which is
5352# incompatible with -r, so --no-relax should be
5353# given. It does no harm to give it on other
5354# platforms too.
5355
5356# Note: the prototype is needed since QEMU_CFLAGS
5357# contains -Wmissing-prototypes
5358cat > $TMPC << EOF
5359extern int foo(void);
5360int foo(void) { return 0; }
5361EOF
5362if ! compile_object ""; then
5363 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5364fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01005365for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5366 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5367 LD_REL_FLAGS=$i
5368 break
5369 fi
5370done
5371if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5372 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01005373fi
5374
Jan Vesely277abf12016-04-29 13:15:23 -04005375##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05005376# check for sysmacros.h
5377
5378have_sysmacros=no
5379cat > $TMPC << EOF
5380#include <sys/sysmacros.h>
5381int main(void) {
5382 return makedev(0, 0);
5383}
5384EOF
5385if compile_prog "" "" ; then
5386 have_sysmacros=yes
5387fi
5388
5389##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005390# Veritas HyperScale block driver VxHS
5391# Check if libvxhs is installed
5392
5393if test "$vxhs" != "no" ; then
5394 cat > $TMPC <<EOF
5395#include <stdint.h>
5396#include <qnio/qnio_api.h>
5397
5398void *vxhs_callback;
5399
5400int main(void) {
5401 iio_init(QNIO_VERSION, vxhs_callback);
5402 return 0;
5403}
5404EOF
5405 vxhs_libs="-lvxhs -lssl"
5406 if compile_prog "" "$vxhs_libs" ; then
5407 vxhs=yes
5408 else
5409 if test "$vxhs" = "yes" ; then
5410 feature_not_found "vxhs block device" "Install libvxhs See github"
5411 fi
5412 vxhs=no
5413 fi
5414fi
5415
5416##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005417# check for _Static_assert()
5418
5419have_static_assert=no
5420cat > $TMPC << EOF
5421_Static_assert(1, "success");
5422int main(void) {
5423 return 0;
5424}
5425EOF
5426if compile_prog "" "" ; then
5427 have_static_assert=yes
5428fi
5429
5430##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02005431# check for utmpx.h, it is missing e.g. on OpenBSD
5432
5433have_utmpx=no
5434cat > $TMPC << EOF
5435#include <utmpx.h>
5436struct utmpx user_info;
5437int main(void) {
5438 return 0;
5439}
5440EOF
5441if compile_prog "" "" ; then
5442 have_utmpx=yes
5443fi
5444
5445##########################################
Marc-André Lureau247724c2018-01-16 16:11:51 +01005446# checks for sanitizers
5447
Marc-André Lureau247724c2018-01-16 16:11:51 +01005448have_asan=no
5449have_ubsan=no
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005450have_asan_iface_h=no
5451have_asan_iface_fiber=no
Marc-André Lureau247724c2018-01-16 16:11:51 +01005452
5453if test "$sanitizers" = "yes" ; then
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005454 write_c_skeleton
Marc-André Lureau247724c2018-01-16 16:11:51 +01005455 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5456 have_asan=yes
5457 fi
Marc-André Lureaub9f44da2018-02-15 22:25:47 +01005458
5459 # we could use a simple skeleton for flags checks, but this also
5460 # detect the static linking issue of ubsan, see also:
5461 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5462 cat > $TMPC << EOF
5463#include <stdlib.h>
5464int main(void) {
5465 void *tmp = malloc(10);
5466 return *(int *)(tmp + 2);
5467}
5468EOF
Marc-André Lureau247724c2018-01-16 16:11:51 +01005469 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5470 have_ubsan=yes
5471 fi
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005472
5473 if check_include "sanitizer/asan_interface.h" ; then
5474 have_asan_iface_h=yes
5475 fi
5476
5477 cat > $TMPC << EOF
5478#include <sanitizer/asan_interface.h>
5479int main(void) {
5480 __sanitizer_start_switch_fiber(0, 0, 0);
5481 return 0;
5482}
5483EOF
5484 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5485 have_asan_iface_fiber=yes
5486 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005487fi
5488
5489##########################################
Alex Bennée51a12b52018-04-04 14:24:39 +01005490# Docker and cross-compiler support
5491#
5492# This is specifically for building test
5493# cases for foreign architectures, not
5494# cross-compiling QEMU itself.
5495
5496if has "docker"; then
5497 docker=$($python $source_path/tests/docker/docker.py probe)
5498fi
5499
5500##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005501# End of CC checks
5502# After here, no more $cc or $ld runs
5503
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005504write_c_skeleton
5505
Blue Swirl1d728c32012-05-01 18:45:39 +00005506if test "$gcov" = "yes" ; then
5507 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5508 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005509elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005510 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Paolo Bonzini48e56d52018-03-06 11:32:44 +01005511elif test "$debug" = "no"; then
5512 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005513fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005514
Marc-André Lureau247724c2018-01-16 16:11:51 +01005515if test "$have_asan" = "yes"; then
5516 CFLAGS="-fsanitize=address $CFLAGS"
Marc-André Lureaud83414e2018-01-16 16:11:52 +01005517 if test "$have_asan_iface_h" = "no" ; then
5518 echo "ASAN build enabled, but ASAN header missing." \
5519 "Without code annotation, the report may be inferior."
5520 elif test "$have_asan_iface_fiber" = "no" ; then
5521 echo "ASAN build enabled, but ASAN header is too old." \
5522 "Without code annotation, the report may be inferior."
5523 fi
Marc-André Lureau247724c2018-01-16 16:11:51 +01005524fi
5525if test "$have_ubsan" = "yes"; then
5526 CFLAGS="-fsanitize=undefined $CFLAGS"
5527fi
5528
Peter Lieven6542aa92014-02-03 10:26:13 +01005529##########################################
5530# Do we have libnfs
5531if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005532 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005533 libnfs="yes"
5534 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005535 else
5536 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005537 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005538 fi
5539 libnfs="no"
5540 fi
5541fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005542
Peter Maydell6ca026c2012-07-18 15:10:18 +01005543# Now we've finished running tests it's OK to add -Werror to the compiler flags
5544if test "$werror" = "yes"; then
5545 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5546fi
5547
Juan Quintelae86ecd42009-08-03 14:45:59 +02005548if test "$solaris" = "no" ; then
5549 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005550 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005551 fi
5552fi
5553
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005554# test if pod2man has --utf8 option
5555if pod2man --help | grep -q utf8; then
5556 POD2MAN="pod2man --utf8"
5557else
5558 POD2MAN="pod2man"
5559fi
5560
Blue Swirl952afb72010-09-19 08:36:34 +00005561# Use ASLR, no-SEH and DEP if available
5562if test "$mingw32" = "yes" ; then
5563 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005564 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005565 LDFLAGS="-Wl,$flag $LDFLAGS"
5566 fi
5567 done
5568fi
5569
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005570qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005571qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005572qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005573qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005574
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005575# We can only support ivshmem if we have eventfd
5576if [ "$eventfd" = "yes" ]; then
5577 ivshmem=yes
5578fi
5579
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005580tools=""
5581if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02005582 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005583 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5584 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005585 fi
5586 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005587 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005588 fi
5589fi
5590if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005591 if test "$linux" = yes; then
5592 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005593 virtfs=yes
5594 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5595 else
5596 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005597 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305598 fi
Andreas Färber17500372012-05-01 01:12:03 +02005599 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005600 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005601 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5602 mpath=yes
5603 else
5604 if test "$mpath" = yes; then
5605 error_exit "Multipath requires libmpathpersist devel"
5606 fi
5607 mpath=no
5608 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005609 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5610 else
5611 if test "$virtfs" = yes; then
5612 error_exit "VirtFS is supported only on Linux"
5613 fi
5614 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005615 if test "$mpath" = yes; then
5616 error_exit "Multipath is supported only on Linux"
5617 fi
5618 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305619 fi
Laurent Vivierff69fd82017-10-19 21:16:06 +02005620 if test "$xkbcommon" = "yes"; then
5621 tools="qemu-keymap\$(EXESUF) $tools"
5622 fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02005623fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005624
5625# Probe for guest agent support/options
5626
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005627if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005628 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005629 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005630 guest_agent=yes
5631 elif [ "$guest_agent" != yes ]; then
5632 guest_agent=no
5633 else
5634 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005635 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005636fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005637
Michael Roth9d6bc272015-08-26 10:49:13 -05005638# Guest agent Window MSI package
5639
5640if test "$guest_agent" != yes; then
5641 if test "$guest_agent_msi" = yes; then
5642 error_exit "MSI guest agent package requires guest agent enabled"
5643 fi
5644 guest_agent_msi=no
5645elif test "$mingw32" != "yes"; then
5646 if test "$guest_agent_msi" = "yes"; then
5647 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5648 fi
5649 guest_agent_msi=no
5650elif ! has wixl; then
5651 if test "$guest_agent_msi" = "yes"; then
5652 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5653 fi
5654 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005655else
5656 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5657 # disabled explicitly
5658 if test "$guest_agent_msi" != "no"; then
5659 guest_agent_msi=yes
5660 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005661fi
5662
Michael Roth1a349042015-08-26 11:14:31 -05005663if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005664 if test "$guest_agent_with_vss" = "yes"; then
5665 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5666 fi
5667
5668 if test "$QEMU_GA_MANUFACTURER" = ""; then
5669 QEMU_GA_MANUFACTURER=QEMU
5670 fi
5671
5672 if test "$QEMU_GA_DISTRO" = ""; then
5673 QEMU_GA_DISTRO=Linux
5674 fi
5675
5676 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005677 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005678 fi
5679
Stefan Weil89138852016-05-16 15:10:20 +02005680 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005681
5682 case "$cpu" in
5683 x86_64)
5684 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5685 ;;
5686 i386)
5687 QEMU_GA_MSI_ARCH="-D Arch=32"
5688 ;;
5689 *)
5690 error_exit "CPU $cpu not supported for building installation package"
5691 ;;
5692 esac
5693fi
5694
Paolo Bonzinica35f782010-05-26 16:08:29 +02005695# Mac OS X ships with a broken assembler
5696roms=
5697if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5698 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5699 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005700 # Different host OS linkers have different ideas about the name of the ELF
Brad Smithc65d5e42017-11-07 18:46:11 -05005701 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5702 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5703 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
Peter Maydelle57218b2016-08-08 17:11:28 +01005704 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5705 ld_i386_emulation="$emu"
5706 roms="optionrom"
5707 break
5708 fi
5709 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005710fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005711if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005712 roms="$roms spapr-rtas"
5713fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005714
Christian Borntraeger9933c302013-04-23 01:23:03 +00005715if test "$cpu" = "s390x" ; then
5716 roms="$roms s390-ccw"
5717fi
5718
Richard Henderson964c6fa2013-06-21 19:10:16 -07005719# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005720if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005721 textseg_addr=
5722 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005723 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5724 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005725 textseg_addr=0x60000000
5726 ;;
5727 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005728 # A 256M aligned address, high in the address space, with enough
5729 # room for the code_gen_buffer above it before the stack.
5730 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005731 ;;
5732 esac
5733 if [ -n "$textseg_addr" ]; then
5734 cat > $TMPC <<EOF
5735 int main(void) { return 0; }
5736EOF
5737 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5738 if ! compile_prog "" "$textseg_ldflags"; then
5739 # In case ld does not support -Ttext-segment, edit the default linker
5740 # script via sed to set the .text start addr. This is needed on FreeBSD
5741 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005742 if ! $ld --verbose >/dev/null 2>&1; then
5743 error_exit \
5744 "We need to link the QEMU user mode binaries at a" \
5745 "specific text address. Unfortunately your linker" \
5746 "doesn't support either the -Ttext-segment option or" \
5747 "printing the default linker script with --verbose." \
5748 "If you don't want the user mode binaries, pass the" \
5749 "--disable-user option to configure."
5750 fi
5751
Richard Henderson964c6fa2013-06-21 19:10:16 -07005752 $ld --verbose | sed \
5753 -e '1,/==================================================/d' \
5754 -e '/==================================================/,$d' \
5755 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5756 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5757 textseg_ldflags="-Wl,-T../config-host.ld"
5758 fi
5759 fi
5760fi
5761
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005762# Check that the C++ compiler exists and works with the C compiler.
5763# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5764if has $cxx; then
5765 cat > $TMPC <<EOF
5766int c_function(void);
5767int main(void) { return c_function(); }
5768EOF
5769
5770 compile_object
5771
5772 cat > $TMPCXX <<EOF
5773extern "C" {
5774 int c_function(void);
5775}
5776int c_function(void) { return 42; }
5777EOF
5778
5779 update_cxxflags
5780
5781 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5782 # C++ compiler $cxx works ok with C compiler $cc
5783 :
5784 else
5785 echo "C++ compiler $cxx does not work with C compiler $cc"
5786 echo "Disabling C++ specific optional code"
5787 cxx=
5788 fi
5789else
5790 echo "No C++ compiler available; disabling C++ specific optional code"
5791 cxx=
5792fi
5793
Cole Robinson02d34f62016-05-06 14:03:09 -04005794echo_version() {
5795 if test "$1" = "yes" ; then
5796 echo "($2)"
5797 fi
5798}
5799
Jan Kiszka50e12062014-10-02 10:03:55 +02005800# prepend pixman and ftd flags after all config tests are done
5801QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005802QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
Jan Kiszka50e12062014-10-02 10:03:55 +02005803libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005804
bellard43ce4df2003-06-09 19:53:12 +00005805echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005806echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005807echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005808echo "binary directory $(eval echo $bindir)"
5809echo "library directory $(eval echo $libdir)"
5810echo "module directory $(eval echo $qemu_moddir)"
5811echo "libexec directory $(eval echo $libexecdir)"
5812echo "include directory $(eval echo $includedir)"
5813echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005814if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005815echo "local state directory $(eval echo $local_statedir)"
5816echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005817echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005818else
5819echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005820echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005821fi
bellard5a671352003-10-01 00:13:48 +00005822echo "Source path $source_path"
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01005823echo "GIT binary $git"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005824echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005825echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005826echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005827echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005828echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005829echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005830echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005831echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005832echo "LDFLAGS $LDFLAGS"
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03005833echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005834echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005835echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005836echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005837if test "$slirp" = "yes" ; then
5838 echo "smbd $smbd"
5839fi
Fam Zheng17969262014-02-10 14:48:56 +08005840echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005841echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005842echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005843echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005844echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005845echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005846echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005847echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005848echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005849if test "$darwin" = "yes" ; then
5850 echo "Cocoa support $cocoa"
5851fi
Stefan Weil89138852016-05-16 15:10:20 +02005852echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5853echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005854echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005855echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005856echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005857echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005858echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005859echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005860echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02005861echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005862echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005863echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005864echo "curses support $curses"
Marc-André Lureau47479c52018-05-25 17:36:09 +02005865echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
Alexander Graf769ce762009-05-11 17:41:42 +02005866echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005867echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005868echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005869echo "Block whitelist (rw) $block_drv_rw_whitelist"
5870echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305871echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005872echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01005873echo "VNC support $vnc"
5874if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005875 echo "VNC SASL support $vnc_sasl"
5876 echo "VNC JPEG support $vnc_jpeg"
5877 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005878fi
blueswir131422552007-04-16 18:27:06 +00005879if test -n "$sparc_cpu"; then
5880 echo "Target Sparc Arch $sparc_cpu"
5881fi
aliguorie37630c2009-04-22 15:19:10 +00005882echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005883if test "$xen" = "yes" ; then
5884 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005885 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005886fi
aurel322e4d9fb2008-04-08 06:01:02 +00005887echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005888echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005889echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005890echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005891echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005892echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005893echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005894echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005895echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005896echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01005897echo "HAX support $hax"
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05005898echo "HVF support $hvf"
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08005899echo "WHPX support $whpx"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005900echo "TCG support $tcg"
5901if test "$tcg" = "yes" ; then
5902 echo "TCG debug enabled $debug_tcg"
5903 echo "TCG interpreter $tcg_interpreter"
5904fi
Yang Zhong5a22ab72017-12-20 21:16:46 +08005905echo "malloc trim support $malloc_trim"
Michael R. Hines2da776d2013-07-22 10:01:54 -04005906echo "RDMA support $rdma"
aurel32f652e6a2008-12-16 10:43:48 +00005907echo "fdt support $fdt"
Paolo Bonzinia40161c2018-02-16 10:05:23 +01005908echo "membarrier $membarrier"
aliguoriceb42de2009-04-07 18:43:28 +00005909echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005910echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005911echo "madvise $madvise"
5912echo "posix_madvise $posix_madvise"
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02005913echo "posix_memalign $posix_memalign"
Corey Bryant47e98652012-01-26 09:42:26 -05005914echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005915echo "vhost-net support $vhost_net"
Gonglei042cea22018-03-01 21:46:28 +08005916echo "vhost-crypto support $vhost_crypto"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005917echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005918echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005919echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005920echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005921if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005922echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005923fi
Stefan Weil89138852016-05-16 15:10:20 +02005924echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005925echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005926echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005927echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005928echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005929echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005930echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005931echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005932echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01005933echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05005934echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005935echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05005936echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05005937echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03005938echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01005939echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005940echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02005941echo "debug stack usage $debug_stack_usage"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005942echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05305943echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00005944echo "gcov $gcov_tool"
5945echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05005946echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005947echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005948echo "TPM passthrough $tpm_passthrough"
Amarnath Vallurif4ede812017-09-29 14:10:20 +03005949echo "TPM emulator $tpm_emulator"
Paolo Bonzini3556c232013-05-10 14:16:40 +02005950echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01005951echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08005952echo "lzo support $lzo"
5953echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01005954echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08005955echo "NUMA host support $numa"
Klim Kireeved279a02018-01-12 12:01:19 +03005956echo "libxml2 $libxml2"
Fam Zheng2847b462015-03-26 11:03:12 +08005957echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02005958echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08005959echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005960echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005961echo "VxHS block device $vxhs"
Richard Henderson8ca80762017-09-14 09:41:12 -07005962echo "capstone $capstone"
Alex Bennée51a12b52018-04-04 14:24:39 +01005963echo "docker $docker"
bellard67b915a2004-03-31 23:37:16 +00005964
Stefan Weil1ba16962011-07-29 22:40:45 +02005965if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00005966echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00005967fi
bellard97a847b2003-08-10 21:36:04 +00005968
Daniel P. Berrangeb7715af2017-12-12 11:34:40 +00005969if test "$gtkabi" = "2.0"; then
5970 echo
5971 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5972 echo "WARNING: future releases. Please switch to using GTK 3.0"
5973fi
5974
Daniel P. Berrangee52c6ba2018-01-15 14:25:33 +00005975if test "$sdlabi" = "1.2"; then
5976 echo
5977 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
5978 echo "WARNING: future releases. Please switch to using SDL 2.0"
5979fi
5980
Peter Maydell898be3e2017-03-21 14:31:57 +00005981if test "$supported_cpu" = "no"; then
5982 echo
5983 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5984 echo
5985 echo "CPU host architecture $cpu support is not currently maintained."
5986 echo "The QEMU project intends to remove support for this host CPU in"
5987 echo "a future release if nobody volunteers to maintain it and to"
5988 echo "provide a build host for our continuous integration setup."
5989 echo "configure has succeeded and you can continue to build, but"
5990 echo "if you care about QEMU on this platform you should contact"
5991 echo "us upstream at qemu-devel@nongnu.org."
5992fi
5993
5994if test "$supported_os" = "no"; then
5995 echo
5996 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5997 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00005998 echo "Host OS $targetos support is not currently maintained."
5999 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00006000 echo "a future release if nobody volunteers to maintain it and to"
6001 echo "provide a build host for our continuous integration setup."
6002 echo "configure has succeeded and you can continue to build, but"
6003 echo "if you care about QEMU on this platform you should contact"
6004 echo "us upstream at qemu-devel@nongnu.org."
6005fi
6006
Juan Quintela98ec69a2009-07-16 18:34:18 +02006007config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00006008
Stefan Weildbd99ae2013-01-01 18:33:44 +01006009echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6010
Juan Quintela98ec69a2009-07-16 18:34:18 +02006011echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006012echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006013
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02006014echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006015echo "prefix=$prefix" >> $config_host_mak
6016echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03006017echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04006018echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02006019echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006020echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02006021echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03006022echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006023echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02006024echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03006025echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08006026echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02006027if test "$mingw32" = "no" ; then
6028 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6029fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04006030echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06006031echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02006032echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangecc84d632017-10-20 15:02:43 +01006033echo "GIT=$git" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01006034echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Daniel P. Berrangef62bbee2017-10-26 13:52:26 +01006035echo "GIT_UPDATE=$git_update" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006036
Juan Quintela98ec69a2009-07-16 18:34:18 +02006037echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02006038
aurel32f8393942009-04-13 18:45:38 +00006039if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006040 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00006041fi
aliguori1625af82009-04-05 17:41:02 +00006042if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07006043 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00006044fi
bellard7d132992003-03-06 23:23:54 +00006045if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02006046 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006047fi
bellard67b915a2004-03-31 23:37:16 +00006048if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006049 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02006050 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00006051 version_major=${rc_version%%.*}
6052 rc_version=${rc_version#*.}
6053 version_minor=${rc_version%%.*}
6054 rc_version=${rc_version#*.}
6055 version_subminor=${rc_version%%.*}
6056 version_micro=0
6057 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6058 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006059 if test "$guest_agent_with_vss" = "yes" ; then
6060 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05006061 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04006062 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6063 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05006064 if test "$guest_agent_ntddscsi" = "yes" ; then
6065 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6066 fi
Michael Roth1a349042015-08-26 11:14:31 -05006067 if test "$guest_agent_msi" = "yes"; then
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08006068 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
Yossi Hindin9dacf322015-05-06 14:57:40 +03006069 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6070 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6071 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6072 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6073 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6074 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6075 fi
pbrook210fa552007-02-27 21:04:49 +00006076else
Juan Quintela35f4df22009-07-27 16:13:07 +02006077 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00006078fi
blueswir1128ab2f2008-08-15 18:33:42 +00006079
Mark McLoughlindffcb712009-10-22 17:49:11 +01006080if test "$linux" = "yes" ; then
6081 echo "CONFIG_LINUX=y" >> $config_host_mak
6082fi
6083
bellard83fb7ad2004-07-05 21:25:26 +00006084if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006085 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00006086fi
malcb29fe3e2008-11-18 01:42:22 +00006087
bellardec530c82006-04-25 22:36:06 +00006088if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006089 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00006090fi
Andreas Färber179cf402010-09-20 00:50:43 +02006091if test "$haiku" = "yes" ; then
6092 echo "CONFIG_HAIKU=y" >> $config_host_mak
6093fi
bellard97a847b2003-08-10 21:36:04 +00006094if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006095 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00006096fi
Stefan Weil1ba16962011-07-29 22:40:45 +02006097if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006098 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00006099fi
bellardc20709a2004-04-21 23:27:19 +00006100if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006101 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04006102 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00006103fi
ths8a16d272008-07-19 09:56:24 +00006104if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006105 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08006106 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00006107fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01006108if test "$netmap" = "yes" ; then
6109 echo "CONFIG_NETMAP=y" >> $config_host_mak
6110fi
Gonglei015a33b2014-07-01 20:58:08 +08006111if test "$l2tpv3" = "yes" ; then
6112 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6113fi
Corey Bryant47e98652012-01-26 09:42:26 -05006114if test "$cap_ng" = "yes" ; then
6115 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6116fi
Juan Quintela2358a492009-07-27 16:13:25 +02006117echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00006118for drv in $audio_drv_list; do
Gerd Hoffmann1ef1ec22018-03-01 11:05:46 +01006119 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006120 case "$drv" in
Gerd Hoffmann051c7d52018-03-06 08:40:53 +01006121 alsa | oss | pa | sdl)
Gerd Hoffmannce3dc032018-03-06 08:40:50 +01006122 echo "$def=m" >> $config_host_mak ;;
6123 *)
6124 echo "$def=y" >> $config_host_mak ;;
6125 esac
malc0c58ac12008-06-25 21:04:05 +00006126done
Fam Zhengb1149912017-09-07 16:29:13 +08006127echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6128echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6129echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6130echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6131echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02006132if test "$audio_pt_int" = "yes" ; then
6133 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6134fi
malcd5631632009-10-10 01:13:41 +04006135if test "$audio_win_int" = "yes" ; then
6136 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6137fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08006138echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6139echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01006140if test "$vnc" = "yes" ; then
6141 echo "CONFIG_VNC=y" >> $config_host_mak
6142fi
aliguori2f9606b2009-03-06 20:27:28 +00006143if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006144 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00006145fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006146if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006147 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02006148fi
Jes Sorensen821601e2011-03-16 13:33:36 +01006149if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02006150 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02006151fi
Gerd Hoffmann6a021532017-10-05 17:33:28 +02006152if test "$xkbcommon" = "yes" ; then
6153 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6154 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6155fi
aliguori76655d62009-03-06 20:27:37 +00006156if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006157 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00006158fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01006159if test "$xfs" = "yes" ; then
6160 echo "CONFIG_XFS=y" >> $config_host_mak
6161fi
Stefan Weil89138852016-05-16 15:10:20 +02006162qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02006163echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02006164echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006165echo "SRC_PATH=$source_path" >> $config_host_mak
Fam Zheng208ecb32017-09-08 17:16:54 +08006166echo "TARGET_LIST=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02006167if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006168 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00006169fi
Fam Zheng17969262014-02-10 14:48:56 +08006170if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08006171 # $shacmd can generate a hash started with digit, which the compiler doesn't
6172 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02006173 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006174 echo "CONFIG_MODULES=y" >> $config_host_mak
6175fi
Gerd Hoffmann87815952018-03-01 11:05:42 +01006176if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6177 echo "CONFIG_X11=y" >> $config_host_mak
6178 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6179 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6180fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02006181if test "$sdl" = "yes" ; then
Gerd Hoffmann96400a12018-03-01 11:05:47 +01006182 echo "CONFIG_SDL=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006183 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02006184 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08006185 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006186fi
6187if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006188 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00006189fi
6190if test "$curses" = "yes" ; then
Gerd Hoffmann2373f7d2018-03-01 11:05:45 +01006191 echo "CONFIG_CURSES=m" >> $config_host_mak
6192 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6193 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00006194fi
Riku Voipio099d6b02009-05-05 12:10:04 +03006195if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006196 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03006197fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01006198if test "$accept4" = "yes" ; then
6199 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6200fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306201if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006202 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05306203fi
Riku Voipioc2882b92009-08-12 15:08:24 +03006204if test "$eventfd" = "yes" ; then
6205 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6206fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02006207if test "$memfd" = "yes" ; then
6208 echo "CONFIG_MEMFD=y" >> $config_host_mak
6209fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006210if test "$fallocate" = "yes" ; then
6211 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6212fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01006213if test "$fallocate_punch_hole" = "yes" ; then
6214 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6215fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03006216if test "$fallocate_zero_range" = "yes" ; then
6217 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6218fi
Kevin Wolfed911432014-09-29 17:12:59 +02006219if test "$posix_fallocate" = "yes" ; then
6220 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6221fi
Peter Maydellc727f472011-01-06 11:05:10 +00006222if test "$sync_file_range" = "yes" ; then
6223 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6224fi
Peter Maydelldace20d2011-01-10 13:11:24 +00006225if test "$fiemap" = "yes" ; then
6226 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6227fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03006228if test "$dup3" = "yes" ; then
6229 echo "CONFIG_DUP3=y" >> $config_host_mak
6230fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01006231if test "$ppoll" = "yes" ; then
6232 echo "CONFIG_PPOLL=y" >> $config_host_mak
6233fi
Alex Blighcd758dd2013-08-21 16:02:44 +01006234if test "$prctl_pr_set_timerslack" = "yes" ; then
6235 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6236fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00006237if test "$epoll" = "yes" ; then
6238 echo "CONFIG_EPOLL=y" >> $config_host_mak
6239fi
6240if test "$epoll_create1" = "yes" ; then
6241 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6242fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00006243if test "$sendfile" = "yes" ; then
6244 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6245fi
Riku Voipio51834342014-06-22 11:25:42 +01006246if test "$timerfd" = "yes" ; then
6247 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6248fi
Riku Voipio9af5c902014-08-12 15:58:57 +03006249if test "$setns" = "yes" ; then
6250 echo "CONFIG_SETNS=y" >> $config_host_mak
6251fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02006252if test "$clock_adjtime" = "yes" ; then
6253 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6254fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02006255if test "$syncfs" = "yes" ; then
6256 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6257fi
aurel323b3f24a2009-04-15 16:12:13 +00006258if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006259 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00006260fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00006261if test "$inotify1" = "yes" ; then
6262 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6263fi
Peter Maydell401bc052017-09-05 13:19:32 +01006264if test "$sem_timedwait" = "yes" ; then
6265 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6266fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02006267if test "$byteswap_h" = "yes" ; then
6268 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6269fi
6270if test "$bswap_h" = "yes" ; then
6271 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6272fi
Alexander Graf769ce762009-05-11 17:41:42 +02006273if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006274 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02006275 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006276 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02006277fi
aurel322e4d9fb2008-04-08 06:01:02 +00006278if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006279 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08006280 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00006281fi
balrogfb599c92008-09-28 23:49:55 +00006282if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006283 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02006284 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00006285fi
Dr. David Alan Gilbertd46f7c92015-06-24 10:45:42 +01006286if test "$glib_subprocess" = "yes" ; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03006287 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6288fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006289if test "$gtk" = "yes" ; then
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006290 echo "CONFIG_GTK=m" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04006291 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006292 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006293 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02006294 if test "$gtk_gl" = "yes" ; then
6295 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6296 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006297fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01006298echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01006299if test "$gnutls" = "yes" ; then
6300 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6301fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09006302if test "$gnutls_rnd" = "yes" ; then
6303 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6304fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006305if test "$gcrypt" = "yes" ; then
6306 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08006307 if test "$gcrypt_hmac" = "yes" ; then
6308 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6309 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01006310 if test "$gcrypt_kdf" = "yes" ; then
6311 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6312 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01006313fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01006314if test "$nettle" = "yes" ; then
6315 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02006316 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01006317 if test "$nettle_kdf" = "yes" ; then
6318 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6319 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01006320fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01006321if test "$tasn1" = "yes" ; then
6322 echo "CONFIG_TASN1=y" >> $config_host_mak
6323fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00006324if test "$have_ifaddrs_h" = "yes" ; then
6325 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6326fi
Eric Blake6b39b062016-10-11 10:46:23 -05006327if test "$have_broken_size_max" = "yes" ; then
6328 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6329fi
Jan Vesely277abf12016-04-29 13:15:23 -04006330
6331# Work around a system header bug with some kernel/XFS header
6332# versions where they both try to define 'struct fsxattr':
6333# xfs headers will not try to redefine structs from linux headers
6334# if this macro is set.
6335if test "$have_fsxattr" = "yes" ; then
6336 echo "HAVE_FSXATTR=y" >> $config_host_mak
6337fi
Fam Zheng1efad062018-06-01 17:26:43 +08006338if test "$have_copy_file_range" = "yes" ; then
6339 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6340fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01006341if test "$vte" = "yes" ; then
6342 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006343 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
Gerd Hoffmanne0fb1292018-03-01 11:05:44 +01006344 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06006345fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02006346if test "$virglrenderer" = "yes" ; then
6347 echo "CONFIG_VIRGL=y" >> $config_host_mak
6348 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6349 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6350fi
aliguorie37630c2009-04-22 15:19:10 +00006351if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02006352 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00006353 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00006354 if test "$xen_pv_domain_build" = "yes" ; then
6355 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6356 fi
aliguorie37630c2009-04-22 15:19:10 +00006357fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02006358if test "$linux_aio" = "yes" ; then
6359 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6360fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006361if test "$attr" = "yes" ; then
6362 echo "CONFIG_ATTR=y" >> $config_host_mak
6363fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02006364if test "$libattr" = "yes" ; then
6365 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6366fi
Meador Inge983eef52012-02-24 14:00:42 +05306367if test "$virtfs" = "yes" ; then
6368 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07006369fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02006370if test "$mpath" = "yes" ; then
6371 echo "CONFIG_MPATH=y" >> $config_host_mak
6372fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00006373if test "$vhost_scsi" = "yes" ; then
6374 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6375fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006376if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03006377 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6378fi
Gonglei042cea22018-03-01 21:46:28 +08006379if test "$vhost_crypto" = "yes" ; then
6380 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6381fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01006382if test "$vhost_vsock" = "yes" ; then
6383 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6384fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006385if test "$vhost_user" = "yes" ; then
6386 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6387fi
ths77755342008-11-27 15:45:16 +00006388if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02006389 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00006390fi
aliguoribf9298b2008-12-05 20:05:26 +00006391if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006392 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00006393fi
aliguoriceb42de2009-04-07 18:43:28 +00006394if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006395 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00006396fi
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03006397if test "$fdt" != "no" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02006398 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00006399fi
Paolo Bonzinia40161c2018-02-16 10:05:23 +01006400if test "$membarrier" = "yes" ; then
6401 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6402fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03006403if test "$signalfd" = "yes" ; then
6404 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6405fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02006406if test "$tcg" = "yes"; then
6407 echo "CONFIG_TCG=y" >> $config_host_mak
6408 if test "$tcg_interpreter" = "yes" ; then
6409 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6410 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02006411fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00006412if test "$fdatasync" = "yes" ; then
6413 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6414fi
Andreas Färbere78815a2010-09-25 11:26:05 +00006415if test "$madvise" = "yes" ; then
6416 echo "CONFIG_MADVISE=y" >> $config_host_mak
6417fi
6418if test "$posix_madvise" = "yes" ; then
6419 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6420fi
Andreas Gustafsson9bc5a712018-01-04 19:39:36 +02006421if test "$posix_memalign" = "yes" ; then
6422 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6423fi
bellard97a847b2003-08-10 21:36:04 +00006424
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01006425if test "$spice" = "yes" ; then
6426 echo "CONFIG_SPICE=y" >> $config_host_mak
6427fi
6428
Marc-André Lureau7b02f542015-08-30 11:48:40 +02006429if test "$smartcard" = "yes" ; then
6430 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08006431 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6432 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02006433fi
6434
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006435if test "$libusb" = "yes" ; then
6436 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08006437 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6438 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01006439fi
6440
Hans de Goede69354a82011-07-19 11:04:10 +02006441if test "$usb_redir" = "yes" ; then
6442 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08006443 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6444 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02006445fi
6446
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01006447if test "$opengl" = "yes" ; then
6448 echo "CONFIG_OPENGL=y" >> $config_host_mak
6449 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01006450 if test "$opengl_dmabuf" = "yes" ; then
6451 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6452 fi
Michael Walle20ff0752011-03-07 23:32:39 +01006453fi
6454
Yang Zhong5a22ab72017-12-20 21:16:46 +08006455if test "$malloc_trim" = "yes" ; then
6456 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6457fi
6458
Liang Li99f2dbd2016-03-08 13:53:16 +08006459if test "$avx2_opt" = "yes" ; then
6460 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6461fi
6462
qiaonuohan607dacd2014-02-18 14:11:30 +08006463if test "$lzo" = "yes" ; then
6464 echo "CONFIG_LZO=y" >> $config_host_mak
6465fi
6466
6467if test "$snappy" = "yes" ; then
6468 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6469fi
6470
Peter Wu6b383c02015-01-06 18:48:14 +01006471if test "$bzip2" = "yes" ; then
6472 echo "CONFIG_BZIP2=y" >> $config_host_mak
6473 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6474fi
6475
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006476if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006477 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006478 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6479 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11006480fi
6481
Peter Lieven6542aa92014-02-03 10:26:13 +01006482if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04006483 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6484 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01006485fi
6486
Eduardo Otubof7945732012-08-14 18:44:05 -03006487if test "$seccomp" = "yes"; then
6488 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08006489 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6490 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03006491fi
6492
bellard83fb7ad2004-07-05 21:25:26 +00006493# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00006494if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02006495 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00006496fi
6497
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01006498if test "$localtime_r" = "yes" ; then
6499 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6500fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02006501if test "$qom_cast_debug" = "yes" ; then
6502 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6503fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006504if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006505 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006506 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6507 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01006508fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06006509
Peter Maydell7c2acc72013-04-08 12:11:27 +01006510echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02006511if test "$coroutine_pool" = "yes" ; then
6512 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6513else
6514 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6515fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05306516
Peter Lieven7d992e42016-09-27 11:58:45 +02006517if test "$debug_stack_usage" = "yes" ; then
6518 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6519fi
6520
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04006521if test "$crypto_afalg" = "yes" ; then
6522 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6523fi
6524
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05306525if test "$open_by_handle_at" = "yes" ; then
6526 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6527fi
6528
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05306529if test "$linux_magic_h" = "yes" ; then
6530 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6531fi
6532
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01006533if test "$pragma_diagnostic_available" = "yes" ; then
6534 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01006535fi
6536
Kevin Wolf3f4349d2012-06-29 13:40:27 +02006537if test "$valgrind_h" = "yes" ; then
6538 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6539fi
6540
Marc-André Lureaud83414e2018-01-16 16:11:52 +01006541if test "$have_asan_iface_fiber" = "yes" ; then
6542 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6543fi
6544
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03006545if test "$has_environ" = "yes" ; then
6546 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6547fi
6548
Richard Henderson76a347e2012-12-28 14:17:02 -08006549if test "$cpuid_h" = "yes" ; then
6550 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6551fi
6552
Richard Hendersonf5401662013-02-16 12:46:59 -08006553if test "$int128" = "yes" ; then
6554 echo "CONFIG_INT128=y" >> $config_host_mak
6555fi
6556
Richard Henderson7ebee432016-06-29 21:10:59 -07006557if test "$atomic128" = "yes" ; then
6558 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6559fi
6560
Richard Hendersondf79b992016-09-02 12:23:57 -07006561if test "$atomic64" = "yes" ; then
6562 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6563fi
6564
Richard Hendersondb432672017-09-15 14:11:45 -07006565if test "$vector16" = "yes" ; then
6566 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6567fi
6568
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08006569if test "$getauxval" = "yes" ; then
6570 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6571fi
6572
Bharata B Raoeb100392012-09-24 14:42:45 +05306573if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006574 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006575 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6576 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05306577fi
6578
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006579if test "$glusterfs_xlator_opt" = "yes" ; then
6580 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6581fi
6582
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306583if test "$glusterfs_discard" = "yes" ; then
6584 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6585fi
6586
Niels de Vosdf3a4292017-05-28 12:01:14 +05306587if test "$glusterfs_fallocate" = "yes" ; then
6588 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6589fi
6590
Bharata B Rao7c815372013-12-21 14:51:25 +05306591if test "$glusterfs_zerofill" = "yes" ; then
6592 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6593fi
6594
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006595if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006596 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006597 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6598 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006599fi
6600
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006601if test "$live_block_migration" = "yes" ; then
6602 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6603fi
6604
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006605if test "$tpm" = "yes"; then
6606 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006607 # TPM passthrough support?
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006608 if test "$tpm_passthrough" = "yes"; then
6609 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6610 fi
Amarnath Vallurif4ede812017-09-29 14:10:20 +03006611 # TPM emulator support?
6612 if test "$tpm_emulator" = "yes"; then
6613 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6614 fi
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006615fi
6616
Lluís Vilanova5b808272014-05-27 15:02:14 +02006617echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6618if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02006619 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306620fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006621if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02006622 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6623 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006624 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006625fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006626if have_backend "log"; then
6627 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02006628fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006629if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02006630 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6631fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006632if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006633 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6634 if test "$trace_backend_stap" = "yes" ; then
6635 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6636 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006637fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006638if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006639 if test "$linux" = "yes" ; then
6640 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006641 else
Stewart Smith21684af2014-01-24 12:39:10 +11006642 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006643 fi
6644fi
Paul Durrant0a852412016-08-04 14:44:14 +01006645if have_backend "syslog"; then
6646 if test "$posix_syslog" = "yes" ; then
6647 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6648 else
6649 feature_not_found "syslog(trace backend)" "syslog not available"
6650 fi
6651fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006652echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6653
Michael R. Hines2da776d2013-07-22 10:01:54 -04006654if test "$rdma" = "yes" ; then
6655 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006656 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006657fi
6658
Laurent Vivier575b22b2016-06-02 22:14:15 +02006659if test "$have_rtnetlink" = "yes" ; then
6660 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6661fi
6662
Klim Kireeved279a02018-01-12 12:01:19 +03006663if test "$libxml2" = "yes" ; then
6664 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6665 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6666 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6667fi
6668
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006669if test "$replication" = "yes" ; then
6670 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6671fi
6672
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006673if test "$have_af_vsock" = "yes" ; then
6674 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6675fi
6676
Christopher Covington4d043512016-12-28 15:04:33 -05006677if test "$have_sysmacros" = "yes" ; then
6678 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6679fi
6680
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006681if test "$have_static_assert" = "yes" ; then
6682 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6683fi
6684
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006685if test "$have_utmpx" = "yes" ; then
6686 echo "HAVE_UTMPX=y" >> $config_host_mak
6687fi
6688
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006689if test "$ivshmem" = "yes" ; then
6690 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6691fi
Richard Hendersone219c492017-09-28 09:01:23 -07006692if test "$capstone" != "no" ; then
Richard Henderson8ca80762017-09-14 09:41:12 -07006693 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6694fi
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006695
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006696# Hold two types of flag:
6697# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6698# a thread we have a handle to
6699# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6700# platform
6701if test "$pthread_setname_np" = "yes" ; then
6702 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6703 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6704fi
6705
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006706if test "$vxhs" = "yes" ; then
6707 echo "CONFIG_VXHS=y" >> $config_host_mak
6708 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6709fi
6710
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006711if test "$tcg_interpreter" = "yes"; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006712 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006713elif test "$ARCH" = "sparc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006714 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006715elif test "$ARCH" = "s390x" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006716 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006717elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006718 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006719elif test "$ARCH" = "ppc64" ; then
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006720 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006721else
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006722 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006723fi
Michael S. Tsirkin9edc19c2018-03-21 17:22:07 +02006724QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006725
Juan Quintela98ec69a2009-07-16 18:34:18 +02006726echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006727echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006728echo "MAKE=$make" >> $config_host_mak
6729echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006730echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6731echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006732echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6733echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006734echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006735echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006736if $iasl -h > /dev/null 2>&1; then
6737 echo "IASL=$iasl" >> $config_host_mak
6738fi
Juan Quintela804edf22009-07-27 16:12:49 +02006739echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006740echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006741echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006742echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006743echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006744echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006745echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006746echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006747echo "OBJCOPY=$objcopy" >> $config_host_mak
6748echo "LD=$ld" >> $config_host_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08006749echo "RANLIB=$ranlib" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006750echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006751echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006752echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006753echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006754echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006755echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006756echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006757if test "$sparse" = "yes" ; then
6758 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006759 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006760 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006761 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6762 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6763fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006764if test "$cross_prefix" != ""; then
6765 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6766else
6767 echo "AUTOCONF_HOST := " >> $config_host_mak
6768fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006769echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006770echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
Philippe Mathieu-Daudé8a99e9a2018-04-15 20:05:19 -03006771echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006772echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006773echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006774echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006775echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006776echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006777echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006778echo "DSOSUF=$DSOSUF" >> $config_host_mak
6779echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006780echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006781echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6782echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006783echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006784echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006785if test "$gcov" = "yes" ; then
6786 echo "CONFIG_GCOV=y" >> $config_host_mak
6787 echo "GCOV=$gcov_tool" >> $config_host_mak
6788fi
Juan Quintela804edf22009-07-27 16:12:49 +02006789
Alex Bennée51a12b52018-04-04 14:24:39 +01006790if test "$docker" != "no"; then
6791 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6792fi
6793
Peter Maydell6efd7512011-11-30 11:59:04 +00006794# use included Linux headers
6795if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006796 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006797 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006798 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006799 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006800 ;;
6801 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006802 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006803 ;;
6804 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006805 linux_arch=s390
6806 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006807 aarch64)
6808 linux_arch=arm64
6809 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006810 mips64)
6811 linux_arch=mips
6812 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006813 *)
6814 # For most CPUs the kernel architecture name and QEMU CPU name match.
6815 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006816 ;;
6817 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006818 # For non-KVM architectures we will not have asm headers
6819 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6820 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6821 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006822fi
6823
bellard1d14ffa2005-10-30 18:58:22 +00006824for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006825target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006826config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006827target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006828target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006829
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006830case "$target_name" in
Michael Weiser722dd7b2018-01-11 13:25:32 +00006831 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 +02006832 target_bigendian=yes
6833 ;;
6834esac
bellard97a847b2003-08-10 21:36:04 +00006835target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006836target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006837target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006838target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006839case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006840 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006841 target_softmmu="yes"
6842 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006843 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00006844 target_user_only="yes"
6845 target_linux_user="yes"
6846 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006847 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00006848 target_user_only="yes"
6849 target_bsd_user="yes"
6850 ;;
pbrook9e407a82007-05-26 16:38:53 +00006851 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006852 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00006853 exit 1
6854 ;;
6855esac
ths831b7822007-01-18 20:06:33 +00006856
Alex Bennéed75402b2018-04-04 20:27:05 +01006857target_compiler=""
6858target_compiler_static=""
Alex Bennée716a5072018-04-10 12:19:40 +01006859target_compiler_cflags=""
Alex Bennéed75402b2018-04-04 20:27:05 +01006860
bellard97a847b2003-08-10 21:36:04 +00006861mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02006862echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006863
pbrooke5fe0c52006-06-11 13:32:59 +00006864bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00006865mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02006866interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00006867gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00006868
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006869TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02006870TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02006871TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02006872
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006873case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00006874 i386)
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006875 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006876 target_compiler=$cross_cc_i386
Alex Bennée716a5072018-04-10 12:19:40 +01006877 target_compiler_cflags=$cross_cc_ccflags_i386
aurel322408a522008-04-20 20:19:44 +00006878 ;;
6879 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006880 TARGET_BASE_ARCH=i386
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006881 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006882 target_compiler=$cross_cc_x86_64
aurel322408a522008-04-20 20:19:44 +00006883 ;;
6884 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11006885 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01006886 target_compiler=$cross_cc_alpha
aurel322408a522008-04-20 20:19:44 +00006887 ;;
6888 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006889 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00006890 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006891 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00006892 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006893 target_compiler=$cross_cc_arm
Alex Bennéed422b2b2018-04-13 11:07:58 +01006894 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
aurel322408a522008-04-20 20:19:44 +00006895 ;;
Michael Weiser722dd7b2018-01-11 13:25:32 +00006896 aarch64|aarch64_be)
6897 TARGET_ARCH=aarch64
Alexander Graf6a49fa92013-09-03 20:12:22 +01006898 TARGET_BASE_ARCH=arm
6899 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006900 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01006901 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 +01006902 target_compiler=$cross_cc_aarch64
Alex Bennéed422b2b2018-04-13 11:07:58 +01006903 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
Alexander Graf6a49fa92013-09-03 20:12:22 +01006904 ;;
aurel322408a522008-04-20 20:19:44 +00006905 cris)
Alex Bennéed75402b2018-04-04 20:27:05 +01006906 target_compiler=$cross_cc_cris
aurel322408a522008-04-20 20:19:44 +00006907 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08006908 hppa)
Richard Henderson7b93dab2018-01-06 16:02:27 -08006909 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01006910 target_compiler=$cross_cc_hppa
Richard Henderson61766fe2016-12-15 11:26:14 -08006911 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01006912 lm32)
Alex Bennéed75402b2018-04-04 20:27:05 +01006913 target_compiler=$cross_cc_lm32
Michael Walle613a22c2011-02-17 23:45:17 +01006914 ;;
aurel322408a522008-04-20 20:19:44 +00006915 m68k)
aurel322408a522008-04-20 20:19:44 +00006916 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02006917 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006918 target_compiler=$cross_cc_m68k
aurel322408a522008-04-20 20:19:44 +00006919 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006920 microblaze|microblazeel)
6921 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006922 bflt="yes"
Edgar E. Iglesiasbe73ef62018-04-13 18:10:00 +02006923 echo "TARGET_ABI32=y" >> $config_target_mak
Alex Bennéed75402b2018-04-04 20:27:05 +01006924 target_compiler=$cross_cc_microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006925 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02006926 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006927 TARGET_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01006928 target_compiler=$cross_cc_mips
Juan Quintela25be2102009-10-07 02:41:00 +02006929 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006930 ;;
6931 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08006932 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006933 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01006934 target_compiler=$cross_cc_mipsn32
Juan Quintela25be2102009-10-07 02:41:00 +02006935 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08006936 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006937 ;;
6938 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006939 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006940 TARGET_BASE_ARCH=mips
Alex Bennéed75402b2018-04-04 20:27:05 +01006941 target_compiler=$cross_cc_mips64
Juan Quintela25be2102009-10-07 02:41:00 +02006942 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006943 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006944 moxie)
Alex Bennéed75402b2018-04-04 20:27:05 +01006945 target_compiler=$cross_cc_moxie
Anthony Greend15a9c22013-03-18 15:49:25 -04006946 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006947 nios2)
Alex Bennéed75402b2018-04-04 20:27:05 +01006948 target_compiler=$cross_cc_nios2
Marek Vasute6717112017-01-18 23:01:46 +01006949 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006950 or1k)
Alex Bennéed75402b2018-04-04 20:27:05 +01006951 target_compiler=$cross_cc_or1k
Jia Liue67db062012-07-20 15:50:39 +08006952 TARGET_ARCH=openrisc
6953 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08006954 ;;
aurel322408a522008-04-20 20:19:44 +00006955 ppc)
aurel32c8b35322009-01-24 15:07:34 +00006956 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006957 target_compiler=$cross_cc_powerpc
aurel322408a522008-04-20 20:19:44 +00006958 ;;
6959 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006960 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006961 TARGET_ABI_DIR=ppc
aurel32c8b35322009-01-24 15:07:34 +00006962 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
Alex Bennéed75402b2018-04-04 20:27:05 +01006963 target_compiler=$cross_cc_ppcemb
aurel322408a522008-04-20 20:19:44 +00006964 ;;
6965 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006966 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006967 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306968 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006969 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 +01006970 target_compiler=$cross_cc_ppc64
aurel322408a522008-04-20 20:19:44 +00006971 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05006972 ppc64le)
6973 TARGET_ARCH=ppc64
6974 TARGET_BASE_ARCH=ppc
6975 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306976 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006977 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 +01006978 target_compiler=$cross_cc_ppc64le
Doug Kwan9c351262014-05-29 09:12:21 -05006979 ;;
aurel322408a522008-04-20 20:19:44 +00006980 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006981 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006982 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006983 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02006984 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01006985 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 +01006986 target_compiler=$cross_cc_ppc64abi32
aurel322408a522008-04-20 20:19:44 +00006987 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13006988 riscv32)
6989 TARGET_BASE_ARCH=riscv
6990 TARGET_ABI_DIR=riscv
6991 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01006992 target_compiler=$cross_cc_riscv32
Michael Clark25fa1942018-03-03 01:32:59 +13006993 ;;
6994 riscv64)
6995 TARGET_BASE_ARCH=riscv
6996 TARGET_ABI_DIR=riscv
6997 mttcg=yes
Alex Bennéed75402b2018-04-04 20:27:05 +01006998 target_compiler=$cross_cc_riscv64
Michael Clark25fa1942018-03-03 01:32:59 +13006999 ;;
aurel322408a522008-04-20 20:19:44 +00007000 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007001 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00007002 bflt="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007003 target_compiler=$cross_cc_sh4
aurel322408a522008-04-20 20:19:44 +00007004 ;;
7005 sparc)
Alex Bennéed75402b2018-04-04 20:27:05 +01007006 target_compiler=$cross_cc_sparc
aurel322408a522008-04-20 20:19:44 +00007007 ;;
7008 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02007009 TARGET_BASE_ARCH=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007010 target_compiler=$cross_cc_sparc64
aurel322408a522008-04-20 20:19:44 +00007011 ;;
7012 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02007013 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02007014 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02007015 TARGET_ABI_DIR=sparc
Alex Bennéed75402b2018-04-04 20:27:05 +01007016 target_compiler=$cross_cc_sparc32plus
Juan Quintela25be2102009-10-07 02:41:00 +02007017 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00007018 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007019 s390x)
David Hildenbrand63685bc2018-01-29 13:56:20 +01007020 mttcg=yes
Christian Borntraeger86158a22017-03-08 12:41:14 +01007021 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 +01007022 target_compiler=$cross_cc_s390x
Alexander Graf24e804ec2009-12-05 12:44:22 +01007023 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08007024 tilegx)
Alex Bennéed75402b2018-04-04 20:27:05 +01007025 target_compiler=$cross_cc_tilegx
Chen Gang444e06b2015-08-21 05:43:37 +08007026 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007027 tricore)
Alex Bennéed75402b2018-04-04 20:27:05 +01007028 target_compiler=$cross_cc_tricore
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07007029 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007030 unicore32)
Alex Bennéed75402b2018-04-04 20:27:05 +01007031 target_compiler=$cross_cc_unicore32
Guan Xuetaod2fbca92011-04-12 16:27:03 +08007032 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007033 xtensa|xtensaeb)
7034 TARGET_ARCH=xtensa
Max Filippov9fb40342017-03-06 17:17:43 -08007035 mttcg="yes"
Alex Bennéed75402b2018-04-04 20:27:05 +01007036 target_compiler=$cross_cc_xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04007037 ;;
aurel322408a522008-04-20 20:19:44 +00007038 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01007039 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00007040 ;;
7041esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007042# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7043if [ "$TARGET_BASE_ARCH" = "" ]; then
7044 TARGET_BASE_ARCH=$TARGET_ARCH
7045fi
7046
Alex Bennéed75402b2018-04-04 20:27:05 +01007047# Do we have a cross compiler for this target?
7048if has $target_compiler; then
7049
7050 write_c_skeleton
7051
Alex Bennée716a5072018-04-10 12:19:40 +01007052 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007053 # For host systems we might get away with building without -static
Alex Bennée716a5072018-04-10 12:19:40 +01007054 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
Alex Bennéed75402b2018-04-04 20:27:05 +01007055 target_compiler=""
7056 else
7057 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7058 target_compiler_static="n"
7059 fi
7060 else
7061 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7062 target_compiler_static="y"
7063 fi
7064else
7065 target_compiler=""
7066fi
7067
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02007068symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7069
Daniel P. Berrange99afc912012-08-20 15:31:38 +01007070upper() {
7071 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7072}
7073
Stefan Weil89138852016-05-16 15:10:20 +02007074target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02007075echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01007076echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02007077echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02007078if [ "$TARGET_ABI_DIR" = "" ]; then
7079 TARGET_ABI_DIR=$TARGET_ARCH
7080fi
Juan Quintela25be2102009-10-07 02:41:00 +02007081echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07007082if [ "$HOST_VARIANT_DIR" != "" ]; then
7083 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7084fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007085
7086if supported_xen_target $target; then
7087 echo "CONFIG_XEN=y" >> $config_target_mak
7088 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00007089 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02007090 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007091fi
7092if supported_kvm_target $target; then
7093 echo "CONFIG_KVM=y" >> $config_target_mak
7094 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02007095 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02007096 if test "$vhost_user" = "yes" ; then
7097 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7098 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02007099 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02007100fi
7101if supported_hax_target $target; then
7102 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01007103fi
Sergio Andres Gomez Del Realc97d6d22017-09-13 04:05:09 -05007104if supported_hvf_target $target; then
7105 echo "CONFIG_HVF=y" >> $config_target_mak
7106fi
Justin Terry (VM)d661d9a2018-01-22 13:07:46 -08007107if supported_whpx_target $target; then
7108 echo "CONFIG_WHPX=y" >> $config_target_mak
7109fi
bellardde83cd02003-06-15 20:25:43 +00007110if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007111 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00007112fi
7113if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007114 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00007115 if test "$mttcg" = "yes" ; then
7116 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7117 fi
bellardde83cd02003-06-15 20:25:43 +00007118fi
bellard997344f2003-10-27 21:10:39 +00007119if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007120 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01007121 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00007122fi
ths831b7822007-01-18 20:06:33 +00007123if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007124 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00007125fi
pbrook56aebc82008-10-11 17:55:29 +00007126list=""
7127if test ! -z "$gdb_xml_files" ; then
7128 for x in $gdb_xml_files; do
7129 list="$list $source_path/gdb-xml/$x"
7130 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02007131 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00007132fi
bellardde83cd02003-06-15 20:25:43 +00007133
pbrooke5fe0c52006-06-11 13:32:59 +00007134if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02007135 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00007136fi
blueswir184778502008-10-26 20:33:16 +00007137if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007138 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00007139fi
bellard5b0753e2005-03-01 21:37:28 +00007140
Alex Bennéed75402b2018-04-04 20:27:05 +01007141if test -n "$target_compiler"; then
7142 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7143
7144 if test -n "$target_compiler_static"; then
7145 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7146 fi
Alex Bennée716a5072018-04-10 12:19:40 +01007147
7148 if test -n "$target_compiler_cflags"; then
7149 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7150 fi
Alex Bennéed75402b2018-04-04 20:27:05 +01007151fi
7152
Alex Bennée716a5072018-04-10 12:19:40 +01007153
Juan Quintela4afddb52009-08-03 14:46:45 +02007154# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02007155
Juan Quintela4afddb52009-08-03 14:46:45 +02007156cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02007157ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02007158
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007159disas_config() {
7160 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7161 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7162}
7163
Juan Quintela64656022009-08-03 14:46:53 +02007164for i in $ARCH $TARGET_BASE_ARCH ; do
7165 case "$i" in
7166 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007167 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02007168 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05007169 aarch64)
7170 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007171 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05007172 fi
7173 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007174 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007175 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007176 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007177 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00007178 fi
Juan Quintela64656022009-08-03 14:46:53 +02007179 ;;
7180 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007181 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02007182 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07007183 hppa)
7184 disas_config "HPPA"
7185 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07007186 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007187 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02007188 ;;
Michael Walle79368f42012-03-31 19:54:20 +02007189 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007190 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02007191 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007192 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007193 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02007194 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01007195 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007196 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02007197 ;;
7198 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007199 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02007200 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04007201 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007202 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04007203 ;;
Marek Vasute6717112017-01-18 23:01:46 +01007204 nios2)
7205 disas_config "NIOS2"
7206 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08007207 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007208 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08007209 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007210 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007211 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02007212 ;;
Michael Clark25fa1942018-03-03 01:32:59 +13007213 riscv)
7214 disas_config "RISCV"
7215 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01007216 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007217 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02007218 ;;
7219 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007220 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02007221 ;;
7222 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007223 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02007224 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04007225 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007226 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04007227 ;;
Juan Quintela64656022009-08-03 14:46:53 +02007228 esac
7229done
Stefan Weil9195b2c2011-10-19 07:07:18 +02007230if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07007231 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02007232fi
Juan Quintela64656022009-08-03 14:46:53 +02007233
Juan Quintela6ee71262009-08-03 14:46:47 +02007234case "$ARCH" in
7235alpha)
7236 # Ensure there's only a single GP
7237 cflags="-msmall-data $cflags"
7238;;
7239esac
7240
Juan Quintelad02c1db2009-08-03 14:46:50 +02007241if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02007242 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007243 if test "$target_linux_user" = "yes" ; then
7244 cflags="-p $cflags"
7245 ldflags="-p $ldflags"
7246 fi
7247 if test "$target_softmmu" = "yes" ; then
7248 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02007249 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02007250 fi
7251fi
7252
Juan Quintela9b8e1112009-08-03 14:46:46 +02007253if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07007254 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02007255fi
Juan Quintelafa282482009-07-22 22:37:39 +02007256
Christian Borntraegere9a35912017-08-23 12:16:23 +02007257# Newer kernels on s390 check for an S390_PGSTE program header and
7258# enable the pgste page table extensions in that case. This makes
7259# the vm.allocate_pgste sysctl unnecessary. We enable this program
7260# header if
7261# - we build on s390x
7262# - we build the system emulation for s390x (qemu-system-s390x)
7263# - KVM is enabled
7264# - the linker supports --s390-pgste
7265if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7266 if ld_has --s390-pgste ; then
7267 ldflags="-Wl,--s390-pgste $ldflags"
7268 fi
7269fi
7270
Juan Quintela25be2102009-10-07 02:41:00 +02007271echo "LDFLAGS+=$ldflags" >> $config_target_mak
7272echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02007273
bellard97a847b2003-08-10 21:36:04 +00007274done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00007275
Alex Bennéed75402b2018-04-04 20:27:05 +01007276if test -n "$enabled_cross_compilers"; then
7277 echo
7278 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7279fi
7280
Philippe Mathieu-Daudée3971d62018-04-15 20:05:20 -03007281if [ "$fdt" = "git" ]; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007282 echo "config-host.h: subdir-dtc" >> $config_host_mak
7283fi
Richard Hendersone219c492017-09-28 09:01:23 -07007284if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7285 echo "config-host.h: subdir-capstone" >> $config_host_mak
7286fi
7287if test -n "$LIBCAPSTONE"; then
7288 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7289fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10007290
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08007291if test "$numa" = "yes"; then
7292 echo "CONFIG_NUMA=y" >> $config_host_mak
7293fi
7294
John Snowfd0e6052015-03-25 18:57:39 -04007295if test "$ccache_cpp2" = "yes"; then
7296 echo "export CCACHE_CPP2=y" >> $config_host_mak
7297fi
7298
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007299# build tree in object directory in case the source is not in the current directory
Fam Zhengb1fb9a62017-09-05 10:11:58 +08007300DIRS="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 +02007301DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007302DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007303DIRS="$DIRS roms/seabios roms/vgabios"
Anthony Liguoric09015d2012-01-10 13:10:42 -06007304FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7305FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02007306FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007307FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02007308FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00007309FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007310FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01007311FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01007312FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07007313for bios_file in \
7314 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11007315 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01007316 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07007317 $source_path/pc-bios/*.rom \
7318 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00007319 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07007320 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01007321 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07007322 $source_path/pc-bios/palcode-*
7323do
Stefan Weil89138852016-05-16 15:10:20 +02007324 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007325done
Stefan Weil89138852016-05-16 15:10:20 +02007326for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007327do
Stefan Weil89138852016-05-16 15:10:20 +02007328 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02007329done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007330mkdir -p $DIRS
7331for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03007332 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01007333 symlink "$source_path/$f" "$f"
7334 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01007335done
Paul Brook1ad21342009-05-19 16:17:58 +01007336
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007337# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06007338for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007339 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01007340 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007341 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07007342 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07007343 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007344 echo "CC=$cc" >> $config_mak
7345 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00007346 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007347 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03007348 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007349 echo "LD=$ld" >> $config_mak
Alistair Francis9f81aeb2017-11-07 17:10:46 -08007350 echo "RANLIB=$ranlib" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05007351done
7352
Marc-André Lureaufe310172016-06-15 13:06:00 +02007353# set up tests data directory
Philippe Mathieu-Daudé1b145d52018-06-12 14:34:37 -03007354for tests_subdir in acceptance data; do
7355 if [ ! -e tests/$tests_subdir ]; then
7356 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7357 fi
7358done
Marc-André Lureaufe310172016-06-15 13:06:00 +02007359
Max Reitz76c75602014-05-24 23:24:56 +02007360# set up qemu-iotests in this build directory
7361iotests_common_env="tests/qemu-iotests/common.env"
7362iotests_check="tests/qemu-iotests/check"
7363
7364echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7365echo >> "$iotests_common_env"
7366echo "export PYTHON='$python'" >> "$iotests_common_env"
7367
7368if [ ! -e "$iotests_check" ]; then
7369 symlink "$source_path/$iotests_check" "$iotests_check"
7370fi
7371
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007372# Save the configure command line for later reuse.
7373cat <<EOD >config.status
7374#!/bin/sh
7375# Generated by configure.
7376# Run this file to recreate the current configuration.
7377# Compiler output produced by configure, useful for debugging
7378# configure, is in config.log if it exists.
7379EOD
7380printf "exec" >>config.status
7381printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00007382echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02007383chmod +x config.status
7384
Peter Maydell8cd05ab2014-05-23 17:07:24 +01007385rm -r "$TMPDIR1"