blob: fd7e3a5e81a1f03df5e6f1a33595d935b9e28b10 [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
63 echo $compiler "$@" >> config.log
64 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010065 # Test passed. If this is an --enable-werror build, rerun
66 # the test with -Werror and bail out if it fails. This
67 # makes warning-generating-errors in configure test code
68 # obvious to developers.
69 if test "$werror" != "yes"; then
70 return 0
71 fi
72 # Don't bother rerunning the compile if we were already using -Werror
73 case "$*" in
74 *-Werror*)
75 return 0
76 ;;
77 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000078 echo $compiler -Werror "$@" >> config.log
79 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010080 error_exit "configure test passed without -Werror but failed with -Werror." \
81 "This is probably a bug in the configure script. The failing command" \
82 "will be at the bottom of config.log." \
83 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010084}
85
Peter Maydell9c83ffd2014-02-25 18:27:49 +000086do_cc() {
87 do_compiler "$cc" "$@"
88}
89
90do_cxx() {
91 do_compiler "$cxx" "$@"
92}
93
94update_cxxflags() {
95 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
96 # options which some versions of GCC's C++ compiler complain about
97 # because they only make sense for C programs.
Bruno Dominguez11cde1c2017-06-06 14:07:47 +010098 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
99
Peter Maydell9c83ffd2014-02-25 18:27:49 +0000100 for arg in $QEMU_CFLAGS; do
101 case $arg in
102 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
103 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
104 ;;
105 *)
106 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
107 ;;
108 esac
109 done
110}
111
Juan Quintela52166aa2009-08-03 14:46:03 +0200112compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400113 local_cflags="$1"
114 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200115}
116
117compile_prog() {
118 local_cflags="$1"
119 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100120 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200121}
122
Paolo Bonzini11568d62010-12-23 11:43:58 +0100123# symbolically link $1 to $2. Portable version of "ln -sf".
124symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100125 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800126 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100127 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100128}
129
Loïc Minier0dba6192010-01-28 21:26:51 +0000130# check whether a command is available to this shell (may be either an
131# executable or a builtin)
132has() {
133 type "$1" >/dev/null 2>&1
134}
135
136# search for an executable in PATH
137path_of() {
138 local_command="$1"
139 local_ifs="$IFS"
140 local_dir=""
141
142 # pathname has a dir component?
143 if [ "${local_command#*/}" != "$local_command" ]; then
144 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
145 echo "$local_command"
146 return 0
147 fi
148 fi
149 if [ -z "$local_command" ]; then
150 return 1
151 fi
152
153 IFS=:
154 for local_dir in $PATH; do
155 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
156 echo "$local_dir/$local_command"
157 IFS="${local_ifs:-$(printf ' \t\n')}"
158 return 0
159 fi
160 done
161 # not found
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 1
164}
165
Lluís Vilanova5b808272014-05-27 15:02:14 +0200166have_backend () {
167 echo "$trace_backends" | grep "$1" >/dev/null
168}
169
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200170glob() {
171 eval test -z '"${1#'"$2"'}"'
172}
173
174supported_hax_target() {
175 test "$hax" = "yes" || return 1
176 glob "$1" "*-softmmu" || return 1
177 case "${1%-softmmu}" in
178 i386|x86_64)
179 return 0
180 ;;
181 esac
182 return 1
183}
184
185supported_kvm_target() {
186 test "$kvm" = "yes" || return 1
187 glob "$1" "*-softmmu" || return 1
188 case "${1%-softmmu}:$cpu" in
189 arm:arm | aarch64:aarch64 | \
190 i386:i386 | i386:x86_64 | i386:x32 | \
191 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
192 mips:mips | mipsel:mips | \
193 ppc:ppc | ppcemb:ppc | ppc64:ppc | \
194 ppc:ppc64 | ppcemb:ppc64 | ppc64:ppc64 | \
195 s390x:s390x)
196 return 0
197 ;;
198 esac
199 return 1
200}
201
202supported_xen_target() {
203 test "$xen" = "yes" || return 1
204 glob "$1" "*-softmmu" || return 1
Paolo Bonzinib5ed2e12017-07-11 12:00:49 +0200205 # Only i386 and x86_64 provide the xenpv machine.
206 case "${1%-softmmu}" in
207 i386|x86_64)
Paolo Bonzini3b6b7552012-09-17 11:59:41 +0200208 return 0
209 ;;
210 esac
211 return 1
212}
213
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200214supported_target() {
215 case "$1" in
216 *-softmmu)
217 ;;
218 *-linux-user)
219 if test "$linux" != "yes"; then
220 print_error "Target '$target' is only available on a Linux host"
221 return 1
222 fi
223 ;;
224 *-bsd-user)
225 if test "$bsd" != "yes"; then
226 print_error "Target '$target' is only available on a BSD host"
227 return 1
228 fi
229 ;;
230 *)
231 print_error "Invalid target name '$target'"
232 return 1
233 ;;
234 esac
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200235 test "$tcg" = "yes" && return 0
236 supported_kvm_target "$1" && return 0
237 supported_xen_target "$1" && return 0
238 supported_hax_target "$1" && return 0
239 print_error "TCG disabled, but hardware accelerator not available for '$target'"
240 return 1
Paolo Bonzinid880a3b2017-07-03 16:58:28 +0200241}
242
Christian Borntraegere9a35912017-08-23 12:16:23 +0200243
244ld_has() {
245 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
246}
247
bellard7d132992003-03-06 23:23:54 +0000248# default parameters
Stefan Weil89138852016-05-16 15:10:20 +0200249source_path=$(dirname "$0")
Juan Quintela2ff6b912009-08-03 14:45:55 +0200250cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300251iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000252interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000253static="no"
bellard7d132992003-03-06 23:23:54 +0000254cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000255audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800256block_drv_rw_whitelist=""
257block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000258host_cc="cc"
Juan Quintela73da3752009-08-03 14:46:26 +0200259libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200260libs_tools=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200261audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400262audio_win_int=""
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +0200263cc_i386=i386-pc-linux-gnu-gcc
Michael Roth957f1f92011-08-11 15:38:12 -0500264libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100265debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100266stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000267
Stefan Weilafb63eb2012-09-26 22:04:38 +0200268# Don't accept a target_list environment variable.
269unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100270
271# Default value for a variable defining feature "foo".
272# * foo="no" feature will only be used if --enable-foo arg is given
273# * foo="" feature will be searched for, and if found, will be used
274# unless --disable-foo is given
275# * foo="yes" this value will only be set by --enable-foo flag.
276# feature will searched for,
277# if not found, configure exits with error
278#
279# Always add --enable-foo and --disable-foo command line args.
280# Distributions want to ensure that several features are compiled in, and it
281# is impossible without a --enable-foo that exits if a feature is not found.
282
283bluez=""
284brlapi=""
285curl=""
286curses=""
287docs=""
288fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100289netmap="no"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +0200290pixman=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100291sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400292sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530293virtfs=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100294vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100295sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100296vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100297vnc_sasl=""
298vnc_jpeg=""
299vnc_png=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100300xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000301xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000302xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000303xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100304linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500305cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100306attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200307libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100308xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200309tcg="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100310
Bradd41a75a2011-07-26 23:11:26 -0400311vhost_net="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000312vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100313vhost_vsock="no"
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200314vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400315kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100316hax="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400317rdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100318gprof="no"
319debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100320debug="no"
John Snowb553a042015-11-03 15:43:42 -0500321fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100322strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200323tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100324bigendian="no"
325mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000326gcov="no"
327gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100328EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800329DSOSUF=".so"
330LDFLAGS_SHARED="-shared"
331modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100332prefix="/usr/local"
333mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300334datadir="\${prefix}/share"
Eduardo Habkost850da182012-04-18 16:55:38 -0300335qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100336bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300337libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400338libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200339includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100340sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300341local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100342confsuffix="/qemu"
343slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100344oss_lib=""
345bsd="no"
346linux="no"
347solaris="no"
348profiler="no"
349cocoa="no"
350softmmu="yes"
351linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100352bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100353blobs="yes"
354pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200355pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200356qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300357trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100358trace_file="trace"
359spice=""
360rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200361smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100362libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200363usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100364opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100365opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000366cpuid_h="no"
Liang Li99f2dbd2016-03-08 13:53:16 +0800367avx2_opt="no"
Alon Levy1ece9902011-07-26 12:30:40 +0300368zlib="yes"
Stefan Weilb25c9df2014-04-29 08:21:16 +0200369lzo=""
370snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100371bzip2=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400372guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400373guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500374guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300375guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400376vss_win32_sdk=""
377win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100378want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100379libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100380libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100381coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200382coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200383debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400384crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300385seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530386glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400387glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530388glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530389glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530390glusterfs_zerofill="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600391gtk=""
Stefan Weil9e04c682014-05-17 16:29:18 +0200392gtkabi=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200393gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100394tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100395gnutls=""
Daniel P. Berrangeb917da42015-10-31 14:39:52 +0900396gnutls_rnd=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100397nettle=""
Daniel P. Berrangefff2f982016-03-29 15:47:51 +0100398nettle_kdf="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100399gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800400gcrypt_hmac="no"
Daniel P. Berrange37788f22015-10-14 13:14:04 +0100401gcrypt_kdf="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100402vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200403virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400404tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100405libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100406live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800407numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800408tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200409jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800410replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700411vxhs=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100412
Peter Maydell898be3e2017-03-21 14:31:57 +0000413supported_cpu="no"
414supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100415bogus_os="no"
Peter Maydell898be3e2017-03-21 14:31:57 +0000416
aliguoriac0df512008-12-29 17:14:15 +0000417# parse CC options first
418for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200419 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000420 case "$opt" in
421 --cross-prefix=*) cross_prefix="$optarg"
422 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100423 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000424 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400425 --cxx=*) CXX="$optarg"
426 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100427 --source-path=*) source_path="$optarg"
428 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200429 --cpu=*) cpu="$optarg"
430 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100431 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100432 EXTRA_CFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200433 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100434 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
435 EXTRA_CXXFLAGS="$optarg"
436 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100437 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100438 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200439 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100440 --enable-debug-info) debug_info="yes"
441 ;;
442 --disable-debug-info) debug_info="no"
443 ;;
aliguoriac0df512008-12-29 17:14:15 +0000444 esac
445done
aliguoriac0df512008-12-29 17:14:15 +0000446# OS specific
447# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100448# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000449
Peter Maydelle49d0212012-12-07 15:39:13 +0000450# Preferred compiler:
451# ${CC} (if set)
452# ${cross_prefix}gcc (if cross-prefix specified)
453# system compiler
454if test -z "${CC}${cross_prefix}"; then
455 cc="$host_cc"
456else
457 cc="${CC-${cross_prefix}gcc}"
458fi
459
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400460if test -z "${CXX}${cross_prefix}"; then
461 cxx="c++"
462else
463 cxx="${CXX-${cross_prefix}g++}"
464fi
465
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500466ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700467as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700468ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000469cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500470objcopy="${OBJCOPY-${cross_prefix}objcopy}"
471ld="${LD-${cross_prefix}ld}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200472nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500473strip="${STRIP-${cross_prefix}strip}"
474windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300475pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
476query_pkg_config() {
477 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
478}
479pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500480sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000481sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000482
Peter Maydell45d285a2013-10-21 21:03:06 +0100483# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
484ARFLAGS="${ARFLAGS-rv}"
485
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200486# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100487# We use -fwrapv to tell the compiler that we require a C dialect where
488# left shift of signed integers is well defined and has the expected
489# 2s-complement style results. (Both clang and gcc agree that it
490# provides these semantics.)
491QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400492QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100493QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200494QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Yang Zhong244f1442017-06-02 14:06:45 +0800495QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100496if test "$debug_info" = "yes"; then
497 CFLAGS="-g $CFLAGS"
498 LDFLAGS="-g $LDFLAGS"
499fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200500
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100501# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200502source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100503
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300504# running configure in the source tree?
505# we know that's the case if configure is there.
506if test -f "./configure"; then
507 pwd_is_source_path="y"
508else
509 pwd_is_source_path="n"
510fi
511
aliguoriac0df512008-12-29 17:14:15 +0000512check_define() {
513cat > $TMPC <<EOF
514#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000515#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000516#endif
517int main(void) { return 0; }
518EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200519 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000520}
521
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200522check_include() {
523cat > $TMPC <<EOF
524#include <$1>
525int main(void) { return 0; }
526EOF
527 compile_object
528}
529
John Snow93b25862015-03-25 18:57:37 -0400530write_c_skeleton() {
531 cat > $TMPC <<EOF
532int main(void) { return 0; }
533EOF
534}
535
Peter Maydellbbea4052012-08-14 15:35:34 +0100536if check_define __linux__ ; then
537 targetos="Linux"
538elif check_define _WIN32 ; then
539 targetos='MINGW32'
540elif check_define __OpenBSD__ ; then
541 targetos='OpenBSD'
542elif check_define __sun__ ; then
543 targetos='SunOS'
544elif check_define __HAIKU__ ; then
545 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100546elif check_define __FreeBSD__ ; then
547 targetos='FreeBSD'
548elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
549 targetos='GNU/kFreeBSD'
550elif check_define __DragonFly__ ; then
551 targetos='DragonFly'
552elif check_define __NetBSD__; then
553 targetos='NetBSD'
554elif check_define __APPLE__; then
555 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100556else
Peter Maydell951fedf2017-07-13 16:15:32 +0100557 # This is a fatal error, but don't report it yet, because we
558 # might be going to just print the --help text, or it might
559 # be the result of a missing compiler.
560 targetos='bogus'
561 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100562fi
563
564# Some host OSes need non-standard checks for which CPU to use.
565# Note that these checks are broken for cross-compilation: if you're
566# cross-compiling to one of these OSes then you'll need to specify
567# the correct CPU with the --cpu option.
568case $targetos in
569Darwin)
570 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
571 # run 64-bit userspace code.
572 # If the user didn't specify a CPU explicitly and the kernel says this is
573 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
574 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
575 cpu="x86_64"
576 fi
577 ;;
578SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200579 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100580 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
581 cpu="x86_64"
582 fi
583esac
584
Juan Quintela2ff6b912009-08-03 14:45:55 +0200585if test ! -z "$cpu" ; then
586 # command line argument
587 :
588elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000589 cpu="i386"
590elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700591 if check_define __ILP32__ ; then
592 cpu="x32"
593 else
594 cpu="x86_64"
595 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000596elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000597 if check_define __arch64__ ; then
598 cpu="sparc64"
599 else
600 cpu="sparc"
601 fi
malcfdf7ed92009-01-14 18:39:52 +0000602elif check_define _ARCH_PPC ; then
603 if check_define _ARCH_PPC64 ; then
604 cpu="ppc64"
605 else
606 cpu="ppc"
607 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200608elif check_define __mips__ ; then
609 cpu="mips"
Aurelien Jarno477ba622010-03-29 02:12:51 +0200610elif check_define __ia64__ ; then
611 cpu="ia64"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200612elif check_define __s390__ ; then
613 if check_define __s390x__ ; then
614 cpu="s390x"
615 else
616 cpu="s390"
617 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100618elif check_define __arm__ ; then
619 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100620elif check_define __aarch64__ ; then
621 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000622else
Stefan Weil89138852016-05-16 15:10:20 +0200623 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000624fi
625
Peter Maydell359bc952011-12-24 13:07:25 +0000626ARCH=
627# Normalise host CPU name and set ARCH.
628# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000629case "$cpu" in
Peter Maydell6499fd12017-03-28 11:58:38 +0100630 ppc|ppc64|s390|s390x|sparc64|x32)
Peter Maydell898be3e2017-03-21 14:31:57 +0000631 cpu="$cpu"
632 supported_cpu="yes"
633 ;;
bellard7d132992003-03-06 23:23:54 +0000634 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000635 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000636 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000637 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000638 x86_64|amd64)
639 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000640 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000641 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100642 armv*b|armv*l|arm)
643 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000644 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000645 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100646 aarch64)
647 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000648 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100649 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200650 mips*)
651 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000652 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200653 ;;
blueswir131422552007-04-16 18:27:06 +0000654 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000655 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100656 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000657 ;;
bellard7d132992003-03-06 23:23:54 +0000658 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000659 # This will result in either an error or falling back to TCI later
660 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000661 ;;
662esac
Peter Maydell359bc952011-12-24 13:07:25 +0000663if test -z "$ARCH"; then
664 ARCH="$cpu"
665fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200666
bellard7d132992003-03-06 23:23:54 +0000667# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200668
Stacey Sonadfc3e92014-06-08 09:57:22 -0700669# host *BSD for user mode
670HOST_VARIANT_DIR=""
671
bellard7d132992003-03-06 23:23:54 +0000672case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000673MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200674 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100675 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200676 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200677 if check_include dsound.h; then
678 audio_drv_list="dsound"
679 else
680 audio_drv_list=""
681 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000682 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000683;;
ths5c40d2b2007-06-23 16:03:36 +0000684GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100685 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200686 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200687 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000688;;
bellard7d3505c2004-05-12 19:32:15 +0000689FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200690 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100691 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200692 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200693 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100694 # needed for kinfo_getvmmap(3) in libutil.h
695 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500696 # needed for kinfo_getproc
697 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100698 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700699 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000700 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000701;;
blueswir1c5e97232009-03-07 20:06:23 +0000702DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200703 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100704 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200705 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200706 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700707 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000708;;
bellard7d3505c2004-05-12 19:32:15 +0000709NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200710 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100711 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200712 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200713 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200714 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700715 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200716 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000717;;
718OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200719 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100720 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400721 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200722 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700723 HOST_VARIANT_DIR="openbsd"
bellard7d3505c2004-05-12 19:32:15 +0000724;;
bellard83fb7ad2004-07-05 21:25:26 +0000725Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200726 bsd="yes"
727 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100728 hax="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800729 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200730 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200731 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200732 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200733 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200734 cocoa="yes"
735 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200736 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200737 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200738 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100739 # Disable attempts to use ObjectiveC features in os/object.h since they
740 # won't work when we're compiling with gcc as a C compiler.
741 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700742 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000743 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000744;;
bellardec530c82006-04-25 22:36:06 +0000745SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200746 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100747 make="${MAKE-gmake}"
748 install="${INSTALL-ginstall}"
Blue Swirlfa589482009-10-02 19:38:25 +0000749 ld="gld"
Brade2d88302011-09-02 16:53:28 -0400750 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200751 if test -f /usr/include/sys/soundcard.h ; then
752 audio_drv_list="oss"
753 fi
754 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000755# needed for CMSG_ macros in sys/socket.h
756 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
757# needed for TIOCWIN* defines in termios.h
758 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200759 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200760 solarisnetlibs="-lsocket -lnsl -lresolv"
761 LIBS="$solarisnetlibs $LIBS"
762 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000763;;
Andreas Färber179cf402010-09-20 00:50:43 +0200764Haiku)
765 haiku="yes"
766 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
767 LIBS="-lposix_error_mapper -lnetwork $LIBS"
768;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000769Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200770 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200771 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200772 linux="yes"
773 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200774 kvm="yes"
775 vhost_net="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000776 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100777 vhost_vsock="yes"
Alexey Kardashevskiya5851402013-05-29 23:30:43 +1000778 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000779 supported_os="yes"
780;;
bellard7d132992003-03-06 23:23:54 +0000781esac
782
bellard7d3505c2004-05-12 19:32:15 +0000783if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000784 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200785 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000786 fi
bellard7d3505c2004-05-12 19:32:15 +0000787fi
788
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100789: ${make=${MAKE-make}}
790: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100791: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400792: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100793
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100794# Default objcc to clang if available, otherwise use CC
795if has clang; then
796 objcc=clang
797else
798 objcc="$cc"
799fi
800
Juan Quintela3457a3f2009-08-03 14:46:07 +0200801if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200802 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800803 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200804 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100805 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
806 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100807 # MinGW needs -mthreads for TLS and macro _MT.
808 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100809 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400810 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100811 if compile_prog "" "-liberty" ; then
812 LIBS="-liberty $LIBS"
813 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200814 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200815 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300816 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300817 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200818 bindir="\${prefix}"
819 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200820 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200821 confsuffix=""
Vinzenz Feenstra161a56a2017-04-19 11:26:15 +0200822 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200823fi
824
Anthony Liguori487fefd2009-06-11 13:28:25 -0500825werror=""
bellard85aa5182007-11-11 20:17:03 +0000826
bellard7d132992003-03-06 23:23:54 +0000827for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200828 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000829 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000830 --help|-h) show_help=yes
831 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400832 --version|-V) exec cat $source_path/VERSION
833 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000834 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000835 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000836 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000837 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100838 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000839 ;;
aliguoriac0df512008-12-29 17:14:15 +0000840 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000841 ;;
aliguoriac0df512008-12-29 17:14:15 +0000842 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000843 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000844 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000845 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400846 --cxx=*)
847 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200848 --iasl=*) iasl="$optarg"
849 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100850 --objcc=*) objcc="$optarg"
851 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000852 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000853 ;;
pbrook6a882642006-04-17 13:57:12 +0000854 --install=*) install="$optarg"
855 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000856 --python=*) python="$optarg"
857 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000858 --gcov=*) gcov_tool="$optarg"
859 ;;
Brade2d88302011-09-02 16:53:28 -0400860 --smbd=*) smbd="$optarg"
861 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200862 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000863 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100864 --extra-cxxflags=*)
865 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200866 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000867 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100868 --enable-debug-info)
869 ;;
870 --disable-debug-info)
871 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800872 --enable-modules)
873 modules="yes"
874 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000875 --disable-modules)
876 modules="no"
877 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200878 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000879 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000880 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000881 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +0200882 --enable-trace-backends=*) trace_backends="$optarg"
883 ;;
884 # XXX: backwards compatibility
885 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100886 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100887 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100888 ;;
bellard7d132992003-03-06 23:23:54 +0000889 --enable-gprof) gprof="yes"
890 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000891 --enable-gcov) gcov="yes"
892 ;;
Loïc Minier79427692010-01-31 12:23:45 +0100893 --static)
894 static="yes"
895 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300896 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +0000897 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200898 --mandir=*) mandir="$optarg"
899 ;;
900 --bindir=*) bindir="$optarg"
901 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300902 --libdir=*) libdir="$optarg"
903 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400904 --libexecdir=*) libexecdir="$optarg"
905 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +0200906 --includedir=*) includedir="$optarg"
907 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300908 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200909 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -0300910 --with-confsuffix=*) confsuffix="$optarg"
911 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -0300912 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200913 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +0100914 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -0600915 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300916 --localstatedir=*) local_statedir="$optarg"
917 ;;
918 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +0400919 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
920 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
921 # These switches are silently ignored, for compatibility with
922 # autoconf-generated configure scripts. This allows QEMU's
923 # configure to be used by RPM and similar macros that set
924 # lots of directory switches by default.
925 ;;
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +0200926 --with-system-pixman) pixman="system"
927 ;;
928 --without-system-pixman) pixman="internal"
929 ;;
Robert Schiele74880fe2012-12-04 16:58:08 +0100930 --without-pixman) pixman="none"
931 ;;
bellard97a847b2003-08-10 21:36:04 +0000932 --disable-sdl) sdl="no"
933 ;;
Juan Quintelac4198152009-08-12 18:29:53 +0200934 --enable-sdl) sdl="yes"
935 ;;
Dave Airlie47c03742013-12-10 14:05:51 +1000936 --with-sdlabi=*) sdlabi="$optarg"
937 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +0200938 --disable-qom-cast-debug) qom_cast_debug="no"
939 ;;
940 --enable-qom-cast-debug) qom_cast_debug="yes"
941 ;;
Meador Inge983eef52012-02-24 14:00:42 +0530942 --disable-virtfs) virtfs="no"
943 ;;
944 --enable-virtfs) virtfs="yes"
945 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +0100946 --disable-vnc) vnc="no"
947 ;;
948 --enable-vnc) vnc="yes"
949 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +0000950 --oss-lib=*) oss_lib="$optarg"
951 ;;
malc0c58ac12008-06-25 21:04:05 +0000952 --audio-drv-list=*) audio_drv_list="$optarg"
953 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200954 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800955 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200956 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +0100957 ;;
aurel32f8393942009-04-13 18:45:38 +0000958 --enable-debug-tcg) debug_tcg="yes"
959 ;;
960 --disable-debug-tcg) debug_tcg="no"
961 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +0100962 --enable-debug)
963 # Enable debugging options that aren't excessively noisy
964 debug_tcg="yes"
965 debug="yes"
966 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -0500967 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +0100968 ;;
aliguori03b4fe72008-10-07 19:16:17 +0000969 --enable-sparse) sparse="yes"
970 ;;
971 --disable-sparse) sparse="no"
972 ;;
aliguori1625af82009-04-05 17:41:02 +0000973 --disable-strip) strip_opt="no"
974 ;;
aliguori2f9606b2009-03-06 20:27:28 +0000975 --disable-vnc-sasl) vnc_sasl="no"
976 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +0200977 --enable-vnc-sasl) vnc_sasl="yes"
978 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +0200979 --disable-vnc-jpeg) vnc_jpeg="no"
980 ;;
981 --enable-vnc-jpeg) vnc_jpeg="yes"
982 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +0200983 --disable-vnc-png) vnc_png="no"
984 ;;
985 --enable-vnc-png) vnc_png="yes"
986 ;;
bellard443f1372004-06-04 11:13:20 +0000987 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +0000988 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +0000989 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +0000990 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +0200991 --enable-vde) vde="yes"
992 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +0100993 --disable-netmap) netmap="no"
994 ;;
995 --enable-netmap) netmap="yes"
996 ;;
aliguorie37630c2009-04-22 15:19:10 +0000997 --disable-xen) xen="no"
998 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +0200999 --enable-xen) xen="yes"
1000 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001001 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1002 ;;
1003 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1004 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +00001005 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1006 ;;
1007 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1008 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001009 --disable-brlapi) brlapi="no"
1010 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001011 --enable-brlapi) brlapi="yes"
1012 ;;
balrogfb599c92008-09-28 23:49:55 +00001013 --disable-bluez) bluez="no"
1014 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001015 --enable-bluez) bluez="yes"
1016 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001017 --disable-kvm) kvm="no"
1018 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001019 --enable-kvm) kvm="yes"
1020 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001021 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001022 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001023 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001024 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001025 --disable-tcg-interpreter) tcg_interpreter="no"
1026 ;;
1027 --enable-tcg-interpreter) tcg_interpreter="yes"
1028 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001029 --disable-cap-ng) cap_ng="no"
1030 ;;
1031 --enable-cap-ng) cap_ng="yes"
1032 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001033 --disable-tcg) tcg="no"
1034 ;;
1035 --enable-tcg) tcg="yes"
1036 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001037 --disable-spice) spice="no"
1038 ;;
1039 --enable-spice) spice="yes"
1040 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001041 --disable-libiscsi) libiscsi="no"
1042 ;;
1043 --enable-libiscsi) libiscsi="yes"
1044 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001045 --disable-libnfs) libnfs="no"
1046 ;;
1047 --enable-libnfs) libnfs="yes"
1048 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001049 --enable-profiler) profiler="yes"
1050 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001051 --disable-cocoa) cocoa="no"
1052 ;;
malcc2de5c92008-06-28 19:13:06 +00001053 --enable-cocoa)
1054 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001055 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001056 ;;
pbrookcad25d62006-03-19 16:31:11 +00001057 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001058 ;;
pbrookcad25d62006-03-19 16:31:11 +00001059 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001060 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001061 --disable-user)
1062 linux_user="no" ;
1063 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001064 ;;
1065 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001066 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001067 ;;
ths831b7822007-01-18 20:06:33 +00001068 --enable-linux-user) linux_user="yes"
1069 ;;
blueswir184778502008-10-26 20:33:16 +00001070 --disable-bsd-user) bsd_user="no"
1071 ;;
1072 --enable-bsd-user) bsd_user="yes"
1073 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001074 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001075 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001076 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001077 ;;
bellard85aa5182007-11-11 20:17:03 +00001078 --enable-werror) werror="yes"
1079 ;;
1080 --disable-werror) werror="no"
1081 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001082 --enable-stack-protector) stack_protector="yes"
1083 ;;
1084 --disable-stack-protector) stack_protector="no"
1085 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001086 --disable-curses) curses="no"
1087 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001088 --enable-curses) curses="yes"
1089 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001090 --disable-curl) curl="no"
1091 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001092 --enable-curl) curl="yes"
1093 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001094 --disable-fdt) fdt="no"
1095 ;;
1096 --enable-fdt) fdt="yes"
1097 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001098 --disable-linux-aio) linux_aio="no"
1099 ;;
1100 --enable-linux-aio) linux_aio="yes"
1101 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001102 --disable-attr) attr="no"
1103 ;;
1104 --enable-attr) attr="yes"
1105 ;;
ths77755342008-11-27 15:45:16 +00001106 --disable-blobs) blobs="no"
1107 ;;
pbrook4a19f1e2009-04-07 23:17:49 +00001108 --with-pkgversion=*) pkgversion=" ($optarg)"
1109 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001110 --with-coroutine=*) coroutine="$optarg"
1111 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001112 --disable-coroutine-pool) coroutine_pool="no"
1113 ;;
1114 --enable-coroutine-pool) coroutine_pool="yes"
1115 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001116 --enable-debug-stack-usage) debug_stack_usage="yes"
1117 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001118 --enable-crypto-afalg) crypto_afalg="yes"
1119 ;;
1120 --disable-crypto-afalg) crypto_afalg="no"
1121 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001122 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001123 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001124 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001125 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001126 --disable-vhost-net) vhost_net="no"
1127 ;;
1128 --enable-vhost-net) vhost_net="yes"
1129 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001130 --disable-vhost-scsi) vhost_scsi="no"
1131 ;;
1132 --enable-vhost-scsi) vhost_scsi="yes"
1133 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001134 --disable-vhost-vsock) vhost_vsock="no"
1135 ;;
1136 --enable-vhost-vsock) vhost_vsock="yes"
1137 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001138 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001139 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001140 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001141 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001142 --disable-rbd) rbd="no"
1143 ;;
1144 --enable-rbd) rbd="yes"
1145 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001146 --disable-xfsctl) xfs="no"
1147 ;;
1148 --enable-xfsctl) xfs="yes"
1149 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001150 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001151 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001152 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001153 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001154 --disable-libusb) libusb="no"
1155 ;;
1156 --enable-libusb) libusb="yes"
1157 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001158 --disable-usb-redir) usb_redir="no"
1159 ;;
1160 --enable-usb-redir) usb_redir="yes"
1161 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001162 --disable-zlib-test) zlib="no"
1163 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001164 --disable-lzo) lzo="no"
1165 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001166 --enable-lzo) lzo="yes"
1167 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001168 --disable-snappy) snappy="no"
1169 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001170 --enable-snappy) snappy="yes"
1171 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001172 --disable-bzip2) bzip2="no"
1173 ;;
1174 --enable-bzip2) bzip2="yes"
1175 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001176 --enable-guest-agent) guest_agent="yes"
1177 ;;
1178 --disable-guest-agent) guest_agent="no"
1179 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001180 --enable-guest-agent-msi) guest_agent_msi="yes"
1181 ;;
1182 --disable-guest-agent-msi) guest_agent_msi="no"
1183 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001184 --with-vss-sdk) vss_win32_sdk=""
1185 ;;
1186 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1187 ;;
1188 --without-vss-sdk) vss_win32_sdk="no"
1189 ;;
1190 --with-win-sdk) win_sdk=""
1191 ;;
1192 --with-win-sdk=*) win_sdk="$optarg"
1193 ;;
1194 --without-win-sdk) win_sdk="no"
1195 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001196 --enable-tools) want_tools="yes"
1197 ;;
1198 --disable-tools) want_tools="no"
1199 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001200 --enable-seccomp) seccomp="yes"
1201 ;;
1202 --disable-seccomp) seccomp="no"
1203 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301204 --disable-glusterfs) glusterfs="no"
1205 ;;
1206 --enable-glusterfs) glusterfs="yes"
1207 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001208 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1209 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001210 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001211 --enable-vhdx|--disable-vhdx)
1212 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1213 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001214 --enable-uuid|--disable-uuid)
1215 echo "$0: $opt is obsolete, UUID support is always built" >&2
1216 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001217 --disable-gtk) gtk="no"
1218 ;;
1219 --enable-gtk) gtk="yes"
1220 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001221 --tls-priority=*) tls_priority="$optarg"
1222 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001223 --disable-gnutls) gnutls="no"
1224 ;;
1225 --enable-gnutls) gnutls="yes"
1226 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001227 --disable-nettle) nettle="no"
1228 ;;
1229 --enable-nettle) nettle="yes"
1230 ;;
1231 --disable-gcrypt) gcrypt="no"
1232 ;;
1233 --enable-gcrypt) gcrypt="yes"
1234 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001235 --enable-rdma) rdma="yes"
1236 ;;
1237 --disable-rdma) rdma="no"
1238 ;;
Daniel P. Berrange528de902013-02-25 15:20:44 +00001239 --with-gtkabi=*) gtkabi="$optarg"
1240 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001241 --disable-vte) vte="no"
1242 ;;
1243 --enable-vte) vte="yes"
1244 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001245 --disable-virglrenderer) virglrenderer="no"
1246 ;;
1247 --enable-virglrenderer) virglrenderer="yes"
1248 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001249 --disable-tpm) tpm="no"
1250 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001251 --enable-tpm) tpm="yes"
1252 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001253 --disable-libssh2) libssh2="no"
1254 ;;
1255 --enable-libssh2) libssh2="yes"
1256 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001257 --disable-live-block-migration) live_block_migration="no"
1258 ;;
1259 --enable-live-block-migration) live_block_migration="yes"
1260 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001261 --disable-numa) numa="no"
1262 ;;
1263 --enable-numa) numa="yes"
1264 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001265 --disable-tcmalloc) tcmalloc="no"
1266 ;;
1267 --enable-tcmalloc) tcmalloc="yes"
1268 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001269 --disable-jemalloc) jemalloc="no"
1270 ;;
1271 --enable-jemalloc) jemalloc="yes"
1272 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001273 --disable-replication) replication="no"
1274 ;;
1275 --enable-replication) replication="yes"
1276 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001277 --disable-vxhs) vxhs="no"
1278 ;;
1279 --enable-vxhs) vxhs="yes"
1280 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001281 --disable-vhost-user) vhost_user="no"
1282 ;;
1283 --enable-vhost-user)
1284 vhost_user="yes"
1285 if test "$mingw32" = "yes"; then
1286 error_exit "vhost-user isn't available on win32"
1287 fi
1288 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001289 *)
1290 echo "ERROR: unknown option $opt"
1291 echo "Try '$0 --help' for more information"
1292 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001293 ;;
bellard7d132992003-03-06 23:23:54 +00001294 esac
1295done
1296
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001297if test "$vhost_user" = ""; then
1298 if test "$mingw32" = "yes"; then
1299 vhost_user="no"
1300 else
1301 vhost_user="yes"
1302 fi
1303fi
1304
bellard40293e52008-01-31 11:32:10 +00001305case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001306 ppc)
1307 CPU_CFLAGS="-m32"
1308 LDFLAGS="-m32 $LDFLAGS"
1309 ;;
1310 ppc64)
1311 CPU_CFLAGS="-m64"
1312 LDFLAGS="-m64 $LDFLAGS"
1313 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001314 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001315 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1316 LDFLAGS="-m32 -mv8plus $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001317 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001318 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001319 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001320 LDFLAGS="-m64 $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001321 ;;
ths76d83bd2007-11-18 21:22:10 +00001322 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001323 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001324 LDFLAGS="-m31 $LDFLAGS"
1325 ;;
1326 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001327 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001328 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001329 ;;
bellard40293e52008-01-31 11:32:10 +00001330 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001331 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001332 LDFLAGS="-m32 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001333 cc_i386='$(CC) -m32'
bellard40293e52008-01-31 11:32:10 +00001334 ;;
1335 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001336 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1337 # If we truly care, we should simply detect this case at
1338 # runtime and generate the fallback to serial emulation.
1339 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001340 LDFLAGS="-m64 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001341 cc_i386='$(CC) -m32'
Paul Brook379f6692009-07-17 12:48:08 +01001342 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001343 x32)
1344 CPU_CFLAGS="-mx32"
1345 LDFLAGS="-mx32 $LDFLAGS"
1346 cc_i386='$(CC) -m32'
1347 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001348 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001349esac
1350
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001351QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1352EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1353
Peter Maydellaffc88c2016-06-13 11:32:24 +01001354# For user-mode emulation the host arch has to be one we explicitly
1355# support, even if we're using TCI.
1356if [ "$ARCH" = "unknown" ]; then
1357 bsd_user="no"
1358 linux_user="no"
1359fi
1360
Peter Maydell60e0df22011-05-03 14:50:13 +01001361default_target_list=""
1362
Peter Maydell6e92f822013-05-20 16:16:15 +01001363mak_wilds=""
1364
1365if [ "$softmmu" = "yes" ]; then
1366 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001367fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001368if [ "$linux_user" = "yes" ]; then
1369 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001370fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001371if [ "$bsd_user" = "yes" ]; then
1372 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001373fi
1374
Peter Maydell6e92f822013-05-20 16:16:15 +01001375for config in $mak_wilds; do
1376 default_target_list="${default_target_list} $(basename "$config" .mak)"
1377done
1378
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001379# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001380trace_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 +01001381
pbrookaf5db582006-04-08 14:26:41 +00001382if test x"$show_help" = x"yes" ; then
1383cat << EOF
1384
1385Usage: configure [options]
1386Options: [defaults in brackets after descriptions]
1387
Stefan Weil08fb77e2013-12-18 22:09:39 +01001388Standard options:
1389 --help print this message
1390 --prefix=PREFIX install in PREFIX [$prefix]
1391 --interp-prefix=PREFIX where to find shared libraries, etc.
1392 use %M for cpu name [$interp_prefix]
1393 --target-list=LIST set target list (default: build everything)
1394$(echo Available targets: $default_target_list | \
1395 fold -s -w 53 | sed -e 's/^/ /')
1396
1397Advanced options (experts only):
1398 --source-path=PATH path of source code [$source_path]
1399 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1400 --cc=CC use C compiler CC [$cc]
1401 --iasl=IASL use ACPI compiler IASL [$iasl]
1402 --host-cc=CC use C compiler CC [$host_cc] for code run at
1403 build time
1404 --cxx=CXX use C++ compiler CXX [$cxx]
1405 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1406 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001407 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001408 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1409 --make=MAKE use specified make [$make]
1410 --install=INSTALL use specified install [$install]
1411 --python=PYTHON use specified python [$python]
1412 --smbd=SMBD use specified smbd [$smbd]
1413 --static enable static build [$static]
1414 --mandir=PATH install man pages in PATH
1415 --datadir=PATH install firmware in PATH$confsuffix
1416 --docdir=PATH install documentation in PATH$confsuffix
1417 --bindir=PATH install binaries in PATH
1418 --libdir=PATH install libraries in PATH
1419 --sysconfdir=PATH install config in PATH$confsuffix
1420 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Fam Zhenge26110c2014-02-10 14:48:57 +08001421 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001422 --enable-debug enable common debug build options
Stefan Weil08fb77e2013-12-18 22:09:39 +01001423 --disable-strip disable stripping binaries
1424 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001425 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001426 --audio-drv-list=LIST set audio drivers list:
1427 Available drivers: $audio_possible_drivers
1428 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1429 --block-drv-rw-whitelist=L
1430 set block driver read-write whitelist
1431 (affects only QEMU, not qemu-img)
1432 --block-drv-ro-whitelist=L
1433 set block driver read-only whitelist
1434 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001435 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001436 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001437 --with-trace-file=NAME Full PATH,NAME of file to store traces
1438 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001439 --disable-slirp disable SLIRP userspace network connectivity
1440 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1441 --oss-lib path to OSS library
1442 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001443 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001444 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001445 --enable-gcov enable test coverage analysis with gcov
1446 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001447 --disable-blobs disable installing provided firmware blobs
1448 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1449 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001450 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001451 --enable-gprof QEMU profiling with gprof
1452 --enable-profiler profiler support
1453 --enable-xen-pv-domain-build
1454 xen pv domain builder
1455 --enable-debug-stack-usage
1456 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001457
1458Optional features, enabled with --enable-FEATURE and
1459disabled with --disable-FEATURE, default is enabled if available:
1460
1461 system all system emulation targets
1462 user supported user emulation targets
1463 linux-user all linux usermode emulation targets
1464 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001465 docs build documentation
1466 guest-agent build the QEMU Guest Agent
1467 guest-agent-msi build guest agent Windows MSI installation package
1468 pie Position Independent Executables
1469 modules modules support
1470 debug-tcg TCG debugging (default is disabled)
1471 debug-info debugging information
1472 sparse sparse checker
1473
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001474 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001475 nettle nettle cryptography support
1476 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001477 sdl SDL UI
1478 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1479 gtk gtk UI
1480 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1481 vte vte support for the gtk UI
1482 curses curses UI
1483 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001484 vnc-sasl SASL encryption for VNC server
1485 vnc-jpeg JPEG lossy compression for VNC server
1486 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001487 cocoa Cocoa UI (Mac OS X only)
1488 virtfs VirtFS
1489 xen xen backend driver support
1490 xen-pci-passthrough
1491 brlapi BrlAPI (Braile)
1492 curl curl connectivity
1493 fdt fdt device tree
1494 bluez bluez stack connectivity
1495 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001496 hax HAX acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001497 rdma RDMA-based migration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001498 vde support for vde network
1499 netmap support for netmap network
1500 linux-aio Linux AIO support
1501 cap-ng libcap-ng support
1502 attr attr and xattr support
1503 vhost-net vhost-net acceleration support
1504 spice spice
1505 rbd rados block device (rbd)
1506 libiscsi iscsi support
1507 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001508 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001509 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001510 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001511 usb-redir usb network redirection support
1512 lzo support of lzo compression library
1513 snappy support of snappy compression library
1514 bzip2 support of bzip2 compression library
1515 (for reading bzip2-compressed dmg images)
1516 seccomp seccomp support
1517 coroutine-pool coroutine freelist (better performance)
1518 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001519 tpm TPM support
1520 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001521 numa libnuma support
1522 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001523 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001524 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001525 vhost-vsock virtio sockets device support
1526 opengl opengl support
1527 virglrenderer virgl rendering support
1528 xfsctl xfsctl support
1529 qom-cast-debug cast debugging support
1530 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001531 vxhs Veritas HyperScale vDisk backend support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001532 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001533 vhost-user vhost-user support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001534
1535NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001536EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001537exit 0
pbrookaf5db582006-04-08 14:26:41 +00001538fi
1539
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001540if ! has $python; then
1541 error_exit "Python not found. Use --python=/path/to/python"
1542fi
1543
1544# Note that if the Python conditional here evaluates True we will exit
1545# with status 1 which is a shell 'false' value.
1546if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1547 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1548 "Note that Python 3 or later is not yet supported." \
1549 "Use --python=/path/to/python to specify a supported Python."
1550fi
1551
1552# Suppress writing compiled files
1553python="$python -B"
1554
Peter Maydell359bc952011-12-24 13:07:25 +00001555# Now we have handled --enable-tcg-interpreter and know we're not just
1556# printing the help message, bail out if the host CPU isn't supported.
1557if test "$ARCH" = "unknown"; then
1558 if test "$tcg_interpreter" = "yes" ; then
1559 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001560 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001561 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001562 fi
1563fi
1564
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001565# Consult white-list to determine whether to enable werror
1566# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001567if test -z "$werror" ; then
1568 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001569 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001570 werror="yes"
1571 else
1572 werror="no"
1573 fi
1574fi
1575
Paolo Bonzini8d050952010-12-23 11:43:52 +01001576# check that the C compiler works.
John Snow93b25862015-03-25 18:57:37 -04001577write_c_skeleton;
Paolo Bonzini8d050952010-12-23 11:43:52 +01001578if compile_object ; then
1579 : C compiler works ok
1580else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001581 error_exit "\"$cc\" either does not exist or does not work"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001582fi
Peter Maydell0ef74c72015-11-24 14:55:46 +00001583if ! compile_prog ; then
1584 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1585fi
Paolo Bonzini8d050952010-12-23 11:43:52 +01001586
Peter Maydellfb59dab2017-03-28 14:01:52 +01001587if test "$bogus_os" = "yes"; then
1588 # Now that we know that we're not printing the help and that
1589 # the compiler works (so the results of the check_defines we used
1590 # to identify the OS are reliable), if we didn't recognize the
1591 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001592 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001593fi
1594
Paolo Bonzini8d050952010-12-23 11:43:52 +01001595gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1596gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001597gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001598gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001599gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001600gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001601# Note that we do not add -Werror to gcc_flags here, because that would
1602# enable it for all configure tests. If a configure test failed due
1603# to -Werror this would just silently disable some features,
1604# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001605
1606cc_has_warning_flag() {
1607 write_c_skeleton;
1608
Peter Maydella1d29d62012-10-27 22:19:07 +01001609 # Use the positive sense of the flag when testing for -Wno-wombat
1610 # support (gcc will happily accept the -Wno- form of unknown
1611 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001612 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1613 compile_prog "-Werror $optflag" ""
1614}
1615
1616for flag in $gcc_flags; do
1617 if cc_has_warning_flag $flag ; then
1618 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001619 fi
1620done
1621
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001622if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001623 cat > $TMPC << EOF
1624int main(int argc, char *argv[])
1625{
1626 char arr[64], *p = arr, *c = argv[0];
1627 while (*c) {
1628 *p++ = *c++;
1629 }
1630 return 0;
1631}
1632EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001633 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001634 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001635 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001636 # We need to check both a compile and a link, since some compiler
1637 # setups fail only on a .c->.o compile and some only at link time
1638 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1639 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001640 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001641 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001642 break
1643 fi
1644 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001645 if test "$stack_protector" = yes; then
1646 if test $sp_on = 0; then
1647 error_exit "Stack protector not supported"
1648 fi
1649 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001650fi
1651
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001652# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1653# large functions that use global variables. The bug is in all releases of
1654# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1655# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1656cat > $TMPC << EOF
1657#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1658int main(void) { return 0; }
1659#else
1660#error No bug in this compiler.
1661#endif
1662EOF
1663if compile_prog "-Werror -fno-gcse" "" ; then
1664 TRANSLATE_OPT_CFLAGS=-fno-gcse
1665fi
1666
Avi Kivity40d64442011-11-15 20:12:17 +02001667if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001668 if test "$modules" = "yes" ; then
1669 error_exit "static and modules are mutually incompatible"
1670 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001671 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001672 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001673 else
1674 pie="no"
1675 fi
1676fi
1677
Emilio G. Cota768b7852015-04-29 13:09:02 +02001678# Unconditional check for compiler __thread support
1679 cat > $TMPC << EOF
1680static __thread int tls_var;
1681int main(void) { return tls_var; }
1682EOF
1683
1684if ! compile_prog "-Werror" "" ; then
1685 error_exit "Your compiler does not support the __thread specifier for " \
1686 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1687fi
1688
Avi Kivity40d64442011-11-15 20:12:17 +02001689if test "$pie" = ""; then
1690 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001691 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001692 ;;
1693 *)
1694 pie="no"
1695 ;;
1696 esac
1697fi
1698
1699if test "$pie" != "no" ; then
1700 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001701
1702#ifdef __linux__
1703# define THREAD __thread
1704#else
1705# define THREAD
1706#endif
1707
1708static THREAD int tls_var;
1709
1710int main(void) { return tls_var; }
1711
Avi Kivity40d64442011-11-15 20:12:17 +02001712EOF
1713 if compile_prog "-fPIE -DPIE" "-pie"; then
1714 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1715 LDFLAGS="-pie $LDFLAGS"
1716 pie="yes"
1717 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1718 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1719 fi
1720 else
1721 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001722 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001723 else
1724 echo "Disabling PIE due to missing toolchain support"
1725 pie="no"
1726 fi
1727 fi
Brad46eef332013-12-10 19:49:08 -05001728
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001729 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001730 CFLAGS_NOPIE="-fno-pie"
1731 LDFLAGS_NOPIE="-nopie"
1732 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001733fi
1734
Paolo Bonzini09dada42013-04-17 16:26:47 +02001735##########################################
1736# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1737# use i686 as default anyway, but for those that don't, an explicit
1738# specification is necessary
1739
1740if test "$cpu" = "i386"; then
1741 cat > $TMPC << EOF
1742static int sfaa(int *ptr)
1743{
1744 return __sync_fetch_and_and(ptr, 0);
1745}
1746
1747int main(void)
1748{
1749 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001750 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001751 sfaa(&val);
1752 return val;
1753}
1754EOF
1755 if ! compile_prog "" "" ; then
1756 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1757 fi
1758fi
1759
1760#########################################
bellardec530c82006-04-25 22:36:06 +00001761# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001762
bellardec530c82006-04-25 22:36:06 +00001763if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001764 if has $install; then
1765 :
1766 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001767 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1768 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1769 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001770 fi
Stefan Weil89138852016-05-16 15:10:20 +02001771 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001772 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1773 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1774 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001775 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001776 if has ar; then
1777 :
1778 else
bellardec530c82006-04-25 22:36:06 +00001779 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001780 error_exit "No path includes ar" \
1781 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001782 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001783 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001784 fi
ths5fafdf22007-09-16 21:08:06 +00001785fi
bellardec530c82006-04-25 22:36:06 +00001786
Stefan Weilafb63eb2012-09-26 22:04:38 +02001787if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001788 for target in $default_target_list; do
1789 supported_target $target 2>/dev/null && \
1790 target_list="$target_list $target"
1791 done
1792 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05001793else
Stefan Weil89138852016-05-16 15:10:20 +02001794 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001795 for target in $target_list; do
1796 # Check that we recognised the target name; this allows a more
1797 # friendly error message than if we let it fall through.
1798 case " $default_target_list " in
1799 *" $target "*)
1800 ;;
1801 *)
1802 error_exit "Unknown target name '$target'"
1803 ;;
1804 esac
1805 supported_target $target || exit 1
1806 done
bellard5327cf42005-01-10 23:18:50 +00001807fi
Peter Maydell25b48332013-05-20 16:16:16 +01001808
Paolo Bonzinif55fe272010-05-26 16:08:17 +02001809# see if system emulation was really requested
1810case " $target_list " in
1811 *"-softmmu "*) softmmu=yes
1812 ;;
1813 *) softmmu=no
1814 ;;
1815esac
bellard5327cf42005-01-10 23:18:50 +00001816
Juan Quintela249247c2009-08-12 18:20:25 +02001817feature_not_found() {
1818 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11001819 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02001820
Peter Maydell76ad07a2013-04-08 12:11:26 +01001821 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11001822 "configure was not able to find it." \
1823 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02001824}
1825
bellard7d132992003-03-06 23:23:54 +00001826# ---
1827# big/little endian test
1828cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04001829short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1830short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1831extern int foo(short *, short *);
1832int main(int argc, char *argv[]) {
1833 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00001834}
1835EOF
1836
Mike Frysinger61cc9192013-06-30 23:30:18 -04001837if compile_object ; then
1838 if grep -q BiGeNdIaN $TMPO ; then
1839 bigendian="yes"
1840 elif grep -q LiTtLeEnDiAn $TMPO ; then
1841 bigendian="no"
1842 else
1843 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01001844 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04001845else
1846 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00001847fi
1848
Juan Quintelab0a47e72009-08-12 18:29:49 +02001849##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01001850# cocoa implies not SDL or GTK
1851# (the cocoa UI code currently assumes it is always the active UI
1852# and doesn't interact well with other UI frontend code)
1853if test "$cocoa" = "yes"; then
1854 if test "$sdl" = "yes"; then
1855 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1856 fi
1857 if test "$gtk" = "yes"; then
1858 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1859 fi
1860 gtk=no
1861 sdl=no
1862fi
1863
Eric Blake6b39b062016-10-11 10:46:23 -05001864# Some versions of Mac OS X incorrectly define SIZE_MAX
1865cat > $TMPC << EOF
1866#include <stdint.h>
1867#include <stdio.h>
1868int main(int argc, char *argv[]) {
1869 return printf("%zu", SIZE_MAX);
1870}
1871EOF
1872have_broken_size_max=no
1873if ! compile_object -Werror ; then
1874 have_broken_size_max=yes
1875fi
1876
Peter Maydella30878e2015-08-14 16:10:52 +01001877##########################################
Gonglei015a33b2014-07-01 20:58:08 +08001878# L2TPV3 probe
1879
1880cat > $TMPC <<EOF
1881#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04001882#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08001883int main(void) { return sizeof(struct mmsghdr); }
1884EOF
1885if compile_prog "" "" ; then
1886 l2tpv3=yes
1887else
1888 l2tpv3=no
1889fi
1890
1891##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01001892# MinGW / Mingw-w64 localtime_r/gmtime_r check
1893
1894if test "$mingw32" = "yes"; then
1895 # Some versions of MinGW / Mingw-w64 lack localtime_r
1896 # and gmtime_r entirely.
1897 #
1898 # Some versions of Mingw-w64 define a macro for
1899 # localtime_r/gmtime_r.
1900 #
1901 # Some versions of Mingw-w64 will define functions
1902 # for localtime_r/gmtime_r, but only if you have
1903 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1904 # though, unistd.h and pthread.h both define
1905 # that for you.
1906 #
1907 # So this #undef localtime_r and #include <unistd.h>
1908 # are not in fact redundant.
1909cat > $TMPC << EOF
1910#include <unistd.h>
1911#include <time.h>
1912#undef localtime_r
1913int main(void) { localtime_r(NULL, NULL); return 0; }
1914EOF
1915 if compile_prog "" "" ; then
1916 localtime_r="yes"
1917 else
1918 localtime_r="no"
1919 fi
1920fi
1921
1922##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01001923# pkg-config probe
1924
1925if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001926 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01001927fi
1928
1929##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02001930# NPTL probe
1931
Peter Maydell24cb36a2013-07-16 18:45:00 +01001932if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02001933 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00001934#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00001935#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01001936int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00001937#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1938#error bork
1939#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01001940 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00001941}
1942EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01001943 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11001944 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02001945 fi
pbrookbd0c5662008-05-29 14:34:11 +00001946fi
1947
Liang Li99f2dbd2016-03-08 13:53:16 +08001948#########################################
balrogac629222008-10-11 09:56:04 +00001949# zlib check
1950
Alon Levy1ece9902011-07-26 12:30:40 +03001951if test "$zlib" != "no" ; then
1952 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00001953#include <zlib.h>
1954int main(void) { zlibVersion(); return 0; }
1955EOF
Alon Levy1ece9902011-07-26 12:30:40 +03001956 if compile_prog "" "-lz" ; then
1957 :
1958 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001959 error_exit "zlib check failed" \
1960 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03001961 fi
balrogac629222008-10-11 09:56:04 +00001962fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00001963LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00001964
1965##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08001966# lzo check
1967
1968if test "$lzo" != "no" ; then
1969 cat > $TMPC << EOF
1970#include <lzo/lzo1x.h>
1971int main(void) { lzo_version(); return 0; }
1972EOF
1973 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001974 libs_softmmu="$libs_softmmu -llzo2"
1975 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001976 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001977 if test "$lzo" = "yes"; then
1978 feature_not_found "liblzo2" "Install liblzo2 devel"
1979 fi
1980 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08001981 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08001982fi
1983
1984##########################################
1985# snappy check
1986
1987if test "$snappy" != "no" ; then
1988 cat > $TMPC << EOF
1989#include <snappy-c.h>
1990int main(void) { snappy_max_compressed_length(4096); return 0; }
1991EOF
1992 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001993 libs_softmmu="$libs_softmmu -lsnappy"
1994 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001995 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001996 if test "$snappy" = "yes"; then
1997 feature_not_found "libsnappy" "Install libsnappy devel"
1998 fi
1999 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002000 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002001fi
2002
2003##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002004# bzip2 check
2005
2006if test "$bzip2" != "no" ; then
2007 cat > $TMPC << EOF
2008#include <bzlib.h>
2009int main(void) { BZ2_bzlibVersion(); return 0; }
2010EOF
2011 if compile_prog "" "-lbz2" ; then
2012 bzip2="yes"
2013 else
2014 if test "$bzip2" = "yes"; then
2015 feature_not_found "libbzip2" "Install libbzip2 devel"
2016 fi
2017 bzip2="no"
2018 fi
2019fi
2020
2021##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002022# libseccomp check
2023
2024if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002025 case "$cpu" in
2026 i386|x86_64)
dann frazierba060c52015-10-23 15:34:22 -06002027 libseccomp_minver="2.1.0"
Andrew Jones693e5912015-09-30 11:59:18 -04002028 ;;
James Hogan5ce43972016-04-08 14:16:34 +01002029 mips)
2030 libseccomp_minver="2.2.0"
2031 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002032 arm|aarch64)
2033 libseccomp_minver="2.2.3"
2034 ;;
Michael Strosaker3e684452016-06-01 18:30:18 -05002035 ppc|ppc64)
2036 libseccomp_minver="2.3.0"
2037 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002038 *)
2039 libseccomp_minver=""
2040 ;;
2041 esac
2042
2043 if test "$libseccomp_minver" != "" &&
2044 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Stefan Weil89138852016-05-16 15:10:20 +02002045 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
2046 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002047 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002048 else
Andrew Jones693e5912015-09-30 11:59:18 -04002049 if test "$seccomp" = "yes" ; then
2050 if test "$libseccomp_minver" != "" ; then
2051 feature_not_found "libseccomp" \
2052 "Install libseccomp devel >= $libseccomp_minver"
2053 else
2054 feature_not_found "libseccomp" \
2055 "libseccomp is not supported for host cpu $cpu"
2056 fi
2057 fi
2058 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002059 fi
2060fi
2061##########################################
aliguorie37630c2009-04-22 15:19:10 +00002062# xen probe
2063
Juan Quintelafc321b42009-08-12 18:29:55 +02002064if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002065 # Check whether Xen library path is specified via --extra-ldflags to avoid
2066 # overriding this setting with pkg-config output. If not, try pkg-config
2067 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002068
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002069 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2070 $pkg_config --exists xencontrol ; then
2071 xen_ctrl_version="$(printf '%d%02d%02d' \
2072 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2073 xen=yes
2074 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2075 xen_pc="$xen_pc xenevtchn xendevicemodel"
2076 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2077 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2078 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2079 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002080
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002081 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002082 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002083
2084 # First we test whether Xen headers and libraries are available.
2085 # If no, we are done and there is no Xen support.
2086 # If yes, more tests are run to detect the Xen version.
2087
2088 # Xen (any)
2089 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002090#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002091int main(void) {
2092 return 0;
2093}
2094EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002095 if ! compile_prog "" "$xen_libs" ; then
2096 # Xen not found
2097 if test "$xen" = "yes" ; then
2098 feature_not_found "xen" "Install xen devel"
2099 fi
2100 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002101
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002102 # Xen unstable
2103 elif
2104 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002105#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2106#include <xenforeignmemory.h>
2107int main(void) {
2108 xenforeignmemory_handle *xfmem;
2109
2110 xfmem = xenforeignmemory_open(0, 0);
2111 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2112
2113 return 0;
2114}
2115EOF
2116 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2117 then
2118 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2119 xen_ctrl_version=41000
2120 xen=yes
2121 elif
2122 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002123#undef XC_WANT_COMPAT_DEVICEMODEL_API
2124#define __XEN_TOOLS__
2125#include <xendevicemodel.h>
2126int main(void) {
2127 xendevicemodel_handle *xd;
2128
2129 xd = xendevicemodel_open(0, 0);
2130 xendevicemodel_close(xd);
2131
2132 return 0;
2133}
2134EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002135 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2136 then
2137 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2138 xen_ctrl_version=40900
2139 xen=yes
2140 elif
2141 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002142/*
2143 * If we have stable libs the we don't want the libxc compat
2144 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002145 *
2146 * Also, check if xengnttab_grant_copy_segment_t is defined and
2147 * grant copy operation is implemented.
2148 */
2149#undef XC_WANT_COMPAT_EVTCHN_API
2150#undef XC_WANT_COMPAT_GNTTAB_API
2151#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2152#include <xenctrl.h>
2153#include <xenstore.h>
2154#include <xenevtchn.h>
2155#include <xengnttab.h>
2156#include <xenforeignmemory.h>
2157#include <stdint.h>
2158#include <xen/hvm/hvm_info_table.h>
2159#if !defined(HVM_MAX_VCPUS)
2160# error HVM_MAX_VCPUS not defined
2161#endif
2162int main(void) {
2163 xc_interface *xc = NULL;
2164 xenforeignmemory_handle *xfmem;
2165 xenevtchn_handle *xe;
2166 xengnttab_handle *xg;
2167 xen_domain_handle_t handle;
2168 xengnttab_grant_copy_segment_t* seg = NULL;
2169
2170 xs_daemon_open();
2171
2172 xc = xc_interface_open(0, 0, 0);
2173 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2174 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2175 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2176 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2177 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2178
2179 xfmem = xenforeignmemory_open(0, 0);
2180 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2181
2182 xe = xenevtchn_open(0, 0);
2183 xenevtchn_fd(xe);
2184
2185 xg = xengnttab_open(0, 0);
2186 xengnttab_grant_copy(xg, 0, seg);
2187
2188 return 0;
2189}
2190EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002191 compile_prog "" "$xen_libs $xen_stable_libs"
2192 then
2193 xen_ctrl_version=40800
2194 xen=yes
2195 elif
2196 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002197/*
2198 * If we have stable libs the we don't want the libxc compat
2199 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002200 */
2201#undef XC_WANT_COMPAT_EVTCHN_API
2202#undef XC_WANT_COMPAT_GNTTAB_API
2203#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2204#include <xenctrl.h>
2205#include <xenstore.h>
2206#include <xenevtchn.h>
2207#include <xengnttab.h>
2208#include <xenforeignmemory.h>
2209#include <stdint.h>
2210#include <xen/hvm/hvm_info_table.h>
2211#if !defined(HVM_MAX_VCPUS)
2212# error HVM_MAX_VCPUS not defined
2213#endif
2214int main(void) {
2215 xc_interface *xc = NULL;
2216 xenforeignmemory_handle *xfmem;
2217 xenevtchn_handle *xe;
2218 xengnttab_handle *xg;
2219 xen_domain_handle_t handle;
2220
2221 xs_daemon_open();
2222
2223 xc = xc_interface_open(0, 0, 0);
2224 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2225 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2226 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2227 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2228 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2229
2230 xfmem = xenforeignmemory_open(0, 0);
2231 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2232
2233 xe = xenevtchn_open(0, 0);
2234 xenevtchn_fd(xe);
2235
2236 xg = xengnttab_open(0, 0);
2237 xengnttab_map_grant_ref(xg, 0, 0, 0);
2238
2239 return 0;
2240}
2241EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002242 compile_prog "" "$xen_libs $xen_stable_libs"
2243 then
2244 xen_ctrl_version=40701
2245 xen=yes
2246 elif
2247 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002248#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002249#include <stdint.h>
2250int main(void) {
2251 xc_interface *xc = NULL;
2252 xen_domain_handle_t handle;
2253 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2254 return 0;
2255}
2256EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002257 compile_prog "" "$xen_libs"
2258 then
2259 xen_ctrl_version=40700
2260 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002261
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002262 # Xen 4.6
2263 elif
2264 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002265#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002266#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002267#include <stdint.h>
2268#include <xen/hvm/hvm_info_table.h>
2269#if !defined(HVM_MAX_VCPUS)
2270# error HVM_MAX_VCPUS not defined
2271#endif
2272int main(void) {
2273 xc_interface *xc;
2274 xs_daemon_open();
2275 xc = xc_interface_open(0, 0, 0);
2276 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2277 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002278 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002279 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002280 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002281 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002282 return 0;
2283}
2284EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002285 compile_prog "" "$xen_libs"
2286 then
2287 xen_ctrl_version=40600
2288 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002289
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002290 # Xen 4.5
2291 elif
2292 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002293#include <xenctrl.h>
2294#include <xenstore.h>
2295#include <stdint.h>
2296#include <xen/hvm/hvm_info_table.h>
2297#if !defined(HVM_MAX_VCPUS)
2298# error HVM_MAX_VCPUS not defined
2299#endif
2300int main(void) {
2301 xc_interface *xc;
2302 xs_daemon_open();
2303 xc = xc_interface_open(0, 0, 0);
2304 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2305 xc_gnttab_open(NULL, 0);
2306 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2307 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002308 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2309 return 0;
2310}
2311EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002312 compile_prog "" "$xen_libs"
2313 then
2314 xen_ctrl_version=40500
2315 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002316
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002317 elif
2318 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002319#include <xenctrl.h>
2320#include <xenstore.h>
2321#include <stdint.h>
2322#include <xen/hvm/hvm_info_table.h>
2323#if !defined(HVM_MAX_VCPUS)
2324# error HVM_MAX_VCPUS not defined
2325#endif
2326int main(void) {
2327 xc_interface *xc;
2328 xs_daemon_open();
2329 xc = xc_interface_open(0, 0, 0);
2330 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2331 xc_gnttab_open(NULL, 0);
2332 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2333 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002334 return 0;
2335}
2336EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002337 compile_prog "" "$xen_libs"
2338 then
2339 xen_ctrl_version=40200
2340 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002341
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002342 else
2343 if test "$xen" = "yes" ; then
2344 feature_not_found "xen (unsupported version)" \
2345 "Install a supported xen (xen 4.2 or newer)"
2346 fi
2347 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002348 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002349
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002350 if test "$xen" = yes; then
2351 if test $xen_ctrl_version -ge 40701 ; then
2352 libs_softmmu="$xen_stable_libs $libs_softmmu"
2353 fi
2354 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002355 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002356 fi
aliguorie37630c2009-04-22 15:19:10 +00002357fi
2358
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002359if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002360 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002361 xen_pci_passthrough=yes
2362 else
2363 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002364 error_exit "User requested feature Xen PCI Passthrough" \
2365 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002366 fi
2367 xen_pci_passthrough=no
2368 fi
2369fi
2370
Ian Campbell64a7ad62016-01-15 13:23:44 +00002371if test "$xen_pv_domain_build" = "yes" &&
2372 test "$xen" != "yes"; then
2373 error_exit "User requested Xen PV domain builder support" \
2374 "which requires Xen support."
2375fi
2376
aliguorie37630c2009-04-22 15:19:10 +00002377##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002378# Sparse probe
2379if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002380 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002381 sparse=yes
2382 else
2383 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002384 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002385 fi
2386 sparse=no
2387 fi
2388fi
2389
2390##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002391# X11 probe
2392x11_cflags=
2393x11_libs=-lX11
2394if $pkg_config --exists "x11"; then
Stefan Weil89138852016-05-16 15:10:20 +02002395 x11_cflags=$($pkg_config --cflags x11)
2396 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002397fi
2398
2399##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002400# GTK probe
2401
Stefan Weil9e04c682014-05-17 16:29:18 +02002402if test "$gtkabi" = ""; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002403 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2404 # Use 2.0 as a fallback if that is available.
2405 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002406 gtkabi=3.0
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002407 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002408 gtkabi=2.0
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002409 else
2410 gtkabi=3.0
Stefan Weil9e04c682014-05-17 16:29:18 +02002411 fi
2412fi
2413
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002414if test "$gtk" != "no"; then
Daniel P. Berrange528de902013-02-25 15:20:44 +00002415 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002416 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002417 if test "$gtkabi" = "3.0" ; then
2418 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002419 else
2420 gtkversion="2.18.0"
2421 fi
2422 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002423 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2424 gtk_libs=$($pkg_config --libs $gtkpackage)
2425 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002426 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Jeremy Whitef676c672015-01-09 13:08:49 -06002427 gtk_cflags="$gtk_cflags $x11_cflags"
2428 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002429 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002430 libs_softmmu="$gtk_libs $libs_softmmu"
2431 gtk="yes"
2432 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002433 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002434 else
2435 gtk="no"
2436 fi
2437fi
2438
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002439
2440##########################################
2441# GNUTLS probe
2442
Peter Maydell37371292015-07-24 18:28:08 +01002443gnutls_works() {
2444 # Unfortunately some distros have bad pkg-config information for gnutls
2445 # such that it claims to exist but you get a compiler error if you try
2446 # to use the options returned by --libs. Specifically, Ubuntu for --static
2447 # builds doesn't work:
2448 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2449 #
2450 # So sanity check the cflags/libs before assuming gnutls can be used.
2451 if ! $pkg_config --exists "gnutls"; then
2452 return 1
2453 fi
2454
2455 write_c_skeleton
2456 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2457}
2458
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002459gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002460gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002461if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002462 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002463 gnutls_cflags=$($pkg_config --cflags gnutls)
2464 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002465 libs_softmmu="$gnutls_libs $libs_softmmu"
2466 libs_tools="$gnutls_libs $libs_tools"
2467 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2468 gnutls="yes"
2469
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002470 # gnutls_rnd requires >= 2.11.0
2471 if $pkg_config --exists "gnutls >= 2.11.0"; then
2472 gnutls_rnd="yes"
2473 else
2474 gnutls_rnd="no"
2475 fi
2476
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002477 if $pkg_config --exists 'gnutls >= 3.0'; then
2478 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002479 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002480 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002481 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002482 *gcrypt*)
2483 gnutls_gcrypt=yes
2484 gnutls_nettle=no
2485 ;;
2486 *nettle*)
2487 gnutls_gcrypt=no
2488 gnutls_nettle=yes
2489 ;;
2490 *)
2491 gnutls_gcrypt=yes
2492 gnutls_nettle=no
2493 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002494 esac
2495 else
2496 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002497 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002498 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002499 elif test "$gnutls" = "yes"; then
2500 feature_not_found "gnutls" "Install gnutls devel"
2501 else
2502 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002503 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002504 fi
2505else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002506 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002507fi
2508
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002509
2510# If user didn't give a --disable/enable-gcrypt flag,
2511# then mark as disabled if user requested nettle
2512# explicitly, or if gnutls links to nettle
2513if test -z "$gcrypt"
2514then
2515 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2516 then
2517 gcrypt="no"
2518 fi
2519fi
2520
2521# If user didn't give a --disable/enable-nettle flag,
2522# then mark as disabled if user requested gcrypt
2523# explicitly, or if gnutls links to gcrypt
2524if test -z "$nettle"
2525then
2526 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2527 then
2528 nettle="no"
2529 fi
2530fi
2531
2532has_libgcrypt_config() {
2533 if ! has "libgcrypt-config"
2534 then
2535 return 1
2536 fi
2537
2538 if test -n "$cross_prefix"
2539 then
Stefan Weil89138852016-05-16 15:10:20 +02002540 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002541 if test "$host-" != $cross_prefix
2542 then
2543 return 1
2544 fi
2545 fi
2546
2547 return 0
2548}
2549
2550if test "$gcrypt" != "no"; then
2551 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002552 gcrypt_cflags=$(libgcrypt-config --cflags)
2553 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002554 # Debian has remove -lgpg-error from libgcrypt-config
2555 # as it "spreads unnecessary dependencies" which in
2556 # turn breaks static builds...
2557 if test "$static" = "yes"
2558 then
2559 gcrypt_libs="$gcrypt_libs -lgpg-error"
2560 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002561 libs_softmmu="$gcrypt_libs $libs_softmmu"
2562 libs_tools="$gcrypt_libs $libs_tools"
2563 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002564 gcrypt="yes"
2565 if test -z "$nettle"; then
2566 nettle="no"
2567 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002568
2569 cat > $TMPC << EOF
2570#include <gcrypt.h>
2571int main(void) {
2572 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2573 GCRY_MD_SHA256,
2574 NULL, 0, 0, 0, NULL);
2575 return 0;
2576}
2577EOF
2578 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2579 gcrypt_kdf=yes
2580 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002581
2582 cat > $TMPC << EOF
2583#include <gcrypt.h>
2584int main(void) {
2585 gcry_mac_hd_t handle;
2586 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2587 GCRY_MAC_FLAG_SECURE, NULL);
2588 return 0;
2589}
2590EOF
2591 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2592 gcrypt_hmac=yes
2593 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002594 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002595 if test "$gcrypt" = "yes"; then
2596 feature_not_found "gcrypt" "Install gcrypt devel"
2597 else
2598 gcrypt="no"
2599 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002600 fi
2601fi
2602
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002603
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002604if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002605 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002606 nettle_cflags=$($pkg_config --cflags nettle)
2607 nettle_libs=$($pkg_config --libs nettle)
2608 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002609 libs_softmmu="$nettle_libs $libs_softmmu"
2610 libs_tools="$nettle_libs $libs_tools"
2611 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002612 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002613
2614 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002615#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002616#include <nettle/pbkdf2.h>
2617int main(void) {
2618 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2619 return 0;
2620}
2621EOF
2622 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2623 nettle_kdf=yes
2624 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002625 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002626 if test "$nettle" = "yes"; then
2627 feature_not_found "nettle" "Install nettle devel"
2628 else
2629 nettle="no"
2630 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002631 fi
2632fi
2633
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002634if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2635then
2636 error_exit "Only one of gcrypt & nettle can be enabled"
2637fi
2638
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002639##########################################
2640# libtasn1 - only for the TLS creds/session test suite
2641
2642tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002643tasn1_cflags=""
2644tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002645if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002646 tasn1_cflags=$($pkg_config --cflags libtasn1)
2647 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002648else
2649 tasn1=no
2650fi
2651
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002652
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002653##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002654# getifaddrs (for tests/test-io-channel-socket )
2655
2656have_ifaddrs_h=yes
2657if ! check_include "ifaddrs.h" ; then
2658 have_ifaddrs_h=no
2659fi
2660
2661##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002662# VTE probe
2663
2664if test "$vte" != "no"; then
2665 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002666 vteminversion="0.32.0"
2667 if $pkg_config --exists "vte-2.91"; then
2668 vtepackage="vte-2.91"
2669 else
2670 vtepackage="vte-2.90"
2671 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002672 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002673 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002674 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002675 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002676 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002677 vte_cflags=$($pkg_config --cflags $vtepackage)
2678 vte_libs=$($pkg_config --libs $vtepackage)
2679 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002680 libs_softmmu="$vte_libs $libs_softmmu"
2681 vte="yes"
2682 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002683 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002684 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002685 else
2686 feature_not_found "vte" "Install libvte devel"
2687 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002688 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002689 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002690 fi
2691fi
2692
2693##########################################
bellard11d9f692004-04-02 20:55:59 +00002694# SDL probe
2695
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002696# Look for sdl configuration program (pkg-config or sdl-config). Try
2697# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002698
Cole Robinsonee8466d2016-05-06 14:03:07 -04002699if test "$sdlabi" = ""; then
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002700 if $pkg_config --exists "sdl2"; then
Cole Robinsonee8466d2016-05-06 14:03:07 -04002701 sdlabi=2.0
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002702 elif $pkg_config --exists "sdl"; then
Cole Robinsonee8466d2016-05-06 14:03:07 -04002703 sdlabi=1.2
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002704 else
2705 sdlabi=2.0
Cole Robinsonee8466d2016-05-06 14:03:07 -04002706 fi
2707fi
2708
Dave Airlie47c03742013-12-10 14:05:51 +10002709if test $sdlabi = "2.0"; then
2710 sdl_config=$sdl2_config
2711 sdlname=sdl2
2712 sdlconfigname=sdl2_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002713elif test $sdlabi = "1.2"; then
Dave Airlie47c03742013-12-10 14:05:51 +10002714 sdlname=sdl
2715 sdlconfigname=sdl_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002716else
2717 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002718fi
2719
Stefan Weil89138852016-05-16 15:10:20 +02002720if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
Dave Airlie47c03742013-12-10 14:05:51 +10002721 sdl_config=$sdlconfigname
2722fi
2723
2724if $pkg_config $sdlname --exists; then
2725 sdlconfig="$pkg_config $sdlname"
Stefan Weil89138852016-05-16 15:10:20 +02002726 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002727elif has ${sdl_config}; then
2728 sdlconfig="$sdl_config"
Stefan Weil89138852016-05-16 15:10:20 +02002729 sdlversion=$($sdlconfig --version)
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002730else
2731 if test "$sdl" = "yes" ; then
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002732 feature_not_found "sdl" "Install SDL2-devel"
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002733 fi
2734 sdl=no
Paolo Bonzini9316f802010-01-13 09:52:55 +01002735fi
Scott Wood29e5bad2011-04-08 14:15:50 -05002736if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002737 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2738fi
bellard11d9f692004-04-02 20:55:59 +00002739
Paolo Bonzini9316f802010-01-13 09:52:55 +01002740sdl_too_old=no
Juan Quintelac4198152009-08-12 18:29:53 +02002741if test "$sdl" != "no" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002742 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002743#include <SDL.h>
2744#undef main /* We don't want SDL to override our main() */
2745int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2746EOF
Stefan Weil89138852016-05-16 15:10:20 +02002747 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002748 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002749 if $pkg_config $sdlname --exists; then
2750 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2751 else
2752 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2753 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002754 else
Stefan Weil89138852016-05-16 15:10:20 +02002755 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002756 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002757 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002758 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002759 sdl_too_old=yes
2760 else
Peter Maydella30878e2015-08-14 16:10:52 +01002761 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002762 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002763
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002764 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002765 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002766 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002767 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2768 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002769 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002770 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002771 :
2772 else
2773 sdl=no
2774 fi
2775 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002776 else # sdl not found
2777 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002778 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002779 fi
2780 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002781 fi # sdl compile test
Juan Quintelaa68551b2009-07-27 16:13:09 +02002782fi
bellard11d9f692004-04-02 20:55:59 +00002783
aliguori5368a422009-03-03 17:37:21 +00002784if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002785 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002786#include <SDL.h>
2787#if defined(SDL_VIDEO_DRIVER_X11)
2788#include <X11/XKBlib.h>
2789#else
2790#error No x11 support
2791#endif
2792int main(void) { return 0; }
2793EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002794 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2795 sdl_cflags="$sdl_cflags $x11_cflags"
2796 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02002797 fi
Juan Quintela07056672009-08-03 14:46:27 +02002798 libs_softmmu="$sdl_libs $libs_softmmu"
aliguori5368a422009-03-03 17:37:21 +00002799fi
2800
ths8f28f3f2007-01-05 21:25:54 +00002801##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04002802# RDMA needs OpenFabrics libraries
2803if test "$rdma" != "no" ; then
2804 cat > $TMPC <<EOF
2805#include <rdma/rdma_cma.h>
2806int main(void) { return 0; }
2807EOF
2808 rdma_libs="-lrdmacm -libverbs"
2809 if compile_prog "" "$rdma_libs" ; then
2810 rdma="yes"
2811 libs_softmmu="$libs_softmmu $rdma_libs"
2812 else
2813 if test "$rdma" = "yes" ; then
2814 error_exit \
2815 " OpenFabrics librdmacm/libibverbs not present." \
2816 " Your options:" \
2817 " (1) Fast: Install infiniband packages from your distro." \
2818 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2819 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2820 fi
2821 rdma="no"
2822 fi
2823fi
2824
ths8d5d2d42007-08-25 01:37:51 +00002825
2826##########################################
aliguori2f9606b2009-03-06 20:27:28 +00002827# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002828if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02002829 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00002830#include <sasl/sasl.h>
2831#include <stdio.h>
2832int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2833EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02002834 # Assuming Cyrus-SASL installed in /usr prefix
2835 vnc_sasl_cflags=""
2836 vnc_sasl_libs="-lsasl2"
2837 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2838 vnc_sasl=yes
2839 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002840 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02002841 else
2842 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002843 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00002844 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02002845 vnc_sasl=no
2846 fi
aliguori2f9606b2009-03-06 20:27:28 +00002847fi
2848
2849##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002850# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002851if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002852cat > $TMPC <<EOF
2853#include <stdio.h>
2854#include <jpeglib.h>
2855int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2856EOF
2857 vnc_jpeg_cflags=""
2858 vnc_jpeg_libs="-ljpeg"
2859 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2860 vnc_jpeg=yes
2861 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002862 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002863 else
2864 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002865 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002866 fi
2867 vnc_jpeg=no
2868 fi
2869fi
2870
2871##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02002872# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002873if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02002874cat > $TMPC <<EOF
2875//#include <stdio.h>
2876#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05002877#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02002878int main(void) {
2879 png_structp png_ptr;
2880 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01002881 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02002882}
2883EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02002884 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02002885 vnc_png_cflags=$($pkg_config libpng --cflags)
2886 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04002887 else
Corentin Charyefe556a2010-07-07 20:57:56 +02002888 vnc_png_cflags=""
2889 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04002890 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02002891 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2892 vnc_png=yes
2893 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04002894 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02002895 else
2896 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002897 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02002898 fi
2899 vnc_png=no
2900 fi
2901fi
2902
2903##########################################
aliguori76655d62009-03-06 20:27:37 +00002904# fnmatch() probe, used for ACL routines
2905fnmatch="no"
2906cat > $TMPC << EOF
2907#include <fnmatch.h>
2908int main(void)
2909{
2910 fnmatch("foo", "foo", 0);
2911 return 0;
2912}
2913EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002914if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00002915 fnmatch="yes"
2916fi
2917
2918##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06002919# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002920if test "$xfs" != "no" ; then
2921 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01002922#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002923#include <xfs/xfs.h>
2924int main(void)
2925{
2926 xfsctl(NULL, 0, 0, NULL);
2927 return 0;
2928}
2929EOF
2930 if compile_prog "" "" ; then
2931 xfs="yes"
2932 else
2933 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002934 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002935 fi
2936 xfs=no
2937 fi
2938fi
2939
2940##########################################
ths8a16d272008-07-19 09:56:24 +00002941# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02002942if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002943 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00002944 cat > $TMPC << EOF
2945#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00002946int main(void)
2947{
2948 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01002949 char s[] = "";
2950 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00002951 return 0;
2952}
ths8a16d272008-07-19 09:56:24 +00002953EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002954 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002955 vde=yes
Juan Quintela8e02e542009-08-03 14:47:07 +02002956 libs_softmmu="$vde_libs $libs_softmmu"
2957 libs_tools="$vde_libs $libs_tools"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002958 else
2959 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002960 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002961 fi
2962 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02002963 fi
ths8a16d272008-07-19 09:56:24 +00002964fi
2965
2966##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002967# netmap support probe
2968# Apart from looking for netmap headers, we make sure that the host API version
2969# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2970# a minor/major version number. Minor new features will be marked with values up
2971# to 15, and if something happens that requires a change to the backend we will
2972# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01002973if test "$netmap" != "no" ; then
2974 cat > $TMPC << EOF
2975#include <inttypes.h>
2976#include <net/if.h>
2977#include <net/netmap.h>
2978#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002979#if (NETMAP_API < 11) || (NETMAP_API > 15)
2980#error
2981#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01002982int main(void) { return 0; }
2983EOF
2984 if compile_prog "" "" ; then
2985 netmap=yes
2986 else
2987 if test "$netmap" = "yes" ; then
2988 feature_not_found "netmap"
2989 fi
2990 netmap=no
2991 fi
2992fi
2993
2994##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05002995# libcap-ng library probe
2996if test "$cap_ng" != "no" ; then
2997 cap_libs="-lcap-ng"
2998 cat > $TMPC << EOF
2999#include <cap-ng.h>
3000int main(void)
3001{
3002 capng_capability_to_name(CAPNG_EFFECTIVE);
3003 return 0;
3004}
3005EOF
3006 if compile_prog "" "$cap_libs" ; then
3007 cap_ng=yes
3008 libs_tools="$cap_libs $libs_tools"
3009 else
3010 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003011 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003012 fi
3013 cap_ng=no
3014 fi
3015fi
3016
3017##########################################
malcc2de5c92008-06-28 19:13:06 +00003018# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003019
malcc2de5c92008-06-28 19:13:06 +00003020audio_drv_probe()
3021{
3022 drv=$1
3023 hdr=$2
3024 lib=$3
3025 exp=$4
3026 cfl=$5
3027 cat > $TMPC << EOF
3028#include <$hdr>
3029int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003030EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003031 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003032 :
3033 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003034 error_exit "$drv check failed" \
3035 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003036 fi
3037}
3038
Stefan Weil89138852016-05-16 15:10:20 +02003039audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003040for drv in $audio_drv_list; do
3041 case $drv in
3042 alsa)
3043 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003044 "return snd_pcm_close((snd_pcm_t *)0);"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003045 libs_softmmu="-lasound $libs_softmmu"
malcc2de5c92008-06-28 19:13:06 +00003046 ;;
3047
malcb8e59f12008-07-02 21:03:08 +00003048 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003049 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3050 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Marc-André Lureaua394aed2012-04-17 14:32:42 +02003051 libs_softmmu="-lpulse $libs_softmmu"
Juan Quintela67f86e82009-08-03 14:46:59 +02003052 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003053 ;;
3054
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003055 sdl)
3056 if test "$sdl" = "no"; then
3057 error_exit "sdl not found or disabled, can not use sdl audio driver"
3058 fi
3059 ;;
3060
Juan Quintela997e6902009-08-03 14:46:29 +02003061 coreaudio)
3062 libs_softmmu="-framework CoreAudio $libs_softmmu"
3063 ;;
3064
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003065 dsound)
3066 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
malcd5631632009-10-10 01:13:41 +04003067 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003068 ;;
3069
3070 oss)
3071 libs_softmmu="$oss_lib $libs_softmmu"
3072 ;;
3073
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003074 wav)
3075 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003076 ;;
3077
malce4c63a62008-07-19 16:15:16 +00003078 *)
malc1c9b2a52008-07-19 16:57:30 +00003079 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003080 error_exit "Unknown driver '$drv' selected" \
3081 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003082 }
3083 ;;
malcc2de5c92008-06-28 19:13:06 +00003084 esac
3085done
ths8f28f3f2007-01-05 21:25:54 +00003086
balrog4d3b6f62008-02-10 16:33:14 +00003087##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003088# BrlAPI probe
3089
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003090if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003091 brlapi_libs="-lbrlapi"
3092 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003093#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003094#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003095int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3096EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003097 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003098 brlapi=yes
Juan Quintela264606b2009-08-03 14:46:39 +02003099 libs_softmmu="$brlapi_libs $libs_softmmu"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003100 else
3101 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003102 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003103 fi
3104 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003105 fi
3106fi
aurel322e4d9fb2008-04-08 06:01:02 +00003107
3108##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003109# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003110if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003111 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003112 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3113 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003114 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003115 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003116 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003117 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003118 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003119 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003120#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003121#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003122#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003123int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003124 wchar_t wch = L'w';
3125 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003126 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003127 addwstr(L"wide chars\n");
3128 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003129 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003130 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003131}
balrog4d3b6f62008-02-10 16:33:14 +00003132EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003133 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003134 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003135 # Make sure we get the wide character prototypes
3136 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003137 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003138 for curses_lib in $curses_lib_list; do
3139 unset IFS
3140 if compile_prog "$curses_inc" "$curses_lib" ; then
3141 curses_found=yes
3142 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3143 libs_softmmu="$curses_lib $libs_softmmu"
3144 break
3145 fi
3146 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003147 if test "$curses_found" = yes ; then
3148 break
3149 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003150 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003151 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003152 if test "$curses_found" = "yes" ; then
3153 curses=yes
3154 else
3155 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003156 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003157 fi
3158 curses=no
3159 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003160fi
balrog4d3b6f62008-02-10 16:33:14 +00003161
blueswir1414f0da2008-08-15 18:20:52 +00003162##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003163# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003164if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003165 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003166 curlconfig="$pkg_config libcurl"
3167 else
3168 curlconfig=curl-config
3169 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003170 cat > $TMPC << EOF
3171#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003172int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003173EOF
Stefan Weil89138852016-05-16 15:10:20 +02003174 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3175 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003176 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003177 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003178 else
3179 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003180 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003181 fi
3182 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003183 fi
3184fi # test "$curl"
3185
3186##########################################
balrogfb599c92008-09-28 23:49:55 +00003187# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003188if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003189 cat > $TMPC << EOF
3190#include <bluetooth/bluetooth.h>
3191int main(void) { return bt_error(0); }
3192EOF
Stefan Weil89138852016-05-16 15:10:20 +02003193 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3194 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003195 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003196 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003197 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003198 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003199 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003200 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003201 fi
balroge820e3f2008-09-30 02:27:44 +00003202 bluez="no"
3203 fi
balrogfb599c92008-09-28 23:49:55 +00003204fi
3205
3206##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003207# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003208
Peter Maydellad04d8c2017-04-03 14:04:15 +01003209if test "$mingw32" = yes; then
3210 glib_req_ver=2.30
3211else
3212 glib_req_ver=2.22
3213fi
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003214glib_modules=gthread-2.0
3215if test "$modules" = yes; then
3216 glib_modules="$glib_modules gmodule-2.0"
3217fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003218
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003219# This workaround is required due to a bug in pkg-config file for glib as it
3220# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3221
3222if test "$static" = yes -a "$mingw32" = yes; then
3223 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3224fi
3225
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003226for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003227 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003228 glib_cflags=$($pkg_config --cflags $i)
3229 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003230 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003231 LIBS="$glib_libs $LIBS"
3232 libs_qga="$glib_libs $libs_qga"
3233 else
3234 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3235 fi
3236done
3237
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003238# Sanity check that the current size_t matches the
3239# size that glib thinks it should be. This catches
3240# problems on multi-arch where people try to build
3241# 32-bit QEMU while pointing at 64-bit glib headers
3242cat > $TMPC <<EOF
3243#include <glib.h>
3244#include <unistd.h>
3245
3246#define QEMU_BUILD_BUG_ON(x) \
3247 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3248
3249int main(void) {
3250 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3251 return 0;
3252}
3253EOF
3254
Stefan Weil5919e032016-04-28 23:33:41 +02003255if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003256 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3257 "You probably need to set PKG_CONFIG_LIBDIR"\
3258 "to point to the right pkg-config files for your"\
3259 "build target"
3260fi
3261
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003262# g_test_trap_subprocess added in 2.38. Used by some tests.
3263glib_subprocess=yes
Marc-André Lureaua0492232017-01-04 21:57:22 +01003264if ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003265 glib_subprocess=no
3266fi
3267
John Snowbbbf2e02015-03-25 18:57:38 -04003268# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3269cat > $TMPC << EOF
3270#include <glib.h>
3271int main(void) { return 0; }
3272EOF
3273if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3274 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3275 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3276 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3277 fi
3278fi
3279
Fam Zhenge26110c2014-02-10 14:48:57 +08003280##########################################
3281# SHA command probe for modules
3282if test "$modules" = yes; then
3283 shacmd_probe="sha1sum sha1 shasum"
3284 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003285 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003286 shacmd="$c"
3287 break
3288 fi
3289 done
3290 if test "$shacmd" = ""; then
3291 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3292 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003293fi
3294
3295##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003296# pixman support probe
3297
3298if test "$pixman" = ""; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003299 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3300 pixman="none"
Hu Tao236f2822014-09-15 11:41:10 +08003301 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003302 pixman="system"
3303 else
3304 pixman="internal"
3305 fi
3306fi
Robert Schiele74880fe2012-12-04 16:58:08 +01003307if test "$pixman" = "none"; then
3308 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003309 error_exit "pixman disabled but system emulation or tools build" \
3310 "enabled. You can turn off pixman only if you also" \
3311 "disable all system emulation targets and the tools" \
3312 "build with '--disable-tools --disable-system'."
Robert Schiele74880fe2012-12-04 16:58:08 +01003313 fi
3314 pixman_cflags=
3315 pixman_libs=
3316elif test "$pixman" = "system"; then
Hu Tao236f2822014-09-15 11:41:10 +08003317 # pixman version has been checked above
Stefan Weil89138852016-05-16 15:10:20 +02003318 pixman_cflags=$($pkg_config --cflags pixman-1)
3319 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003320else
3321 if test ! -d ${source_path}/pixman/pixman; then
Hu Tao236f2822014-09-15 11:41:10 +08003322 error_exit "pixman >= 0.21.8 not present. Your options:" \
Peter Maydell76ad07a2013-04-08 12:11:26 +01003323 " (1) Preferred: Install the pixman devel package (any recent" \
3324 " distro should have packages as Xorg needs pixman too)." \
3325 " (2) Fetch the pixman submodule, using:" \
3326 " git submodule update --init pixman"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003327 fi
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01003328 mkdir -p pixman/pixman
3329 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3330 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003331fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003332
3333##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303334# libcap probe
3335
3336if test "$cap" != "no" ; then
3337 cat > $TMPC <<EOF
3338#include <stdio.h>
3339#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003340int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303341EOF
3342 if compile_prog "" "-lcap" ; then
3343 cap=yes
3344 else
3345 cap=no
3346 fi
3347fi
3348
3349##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003350# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003351PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003352
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003353pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003354cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003355#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003356static void *f(void *p) { return NULL; }
3357int main(void) {
3358 pthread_t thread;
3359 pthread_create(&thread, 0, f, 0);
3360 return 0;
3361}
blueswir1414f0da2008-08-15 18:20:52 +00003362EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003363if compile_prog "" "" ; then
3364 pthread=yes
3365else
3366 for pthread_lib in $PTHREADLIBS_LIST; do
3367 if compile_prog "" "$pthread_lib" ; then
3368 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003369 found=no
3370 for lib_entry in $LIBS; do
3371 if test "$lib_entry" = "$pthread_lib"; then
3372 found=yes
3373 break
3374 fi
3375 done
3376 if test "$found" = "no"; then
3377 LIBS="$pthread_lib $LIBS"
3378 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003379 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003380 break
3381 fi
3382 done
3383fi
blueswir1414f0da2008-08-15 18:20:52 +00003384
Anthony Liguori4617e592009-08-25 17:21:56 -05003385if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003386 error_exit "pthread check failed" \
3387 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003388fi
3389
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003390# check for pthread_setname_np
3391pthread_setname_np=no
3392cat > $TMPC << EOF
3393#include <pthread.h>
3394
3395static void *f(void *p) { return NULL; }
3396int main(void)
3397{
3398 pthread_t thread;
3399 pthread_create(&thread, 0, f, 0);
3400 pthread_setname_np(thread, "QEMU");
3401 return 0;
3402}
3403EOF
3404if compile_prog "" "$pthread_lib" ; then
3405 pthread_setname_np=yes
3406fi
3407
aliguoribf9298b2008-12-05 20:05:26 +00003408##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003409# rbd probe
3410if test "$rbd" != "no" ; then
3411 cat > $TMPC <<EOF
3412#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003413#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003414int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003415 rados_t cluster;
3416 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003417 return 0;
3418}
3419EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003420 rbd_libs="-lrbd -lrados"
3421 if compile_prog "" "$rbd_libs" ; then
3422 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003423 else
3424 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003425 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003426 fi
3427 rbd=no
3428 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003429fi
3430
3431##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003432# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003433min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003434if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003435 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003436 libssh2_cflags=$($pkg_config libssh2 --cflags)
3437 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003438 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003439 else
3440 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003441 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003442 fi
3443 libssh2=no
3444 fi
3445fi
3446
3447##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003448# libssh2_sftp_fsync probe
3449
3450if test "$libssh2" = "yes"; then
3451 cat > $TMPC <<EOF
3452#include <stdio.h>
3453#include <libssh2.h>
3454#include <libssh2_sftp.h>
3455int main(void) {
3456 LIBSSH2_SESSION *session;
3457 LIBSSH2_SFTP *sftp;
3458 LIBSSH2_SFTP_HANDLE *sftp_handle;
3459 session = libssh2_session_init ();
3460 sftp = libssh2_sftp_init (session);
3461 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3462 libssh2_sftp_fsync (sftp_handle);
3463 return 0;
3464}
3465EOF
3466 # libssh2_cflags/libssh2_libs defined in previous test.
3467 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3468 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3469 fi
3470fi
3471
3472##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003473# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003474
3475if test "$linux_aio" != "no" ; then
3476 cat > $TMPC <<EOF
3477#include <libaio.h>
3478#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003479#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003480int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3481EOF
3482 if compile_prog "" "-laio" ; then
3483 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003484 else
3485 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003486 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003487 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003488 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003489 fi
3490fi
3491
3492##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003493# TPM passthrough is only on x86 Linux
3494
3495if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3496 tpm_passthrough=$tpm
3497else
3498 tpm_passthrough=no
3499fi
3500
3501##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003502# attr probe
3503
3504if test "$attr" != "no" ; then
3505 cat > $TMPC <<EOF
3506#include <stdio.h>
3507#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003508#ifdef CONFIG_LIBATTR
3509#include <attr/xattr.h>
3510#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003511#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003512#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003513int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3514EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003515 if compile_prog "" "" ; then
3516 attr=yes
3517 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003518 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003519 attr=yes
3520 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003521 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003522 else
3523 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003524 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003525 fi
3526 attr=no
3527 fi
3528fi
3529
3530##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003531# iovec probe
3532cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003533#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003534#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003535#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003536int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003537EOF
3538iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003539if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003540 iovec=yes
3541fi
3542
aurel32f652e6a2008-12-16 10:43:48 +00003543##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003544# preadv probe
3545cat > $TMPC <<EOF
3546#include <sys/types.h>
3547#include <sys/uio.h>
3548#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003549int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003550EOF
3551preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003552if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003553 preadv=yes
3554fi
3555
3556##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003557# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003558# fdt support is mandatory for at least some target architectures,
3559# so insist on it if we're building those system emulators.
3560fdt_required=no
3561for target in $target_list; do
3562 case $target in
Paul Burtondf1d8a12016-09-08 15:51:58 +01003563 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003564 fdt_required=yes
3565 ;;
3566 esac
3567done
3568
3569if test "$fdt_required" = "yes"; then
3570 if test "$fdt" = "no"; then
3571 error_exit "fdt disabled but some requested targets require it." \
3572 "You can turn off fdt only if you also disable all the system emulation" \
3573 "targets which need it (by specifying a cut down --target-list)."
3574 fi
3575 fdt=yes
3576fi
3577
Juan Quintela2df87df2009-08-12 18:29:54 +02003578if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003579 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003580 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003581 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003582 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003583#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003584#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003585int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003586EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003587 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003588 # system DTC is good - use it
aurel32f652e6a2008-12-16 10:43:48 +00003589 fdt=yes
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003590 elif test -d ${source_path}/dtc/libfdt ; then
3591 # have submodule DTC - use it
3592 fdt=yes
3593 dtc_internal="yes"
3594 mkdir -p dtc
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03003595 if [ "$pwd_is_source_path" != "y" ] ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003596 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3597 symlink "$source_path/dtc/scripts" "dtc/scripts"
Juan Quintela2df87df2009-08-12 18:29:54 +02003598 fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003599 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3600 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3601 elif test "$fdt" = "yes" ; then
3602 # have neither and want - prompt for system/submodule install
Paul Burton6e85fce2016-09-08 15:51:55 +01003603 error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \
Stewart Smith3f281822014-01-24 12:39:06 +11003604 " (1) Preferred: Install the DTC (libfdt) devel package" \
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003605 " (2) Fetch the DTC submodule, using:" \
3606 " git submodule update --init dtc"
3607 else
3608 # don't have and don't want
Michael Wallede3a3542011-04-26 00:24:07 +02003609 fdt_libs=
Juan Quintela2df87df2009-08-12 18:29:54 +02003610 fdt=no
aurel32f652e6a2008-12-16 10:43:48 +00003611 fi
3612fi
3613
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003614libs_softmmu="$libs_softmmu $fdt_libs"
3615
Michael Walle20ff0752011-03-07 23:32:39 +01003616##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003617# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003618
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003619if test "$opengl" != "no" ; then
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003620 opengl_pkgs="epoxy libdrm gbm"
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003621 if $pkg_config $opengl_pkgs x11; then
Jeremy Whitef676c672015-01-09 13:08:49 -06003622 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3623 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003624 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003625 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3626 gtk_gl="yes"
3627 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003628 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003629 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003630 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003631 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003632 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003633 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003634 opengl_libs=""
3635 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003636 fi
3637fi
3638
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003639if test "$opengl" = "yes"; then
3640 cat > $TMPC << EOF
3641#include <epoxy/egl.h>
3642#ifndef EGL_MESA_image_dma_buf_export
3643# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3644#endif
3645int main(void) { return 0; }
3646EOF
3647 if compile_prog "" "" ; then
3648 opengl_dmabuf=yes
3649 fi
3650fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003651
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003652
Bharata B Raoeb100392012-09-24 14:42:45 +05303653##########################################
3654# glusterfs probe
3655if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003656 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303657 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003658 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3659 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003660 if $pkg_config --atleast-version=4 glusterfs-api; then
3661 glusterfs_xlator_opt="yes"
3662 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003663 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303664 glusterfs_discard="yes"
3665 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303666 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05303667 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05303668 glusterfs_zerofill="yes"
3669 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303670 else
3671 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003672 feature_not_found "GlusterFS backend support" \
3673 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303674 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303675 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303676 fi
3677fi
3678
aurel3239386ac2009-04-15 19:48:17 +00003679# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003680# emulator. This is done because older glibc versions don't
3681# have syscall stubs for these implemented. In that case we
3682# don't provide them even if kernel supports them.
3683#
3684inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003685cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003686#include <sys/inotify.h>
3687
3688int
3689main(void)
3690{
3691 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003692 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003693}
3694EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003695if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003696 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003697fi
3698
Riku Voipioc05c7a72010-03-26 15:25:11 +00003699inotify1=no
3700cat > $TMPC << EOF
3701#include <sys/inotify.h>
3702
3703int
3704main(void)
3705{
3706 /* try to start inotify */
3707 return inotify_init1(0);
3708}
3709EOF
3710if compile_prog "" "" ; then
3711 inotify1=yes
3712fi
3713
Riku Voipio099d6b02009-05-05 12:10:04 +03003714# check if pipe2 is there
3715pipe2=no
3716cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003717#include <unistd.h>
3718#include <fcntl.h>
3719
3720int main(void)
3721{
3722 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003723 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003724}
3725EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003726if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003727 pipe2=yes
3728fi
3729
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003730# check if accept4 is there
3731accept4=no
3732cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003733#include <sys/socket.h>
3734#include <stddef.h>
3735
3736int main(void)
3737{
3738 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3739 return 0;
3740}
3741EOF
3742if compile_prog "" "" ; then
3743 accept4=yes
3744fi
3745
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303746# check if tee/splice is there. vmsplice was added same time.
3747splice=no
3748cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303749#include <unistd.h>
3750#include <fcntl.h>
3751#include <limits.h>
3752
3753int main(void)
3754{
Stefan Weil66ea0f22011-12-17 09:27:35 +01003755 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303756 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3757 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3758 return 0;
3759}
3760EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003761if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303762 splice=yes
3763fi
3764
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003765##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003766# libnuma probe
3767
3768if test "$numa" != "no" ; then
3769 cat > $TMPC << EOF
3770#include <numa.h>
3771int main(void) { return numa_available(); }
3772EOF
3773
3774 if compile_prog "" "-lnuma" ; then
3775 numa=yes
3776 libs_softmmu="-lnuma $libs_softmmu"
3777 else
3778 if test "$numa" = "yes" ; then
3779 feature_not_found "numa" "install numactl devel"
3780 fi
3781 numa=no
3782 fi
3783fi
3784
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003785if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3786 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3787 exit 1
3788fi
3789
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003790##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08003791# tcmalloc probe
3792
3793if test "$tcmalloc" = "yes" ; then
3794 cat > $TMPC << EOF
3795#include <stdlib.h>
3796int main(void) { malloc(1); return 0; }
3797EOF
3798
3799 if compile_prog "" "-ltcmalloc" ; then
3800 LIBS="-ltcmalloc $LIBS"
3801 else
3802 feature_not_found "tcmalloc" "install gperftools devel"
3803 fi
3804fi
3805
3806##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003807# jemalloc probe
3808
3809if test "$jemalloc" = "yes" ; then
3810 cat > $TMPC << EOF
3811#include <stdlib.h>
3812int main(void) { malloc(1); return 0; }
3813EOF
3814
3815 if compile_prog "" "-ljemalloc" ; then
3816 LIBS="-ljemalloc $LIBS"
3817 else
3818 feature_not_found "jemalloc" "install jemalloc devel"
3819 fi
3820fi
3821
3822##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003823# signalfd probe
3824signalfd="no"
3825cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003826#include <unistd.h>
3827#include <sys/syscall.h>
3828#include <signal.h>
3829int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3830EOF
3831
3832if compile_prog "" "" ; then
3833 signalfd=yes
3834fi
3835
Riku Voipioc2882b92009-08-12 15:08:24 +03003836# check if eventfd is supported
3837eventfd=no
3838cat > $TMPC << EOF
3839#include <sys/eventfd.h>
3840
3841int main(void)
3842{
Stefan Weil55cc7f32011-12-17 09:27:37 +01003843 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03003844}
3845EOF
3846if compile_prog "" "" ; then
3847 eventfd=yes
3848fi
3849
Marc-André Lureau751bcc32015-10-09 17:17:16 +02003850# check if memfd is supported
3851memfd=no
3852cat > $TMPC << EOF
3853#include <sys/memfd.h>
3854
3855int main(void)
3856{
3857 return memfd_create("foo", MFD_ALLOW_SEALING);
3858}
3859EOF
3860if compile_prog "" "" ; then
3861 memfd=yes
3862fi
3863
3864
3865
Ulrich Hechtd0927932009-09-17 20:22:14 +03003866# check for fallocate
3867fallocate=no
3868cat > $TMPC << EOF
3869#include <fcntl.h>
3870
3871int main(void)
3872{
3873 fallocate(0, 0, 0, 0);
3874 return 0;
3875}
3876EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003877if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003878 fallocate=yes
3879fi
3880
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01003881# check for fallocate hole punching
3882fallocate_punch_hole=no
3883cat > $TMPC << EOF
3884#include <fcntl.h>
3885#include <linux/falloc.h>
3886
3887int main(void)
3888{
3889 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3890 return 0;
3891}
3892EOF
3893if compile_prog "" "" ; then
3894 fallocate_punch_hole=yes
3895fi
3896
Denis V. Lunevb953f072015-01-30 11:42:14 +03003897# check that fallocate supports range zeroing inside the file
3898fallocate_zero_range=no
3899cat > $TMPC << EOF
3900#include <fcntl.h>
3901#include <linux/falloc.h>
3902
3903int main(void)
3904{
3905 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3906 return 0;
3907}
3908EOF
3909if compile_prog "" "" ; then
3910 fallocate_zero_range=yes
3911fi
3912
Kevin Wolfed911432014-09-29 17:12:59 +02003913# check for posix_fallocate
3914posix_fallocate=no
3915cat > $TMPC << EOF
3916#include <fcntl.h>
3917
3918int main(void)
3919{
3920 posix_fallocate(0, 0, 0);
3921 return 0;
3922}
3923EOF
3924if compile_prog "" "" ; then
3925 posix_fallocate=yes
3926fi
3927
Peter Maydellc727f472011-01-06 11:05:10 +00003928# check for sync_file_range
3929sync_file_range=no
3930cat > $TMPC << EOF
3931#include <fcntl.h>
3932
3933int main(void)
3934{
3935 sync_file_range(0, 0, 0, 0);
3936 return 0;
3937}
3938EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003939if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00003940 sync_file_range=yes
3941fi
3942
Peter Maydelldace20d2011-01-10 13:11:24 +00003943# check for linux/fiemap.h and FS_IOC_FIEMAP
3944fiemap=no
3945cat > $TMPC << EOF
3946#include <sys/ioctl.h>
3947#include <linux/fs.h>
3948#include <linux/fiemap.h>
3949
3950int main(void)
3951{
3952 ioctl(0, FS_IOC_FIEMAP, 0);
3953 return 0;
3954}
3955EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003956if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00003957 fiemap=yes
3958fi
3959
Ulrich Hechtd0927932009-09-17 20:22:14 +03003960# check for dup3
3961dup3=no
3962cat > $TMPC << EOF
3963#include <unistd.h>
3964
3965int main(void)
3966{
3967 dup3(0, 0, 0);
3968 return 0;
3969}
3970EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01003971if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003972 dup3=yes
3973fi
3974
Alex Bligh4e0c6522013-08-21 16:02:43 +01003975# check for ppoll support
3976ppoll=no
3977cat > $TMPC << EOF
3978#include <poll.h>
3979
3980int main(void)
3981{
3982 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3983 ppoll(&pfd, 1, 0, 0);
3984 return 0;
3985}
3986EOF
3987if compile_prog "" "" ; then
3988 ppoll=yes
3989fi
3990
Alex Blighcd758dd2013-08-21 16:02:44 +01003991# check for prctl(PR_SET_TIMERSLACK , ... ) support
3992prctl_pr_set_timerslack=no
3993cat > $TMPC << EOF
3994#include <sys/prctl.h>
3995
3996int main(void)
3997{
3998 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3999 return 0;
4000}
4001EOF
4002if compile_prog "" "" ; then
4003 prctl_pr_set_timerslack=yes
4004fi
4005
Peter Maydell3b6edd12011-02-15 18:35:05 +00004006# check for epoll support
4007epoll=no
4008cat > $TMPC << EOF
4009#include <sys/epoll.h>
4010
4011int main(void)
4012{
4013 epoll_create(0);
4014 return 0;
4015}
4016EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004017if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004018 epoll=yes
4019fi
4020
Peter Maydell227f0212016-06-06 19:58:11 +01004021# epoll_create1 is a later addition
4022# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004023epoll_create1=no
4024cat > $TMPC << EOF
4025#include <sys/epoll.h>
4026
4027int main(void)
4028{
Peter Maydell19e83f62011-04-26 16:56:40 +01004029 /* Note that we use epoll_create1 as a value, not as
4030 * a function being called. This is necessary so that on
4031 * old SPARC glibc versions where the function was present in
4032 * the library but not declared in the header file we will
4033 * fail the configure check. (Otherwise we will get a compiler
4034 * warning but not an error, and will proceed to fail the
4035 * qemu compile where we compile with -Werror.)
4036 */
Blue Swirlc075a722012-08-09 20:21:25 +00004037 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004038}
4039EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004040if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004041 epoll_create1=yes
4042fi
4043
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004044# check for sendfile support
4045sendfile=no
4046cat > $TMPC << EOF
4047#include <sys/sendfile.h>
4048
4049int main(void)
4050{
4051 return sendfile(0, 0, 0, 0);
4052}
4053EOF
4054if compile_prog "" "" ; then
4055 sendfile=yes
4056fi
4057
Riku Voipio51834342014-06-22 11:25:42 +01004058# check for timerfd support (glibc 2.8 and newer)
4059timerfd=no
4060cat > $TMPC << EOF
4061#include <sys/timerfd.h>
4062
4063int main(void)
4064{
4065 return(timerfd_create(CLOCK_REALTIME, 0));
4066}
4067EOF
4068if compile_prog "" "" ; then
4069 timerfd=yes
4070fi
4071
Riku Voipio9af5c902014-08-12 15:58:57 +03004072# check for setns and unshare support
4073setns=no
4074cat > $TMPC << EOF
4075#include <sched.h>
4076
4077int main(void)
4078{
4079 int ret;
4080 ret = setns(0, 0);
4081 ret = unshare(0);
4082 return ret;
4083}
4084EOF
4085if compile_prog "" "" ; then
4086 setns=yes
4087fi
4088
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004089# clock_adjtime probe
4090clock_adjtime=no
4091cat > $TMPC <<EOF
4092#include <time.h>
4093
4094int main(void)
4095{
4096 return clock_adjtime(0, 0);
4097}
4098EOF
4099clock_adjtime=no
4100if compile_prog "" "" ; then
4101 clock_adjtime=yes
4102fi
4103
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004104# syncfs probe
4105syncfs=no
4106cat > $TMPC <<EOF
4107#include <unistd.h>
4108
4109int main(void)
4110{
4111 return syncfs(0);
4112}
4113EOF
4114syncfs=no
4115if compile_prog "" "" ; then
4116 syncfs=yes
4117fi
4118
pbrookcc8ae6d2006-04-23 17:57:59 +00004119# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004120if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004121 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004122 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004123 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004124 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004125 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004126 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004127 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004128 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004129fi
4130
Stefan Weilf514f412009-10-11 12:44:07 +02004131# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004132byteswap_h=no
4133cat > $TMPC << EOF
4134#include <byteswap.h>
4135int main(void) { return bswap_32(0); }
4136EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004137if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004138 byteswap_h=yes
4139fi
4140
Stefan Weil75f13592013-01-05 12:17:38 +01004141# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004142bswap_h=no
4143cat > $TMPC << EOF
4144#include <sys/endian.h>
4145#include <sys/types.h>
4146#include <machine/bswap.h>
4147int main(void) { return bswap32(0); }
4148EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004149if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004150 bswap_h=yes
4151fi
4152
aliguorida93a1f2008-12-12 20:02:52 +00004153##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004154# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004155if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004156 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004157 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004158 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4159 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004160 else
4161 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004162 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004163 fi
4164 libiscsi="no"
4165 fi
4166fi
4167
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004168##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004169# Do we need libm
4170cat > $TMPC << EOF
4171#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004172int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004173EOF
4174if compile_prog "" "" ; then
4175 :
4176elif compile_prog "" "-lm" ; then
4177 LIBS="-lm $LIBS"
4178 libs_qga="-lm $libs_qga"
4179else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004180 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004181fi
4182
4183##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004184# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004185# uClibc provides 2 versions of clock_gettime(), one with realtime
4186# support and one without. This means that the clock_gettime() don't
4187# need -lrt. We still need it for timer_create() so we check for this
4188# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004189cat > $TMPC <<EOF
4190#include <signal.h>
4191#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004192int main(void) {
4193 timer_create(CLOCK_REALTIME, NULL, NULL);
4194 return clock_gettime(CLOCK_REALTIME, NULL);
4195}
aliguorida93a1f2008-12-12 20:02:52 +00004196EOF
4197
Juan Quintela52166aa2009-08-03 14:46:03 +02004198if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004199 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004200# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004201elif compile_prog "" "$pthread_lib -lrt" ; then
4202 LIBS="$LIBS -lrt"
4203 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004204fi
4205
Blue Swirl31ff5042009-09-12 12:33:07 +00004206if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004207 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004208 libs_softmmu="-lutil $libs_softmmu"
4209fi
4210
Blue Swirlde5071c2009-09-12 09:58:46 +00004211##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004212# spice probe
4213if test "$spice" != "no" ; then
4214 cat > $TMPC << EOF
4215#include <spice.h>
4216int main(void) { spice_server_new(); return 0; }
4217EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004218 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4219 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004220 if $pkg_config --atleast-version=0.12.0 spice-server && \
4221 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004222 compile_prog "$spice_cflags" "$spice_libs" ; then
4223 spice="yes"
4224 libs_softmmu="$libs_softmmu $spice_libs"
4225 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004226 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4227 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004228 else
4229 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004230 feature_not_found "spice" \
4231 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004232 fi
4233 spice="no"
4234 fi
4235fi
4236
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004237# check for smartcard support
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004238smartcard_cflags=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004239if test "$smartcard" != "no"; then
4240 if $pkg_config libcacard; then
4241 libcacard_cflags=$($pkg_config --cflags libcacard)
4242 libcacard_libs=$($pkg_config --libs libcacard)
4243 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4244 libs_softmmu="$libs_softmmu $libcacard_libs"
4245 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004246 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004247 if test "$smartcard" = "yes"; then
4248 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004249 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004250 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004251 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004252fi
4253
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004254# check for libusb
4255if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004256 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004257 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004258 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4259 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004260 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4261 libs_softmmu="$libs_softmmu $libusb_libs"
4262 else
4263 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004264 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004265 fi
4266 libusb="no"
4267 fi
4268fi
4269
Hans de Goede69354a82011-07-19 11:04:10 +02004270# check for usbredirparser for usb network redirection support
4271if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004272 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004273 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004274 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4275 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004276 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
Aurelien Jarno56ab2ad2012-09-11 20:57:58 +02004277 libs_softmmu="$libs_softmmu $usb_redir_libs"
Hans de Goede69354a82011-07-19 11:04:10 +02004278 else
4279 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004280 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004281 fi
4282 usb_redir="no"
4283 fi
4284fi
4285
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004286##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004287# check if we have VSS SDK headers for win
4288
4289if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4290 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004291 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004292 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4293 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004294 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004295 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4296 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004297 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004298 esac
4299 cat > $TMPC << EOF
4300#define __MIDL_user_allocate_free_DEFINED__
4301#include <inc/win2003/vss.h>
4302int main(void) { return VSS_CTX_BACKUP; }
4303EOF
4304 if compile_prog "$vss_win32_include" "" ; then
4305 guest_agent_with_vss="yes"
4306 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004307 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004308 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004309 else
4310 if test "$vss_win32_sdk" != "" ; then
4311 echo "ERROR: Please download and install Microsoft VSS SDK:"
4312 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4313 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4314 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4315 echo "ERROR: The headers are extracted in the directory \`inc'."
4316 feature_not_found "VSS support"
4317 fi
4318 guest_agent_with_vss="no"
4319 fi
4320fi
4321
4322##########################################
4323# lookup Windows platform SDK (if not specified)
4324# The SDK is needed only to build .tlb (type library) file of guest agent
4325# VSS provider from the source. It is usually unnecessary because the
4326# pre-compiled .tlb file is included.
4327
4328if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4329 if test -z "$win_sdk"; then
4330 programfiles="$PROGRAMFILES"
4331 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4332 if test -n "$programfiles"; then
4333 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4334 else
4335 feature_not_found "Windows SDK"
4336 fi
4337 elif test "$win_sdk" = "no"; then
4338 win_sdk=""
4339 fi
4340fi
4341
4342##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004343# check if mingw environment provides a recent ntddscsi.h
4344if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4345 cat > $TMPC << EOF
4346#include <windows.h>
4347#include <ntddscsi.h>
4348int main(void) {
4349#if !defined(IOCTL_SCSI_GET_ADDRESS)
4350#error Missing required ioctl definitions
4351#endif
4352 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4353 return addr.Lun;
4354}
4355EOF
4356 if compile_prog "" "" ; then
4357 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004358 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004359 fi
4360fi
4361
4362##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004363# virgl renderer probe
4364
4365if test "$virglrenderer" != "no" ; then
4366 cat > $TMPC << EOF
4367#include <virglrenderer.h>
4368int main(void) { virgl_renderer_poll(); return 0; }
4369EOF
4370 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4371 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4372 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4373 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4374 virglrenderer="yes"
4375 else
4376 if test "$virglrenderer" = "yes" ; then
4377 feature_not_found "virglrenderer"
4378 fi
4379 virglrenderer="no"
4380 fi
4381fi
4382
4383##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004384# check if we have fdatasync
4385
4386fdatasync=no
4387cat > $TMPC << EOF
4388#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004389int main(void) {
4390#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4391return fdatasync(0);
4392#else
Stefan Weile172fe12012-04-06 21:33:20 +02004393#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004394#endif
4395}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004396EOF
4397if compile_prog "" "" ; then
4398 fdatasync=yes
4399fi
4400
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004401##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004402# check if we have madvise
4403
4404madvise=no
4405cat > $TMPC << EOF
4406#include <sys/types.h>
4407#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004408#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004409int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4410EOF
4411if compile_prog "" "" ; then
4412 madvise=yes
4413fi
4414
4415##########################################
4416# check if we have posix_madvise
4417
4418posix_madvise=no
4419cat > $TMPC << EOF
4420#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004421#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004422int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4423EOF
4424if compile_prog "" "" ; then
4425 posix_madvise=yes
4426fi
4427
4428##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004429# check if we have posix_syslog
4430
4431posix_syslog=no
4432cat > $TMPC << EOF
4433#include <syslog.h>
4434int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4435EOF
4436if compile_prog "" "" ; then
4437 posix_syslog=yes
4438fi
4439
4440##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004441# check if trace backend exists
4442
Lluís Vilanova5b808272014-05-27 15:02:14 +02004443$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004444if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004445 error_exit "invalid trace backends" \
4446 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004447fi
4448
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004449##########################################
4450# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004451if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004452 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004453#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004454int main(void) { return 0; }
4455EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004456 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004457 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004458 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004459 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004460 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004461 fi
4462 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004463 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004464 else
4465 urcu_bp_libs="-lurcu-bp"
4466 fi
4467
4468 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4469 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004470 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004471 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004472 fi
4473fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004474
4475##########################################
4476# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004477if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004478 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004479 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004480 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004481 trace_backend_stap="no"
4482 if has 'stap' ; then
4483 trace_backend_stap="yes"
4484 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004485fi
4486
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004487##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004488# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304489
Peter Maydell7c2acc72013-04-08 12:11:27 +01004490# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004491# is sigcontext. On Windows the only valid backend is the Windows
4492# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004493
4494ucontext_works=no
4495if test "$darwin" != "yes"; then
4496 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304497#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004498#ifdef __stub_makecontext
4499#error Ignoring glibc stub makecontext which will always fail
4500#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004501int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304502EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004503 if compile_prog "" "" ; then
4504 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304505 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004506fi
4507
4508if test "$coroutine" = ""; then
4509 if test "$mingw32" = "yes"; then
4510 coroutine=win32
4511 elif test "$ucontext_works" = "yes"; then
4512 coroutine=ucontext
4513 else
4514 coroutine=sigaltstack
4515 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004516else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004517 case $coroutine in
4518 windows)
4519 if test "$mingw32" != "yes"; then
4520 error_exit "'windows' coroutine backend only valid for Windows"
4521 fi
4522 # Unfortunately the user visible backend name doesn't match the
4523 # coroutine-*.c filename for this case, so we have to adjust it here.
4524 coroutine=win32
4525 ;;
4526 ucontext)
4527 if test "$ucontext_works" != "yes"; then
4528 feature_not_found "ucontext"
4529 fi
4530 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004531 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004532 if test "$mingw32" = "yes"; then
4533 error_exit "only the 'windows' coroutine backend is valid for Windows"
4534 fi
4535 ;;
4536 *)
4537 error_exit "unknown coroutine backend $coroutine"
4538 ;;
4539 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304540fi
4541
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004542if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004543 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004544fi
4545
Peter Lieven7d992e42016-09-27 11:58:45 +02004546if test "$debug_stack_usage" = "yes"; then
4547 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4548 error_exit "stack usage debugging is not supported for $cpu"
4549 fi
4550 if test "$coroutine_pool" = "yes"; then
4551 echo "WARN: disabling coroutine pool for stack usage debugging"
4552 coroutine_pool=no
4553 fi
4554fi
4555
4556
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304557##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304558# check if we have open_by_handle_at
4559
Stefan Weil4e1797f2012-06-18 22:11:06 +02004560open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304561cat > $TMPC << EOF
4562#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004563#if !defined(AT_EMPTY_PATH)
4564# error missing definition
4565#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004566int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004567#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304568EOF
4569if compile_prog "" "" ; then
4570 open_by_handle_at=yes
4571fi
4572
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304573########################################
4574# check if we have linux/magic.h
4575
4576linux_magic_h=no
4577cat > $TMPC << EOF
4578#include <linux/magic.h>
4579int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004580 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304581}
4582EOF
4583if compile_prog "" "" ; then
4584 linux_magic_h=yes
4585fi
4586
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004587########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004588# check whether we can disable warning option with a pragma (this is needed
4589# to silence warnings in the headers of some versions of external libraries).
4590# This test has to be compiled with -Werror as otherwise an unknown pragma is
4591# only a warning.
4592#
4593# If we can't selectively disable warning in the code, disable -Werror so that
4594# the build doesn't fail anyway.
4595
Peter Maydell06d71fa2012-07-30 16:13:07 +01004596pragma_disable_unused_but_set=no
4597cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004598#pragma GCC diagnostic push
Peter Maydell06d71fa2012-07-30 16:13:07 +01004599#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
Kevin Wolfc95e3082013-02-22 21:08:51 +01004600#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004601#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004602
Peter Maydell06d71fa2012-07-30 16:13:07 +01004603int main(void) {
4604 return 0;
4605}
4606EOF
4607if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004608 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004609else
4610 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004611fi
4612
4613########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004614# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004615
4616valgrind_h=no
4617cat > $TMPC << EOF
4618#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004619int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004620 return 0;
4621}
4622EOF
4623if compile_prog "" "" ; then
4624 valgrind_h=yes
4625fi
4626
4627########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004628# check if environ is declared
4629
4630has_environ=no
4631cat > $TMPC << EOF
4632#include <unistd.h>
4633int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00004634 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004635 return 0;
4636}
4637EOF
4638if compile_prog "" "" ; then
4639 has_environ=yes
4640fi
4641
Richard Henderson76a347e2012-12-28 14:17:02 -08004642########################################
4643# check if cpuid.h is usable.
4644
Richard Henderson76a347e2012-12-28 14:17:02 -08004645cat > $TMPC << EOF
4646#include <cpuid.h>
4647int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00004648 unsigned a, b, c, d;
4649 int max = __get_cpuid_max(0, 0);
4650
4651 if (max >= 1) {
4652 __cpuid(1, a, b, c, d);
4653 }
4654
4655 if (max >= 7) {
4656 __cpuid_count(7, 0, a, b, c, d);
4657 }
4658
4659 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08004660}
4661EOF
4662if compile_prog "" "" ; then
4663 cpuid_h=yes
4664fi
4665
Richard Henderson5dd89902017-07-18 18:40:18 -10004666##########################################
4667# avx2 optimization requirement check
4668#
4669# There is no point enabling this if cpuid.h is not usable,
4670# since we won't be able to select the new routines.
4671
4672if test $cpuid_h = yes; then
4673 cat > $TMPC << EOF
4674#pragma GCC push_options
4675#pragma GCC target("avx2")
4676#include <cpuid.h>
4677#include <immintrin.h>
4678static int bar(void *a) {
4679 __m256i x = *(__m256i *)a;
4680 return _mm256_testz_si256(x, x);
4681}
4682int main(int argc, char *argv[]) { return bar(argv[0]); }
4683EOF
4684 if compile_object "" ; then
4685 avx2_opt="yes"
4686 fi
4687fi
4688
Richard Hendersonf5401662013-02-16 12:46:59 -08004689########################################
4690# check if __[u]int128_t is usable.
4691
4692int128=no
4693cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01004694#if defined(__clang_major__) && defined(__clang_minor__)
4695# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4696# error __int128_t does not work in CLANG before 3.2
4697# endif
4698#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08004699__int128_t a;
4700__uint128_t b;
4701int main (void) {
4702 a = a + b;
4703 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01004704 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08004705 return 0;
4706}
4707EOF
4708if compile_prog "" "" ; then
4709 int128=yes
4710fi
Richard Henderson76a347e2012-12-28 14:17:02 -08004711
Richard Henderson7ebee432016-06-29 21:10:59 -07004712#########################################
4713# See if 128-bit atomic operations are supported.
4714
4715atomic128=no
4716if test "$int128" = "yes"; then
4717 cat > $TMPC << EOF
4718int main(void)
4719{
4720 unsigned __int128 x = 0, y = 0;
4721 y = __atomic_load_16(&x, 0);
4722 __atomic_store_16(&x, y, 0);
4723 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4724 return 0;
4725}
4726EOF
4727 if compile_prog "" "" ; then
4728 atomic128=yes
4729 fi
4730fi
4731
Richard Hendersondf79b992016-09-02 12:23:57 -07004732#########################################
4733# See if 64-bit atomic operations are supported.
4734# Note that without __atomic builtins, we can only
4735# assume atomic loads/stores max at pointer size.
4736
4737cat > $TMPC << EOF
4738#include <stdint.h>
4739int main(void)
4740{
4741 uint64_t x = 0, y = 0;
4742#ifdef __ATOMIC_RELAXED
4743 y = __atomic_load_8(&x, 0);
4744 __atomic_store_8(&x, y, 0);
4745 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4746 __atomic_exchange_8(&x, y, 0);
4747 __atomic_fetch_add_8(&x, y, 0);
4748#else
4749 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4750 __sync_lock_test_and_set(&x, y);
4751 __sync_val_compare_and_swap(&x, y, 0);
4752 __sync_fetch_and_add(&x, y);
4753#endif
4754 return 0;
4755}
4756EOF
4757if compile_prog "" "" ; then
4758 atomic64=yes
4759fi
4760
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08004761########################################
4762# check if getauxval is available.
4763
4764getauxval=no
4765cat > $TMPC << EOF
4766#include <sys/auxv.h>
4767int main(void) {
4768 return getauxval(AT_HWCAP) == 0;
4769}
4770EOF
4771if compile_prog "" "" ; then
4772 getauxval=yes
4773fi
4774
John Snowfd0e6052015-03-25 18:57:39 -04004775########################################
4776# check if ccache is interfering with
4777# semantic analysis of macros
4778
John Snow5e4dfd32015-10-28 13:56:40 -04004779unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04004780ccache_cpp2=no
4781cat > $TMPC << EOF
4782static const int Z = 1;
4783#define fn() ({ Z; })
4784#define TAUT(X) ((X) == Z)
4785#define PAREN(X, Y) (X == Y)
4786#define ID(X) (X)
4787int main(int argc, char *argv[])
4788{
4789 int x = 0, y = 0;
4790 x = ID(x);
4791 x = fn();
4792 fn();
4793 if (PAREN(x, y)) return 0;
4794 if (TAUT(Z)) return 0;
4795 return 0;
4796}
4797EOF
4798
4799if ! compile_object "-Werror"; then
4800 ccache_cpp2=yes
4801fi
4802
John Snowb553a042015-11-03 15:43:42 -05004803#################################################
4804# clang does not support glibc + FORTIFY_SOURCE.
4805
4806if test "$fortify_source" != "no"; then
4807 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4808 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01004809 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05004810 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05004811 fortify_source="no";
4812 else
4813 fortify_source="yes"
4814 fi
4815fi
4816
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304817##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04004818# check if struct fsxattr is available via linux/fs.h
4819
4820have_fsxattr=no
4821cat > $TMPC << EOF
4822#include <linux/fs.h>
4823struct fsxattr foo;
4824int main(void) {
4825 return 0;
4826}
4827EOF
4828if compile_prog "" "" ; then
4829 have_fsxattr=yes
4830fi
4831
Peter Maydellb66e10e2016-06-08 18:34:32 +01004832##########################################
4833# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02004834have_rtnetlink=no
4835cat > $TMPC << EOF
4836#include <linux/rtnetlink.h>
4837int main(void) {
4838 return IFLA_PROTO_DOWN;
4839}
4840EOF
4841if compile_prog "" "" ; then
4842 have_rtnetlink=yes
4843fi
4844
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01004845##########################################
4846# check for usable AF_VSOCK environment
4847have_af_vsock=no
4848cat > $TMPC << EOF
4849#include <errno.h>
4850#include <sys/types.h>
4851#include <sys/socket.h>
4852#if !defined(AF_VSOCK)
4853# error missing AF_VSOCK flag
4854#endif
4855#include <linux/vm_sockets.h>
4856int main(void) {
4857 int sock, ret;
4858 struct sockaddr_vm svm;
4859 socklen_t len = sizeof(svm);
4860 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4861 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4862 if ((ret == -1) && (errno == ENOTCONN)) {
4863 return 0;
4864 }
4865 return -1;
4866}
4867EOF
4868if compile_prog "" "" ; then
4869 have_af_vsock=yes
4870fi
4871
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04004872##########################################
4873# check for usable AF_ALG environment
4874hava_afalg=no
4875cat > $TMPC << EOF
4876#include <errno.h>
4877#include <sys/types.h>
4878#include <sys/socket.h>
4879#include <linux/if_alg.h>
4880int main(void) {
4881 int sock;
4882 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
4883 return sock;
4884}
4885EOF
4886if compile_prog "" "" ; then
4887 have_afalg=yes
4888fi
4889if test "$crypto_afalg" = "yes"
4890then
4891 if test "$have_afalg" != "yes"
4892 then
4893 error_exit "AF_ALG requested but could not be detected"
4894 fi
4895fi
4896
4897
James Clarke6969ec62016-06-06 12:02:50 +01004898#################################################
4899# Sparc implicitly links with --relax, which is
4900# incompatible with -r, so --no-relax should be
4901# given. It does no harm to give it on other
4902# platforms too.
4903
4904# Note: the prototype is needed since QEMU_CFLAGS
4905# contains -Wmissing-prototypes
4906cat > $TMPC << EOF
4907extern int foo(void);
4908int foo(void) { return 0; }
4909EOF
4910if ! compile_object ""; then
4911 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4912fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01004913for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4914 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4915 LD_REL_FLAGS=$i
4916 break
4917 fi
4918done
4919if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4920 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01004921fi
4922
Jan Vesely277abf12016-04-29 13:15:23 -04004923##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05004924# check for sysmacros.h
4925
4926have_sysmacros=no
4927cat > $TMPC << EOF
4928#include <sys/sysmacros.h>
4929int main(void) {
4930 return makedev(0, 0);
4931}
4932EOF
4933if compile_prog "" "" ; then
4934 have_sysmacros=yes
4935fi
4936
4937##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07004938# Veritas HyperScale block driver VxHS
4939# Check if libvxhs is installed
4940
4941if test "$vxhs" != "no" ; then
4942 cat > $TMPC <<EOF
4943#include <stdint.h>
4944#include <qnio/qnio_api.h>
4945
4946void *vxhs_callback;
4947
4948int main(void) {
4949 iio_init(QNIO_VERSION, vxhs_callback);
4950 return 0;
4951}
4952EOF
4953 vxhs_libs="-lvxhs -lssl"
4954 if compile_prog "" "$vxhs_libs" ; then
4955 vxhs=yes
4956 else
4957 if test "$vxhs" = "yes" ; then
4958 feature_not_found "vxhs block device" "Install libvxhs See github"
4959 fi
4960 vxhs=no
4961 fi
4962fi
4963
4964##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01004965# check for _Static_assert()
4966
4967have_static_assert=no
4968cat > $TMPC << EOF
4969_Static_assert(1, "success");
4970int main(void) {
4971 return 0;
4972}
4973EOF
4974if compile_prog "" "" ; then
4975 have_static_assert=yes
4976fi
4977
4978##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02004979# check for utmpx.h, it is missing e.g. on OpenBSD
4980
4981have_utmpx=no
4982cat > $TMPC << EOF
4983#include <utmpx.h>
4984struct utmpx user_info;
4985int main(void) {
4986 return 0;
4987}
4988EOF
4989if compile_prog "" "" ; then
4990 have_utmpx=yes
4991fi
4992
4993##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02004994# End of CC checks
4995# After here, no more $cc or $ld runs
4996
Blue Swirl1d728c32012-05-01 18:45:39 +00004997if test "$gcov" = "yes" ; then
4998 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4999 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005000elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005001 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Peter Maydellce278612015-11-09 15:14:09 +00005002elif test "$debug" = "no"; then
5003 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005004fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005005
Peter Lieven6542aa92014-02-03 10:26:13 +01005006##########################################
5007# Do we have libnfs
5008if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005009 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005010 libnfs="yes"
5011 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005012 else
5013 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005014 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005015 fi
5016 libnfs="no"
5017 fi
5018fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005019
Peter Maydell6ca026c2012-07-18 15:10:18 +01005020# Now we've finished running tests it's OK to add -Werror to the compiler flags
5021if test "$werror" = "yes"; then
5022 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5023fi
5024
Juan Quintelae86ecd42009-08-03 14:45:59 +02005025if test "$solaris" = "no" ; then
5026 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005027 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005028 fi
5029fi
5030
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005031# test if pod2man has --utf8 option
5032if pod2man --help | grep -q utf8; then
5033 POD2MAN="pod2man --utf8"
5034else
5035 POD2MAN="pod2man"
5036fi
5037
Blue Swirl952afb72010-09-19 08:36:34 +00005038# Use ASLR, no-SEH and DEP if available
5039if test "$mingw32" = "yes" ; then
5040 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005041 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005042 LDFLAGS="-Wl,$flag $LDFLAGS"
5043 fi
5044 done
5045fi
5046
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005047qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005048qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005049qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005050qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005051
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005052# We can only support ivshmem if we have eventfd
5053if [ "$eventfd" = "yes" ]; then
5054 ivshmem=yes
5055fi
5056
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005057tools=""
5058if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02005059 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005060 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5061 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005062 fi
5063 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005064 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005065 fi
5066fi
5067if test "$softmmu" = yes ; then
Meador Inge983eef52012-02-24 14:00:42 +05305068 if test "$virtfs" != no ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005069 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
5070 virtfs=yes
5071 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5072 else
5073 if test "$virtfs" = yes; then
Stefan Weil3f3b5382016-04-08 18:11:13 +02005074 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305075 fi
Andreas Färber17500372012-05-01 01:12:03 +02005076 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005077 fi
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305078 fi
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005079fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005080
5081# Probe for guest agent support/options
5082
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005083if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005084 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005085 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005086 guest_agent=yes
5087 elif [ "$guest_agent" != yes ]; then
5088 guest_agent=no
5089 else
5090 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005091 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005092fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005093
Michael Roth9d6bc272015-08-26 10:49:13 -05005094# Guest agent Window MSI package
5095
5096if test "$guest_agent" != yes; then
5097 if test "$guest_agent_msi" = yes; then
5098 error_exit "MSI guest agent package requires guest agent enabled"
5099 fi
5100 guest_agent_msi=no
5101elif test "$mingw32" != "yes"; then
5102 if test "$guest_agent_msi" = "yes"; then
5103 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5104 fi
5105 guest_agent_msi=no
5106elif ! has wixl; then
5107 if test "$guest_agent_msi" = "yes"; then
5108 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5109 fi
5110 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005111else
5112 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5113 # disabled explicitly
5114 if test "$guest_agent_msi" != "no"; then
5115 guest_agent_msi=yes
5116 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005117fi
5118
Michael Roth1a349042015-08-26 11:14:31 -05005119if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005120 if test "$guest_agent_with_vss" = "yes"; then
5121 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5122 fi
5123
5124 if test "$QEMU_GA_MANUFACTURER" = ""; then
5125 QEMU_GA_MANUFACTURER=QEMU
5126 fi
5127
5128 if test "$QEMU_GA_DISTRO" = ""; then
5129 QEMU_GA_DISTRO=Linux
5130 fi
5131
5132 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005133 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005134 fi
5135
Stefan Weil89138852016-05-16 15:10:20 +02005136 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005137
5138 case "$cpu" in
5139 x86_64)
5140 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5141 ;;
5142 i386)
5143 QEMU_GA_MSI_ARCH="-D Arch=32"
5144 ;;
5145 *)
5146 error_exit "CPU $cpu not supported for building installation package"
5147 ;;
5148 esac
5149fi
5150
Paolo Bonzinica35f782010-05-26 16:08:29 +02005151# Mac OS X ships with a broken assembler
5152roms=
5153if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5154 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5155 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005156 # Different host OS linkers have different ideas about the name of the ELF
5157 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
5158 # variant; and Windows uses i386pe.
5159 for emu in elf_i386 elf_i386_fbsd i386pe; do
5160 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5161 ld_i386_emulation="$emu"
5162 roms="optionrom"
5163 break
5164 fi
5165 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005166fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005167if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005168 roms="$roms spapr-rtas"
5169fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005170
Christian Borntraeger9933c302013-04-23 01:23:03 +00005171if test "$cpu" = "s390x" ; then
5172 roms="$roms s390-ccw"
5173fi
5174
Richard Henderson964c6fa2013-06-21 19:10:16 -07005175# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005176if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005177 textseg_addr=
5178 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005179 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5180 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005181 textseg_addr=0x60000000
5182 ;;
5183 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005184 # A 256M aligned address, high in the address space, with enough
5185 # room for the code_gen_buffer above it before the stack.
5186 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005187 ;;
5188 esac
5189 if [ -n "$textseg_addr" ]; then
5190 cat > $TMPC <<EOF
5191 int main(void) { return 0; }
5192EOF
5193 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5194 if ! compile_prog "" "$textseg_ldflags"; then
5195 # In case ld does not support -Ttext-segment, edit the default linker
5196 # script via sed to set the .text start addr. This is needed on FreeBSD
5197 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005198 if ! $ld --verbose >/dev/null 2>&1; then
5199 error_exit \
5200 "We need to link the QEMU user mode binaries at a" \
5201 "specific text address. Unfortunately your linker" \
5202 "doesn't support either the -Ttext-segment option or" \
5203 "printing the default linker script with --verbose." \
5204 "If you don't want the user mode binaries, pass the" \
5205 "--disable-user option to configure."
5206 fi
5207
Richard Henderson964c6fa2013-06-21 19:10:16 -07005208 $ld --verbose | sed \
5209 -e '1,/==================================================/d' \
5210 -e '/==================================================/,$d' \
5211 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5212 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5213 textseg_ldflags="-Wl,-T../config-host.ld"
5214 fi
5215 fi
5216fi
5217
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005218# Check that the C++ compiler exists and works with the C compiler.
5219# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5220if has $cxx; then
5221 cat > $TMPC <<EOF
5222int c_function(void);
5223int main(void) { return c_function(); }
5224EOF
5225
5226 compile_object
5227
5228 cat > $TMPCXX <<EOF
5229extern "C" {
5230 int c_function(void);
5231}
5232int c_function(void) { return 42; }
5233EOF
5234
5235 update_cxxflags
5236
5237 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5238 # C++ compiler $cxx works ok with C compiler $cc
5239 :
5240 else
5241 echo "C++ compiler $cxx does not work with C compiler $cc"
5242 echo "Disabling C++ specific optional code"
5243 cxx=
5244 fi
5245else
5246 echo "No C++ compiler available; disabling C++ specific optional code"
5247 cxx=
5248fi
5249
Cole Robinson02d34f62016-05-06 14:03:09 -04005250echo_version() {
5251 if test "$1" = "yes" ; then
5252 echo "($2)"
5253 fi
5254}
5255
Jan Kiszka50e12062014-10-02 10:03:55 +02005256# prepend pixman and ftd flags after all config tests are done
5257QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5258libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005259
bellard43ce4df2003-06-09 19:53:12 +00005260echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005261echo "BIOS directory $(eval echo $qemu_datadir)"
5262echo "binary directory $(eval echo $bindir)"
5263echo "library directory $(eval echo $libdir)"
5264echo "module directory $(eval echo $qemu_moddir)"
5265echo "libexec directory $(eval echo $libexecdir)"
5266echo "include directory $(eval echo $includedir)"
5267echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005268if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005269echo "local state directory $(eval echo $local_statedir)"
5270echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005271echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005272else
5273echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005274echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005275fi
bellard5a671352003-10-01 00:13:48 +00005276echo "Source path $source_path"
bellard43ce4df2003-06-09 19:53:12 +00005277echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005278echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005279echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005280echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005281echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005282echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005283echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005284echo "LDFLAGS $LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005285echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005286echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005287echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005288if test "$slirp" = "yes" ; then
5289 echo "smbd $smbd"
5290fi
Fam Zheng17969262014-02-10 14:48:56 +08005291echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005292echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005293echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005294echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005295echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005296echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005297echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005298echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005299echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005300if test "$darwin" = "yes" ; then
5301 echo "Cocoa support $cocoa"
5302fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02005303echo "pixman $pixman"
Stefan Weil89138852016-05-16 15:10:20 +02005304echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5305echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005306echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005307echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005308echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005309echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005310echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005311echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005312echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02005313echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005314echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005315echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005316echo "curses support $curses"
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005317echo "virgl support $virglrenderer"
Alexander Graf769ce762009-05-11 17:41:42 +02005318echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005319echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005320echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005321echo "Block whitelist (rw) $block_drv_rw_whitelist"
5322echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305323echo "VirtFS support $virtfs"
Jes Sorensen821601e2011-03-16 13:33:36 +01005324echo "VNC support $vnc"
5325if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005326 echo "VNC SASL support $vnc_sasl"
5327 echo "VNC JPEG support $vnc_jpeg"
5328 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005329fi
blueswir131422552007-04-16 18:27:06 +00005330if test -n "$sparc_cpu"; then
5331 echo "Target Sparc Arch $sparc_cpu"
5332fi
aliguorie37630c2009-04-22 15:19:10 +00005333echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005334if test "$xen" = "yes" ; then
5335 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005336 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005337fi
aurel322e4d9fb2008-04-08 06:01:02 +00005338echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005339echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005340echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005341echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005342echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005343echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005344echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005345echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005346echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005347echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01005348echo "HAX support $hax"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005349echo "TCG support $tcg"
5350if test "$tcg" = "yes" ; then
5351 echo "TCG debug enabled $debug_tcg"
5352 echo "TCG interpreter $tcg_interpreter"
5353fi
Michael R. Hines2da776d2013-07-22 10:01:54 -04005354echo "RDMA support $rdma"
aurel32f652e6a2008-12-16 10:43:48 +00005355echo "fdt support $fdt"
aliguoriceb42de2009-04-07 18:43:28 +00005356echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005357echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005358echo "madvise $madvise"
5359echo "posix_madvise $posix_madvise"
Corey Bryant47e98652012-01-26 09:42:26 -05005360echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005361echo "vhost-net support $vhost_net"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005362echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005363echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005364echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005365echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005366if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005367echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005368fi
Stefan Weil89138852016-05-16 15:10:20 +02005369echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005370echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005371echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005372echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005373echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005374echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005375echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005376echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005377echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01005378echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05005379echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005380echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05005381echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05005382echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03005383echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01005384echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005385echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02005386echo "debug stack usage $debug_stack_usage"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005387echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05305388echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00005389echo "gcov $gcov_tool"
5390echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05005391echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005392echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005393echo "TPM passthrough $tpm_passthrough"
Paolo Bonzini3556c232013-05-10 14:16:40 +02005394echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01005395echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08005396echo "lzo support $lzo"
5397echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01005398echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08005399echo "NUMA host support $numa"
Fam Zheng2847b462015-03-26 11:03:12 +08005400echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02005401echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08005402echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005403echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005404echo "VxHS block device $vxhs"
bellard67b915a2004-03-31 23:37:16 +00005405
Stefan Weil1ba16962011-07-29 22:40:45 +02005406if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00005407echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00005408fi
bellard97a847b2003-08-10 21:36:04 +00005409
Peter Maydell898be3e2017-03-21 14:31:57 +00005410if test "$supported_cpu" = "no"; then
5411 echo
5412 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5413 echo
5414 echo "CPU host architecture $cpu support is not currently maintained."
5415 echo "The QEMU project intends to remove support for this host CPU in"
5416 echo "a future release if nobody volunteers to maintain it and to"
5417 echo "provide a build host for our continuous integration setup."
5418 echo "configure has succeeded and you can continue to build, but"
5419 echo "if you care about QEMU on this platform you should contact"
5420 echo "us upstream at qemu-devel@nongnu.org."
5421fi
5422
5423if test "$supported_os" = "no"; then
5424 echo
5425 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5426 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00005427 echo "Host OS $targetos support is not currently maintained."
5428 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00005429 echo "a future release if nobody volunteers to maintain it and to"
5430 echo "provide a build host for our continuous integration setup."
5431 echo "configure has succeeded and you can continue to build, but"
5432 echo "if you care about QEMU on this platform you should contact"
5433 echo "us upstream at qemu-devel@nongnu.org."
5434fi
5435
Juan Quintela98ec69a2009-07-16 18:34:18 +02005436config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00005437
Stefan Weildbd99ae2013-01-01 18:33:44 +01005438echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5439
Juan Quintela98ec69a2009-07-16 18:34:18 +02005440echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005441echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005442
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02005443echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005444echo "prefix=$prefix" >> $config_host_mak
5445echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03005446echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04005447echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02005448echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005449echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005450echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03005451echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03005452echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5453echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08005454echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005455if test "$mingw32" = "no" ; then
5456 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5457fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04005458echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +01005459echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005460echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +01005461echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06005462echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02005463echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005464
Juan Quintela98ec69a2009-07-16 18:34:18 +02005465echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02005466
aurel32f8393942009-04-13 18:45:38 +00005467if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005468 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00005469fi
aliguori1625af82009-04-05 17:41:02 +00005470if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07005471 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00005472fi
bellard7d132992003-03-06 23:23:54 +00005473if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02005474 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005475fi
bellard67b915a2004-03-31 23:37:16 +00005476if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005477 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02005478 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00005479 version_major=${rc_version%%.*}
5480 rc_version=${rc_version#*.}
5481 version_minor=${rc_version%%.*}
5482 rc_version=${rc_version#*.}
5483 version_subminor=${rc_version%%.*}
5484 version_micro=0
5485 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5486 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005487 if test "$guest_agent_with_vss" = "yes" ; then
5488 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05005489 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005490 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5491 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05005492 if test "$guest_agent_ntddscsi" = "yes" ; then
5493 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5494 fi
Michael Roth1a349042015-08-26 11:14:31 -05005495 if test "$guest_agent_msi" = "yes"; then
Yossi Hindin9dacf322015-05-06 14:57:40 +03005496 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5497 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5498 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5499 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5500 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5501 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5502 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5503 fi
pbrook210fa552007-02-27 21:04:49 +00005504else
Juan Quintela35f4df22009-07-27 16:13:07 +02005505 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00005506fi
blueswir1128ab2f2008-08-15 18:33:42 +00005507
Mark McLoughlindffcb712009-10-22 17:49:11 +01005508if test "$linux" = "yes" ; then
5509 echo "CONFIG_LINUX=y" >> $config_host_mak
5510fi
5511
bellard83fb7ad2004-07-05 21:25:26 +00005512if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005513 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00005514fi
malcb29fe3e2008-11-18 01:42:22 +00005515
bellardec530c82006-04-25 22:36:06 +00005516if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005517 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00005518fi
Andreas Färber179cf402010-09-20 00:50:43 +02005519if test "$haiku" = "yes" ; then
5520 echo "CONFIG_HAIKU=y" >> $config_host_mak
5521fi
bellard97a847b2003-08-10 21:36:04 +00005522if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005523 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005524fi
Stefan Weil1ba16962011-07-29 22:40:45 +02005525if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005526 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00005527fi
bellardc20709a2004-04-21 23:27:19 +00005528if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005529 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04005530 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00005531fi
ths8a16d272008-07-19 09:56:24 +00005532if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005533 echo "CONFIG_VDE=y" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00005534fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01005535if test "$netmap" = "yes" ; then
5536 echo "CONFIG_NETMAP=y" >> $config_host_mak
5537fi
Gonglei015a33b2014-07-01 20:58:08 +08005538if test "$l2tpv3" = "yes" ; then
5539 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5540fi
Corey Bryant47e98652012-01-26 09:42:26 -05005541if test "$cap_ng" = "yes" ; then
5542 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5543fi
Juan Quintela2358a492009-07-27 16:13:25 +02005544echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005545for drv in $audio_drv_list; do
Stefan Weil89138852016-05-16 15:10:20 +02005546 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Juan Quintela98ec69a2009-07-16 18:34:18 +02005547 echo "$def=y" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005548done
Juan Quintela67f86e82009-08-03 14:46:59 +02005549if test "$audio_pt_int" = "yes" ; then
5550 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5551fi
malcd5631632009-10-10 01:13:41 +04005552if test "$audio_win_int" = "yes" ; then
5553 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5554fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005555echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5556echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01005557if test "$vnc" = "yes" ; then
5558 echo "CONFIG_VNC=y" >> $config_host_mak
5559fi
aliguori2f9606b2009-03-06 20:27:28 +00005560if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005561 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00005562fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005563if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005564 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005565fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005566if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02005567 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02005568fi
aliguori76655d62009-03-06 20:27:37 +00005569if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005570 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00005571fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005572if test "$xfs" = "yes" ; then
5573 echo "CONFIG_XFS=y" >> $config_host_mak
5574fi
Stefan Weil89138852016-05-16 15:10:20 +02005575qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02005576echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02005577echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005578echo "SRC_PATH=$source_path" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005579echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02005580if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005581 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00005582fi
Fam Zheng17969262014-02-10 14:48:56 +08005583if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08005584 # $shacmd can generate a hash started with digit, which the compiler doesn't
5585 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02005586 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08005587 echo "CONFIG_MODULES=y" >> $config_host_mak
5588fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02005589if test "$sdl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005590 echo "CONFIG_SDL=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005591 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02005592 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005593fi
5594if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005595 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00005596fi
5597if test "$curses" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005598 echo "CONFIG_CURSES=y" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005599fi
Riku Voipio099d6b02009-05-05 12:10:04 +03005600if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005601 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03005602fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01005603if test "$accept4" = "yes" ; then
5604 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5605fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305606if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005607 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305608fi
Riku Voipioc2882b92009-08-12 15:08:24 +03005609if test "$eventfd" = "yes" ; then
5610 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5611fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02005612if test "$memfd" = "yes" ; then
5613 echo "CONFIG_MEMFD=y" >> $config_host_mak
5614fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005615if test "$fallocate" = "yes" ; then
5616 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5617fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01005618if test "$fallocate_punch_hole" = "yes" ; then
5619 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5620fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03005621if test "$fallocate_zero_range" = "yes" ; then
5622 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5623fi
Kevin Wolfed911432014-09-29 17:12:59 +02005624if test "$posix_fallocate" = "yes" ; then
5625 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5626fi
Peter Maydellc727f472011-01-06 11:05:10 +00005627if test "$sync_file_range" = "yes" ; then
5628 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5629fi
Peter Maydelldace20d2011-01-10 13:11:24 +00005630if test "$fiemap" = "yes" ; then
5631 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5632fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005633if test "$dup3" = "yes" ; then
5634 echo "CONFIG_DUP3=y" >> $config_host_mak
5635fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01005636if test "$ppoll" = "yes" ; then
5637 echo "CONFIG_PPOLL=y" >> $config_host_mak
5638fi
Alex Blighcd758dd2013-08-21 16:02:44 +01005639if test "$prctl_pr_set_timerslack" = "yes" ; then
5640 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5641fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00005642if test "$epoll" = "yes" ; then
5643 echo "CONFIG_EPOLL=y" >> $config_host_mak
5644fi
5645if test "$epoll_create1" = "yes" ; then
5646 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5647fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00005648if test "$sendfile" = "yes" ; then
5649 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5650fi
Riku Voipio51834342014-06-22 11:25:42 +01005651if test "$timerfd" = "yes" ; then
5652 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5653fi
Riku Voipio9af5c902014-08-12 15:58:57 +03005654if test "$setns" = "yes" ; then
5655 echo "CONFIG_SETNS=y" >> $config_host_mak
5656fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02005657if test "$clock_adjtime" = "yes" ; then
5658 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5659fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02005660if test "$syncfs" = "yes" ; then
5661 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5662fi
aurel323b3f24a2009-04-15 16:12:13 +00005663if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005664 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00005665fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00005666if test "$inotify1" = "yes" ; then
5667 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5668fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005669if test "$byteswap_h" = "yes" ; then
5670 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5671fi
5672if test "$bswap_h" = "yes" ; then
5673 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5674fi
Alexander Graf769ce762009-05-11 17:41:42 +02005675if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005676 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02005677 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005678 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02005679fi
aurel322e4d9fb2008-04-08 06:01:02 +00005680if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005681 echo "CONFIG_BRLAPI=y" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00005682fi
balrogfb599c92008-09-28 23:49:55 +00005683if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005684 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02005685 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00005686fi
Dr. David Alan Gilbertd46f7c92015-06-24 10:45:42 +01005687if test "$glib_subprocess" = "yes" ; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03005688 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5689fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005690if test "$gtk" = "yes" ; then
5691 echo "CONFIG_GTK=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005692 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005693 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005694 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005695 if test "$gtk_gl" = "yes" ; then
5696 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5697 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005698fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005699echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005700if test "$gnutls" = "yes" ; then
5701 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5702fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005703if test "$gnutls_rnd" = "yes" ; then
5704 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5705fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005706if test "$gcrypt" = "yes" ; then
5707 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08005708 if test "$gcrypt_hmac" = "yes" ; then
5709 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5710 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005711 if test "$gcrypt_kdf" = "yes" ; then
5712 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5713 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01005714fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005715if test "$nettle" = "yes" ; then
5716 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02005717 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005718 if test "$nettle_kdf" = "yes" ; then
5719 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5720 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01005721fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005722if test "$tasn1" = "yes" ; then
5723 echo "CONFIG_TASN1=y" >> $config_host_mak
5724fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00005725if test "$have_ifaddrs_h" = "yes" ; then
5726 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5727fi
Eric Blake6b39b062016-10-11 10:46:23 -05005728if test "$have_broken_size_max" = "yes" ; then
5729 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5730fi
Jan Vesely277abf12016-04-29 13:15:23 -04005731
5732# Work around a system header bug with some kernel/XFS header
5733# versions where they both try to define 'struct fsxattr':
5734# xfs headers will not try to redefine structs from linux headers
5735# if this macro is set.
5736if test "$have_fsxattr" = "yes" ; then
5737 echo "HAVE_FSXATTR=y" >> $config_host_mak
5738fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005739if test "$vte" = "yes" ; then
5740 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005741 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5742fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005743if test "$virglrenderer" = "yes" ; then
5744 echo "CONFIG_VIRGL=y" >> $config_host_mak
5745 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5746 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5747fi
aliguorie37630c2009-04-22 15:19:10 +00005748if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02005749 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00005750 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00005751 if test "$xen_pv_domain_build" = "yes" ; then
5752 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5753 fi
aliguorie37630c2009-04-22 15:19:10 +00005754fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005755if test "$linux_aio" = "yes" ; then
5756 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5757fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005758if test "$attr" = "yes" ; then
5759 echo "CONFIG_ATTR=y" >> $config_host_mak
5760fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02005761if test "$libattr" = "yes" ; then
5762 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5763fi
Meador Inge983eef52012-02-24 14:00:42 +05305764if test "$virtfs" = "yes" ; then
5765 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005766fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005767if test "$vhost_scsi" = "yes" ; then
5768 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5769fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005770if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03005771 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5772fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005773if test "$vhost_vsock" = "yes" ; then
5774 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5775fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005776if test "$vhost_user" = "yes" ; then
5777 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5778fi
ths77755342008-11-27 15:45:16 +00005779if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005780 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00005781fi
aliguoribf9298b2008-12-05 20:05:26 +00005782if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005783 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00005784fi
aliguoriceb42de2009-04-07 18:43:28 +00005785if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005786 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00005787fi
aurel32f652e6a2008-12-16 10:43:48 +00005788if test "$fdt" = "yes" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02005789 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00005790fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03005791if test "$signalfd" = "yes" ; then
5792 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5793fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005794if test "$tcg" = "yes"; then
5795 echo "CONFIG_TCG=y" >> $config_host_mak
5796 if test "$tcg_interpreter" = "yes" ; then
5797 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5798 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02005799fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005800if test "$fdatasync" = "yes" ; then
5801 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5802fi
Andreas Färbere78815a2010-09-25 11:26:05 +00005803if test "$madvise" = "yes" ; then
5804 echo "CONFIG_MADVISE=y" >> $config_host_mak
5805fi
5806if test "$posix_madvise" = "yes" ; then
5807 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5808fi
bellard97a847b2003-08-10 21:36:04 +00005809
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005810if test "$spice" = "yes" ; then
5811 echo "CONFIG_SPICE=y" >> $config_host_mak
5812fi
5813
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005814if test "$smartcard" = "yes" ; then
5815 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02005816fi
5817
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005818if test "$libusb" = "yes" ; then
5819 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5820fi
5821
Hans de Goede69354a82011-07-19 11:04:10 +02005822if test "$usb_redir" = "yes" ; then
5823 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5824fi
5825
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005826if test "$opengl" = "yes" ; then
5827 echo "CONFIG_OPENGL=y" >> $config_host_mak
5828 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005829 if test "$opengl_dmabuf" = "yes" ; then
5830 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5831 fi
Michael Walle20ff0752011-03-07 23:32:39 +01005832fi
5833
Liang Li99f2dbd2016-03-08 13:53:16 +08005834if test "$avx2_opt" = "yes" ; then
5835 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5836fi
5837
qiaonuohan607dacd2014-02-18 14:11:30 +08005838if test "$lzo" = "yes" ; then
5839 echo "CONFIG_LZO=y" >> $config_host_mak
5840fi
5841
5842if test "$snappy" = "yes" ; then
5843 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5844fi
5845
Peter Wu6b383c02015-01-06 18:48:14 +01005846if test "$bzip2" = "yes" ; then
5847 echo "CONFIG_BZIP2=y" >> $config_host_mak
5848 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5849fi
5850
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005851if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005852 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005853 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5854 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005855fi
5856
Peter Lieven6542aa92014-02-03 10:26:13 +01005857if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04005858 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5859 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01005860fi
5861
Eduardo Otubof7945732012-08-14 18:44:05 -03005862if test "$seccomp" = "yes"; then
5863 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5864fi
5865
bellard83fb7ad2004-07-05 21:25:26 +00005866# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00005867if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005868 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00005869fi
5870
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01005871if test "$localtime_r" = "yes" ; then
5872 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5873fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02005874if test "$qom_cast_debug" = "yes" ; then
5875 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5876fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005877if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005878 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005879 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5880 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005881fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06005882
Peter Maydell7c2acc72013-04-08 12:11:27 +01005883echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005884if test "$coroutine_pool" = "yes" ; then
5885 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5886else
5887 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5888fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305889
Peter Lieven7d992e42016-09-27 11:58:45 +02005890if test "$debug_stack_usage" = "yes" ; then
5891 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5892fi
5893
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005894if test "$crypto_afalg" = "yes" ; then
5895 echo "CONFIG_AF_ALG=y" >> $config_host_mak
5896fi
5897
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305898if test "$open_by_handle_at" = "yes" ; then
5899 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5900fi
5901
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305902if test "$linux_magic_h" = "yes" ; then
5903 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5904fi
5905
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005906if test "$pragma_diagnostic_available" = "yes" ; then
5907 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01005908fi
5909
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005910if test "$valgrind_h" = "yes" ; then
5911 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5912fi
5913
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005914if test "$has_environ" = "yes" ; then
5915 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5916fi
5917
Richard Henderson76a347e2012-12-28 14:17:02 -08005918if test "$cpuid_h" = "yes" ; then
5919 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5920fi
5921
Richard Hendersonf5401662013-02-16 12:46:59 -08005922if test "$int128" = "yes" ; then
5923 echo "CONFIG_INT128=y" >> $config_host_mak
5924fi
5925
Richard Henderson7ebee432016-06-29 21:10:59 -07005926if test "$atomic128" = "yes" ; then
5927 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5928fi
5929
Richard Hendersondf79b992016-09-02 12:23:57 -07005930if test "$atomic64" = "yes" ; then
5931 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5932fi
5933
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005934if test "$getauxval" = "yes" ; then
5935 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5936fi
5937
Bharata B Raoeb100392012-09-24 14:42:45 +05305938if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005939 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005940 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5941 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05305942fi
5943
Jeff Codyd85fa9e2016-04-05 10:40:09 -04005944if test "$glusterfs_xlator_opt" = "yes" ; then
5945 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5946fi
5947
Bharata B Rao0c14fb42013-07-16 21:47:42 +05305948if test "$glusterfs_discard" = "yes" ; then
5949 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5950fi
5951
Niels de Vosdf3a4292017-05-28 12:01:14 +05305952if test "$glusterfs_fallocate" = "yes" ; then
5953 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
5954fi
5955
Bharata B Rao7c815372013-12-21 14:51:25 +05305956if test "$glusterfs_zerofill" = "yes" ; then
5957 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5958fi
5959
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005960if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005961 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005962 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5963 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005964fi
5965
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01005966if test "$live_block_migration" = "yes" ; then
5967 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
5968fi
5969
blueswir168063642008-11-22 21:03:55 +00005970# USB host support
Gerd Hoffmannb5613fd2013-09-10 11:02:59 +02005971if test "$libusb" = "yes"; then
5972 echo "HOST_USB=libusb legacy" >> $config_host_mak
5973else
Juan Quintela98ec69a2009-07-16 18:34:18 +02005974 echo "HOST_USB=stub" >> $config_host_mak
Gerd Hoffmannb5613fd2013-09-10 11:02:59 +02005975fi
blueswir168063642008-11-22 21:03:55 +00005976
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005977# TPM passthrough support?
5978if test "$tpm" = "yes"; then
5979 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5980 if test "$tpm_passthrough" = "yes"; then
5981 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5982 fi
5983fi
5984
Lluís Vilanova5b808272014-05-27 15:02:14 +02005985echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5986if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02005987 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05305988fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005989if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02005990 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5991 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02005992 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01005993fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03005994if have_backend "log"; then
5995 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02005996fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005997if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02005998 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5999fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006000if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006001 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6002 if test "$trace_backend_stap" = "yes" ; then
6003 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6004 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006005fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006006if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006007 if test "$linux" = "yes" ; then
6008 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006009 else
Stewart Smith21684af2014-01-24 12:39:10 +11006010 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006011 fi
6012fi
Paul Durrant0a852412016-08-04 14:44:14 +01006013if have_backend "syslog"; then
6014 if test "$posix_syslog" = "yes" ; then
6015 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6016 else
6017 feature_not_found "syslog(trace backend)" "syslog not available"
6018 fi
6019fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006020echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6021
Michael R. Hines2da776d2013-07-22 10:01:54 -04006022if test "$rdma" = "yes" ; then
6023 echo "CONFIG_RDMA=y" >> $config_host_mak
6024fi
6025
Laurent Vivier575b22b2016-06-02 22:14:15 +02006026if test "$have_rtnetlink" = "yes" ; then
6027 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6028fi
6029
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006030if test "$replication" = "yes" ; then
6031 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6032fi
6033
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006034if test "$have_af_vsock" = "yes" ; then
6035 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6036fi
6037
Christopher Covington4d043512016-12-28 15:04:33 -05006038if test "$have_sysmacros" = "yes" ; then
6039 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6040fi
6041
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006042if test "$have_static_assert" = "yes" ; then
6043 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6044fi
6045
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006046if test "$have_utmpx" = "yes" ; then
6047 echo "HAVE_UTMPX=y" >> $config_host_mak
6048fi
6049
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006050if test "$ivshmem" = "yes" ; then
6051 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6052fi
6053
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006054# Hold two types of flag:
6055# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6056# a thread we have a handle to
6057# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6058# platform
6059if test "$pthread_setname_np" = "yes" ; then
6060 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6061 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6062fi
6063
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006064if test "$vxhs" = "yes" ; then
6065 echo "CONFIG_VXHS=y" >> $config_host_mak
6066 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6067fi
6068
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006069if test "$tcg_interpreter" = "yes"; then
6070 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6071elif test "$ARCH" = "sparc64" ; then
6072 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6073elif test "$ARCH" = "s390x" ; then
6074 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006075elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006076 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006077elif test "$ARCH" = "ppc64" ; then
6078 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006079else
6080 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6081fi
6082QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6083
Juan Quintela98ec69a2009-07-16 18:34:18 +02006084echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006085echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006086echo "MAKE=$make" >> $config_host_mak
6087echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006088echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6089echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006090echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6091echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006092echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006093echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006094if $iasl -h > /dev/null 2>&1; then
6095 echo "IASL=$iasl" >> $config_host_mak
6096fi
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02006097echo "CC_I386=$cc_i386" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006098echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006099echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006100echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006101echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006102echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006103echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006104echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006105echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006106echo "OBJCOPY=$objcopy" >> $config_host_mak
6107echo "LD=$ld" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006108echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006109echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006110echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006111echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006112echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006113echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006114echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006115if test "$sparse" = "yes" ; then
6116 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006117 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006118 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006119 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6120 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6121fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006122if test "$cross_prefix" != ""; then
6123 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6124else
6125 echo "AUTOCONF_HOST := " >> $config_host_mak
6126fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006127echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006128echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006129echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006130echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006131echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006132echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006133echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006134echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006135echo "DSOSUF=$DSOSUF" >> $config_host_mak
6136echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006137echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006138echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6139echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006140echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006141echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006142if test "$gcov" = "yes" ; then
6143 echo "CONFIG_GCOV=y" >> $config_host_mak
6144 echo "GCOV=$gcov_tool" >> $config_host_mak
6145fi
Juan Quintela804edf22009-07-27 16:12:49 +02006146
Peter Maydell6efd7512011-11-30 11:59:04 +00006147# use included Linux headers
6148if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006149 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006150 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006151 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006152 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006153 ;;
6154 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006155 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006156 ;;
6157 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006158 linux_arch=s390
6159 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006160 aarch64)
6161 linux_arch=arm64
6162 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006163 mips64)
6164 linux_arch=mips
6165 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006166 *)
6167 # For most CPUs the kernel architecture name and QEMU CPU name match.
6168 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006169 ;;
6170 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006171 # For non-KVM architectures we will not have asm headers
6172 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6173 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6174 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006175fi
6176
bellard1d14ffa2005-10-30 18:58:22 +00006177for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006178target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006179config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006180target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006181target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006182
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006183case "$target_name" in
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006184 armeb|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 +02006185 target_bigendian=yes
6186 ;;
6187esac
bellard97a847b2003-08-10 21:36:04 +00006188target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006189target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006190target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006191target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006192case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006193 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006194 target_softmmu="yes"
6195 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006196 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00006197 target_user_only="yes"
6198 target_linux_user="yes"
6199 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006200 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00006201 target_user_only="yes"
6202 target_bsd_user="yes"
6203 ;;
pbrook9e407a82007-05-26 16:38:53 +00006204 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006205 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00006206 exit 1
6207 ;;
6208esac
ths831b7822007-01-18 20:06:33 +00006209
bellard97a847b2003-08-10 21:36:04 +00006210mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02006211echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006212
pbrooke5fe0c52006-06-11 13:32:59 +00006213bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00006214mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02006215interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00006216gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00006217
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006218TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02006219TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02006220TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02006221
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006222case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00006223 i386)
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006224 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
aurel322408a522008-04-20 20:19:44 +00006225 ;;
6226 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006227 TARGET_BASE_ARCH=i386
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006228 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
aurel322408a522008-04-20 20:19:44 +00006229 ;;
6230 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11006231 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00006232 ;;
6233 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006234 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00006235 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006236 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00006237 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00006238 ;;
Alexander Graf6a49fa92013-09-03 20:12:22 +01006239 aarch64)
6240 TARGET_BASE_ARCH=arm
6241 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006242 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01006243 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
Alexander Graf6a49fa92013-09-03 20:12:22 +01006244 ;;
aurel322408a522008-04-20 20:19:44 +00006245 cris)
aurel322408a522008-04-20 20:19:44 +00006246 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08006247 hppa)
6248 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01006249 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01006250 ;;
aurel322408a522008-04-20 20:19:44 +00006251 m68k)
aurel322408a522008-04-20 20:19:44 +00006252 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02006253 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00006254 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006255 microblaze|microblazeel)
6256 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006257 bflt="yes"
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006258 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02006259 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006260 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006261 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006262 ;;
6263 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08006264 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006265 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006266 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08006267 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006268 ;;
6269 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006270 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006271 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006272 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006273 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006274 moxie)
6275 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006276 nios2)
6277 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006278 or1k)
Jia Liue67db062012-07-20 15:50:39 +08006279 TARGET_ARCH=openrisc
6280 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08006281 ;;
aurel322408a522008-04-20 20:19:44 +00006282 ppc)
aurel32c8b35322009-01-24 15:07:34 +00006283 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00006284 ;;
6285 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006286 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006287 TARGET_ABI_DIR=ppc
aurel32c8b35322009-01-24 15:07:34 +00006288 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00006289 ;;
6290 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006291 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006292 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306293 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006294 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00006295 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05006296 ppc64le)
6297 TARGET_ARCH=ppc64
6298 TARGET_BASE_ARCH=ppc
6299 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306300 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006301 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
Doug Kwan9c351262014-05-29 09:12:21 -05006302 ;;
aurel322408a522008-04-20 20:19:44 +00006303 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006304 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006305 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006306 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02006307 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01006308 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00006309 ;;
6310 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006311 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00006312 bflt="yes"
6313 ;;
6314 sparc)
aurel322408a522008-04-20 20:19:44 +00006315 ;;
6316 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006317 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00006318 ;;
6319 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006320 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006321 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006322 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02006323 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006324 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006325 s390x)
Christian Borntraeger86158a22017-03-08 12:41:14 +01006326 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
Alexander Graf24e804ec2009-12-05 12:44:22 +01006327 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08006328 tilegx)
6329 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07006330 tricore)
6331 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08006332 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08006333 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006334 xtensa|xtensaeb)
6335 TARGET_ARCH=xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04006336 ;;
aurel322408a522008-04-20 20:19:44 +00006337 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006338 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00006339 ;;
6340esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006341# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6342if [ "$TARGET_BASE_ARCH" = "" ]; then
6343 TARGET_BASE_ARCH=$TARGET_ARCH
6344fi
6345
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006346symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6347
Daniel P. Berrange99afc912012-08-20 15:31:38 +01006348upper() {
6349 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6350}
6351
Stefan Weil89138852016-05-16 15:10:20 +02006352target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02006353echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006354echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02006355echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02006356if [ "$TARGET_ABI_DIR" = "" ]; then
6357 TARGET_ABI_DIR=$TARGET_ARCH
6358fi
Juan Quintela25be2102009-10-07 02:41:00 +02006359echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07006360if [ "$HOST_VARIANT_DIR" != "" ]; then
6361 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6362fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006363
6364if supported_xen_target $target; then
6365 echo "CONFIG_XEN=y" >> $config_target_mak
6366 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00006367 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006368 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006369fi
6370if supported_kvm_target $target; then
6371 echo "CONFIG_KVM=y" >> $config_target_mak
6372 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006373 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006374 if test "$vhost_user" = "yes" ; then
6375 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6376 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02006377 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006378fi
6379if supported_hax_target $target; then
6380 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006381fi
bellardde83cd02003-06-15 20:25:43 +00006382if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006383 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006384fi
6385if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006386 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00006387 if test "$mttcg" = "yes" ; then
6388 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6389 fi
bellardde83cd02003-06-15 20:25:43 +00006390fi
bellard997344f2003-10-27 21:10:39 +00006391if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006392 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01006393 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00006394fi
ths831b7822007-01-18 20:06:33 +00006395if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006396 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00006397fi
pbrook56aebc82008-10-11 17:55:29 +00006398list=""
6399if test ! -z "$gdb_xml_files" ; then
6400 for x in $gdb_xml_files; do
6401 list="$list $source_path/gdb-xml/$x"
6402 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02006403 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00006404fi
bellardde83cd02003-06-15 20:25:43 +00006405
pbrooke5fe0c52006-06-11 13:32:59 +00006406if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02006407 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00006408fi
blueswir184778502008-10-26 20:33:16 +00006409if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006410 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00006411fi
bellard5b0753e2005-03-01 21:37:28 +00006412
Juan Quintela4afddb52009-08-03 14:46:45 +02006413# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02006414
Juan Quintela4afddb52009-08-03 14:46:45 +02006415cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02006416ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02006417
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006418disas_config() {
6419 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6420 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6421}
6422
Juan Quintela64656022009-08-03 14:46:53 +02006423for i in $ARCH $TARGET_BASE_ARCH ; do
6424 case "$i" in
6425 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006426 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02006427 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05006428 aarch64)
6429 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006430 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05006431 fi
6432 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006433 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006434 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006435 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006436 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006437 fi
Juan Quintela64656022009-08-03 14:46:53 +02006438 ;;
6439 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006440 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02006441 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07006442 hppa)
6443 disas_config "HPPA"
6444 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006445 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006446 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02006447 ;;
Michael Walle79368f42012-03-31 19:54:20 +02006448 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006449 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02006450 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006451 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006452 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02006453 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006454 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006455 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02006456 ;;
6457 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006458 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02006459 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006460 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006461 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04006462 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006463 nios2)
6464 disas_config "NIOS2"
6465 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006466 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006467 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08006468 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006469 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006470 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02006471 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006472 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006473 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02006474 ;;
6475 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006476 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02006477 ;;
6478 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006479 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02006480 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006481 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006482 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04006483 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006484 esac
6485done
Stefan Weil9195b2c2011-10-19 07:07:18 +02006486if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006487 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02006488fi
Juan Quintela64656022009-08-03 14:46:53 +02006489
Juan Quintela6ee71262009-08-03 14:46:47 +02006490case "$ARCH" in
6491alpha)
6492 # Ensure there's only a single GP
6493 cflags="-msmall-data $cflags"
6494;;
6495esac
6496
Juan Quintelad02c1db2009-08-03 14:46:50 +02006497if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006498 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006499 if test "$target_linux_user" = "yes" ; then
6500 cflags="-p $cflags"
6501 ldflags="-p $ldflags"
6502 fi
6503 if test "$target_softmmu" = "yes" ; then
6504 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02006505 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006506 fi
6507fi
6508
Juan Quintela9b8e1112009-08-03 14:46:46 +02006509if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006510 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02006511fi
Juan Quintelafa282482009-07-22 22:37:39 +02006512
Christian Borntraegere9a35912017-08-23 12:16:23 +02006513# Newer kernels on s390 check for an S390_PGSTE program header and
6514# enable the pgste page table extensions in that case. This makes
6515# the vm.allocate_pgste sysctl unnecessary. We enable this program
6516# header if
6517# - we build on s390x
6518# - we build the system emulation for s390x (qemu-system-s390x)
6519# - KVM is enabled
6520# - the linker supports --s390-pgste
6521if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6522 if ld_has --s390-pgste ; then
6523 ldflags="-Wl,--s390-pgste $ldflags"
6524 fi
6525fi
6526
Juan Quintela25be2102009-10-07 02:41:00 +02006527echo "LDFLAGS+=$ldflags" >> $config_target_mak
6528echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02006529
bellard97a847b2003-08-10 21:36:04 +00006530done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00006531
Gerd Hoffmannb776eca2012-11-12 12:18:38 +01006532if [ "$pixman" = "internal" ]; then
6533 echo "config-host.h: subdir-pixman" >> $config_host_mak
6534fi
6535
Peter Crosthwaitea540f152013-04-18 14:47:31 +10006536if [ "$dtc_internal" = "yes" ]; then
6537 echo "config-host.h: subdir-dtc" >> $config_host_mak
6538fi
6539
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006540if test "$numa" = "yes"; then
6541 echo "CONFIG_NUMA=y" >> $config_host_mak
6542fi
6543
John Snowfd0e6052015-03-25 18:57:39 -04006544if test "$ccache_cpp2" = "yes"; then
6545 echo "export CCACHE_CPP2=y" >> $config_host_mak
6546fi
6547
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006548# build tree in object directory in case the source is not in the current directory
Wenchao Xiaf93296e2013-09-06 11:24:32 +08006549DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
Paolo Bonzinid59157e2017-06-06 16:55:19 +02006550DIRS="$DIRS docs docs/interop fsdev"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006551DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006552DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2dee8d52012-06-04 09:15:43 +02006553DIRS="$DIRS qapi-generated"
Anthony Liguoric09015d2012-01-10 13:10:42 -06006554FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6555FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02006556FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006557FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02006558FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006559FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006560FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01006561FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01006562FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07006563for bios_file in \
6564 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11006565 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01006566 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07006567 $source_path/pc-bios/*.rom \
6568 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00006569 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07006570 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01006571 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07006572 $source_path/pc-bios/palcode-*
6573do
Stefan Weil89138852016-05-16 15:10:20 +02006574 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006575done
Stefan Weil89138852016-05-16 15:10:20 +02006576for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006577do
Stefan Weil89138852016-05-16 15:10:20 +02006578 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006579done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006580mkdir -p $DIRS
6581for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03006582 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01006583 symlink "$source_path/$f" "$f"
6584 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006585done
Paul Brook1ad21342009-05-19 16:17:58 +01006586
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006587# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06006588for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006589 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01006590 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006591 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006592 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006593 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006594 echo "CC=$cc" >> $config_mak
6595 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006596 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006597 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006598 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006599 echo "LD=$ld" >> $config_mak
6600done
6601
Marc-André Lureaufe310172016-06-15 13:06:00 +02006602# set up tests data directory
6603if [ ! -e tests/data ]; then
6604 symlink "$source_path/tests/data" tests/data
6605fi
6606
Max Reitz76c75602014-05-24 23:24:56 +02006607# set up qemu-iotests in this build directory
6608iotests_common_env="tests/qemu-iotests/common.env"
6609iotests_check="tests/qemu-iotests/check"
6610
6611echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6612echo >> "$iotests_common_env"
6613echo "export PYTHON='$python'" >> "$iotests_common_env"
6614
6615if [ ! -e "$iotests_check" ]; then
6616 symlink "$source_path/$iotests_check" "$iotests_check"
6617fi
6618
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006619# Save the configure command line for later reuse.
6620cat <<EOD >config.status
6621#!/bin/sh
6622# Generated by configure.
6623# Run this file to recreate the current configuration.
6624# Compiler output produced by configure, useful for debugging
6625# configure, is in config.log if it exists.
6626EOD
6627printf "exec" >>config.status
6628printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00006629echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006630chmod +x config.status
6631
Peter Maydell8cd05ab2014-05-23 17:07:24 +01006632rm -r "$TMPDIR1"