blob: ee32ad0530fff4e5bfc8c6e56bdc48dd7c084db6 [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 ;;
Robert Schiele74880fe2012-12-04 16:58:08 +0100928 --without-pixman) pixman="none"
929 ;;
bellard97a847b2003-08-10 21:36:04 +0000930 --disable-sdl) sdl="no"
931 ;;
Juan Quintelac4198152009-08-12 18:29:53 +0200932 --enable-sdl) sdl="yes"
933 ;;
Dave Airlie47c03742013-12-10 14:05:51 +1000934 --with-sdlabi=*) sdlabi="$optarg"
935 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +0200936 --disable-qom-cast-debug) qom_cast_debug="no"
937 ;;
938 --enable-qom-cast-debug) qom_cast_debug="yes"
939 ;;
Meador Inge983eef52012-02-24 14:00:42 +0530940 --disable-virtfs) virtfs="no"
941 ;;
942 --enable-virtfs) virtfs="yes"
943 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +0100944 --disable-vnc) vnc="no"
945 ;;
946 --enable-vnc) vnc="yes"
947 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +0000948 --oss-lib=*) oss_lib="$optarg"
949 ;;
malc0c58ac12008-06-25 21:04:05 +0000950 --audio-drv-list=*) audio_drv_list="$optarg"
951 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200952 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800953 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200954 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +0100955 ;;
aurel32f8393942009-04-13 18:45:38 +0000956 --enable-debug-tcg) debug_tcg="yes"
957 ;;
958 --disable-debug-tcg) debug_tcg="no"
959 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +0100960 --enable-debug)
961 # Enable debugging options that aren't excessively noisy
962 debug_tcg="yes"
963 debug="yes"
964 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -0500965 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +0100966 ;;
aliguori03b4fe72008-10-07 19:16:17 +0000967 --enable-sparse) sparse="yes"
968 ;;
969 --disable-sparse) sparse="no"
970 ;;
aliguori1625af82009-04-05 17:41:02 +0000971 --disable-strip) strip_opt="no"
972 ;;
aliguori2f9606b2009-03-06 20:27:28 +0000973 --disable-vnc-sasl) vnc_sasl="no"
974 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +0200975 --enable-vnc-sasl) vnc_sasl="yes"
976 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +0200977 --disable-vnc-jpeg) vnc_jpeg="no"
978 ;;
979 --enable-vnc-jpeg) vnc_jpeg="yes"
980 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +0200981 --disable-vnc-png) vnc_png="no"
982 ;;
983 --enable-vnc-png) vnc_png="yes"
984 ;;
bellard443f1372004-06-04 11:13:20 +0000985 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +0000986 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +0000987 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +0000988 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +0200989 --enable-vde) vde="yes"
990 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +0100991 --disable-netmap) netmap="no"
992 ;;
993 --enable-netmap) netmap="yes"
994 ;;
aliguorie37630c2009-04-22 15:19:10 +0000995 --disable-xen) xen="no"
996 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +0200997 --enable-xen) xen="yes"
998 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000999 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1000 ;;
1001 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1002 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +00001003 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1004 ;;
1005 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1006 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001007 --disable-brlapi) brlapi="no"
1008 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001009 --enable-brlapi) brlapi="yes"
1010 ;;
balrogfb599c92008-09-28 23:49:55 +00001011 --disable-bluez) bluez="no"
1012 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001013 --enable-bluez) bluez="yes"
1014 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001015 --disable-kvm) kvm="no"
1016 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001017 --enable-kvm) kvm="yes"
1018 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001019 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001020 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001021 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001022 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001023 --disable-tcg-interpreter) tcg_interpreter="no"
1024 ;;
1025 --enable-tcg-interpreter) tcg_interpreter="yes"
1026 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001027 --disable-cap-ng) cap_ng="no"
1028 ;;
1029 --enable-cap-ng) cap_ng="yes"
1030 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001031 --disable-tcg) tcg="no"
1032 ;;
1033 --enable-tcg) tcg="yes"
1034 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001035 --disable-spice) spice="no"
1036 ;;
1037 --enable-spice) spice="yes"
1038 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001039 --disable-libiscsi) libiscsi="no"
1040 ;;
1041 --enable-libiscsi) libiscsi="yes"
1042 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001043 --disable-libnfs) libnfs="no"
1044 ;;
1045 --enable-libnfs) libnfs="yes"
1046 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001047 --enable-profiler) profiler="yes"
1048 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001049 --disable-cocoa) cocoa="no"
1050 ;;
malcc2de5c92008-06-28 19:13:06 +00001051 --enable-cocoa)
1052 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001053 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001054 ;;
pbrookcad25d62006-03-19 16:31:11 +00001055 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001056 ;;
pbrookcad25d62006-03-19 16:31:11 +00001057 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001058 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001059 --disable-user)
1060 linux_user="no" ;
1061 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001062 ;;
1063 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001064 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001065 ;;
ths831b7822007-01-18 20:06:33 +00001066 --enable-linux-user) linux_user="yes"
1067 ;;
blueswir184778502008-10-26 20:33:16 +00001068 --disable-bsd-user) bsd_user="no"
1069 ;;
1070 --enable-bsd-user) bsd_user="yes"
1071 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001072 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001073 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001074 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001075 ;;
bellard85aa5182007-11-11 20:17:03 +00001076 --enable-werror) werror="yes"
1077 ;;
1078 --disable-werror) werror="no"
1079 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001080 --enable-stack-protector) stack_protector="yes"
1081 ;;
1082 --disable-stack-protector) stack_protector="no"
1083 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001084 --disable-curses) curses="no"
1085 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001086 --enable-curses) curses="yes"
1087 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001088 --disable-curl) curl="no"
1089 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001090 --enable-curl) curl="yes"
1091 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001092 --disable-fdt) fdt="no"
1093 ;;
1094 --enable-fdt) fdt="yes"
1095 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001096 --disable-linux-aio) linux_aio="no"
1097 ;;
1098 --enable-linux-aio) linux_aio="yes"
1099 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001100 --disable-attr) attr="no"
1101 ;;
1102 --enable-attr) attr="yes"
1103 ;;
ths77755342008-11-27 15:45:16 +00001104 --disable-blobs) blobs="no"
1105 ;;
pbrook4a19f1e2009-04-07 23:17:49 +00001106 --with-pkgversion=*) pkgversion=" ($optarg)"
1107 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001108 --with-coroutine=*) coroutine="$optarg"
1109 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001110 --disable-coroutine-pool) coroutine_pool="no"
1111 ;;
1112 --enable-coroutine-pool) coroutine_pool="yes"
1113 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001114 --enable-debug-stack-usage) debug_stack_usage="yes"
1115 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001116 --enable-crypto-afalg) crypto_afalg="yes"
1117 ;;
1118 --disable-crypto-afalg) crypto_afalg="no"
1119 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001120 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001121 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001122 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001123 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001124 --disable-vhost-net) vhost_net="no"
1125 ;;
1126 --enable-vhost-net) vhost_net="yes"
1127 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001128 --disable-vhost-scsi) vhost_scsi="no"
1129 ;;
1130 --enable-vhost-scsi) vhost_scsi="yes"
1131 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001132 --disable-vhost-vsock) vhost_vsock="no"
1133 ;;
1134 --enable-vhost-vsock) vhost_vsock="yes"
1135 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001136 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001137 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001138 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001139 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001140 --disable-rbd) rbd="no"
1141 ;;
1142 --enable-rbd) rbd="yes"
1143 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001144 --disable-xfsctl) xfs="no"
1145 ;;
1146 --enable-xfsctl) xfs="yes"
1147 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001148 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001149 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001150 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001151 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001152 --disable-libusb) libusb="no"
1153 ;;
1154 --enable-libusb) libusb="yes"
1155 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001156 --disable-usb-redir) usb_redir="no"
1157 ;;
1158 --enable-usb-redir) usb_redir="yes"
1159 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001160 --disable-zlib-test) zlib="no"
1161 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001162 --disable-lzo) lzo="no"
1163 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001164 --enable-lzo) lzo="yes"
1165 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001166 --disable-snappy) snappy="no"
1167 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001168 --enable-snappy) snappy="yes"
1169 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001170 --disable-bzip2) bzip2="no"
1171 ;;
1172 --enable-bzip2) bzip2="yes"
1173 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001174 --enable-guest-agent) guest_agent="yes"
1175 ;;
1176 --disable-guest-agent) guest_agent="no"
1177 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001178 --enable-guest-agent-msi) guest_agent_msi="yes"
1179 ;;
1180 --disable-guest-agent-msi) guest_agent_msi="no"
1181 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001182 --with-vss-sdk) vss_win32_sdk=""
1183 ;;
1184 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1185 ;;
1186 --without-vss-sdk) vss_win32_sdk="no"
1187 ;;
1188 --with-win-sdk) win_sdk=""
1189 ;;
1190 --with-win-sdk=*) win_sdk="$optarg"
1191 ;;
1192 --without-win-sdk) win_sdk="no"
1193 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001194 --enable-tools) want_tools="yes"
1195 ;;
1196 --disable-tools) want_tools="no"
1197 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001198 --enable-seccomp) seccomp="yes"
1199 ;;
1200 --disable-seccomp) seccomp="no"
1201 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301202 --disable-glusterfs) glusterfs="no"
1203 ;;
1204 --enable-glusterfs) glusterfs="yes"
1205 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001206 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1207 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001208 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001209 --enable-vhdx|--disable-vhdx)
1210 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1211 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001212 --enable-uuid|--disable-uuid)
1213 echo "$0: $opt is obsolete, UUID support is always built" >&2
1214 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001215 --disable-gtk) gtk="no"
1216 ;;
1217 --enable-gtk) gtk="yes"
1218 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001219 --tls-priority=*) tls_priority="$optarg"
1220 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001221 --disable-gnutls) gnutls="no"
1222 ;;
1223 --enable-gnutls) gnutls="yes"
1224 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001225 --disable-nettle) nettle="no"
1226 ;;
1227 --enable-nettle) nettle="yes"
1228 ;;
1229 --disable-gcrypt) gcrypt="no"
1230 ;;
1231 --enable-gcrypt) gcrypt="yes"
1232 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001233 --enable-rdma) rdma="yes"
1234 ;;
1235 --disable-rdma) rdma="no"
1236 ;;
Daniel P. Berrange528de902013-02-25 15:20:44 +00001237 --with-gtkabi=*) gtkabi="$optarg"
1238 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001239 --disable-vte) vte="no"
1240 ;;
1241 --enable-vte) vte="yes"
1242 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001243 --disable-virglrenderer) virglrenderer="no"
1244 ;;
1245 --enable-virglrenderer) virglrenderer="yes"
1246 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001247 --disable-tpm) tpm="no"
1248 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001249 --enable-tpm) tpm="yes"
1250 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001251 --disable-libssh2) libssh2="no"
1252 ;;
1253 --enable-libssh2) libssh2="yes"
1254 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001255 --disable-live-block-migration) live_block_migration="no"
1256 ;;
1257 --enable-live-block-migration) live_block_migration="yes"
1258 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001259 --disable-numa) numa="no"
1260 ;;
1261 --enable-numa) numa="yes"
1262 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001263 --disable-tcmalloc) tcmalloc="no"
1264 ;;
1265 --enable-tcmalloc) tcmalloc="yes"
1266 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001267 --disable-jemalloc) jemalloc="no"
1268 ;;
1269 --enable-jemalloc) jemalloc="yes"
1270 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001271 --disable-replication) replication="no"
1272 ;;
1273 --enable-replication) replication="yes"
1274 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001275 --disable-vxhs) vxhs="no"
1276 ;;
1277 --enable-vxhs) vxhs="yes"
1278 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001279 --disable-vhost-user) vhost_user="no"
1280 ;;
1281 --enable-vhost-user)
1282 vhost_user="yes"
1283 if test "$mingw32" = "yes"; then
1284 error_exit "vhost-user isn't available on win32"
1285 fi
1286 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001287 *)
1288 echo "ERROR: unknown option $opt"
1289 echo "Try '$0 --help' for more information"
1290 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001291 ;;
bellard7d132992003-03-06 23:23:54 +00001292 esac
1293done
1294
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001295if test "$vhost_user" = ""; then
1296 if test "$mingw32" = "yes"; then
1297 vhost_user="no"
1298 else
1299 vhost_user="yes"
1300 fi
1301fi
1302
bellard40293e52008-01-31 11:32:10 +00001303case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001304 ppc)
1305 CPU_CFLAGS="-m32"
1306 LDFLAGS="-m32 $LDFLAGS"
1307 ;;
1308 ppc64)
1309 CPU_CFLAGS="-m64"
1310 LDFLAGS="-m64 $LDFLAGS"
1311 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001312 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001313 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1314 LDFLAGS="-m32 -mv8plus $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001315 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001316 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001317 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001318 LDFLAGS="-m64 $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001319 ;;
ths76d83bd2007-11-18 21:22:10 +00001320 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001321 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001322 LDFLAGS="-m31 $LDFLAGS"
1323 ;;
1324 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001325 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001326 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001327 ;;
bellard40293e52008-01-31 11:32:10 +00001328 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001329 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001330 LDFLAGS="-m32 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001331 cc_i386='$(CC) -m32'
bellard40293e52008-01-31 11:32:10 +00001332 ;;
1333 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001334 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1335 # If we truly care, we should simply detect this case at
1336 # runtime and generate the fallback to serial emulation.
1337 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001338 LDFLAGS="-m64 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001339 cc_i386='$(CC) -m32'
Paul Brook379f6692009-07-17 12:48:08 +01001340 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001341 x32)
1342 CPU_CFLAGS="-mx32"
1343 LDFLAGS="-mx32 $LDFLAGS"
1344 cc_i386='$(CC) -m32'
1345 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001346 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001347esac
1348
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001349QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1350EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1351
Peter Maydellaffc88c2016-06-13 11:32:24 +01001352# For user-mode emulation the host arch has to be one we explicitly
1353# support, even if we're using TCI.
1354if [ "$ARCH" = "unknown" ]; then
1355 bsd_user="no"
1356 linux_user="no"
1357fi
1358
Peter Maydell60e0df22011-05-03 14:50:13 +01001359default_target_list=""
1360
Peter Maydell6e92f822013-05-20 16:16:15 +01001361mak_wilds=""
1362
1363if [ "$softmmu" = "yes" ]; then
1364 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001365fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001366if [ "$linux_user" = "yes" ]; then
1367 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001368fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001369if [ "$bsd_user" = "yes" ]; then
1370 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001371fi
1372
Peter Maydell6e92f822013-05-20 16:16:15 +01001373for config in $mak_wilds; do
1374 default_target_list="${default_target_list} $(basename "$config" .mak)"
1375done
1376
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001377# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001378trace_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 +01001379
pbrookaf5db582006-04-08 14:26:41 +00001380if test x"$show_help" = x"yes" ; then
1381cat << EOF
1382
1383Usage: configure [options]
1384Options: [defaults in brackets after descriptions]
1385
Stefan Weil08fb77e2013-12-18 22:09:39 +01001386Standard options:
1387 --help print this message
1388 --prefix=PREFIX install in PREFIX [$prefix]
1389 --interp-prefix=PREFIX where to find shared libraries, etc.
1390 use %M for cpu name [$interp_prefix]
1391 --target-list=LIST set target list (default: build everything)
1392$(echo Available targets: $default_target_list | \
1393 fold -s -w 53 | sed -e 's/^/ /')
1394
1395Advanced options (experts only):
1396 --source-path=PATH path of source code [$source_path]
1397 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1398 --cc=CC use C compiler CC [$cc]
1399 --iasl=IASL use ACPI compiler IASL [$iasl]
1400 --host-cc=CC use C compiler CC [$host_cc] for code run at
1401 build time
1402 --cxx=CXX use C++ compiler CXX [$cxx]
1403 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1404 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001405 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001406 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1407 --make=MAKE use specified make [$make]
1408 --install=INSTALL use specified install [$install]
1409 --python=PYTHON use specified python [$python]
1410 --smbd=SMBD use specified smbd [$smbd]
1411 --static enable static build [$static]
1412 --mandir=PATH install man pages in PATH
1413 --datadir=PATH install firmware in PATH$confsuffix
1414 --docdir=PATH install documentation in PATH$confsuffix
1415 --bindir=PATH install binaries in PATH
1416 --libdir=PATH install libraries in PATH
1417 --sysconfdir=PATH install config in PATH$confsuffix
1418 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Fam Zhenge26110c2014-02-10 14:48:57 +08001419 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001420 --enable-debug enable common debug build options
Stefan Weil08fb77e2013-12-18 22:09:39 +01001421 --disable-strip disable stripping binaries
1422 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001423 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001424 --audio-drv-list=LIST set audio drivers list:
1425 Available drivers: $audio_possible_drivers
1426 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1427 --block-drv-rw-whitelist=L
1428 set block driver read-write whitelist
1429 (affects only QEMU, not qemu-img)
1430 --block-drv-ro-whitelist=L
1431 set block driver read-only whitelist
1432 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001433 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001434 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001435 --with-trace-file=NAME Full PATH,NAME of file to store traces
1436 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001437 --disable-slirp disable SLIRP userspace network connectivity
1438 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1439 --oss-lib path to OSS library
1440 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001441 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001442 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001443 --enable-gcov enable test coverage analysis with gcov
1444 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001445 --disable-blobs disable installing provided firmware blobs
1446 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1447 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001448 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001449 --enable-gprof QEMU profiling with gprof
1450 --enable-profiler profiler support
1451 --enable-xen-pv-domain-build
1452 xen pv domain builder
1453 --enable-debug-stack-usage
1454 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001455
1456Optional features, enabled with --enable-FEATURE and
1457disabled with --disable-FEATURE, default is enabled if available:
1458
1459 system all system emulation targets
1460 user supported user emulation targets
1461 linux-user all linux usermode emulation targets
1462 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001463 docs build documentation
1464 guest-agent build the QEMU Guest Agent
1465 guest-agent-msi build guest agent Windows MSI installation package
1466 pie Position Independent Executables
1467 modules modules support
1468 debug-tcg TCG debugging (default is disabled)
1469 debug-info debugging information
1470 sparse sparse checker
1471
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001472 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001473 nettle nettle cryptography support
1474 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001475 sdl SDL UI
1476 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1477 gtk gtk UI
1478 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1479 vte vte support for the gtk UI
1480 curses curses UI
1481 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001482 vnc-sasl SASL encryption for VNC server
1483 vnc-jpeg JPEG lossy compression for VNC server
1484 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001485 cocoa Cocoa UI (Mac OS X only)
1486 virtfs VirtFS
1487 xen xen backend driver support
1488 xen-pci-passthrough
1489 brlapi BrlAPI (Braile)
1490 curl curl connectivity
1491 fdt fdt device tree
1492 bluez bluez stack connectivity
1493 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001494 hax HAX acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001495 rdma RDMA-based migration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001496 vde support for vde network
1497 netmap support for netmap network
1498 linux-aio Linux AIO support
1499 cap-ng libcap-ng support
1500 attr attr and xattr support
1501 vhost-net vhost-net acceleration support
1502 spice spice
1503 rbd rados block device (rbd)
1504 libiscsi iscsi support
1505 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001506 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001507 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001508 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001509 usb-redir usb network redirection support
1510 lzo support of lzo compression library
1511 snappy support of snappy compression library
1512 bzip2 support of bzip2 compression library
1513 (for reading bzip2-compressed dmg images)
1514 seccomp seccomp support
1515 coroutine-pool coroutine freelist (better performance)
1516 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001517 tpm TPM support
1518 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001519 numa libnuma support
1520 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001521 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001522 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001523 vhost-vsock virtio sockets device support
1524 opengl opengl support
1525 virglrenderer virgl rendering support
1526 xfsctl xfsctl support
1527 qom-cast-debug cast debugging support
1528 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001529 vxhs Veritas HyperScale vDisk backend support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001530 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001531 vhost-user vhost-user support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001532
1533NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001534EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001535exit 0
pbrookaf5db582006-04-08 14:26:41 +00001536fi
1537
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001538if ! has $python; then
1539 error_exit "Python not found. Use --python=/path/to/python"
1540fi
1541
1542# Note that if the Python conditional here evaluates True we will exit
1543# with status 1 which is a shell 'false' value.
1544if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1545 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1546 "Note that Python 3 or later is not yet supported." \
1547 "Use --python=/path/to/python to specify a supported Python."
1548fi
1549
1550# Suppress writing compiled files
1551python="$python -B"
1552
Peter Maydell359bc952011-12-24 13:07:25 +00001553# Now we have handled --enable-tcg-interpreter and know we're not just
1554# printing the help message, bail out if the host CPU isn't supported.
1555if test "$ARCH" = "unknown"; then
1556 if test "$tcg_interpreter" = "yes" ; then
1557 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001558 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001559 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001560 fi
1561fi
1562
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001563# Consult white-list to determine whether to enable werror
1564# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001565if test -z "$werror" ; then
1566 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001567 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001568 werror="yes"
1569 else
1570 werror="no"
1571 fi
1572fi
1573
Paolo Bonzini8d050952010-12-23 11:43:52 +01001574# check that the C compiler works.
John Snow93b25862015-03-25 18:57:37 -04001575write_c_skeleton;
Paolo Bonzini8d050952010-12-23 11:43:52 +01001576if compile_object ; then
1577 : C compiler works ok
1578else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001579 error_exit "\"$cc\" either does not exist or does not work"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001580fi
Peter Maydell0ef74c72015-11-24 14:55:46 +00001581if ! compile_prog ; then
1582 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1583fi
Paolo Bonzini8d050952010-12-23 11:43:52 +01001584
Peter Maydellfb59dab2017-03-28 14:01:52 +01001585if test "$bogus_os" = "yes"; then
1586 # Now that we know that we're not printing the help and that
1587 # the compiler works (so the results of the check_defines we used
1588 # to identify the OS are reliable), if we didn't recognize the
1589 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001590 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001591fi
1592
Paolo Bonzini8d050952010-12-23 11:43:52 +01001593gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1594gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001595gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001596gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001597gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001598gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001599# Note that we do not add -Werror to gcc_flags here, because that would
1600# enable it for all configure tests. If a configure test failed due
1601# to -Werror this would just silently disable some features,
1602# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001603
1604cc_has_warning_flag() {
1605 write_c_skeleton;
1606
Peter Maydella1d29d62012-10-27 22:19:07 +01001607 # Use the positive sense of the flag when testing for -Wno-wombat
1608 # support (gcc will happily accept the -Wno- form of unknown
1609 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001610 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1611 compile_prog "-Werror $optflag" ""
1612}
1613
1614for flag in $gcc_flags; do
1615 if cc_has_warning_flag $flag ; then
1616 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001617 fi
1618done
1619
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001620if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001621 cat > $TMPC << EOF
1622int main(int argc, char *argv[])
1623{
1624 char arr[64], *p = arr, *c = argv[0];
1625 while (*c) {
1626 *p++ = *c++;
1627 }
1628 return 0;
1629}
1630EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001631 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001632 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001633 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001634 # We need to check both a compile and a link, since some compiler
1635 # setups fail only on a .c->.o compile and some only at link time
1636 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1637 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001638 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001639 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001640 break
1641 fi
1642 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001643 if test "$stack_protector" = yes; then
1644 if test $sp_on = 0; then
1645 error_exit "Stack protector not supported"
1646 fi
1647 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001648fi
1649
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001650# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1651# large functions that use global variables. The bug is in all releases of
1652# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1653# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1654cat > $TMPC << EOF
1655#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1656int main(void) { return 0; }
1657#else
1658#error No bug in this compiler.
1659#endif
1660EOF
1661if compile_prog "-Werror -fno-gcse" "" ; then
1662 TRANSLATE_OPT_CFLAGS=-fno-gcse
1663fi
1664
Avi Kivity40d64442011-11-15 20:12:17 +02001665if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001666 if test "$modules" = "yes" ; then
1667 error_exit "static and modules are mutually incompatible"
1668 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001669 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001670 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001671 else
1672 pie="no"
1673 fi
1674fi
1675
Emilio G. Cota768b7852015-04-29 13:09:02 +02001676# Unconditional check for compiler __thread support
1677 cat > $TMPC << EOF
1678static __thread int tls_var;
1679int main(void) { return tls_var; }
1680EOF
1681
1682if ! compile_prog "-Werror" "" ; then
1683 error_exit "Your compiler does not support the __thread specifier for " \
1684 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1685fi
1686
Avi Kivity40d64442011-11-15 20:12:17 +02001687if test "$pie" = ""; then
1688 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001689 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001690 ;;
1691 *)
1692 pie="no"
1693 ;;
1694 esac
1695fi
1696
1697if test "$pie" != "no" ; then
1698 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001699
1700#ifdef __linux__
1701# define THREAD __thread
1702#else
1703# define THREAD
1704#endif
1705
1706static THREAD int tls_var;
1707
1708int main(void) { return tls_var; }
1709
Avi Kivity40d64442011-11-15 20:12:17 +02001710EOF
1711 if compile_prog "-fPIE -DPIE" "-pie"; then
1712 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1713 LDFLAGS="-pie $LDFLAGS"
1714 pie="yes"
1715 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1716 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1717 fi
1718 else
1719 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001720 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001721 else
1722 echo "Disabling PIE due to missing toolchain support"
1723 pie="no"
1724 fi
1725 fi
Brad46eef332013-12-10 19:49:08 -05001726
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001727 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001728 CFLAGS_NOPIE="-fno-pie"
1729 LDFLAGS_NOPIE="-nopie"
1730 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001731fi
1732
Paolo Bonzini09dada42013-04-17 16:26:47 +02001733##########################################
1734# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1735# use i686 as default anyway, but for those that don't, an explicit
1736# specification is necessary
1737
1738if test "$cpu" = "i386"; then
1739 cat > $TMPC << EOF
1740static int sfaa(int *ptr)
1741{
1742 return __sync_fetch_and_and(ptr, 0);
1743}
1744
1745int main(void)
1746{
1747 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001748 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001749 sfaa(&val);
1750 return val;
1751}
1752EOF
1753 if ! compile_prog "" "" ; then
1754 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1755 fi
1756fi
1757
1758#########################################
bellardec530c82006-04-25 22:36:06 +00001759# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001760
bellardec530c82006-04-25 22:36:06 +00001761if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001762 if has $install; then
1763 :
1764 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001765 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1766 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1767 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001768 fi
Stefan Weil89138852016-05-16 15:10:20 +02001769 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001770 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1771 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1772 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001773 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001774 if has ar; then
1775 :
1776 else
bellardec530c82006-04-25 22:36:06 +00001777 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001778 error_exit "No path includes ar" \
1779 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001780 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001781 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001782 fi
ths5fafdf22007-09-16 21:08:06 +00001783fi
bellardec530c82006-04-25 22:36:06 +00001784
Stefan Weilafb63eb2012-09-26 22:04:38 +02001785if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001786 for target in $default_target_list; do
1787 supported_target $target 2>/dev/null && \
1788 target_list="$target_list $target"
1789 done
1790 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05001791else
Stefan Weil89138852016-05-16 15:10:20 +02001792 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001793 for target in $target_list; do
1794 # Check that we recognised the target name; this allows a more
1795 # friendly error message than if we let it fall through.
1796 case " $default_target_list " in
1797 *" $target "*)
1798 ;;
1799 *)
1800 error_exit "Unknown target name '$target'"
1801 ;;
1802 esac
1803 supported_target $target || exit 1
1804 done
bellard5327cf42005-01-10 23:18:50 +00001805fi
Peter Maydell25b48332013-05-20 16:16:16 +01001806
Paolo Bonzinif55fe272010-05-26 16:08:17 +02001807# see if system emulation was really requested
1808case " $target_list " in
1809 *"-softmmu "*) softmmu=yes
1810 ;;
1811 *) softmmu=no
1812 ;;
1813esac
bellard5327cf42005-01-10 23:18:50 +00001814
Juan Quintela249247c2009-08-12 18:20:25 +02001815feature_not_found() {
1816 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11001817 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02001818
Peter Maydell76ad07a2013-04-08 12:11:26 +01001819 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11001820 "configure was not able to find it." \
1821 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02001822}
1823
bellard7d132992003-03-06 23:23:54 +00001824# ---
1825# big/little endian test
1826cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04001827short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1828short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1829extern int foo(short *, short *);
1830int main(int argc, char *argv[]) {
1831 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00001832}
1833EOF
1834
Mike Frysinger61cc9192013-06-30 23:30:18 -04001835if compile_object ; then
1836 if grep -q BiGeNdIaN $TMPO ; then
1837 bigendian="yes"
1838 elif grep -q LiTtLeEnDiAn $TMPO ; then
1839 bigendian="no"
1840 else
1841 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01001842 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04001843else
1844 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00001845fi
1846
Juan Quintelab0a47e72009-08-12 18:29:49 +02001847##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01001848# cocoa implies not SDL or GTK
1849# (the cocoa UI code currently assumes it is always the active UI
1850# and doesn't interact well with other UI frontend code)
1851if test "$cocoa" = "yes"; then
1852 if test "$sdl" = "yes"; then
1853 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1854 fi
1855 if test "$gtk" = "yes"; then
1856 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1857 fi
1858 gtk=no
1859 sdl=no
1860fi
1861
Eric Blake6b39b062016-10-11 10:46:23 -05001862# Some versions of Mac OS X incorrectly define SIZE_MAX
1863cat > $TMPC << EOF
1864#include <stdint.h>
1865#include <stdio.h>
1866int main(int argc, char *argv[]) {
1867 return printf("%zu", SIZE_MAX);
1868}
1869EOF
1870have_broken_size_max=no
1871if ! compile_object -Werror ; then
1872 have_broken_size_max=yes
1873fi
1874
Peter Maydella30878e2015-08-14 16:10:52 +01001875##########################################
Gonglei015a33b2014-07-01 20:58:08 +08001876# L2TPV3 probe
1877
1878cat > $TMPC <<EOF
1879#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04001880#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08001881int main(void) { return sizeof(struct mmsghdr); }
1882EOF
1883if compile_prog "" "" ; then
1884 l2tpv3=yes
1885else
1886 l2tpv3=no
1887fi
1888
1889##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01001890# MinGW / Mingw-w64 localtime_r/gmtime_r check
1891
1892if test "$mingw32" = "yes"; then
1893 # Some versions of MinGW / Mingw-w64 lack localtime_r
1894 # and gmtime_r entirely.
1895 #
1896 # Some versions of Mingw-w64 define a macro for
1897 # localtime_r/gmtime_r.
1898 #
1899 # Some versions of Mingw-w64 will define functions
1900 # for localtime_r/gmtime_r, but only if you have
1901 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1902 # though, unistd.h and pthread.h both define
1903 # that for you.
1904 #
1905 # So this #undef localtime_r and #include <unistd.h>
1906 # are not in fact redundant.
1907cat > $TMPC << EOF
1908#include <unistd.h>
1909#include <time.h>
1910#undef localtime_r
1911int main(void) { localtime_r(NULL, NULL); return 0; }
1912EOF
1913 if compile_prog "" "" ; then
1914 localtime_r="yes"
1915 else
1916 localtime_r="no"
1917 fi
1918fi
1919
1920##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01001921# pkg-config probe
1922
1923if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001924 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01001925fi
1926
1927##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02001928# NPTL probe
1929
Peter Maydell24cb36a2013-07-16 18:45:00 +01001930if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02001931 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00001932#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00001933#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01001934int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00001935#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1936#error bork
1937#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01001938 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00001939}
1940EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01001941 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11001942 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02001943 fi
pbrookbd0c5662008-05-29 14:34:11 +00001944fi
1945
Liang Li99f2dbd2016-03-08 13:53:16 +08001946#########################################
balrogac629222008-10-11 09:56:04 +00001947# zlib check
1948
Alon Levy1ece9902011-07-26 12:30:40 +03001949if test "$zlib" != "no" ; then
1950 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00001951#include <zlib.h>
1952int main(void) { zlibVersion(); return 0; }
1953EOF
Alon Levy1ece9902011-07-26 12:30:40 +03001954 if compile_prog "" "-lz" ; then
1955 :
1956 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001957 error_exit "zlib check failed" \
1958 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03001959 fi
balrogac629222008-10-11 09:56:04 +00001960fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00001961LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00001962
1963##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08001964# lzo check
1965
1966if test "$lzo" != "no" ; then
1967 cat > $TMPC << EOF
1968#include <lzo/lzo1x.h>
1969int main(void) { lzo_version(); return 0; }
1970EOF
1971 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001972 libs_softmmu="$libs_softmmu -llzo2"
1973 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001974 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001975 if test "$lzo" = "yes"; then
1976 feature_not_found "liblzo2" "Install liblzo2 devel"
1977 fi
1978 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08001979 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08001980fi
1981
1982##########################################
1983# snappy check
1984
1985if test "$snappy" != "no" ; then
1986 cat > $TMPC << EOF
1987#include <snappy-c.h>
1988int main(void) { snappy_max_compressed_length(4096); return 0; }
1989EOF
1990 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001991 libs_softmmu="$libs_softmmu -lsnappy"
1992 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001993 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001994 if test "$snappy" = "yes"; then
1995 feature_not_found "libsnappy" "Install libsnappy devel"
1996 fi
1997 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08001998 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08001999fi
2000
2001##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002002# bzip2 check
2003
2004if test "$bzip2" != "no" ; then
2005 cat > $TMPC << EOF
2006#include <bzlib.h>
2007int main(void) { BZ2_bzlibVersion(); return 0; }
2008EOF
2009 if compile_prog "" "-lbz2" ; then
2010 bzip2="yes"
2011 else
2012 if test "$bzip2" = "yes"; then
2013 feature_not_found "libbzip2" "Install libbzip2 devel"
2014 fi
2015 bzip2="no"
2016 fi
2017fi
2018
2019##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002020# libseccomp check
2021
2022if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002023 case "$cpu" in
2024 i386|x86_64)
dann frazierba060c52015-10-23 15:34:22 -06002025 libseccomp_minver="2.1.0"
Andrew Jones693e5912015-09-30 11:59:18 -04002026 ;;
James Hogan5ce43972016-04-08 14:16:34 +01002027 mips)
2028 libseccomp_minver="2.2.0"
2029 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002030 arm|aarch64)
2031 libseccomp_minver="2.2.3"
2032 ;;
Michael Strosaker3e684452016-06-01 18:30:18 -05002033 ppc|ppc64)
2034 libseccomp_minver="2.3.0"
2035 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002036 *)
2037 libseccomp_minver=""
2038 ;;
2039 esac
2040
2041 if test "$libseccomp_minver" != "" &&
2042 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Stefan Weil89138852016-05-16 15:10:20 +02002043 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
2044 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002045 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002046 else
Andrew Jones693e5912015-09-30 11:59:18 -04002047 if test "$seccomp" = "yes" ; then
2048 if test "$libseccomp_minver" != "" ; then
2049 feature_not_found "libseccomp" \
2050 "Install libseccomp devel >= $libseccomp_minver"
2051 else
2052 feature_not_found "libseccomp" \
2053 "libseccomp is not supported for host cpu $cpu"
2054 fi
2055 fi
2056 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002057 fi
2058fi
2059##########################################
aliguorie37630c2009-04-22 15:19:10 +00002060# xen probe
2061
Juan Quintelafc321b42009-08-12 18:29:55 +02002062if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002063 # Check whether Xen library path is specified via --extra-ldflags to avoid
2064 # overriding this setting with pkg-config output. If not, try pkg-config
2065 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002066
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002067 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2068 $pkg_config --exists xencontrol ; then
2069 xen_ctrl_version="$(printf '%d%02d%02d' \
2070 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2071 xen=yes
2072 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2073 xen_pc="$xen_pc xenevtchn xendevicemodel"
2074 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2075 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2076 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2077 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002078
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002079 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002080 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002081
2082 # First we test whether Xen headers and libraries are available.
2083 # If no, we are done and there is no Xen support.
2084 # If yes, more tests are run to detect the Xen version.
2085
2086 # Xen (any)
2087 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002088#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002089int main(void) {
2090 return 0;
2091}
2092EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002093 if ! compile_prog "" "$xen_libs" ; then
2094 # Xen not found
2095 if test "$xen" = "yes" ; then
2096 feature_not_found "xen" "Install xen devel"
2097 fi
2098 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002099
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002100 # Xen unstable
2101 elif
2102 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002103#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2104#include <xenforeignmemory.h>
2105int main(void) {
2106 xenforeignmemory_handle *xfmem;
2107
2108 xfmem = xenforeignmemory_open(0, 0);
2109 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2110
2111 return 0;
2112}
2113EOF
2114 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2115 then
2116 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2117 xen_ctrl_version=41000
2118 xen=yes
2119 elif
2120 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002121#undef XC_WANT_COMPAT_DEVICEMODEL_API
2122#define __XEN_TOOLS__
2123#include <xendevicemodel.h>
2124int main(void) {
2125 xendevicemodel_handle *xd;
2126
2127 xd = xendevicemodel_open(0, 0);
2128 xendevicemodel_close(xd);
2129
2130 return 0;
2131}
2132EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002133 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2134 then
2135 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2136 xen_ctrl_version=40900
2137 xen=yes
2138 elif
2139 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002140/*
2141 * If we have stable libs the we don't want the libxc compat
2142 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002143 *
2144 * Also, check if xengnttab_grant_copy_segment_t is defined and
2145 * grant copy operation is implemented.
2146 */
2147#undef XC_WANT_COMPAT_EVTCHN_API
2148#undef XC_WANT_COMPAT_GNTTAB_API
2149#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2150#include <xenctrl.h>
2151#include <xenstore.h>
2152#include <xenevtchn.h>
2153#include <xengnttab.h>
2154#include <xenforeignmemory.h>
2155#include <stdint.h>
2156#include <xen/hvm/hvm_info_table.h>
2157#if !defined(HVM_MAX_VCPUS)
2158# error HVM_MAX_VCPUS not defined
2159#endif
2160int main(void) {
2161 xc_interface *xc = NULL;
2162 xenforeignmemory_handle *xfmem;
2163 xenevtchn_handle *xe;
2164 xengnttab_handle *xg;
2165 xen_domain_handle_t handle;
2166 xengnttab_grant_copy_segment_t* seg = NULL;
2167
2168 xs_daemon_open();
2169
2170 xc = xc_interface_open(0, 0, 0);
2171 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2172 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2173 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2174 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2175 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2176
2177 xfmem = xenforeignmemory_open(0, 0);
2178 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2179
2180 xe = xenevtchn_open(0, 0);
2181 xenevtchn_fd(xe);
2182
2183 xg = xengnttab_open(0, 0);
2184 xengnttab_grant_copy(xg, 0, seg);
2185
2186 return 0;
2187}
2188EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002189 compile_prog "" "$xen_libs $xen_stable_libs"
2190 then
2191 xen_ctrl_version=40800
2192 xen=yes
2193 elif
2194 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002195/*
2196 * If we have stable libs the we don't want the libxc compat
2197 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002198 */
2199#undef XC_WANT_COMPAT_EVTCHN_API
2200#undef XC_WANT_COMPAT_GNTTAB_API
2201#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2202#include <xenctrl.h>
2203#include <xenstore.h>
2204#include <xenevtchn.h>
2205#include <xengnttab.h>
2206#include <xenforeignmemory.h>
2207#include <stdint.h>
2208#include <xen/hvm/hvm_info_table.h>
2209#if !defined(HVM_MAX_VCPUS)
2210# error HVM_MAX_VCPUS not defined
2211#endif
2212int main(void) {
2213 xc_interface *xc = NULL;
2214 xenforeignmemory_handle *xfmem;
2215 xenevtchn_handle *xe;
2216 xengnttab_handle *xg;
2217 xen_domain_handle_t handle;
2218
2219 xs_daemon_open();
2220
2221 xc = xc_interface_open(0, 0, 0);
2222 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2223 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2224 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2225 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2226 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2227
2228 xfmem = xenforeignmemory_open(0, 0);
2229 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2230
2231 xe = xenevtchn_open(0, 0);
2232 xenevtchn_fd(xe);
2233
2234 xg = xengnttab_open(0, 0);
2235 xengnttab_map_grant_ref(xg, 0, 0, 0);
2236
2237 return 0;
2238}
2239EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002240 compile_prog "" "$xen_libs $xen_stable_libs"
2241 then
2242 xen_ctrl_version=40701
2243 xen=yes
2244 elif
2245 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002246#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002247#include <stdint.h>
2248int main(void) {
2249 xc_interface *xc = NULL;
2250 xen_domain_handle_t handle;
2251 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2252 return 0;
2253}
2254EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002255 compile_prog "" "$xen_libs"
2256 then
2257 xen_ctrl_version=40700
2258 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002259
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002260 # Xen 4.6
2261 elif
2262 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002263#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002264#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002265#include <stdint.h>
2266#include <xen/hvm/hvm_info_table.h>
2267#if !defined(HVM_MAX_VCPUS)
2268# error HVM_MAX_VCPUS not defined
2269#endif
2270int main(void) {
2271 xc_interface *xc;
2272 xs_daemon_open();
2273 xc = xc_interface_open(0, 0, 0);
2274 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2275 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002276 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002277 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002278 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002279 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002280 return 0;
2281}
2282EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002283 compile_prog "" "$xen_libs"
2284 then
2285 xen_ctrl_version=40600
2286 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002287
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002288 # Xen 4.5
2289 elif
2290 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002291#include <xenctrl.h>
2292#include <xenstore.h>
2293#include <stdint.h>
2294#include <xen/hvm/hvm_info_table.h>
2295#if !defined(HVM_MAX_VCPUS)
2296# error HVM_MAX_VCPUS not defined
2297#endif
2298int main(void) {
2299 xc_interface *xc;
2300 xs_daemon_open();
2301 xc = xc_interface_open(0, 0, 0);
2302 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2303 xc_gnttab_open(NULL, 0);
2304 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2305 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002306 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2307 return 0;
2308}
2309EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002310 compile_prog "" "$xen_libs"
2311 then
2312 xen_ctrl_version=40500
2313 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002314
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002315 elif
2316 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002317#include <xenctrl.h>
2318#include <xenstore.h>
2319#include <stdint.h>
2320#include <xen/hvm/hvm_info_table.h>
2321#if !defined(HVM_MAX_VCPUS)
2322# error HVM_MAX_VCPUS not defined
2323#endif
2324int main(void) {
2325 xc_interface *xc;
2326 xs_daemon_open();
2327 xc = xc_interface_open(0, 0, 0);
2328 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2329 xc_gnttab_open(NULL, 0);
2330 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2331 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002332 return 0;
2333}
2334EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002335 compile_prog "" "$xen_libs"
2336 then
2337 xen_ctrl_version=40200
2338 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002339
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002340 else
2341 if test "$xen" = "yes" ; then
2342 feature_not_found "xen (unsupported version)" \
2343 "Install a supported xen (xen 4.2 or newer)"
2344 fi
2345 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002346 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002347
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002348 if test "$xen" = yes; then
2349 if test $xen_ctrl_version -ge 40701 ; then
2350 libs_softmmu="$xen_stable_libs $libs_softmmu"
2351 fi
2352 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002353 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002354 fi
aliguorie37630c2009-04-22 15:19:10 +00002355fi
2356
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002357if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002358 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002359 xen_pci_passthrough=yes
2360 else
2361 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002362 error_exit "User requested feature Xen PCI Passthrough" \
2363 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002364 fi
2365 xen_pci_passthrough=no
2366 fi
2367fi
2368
Ian Campbell64a7ad62016-01-15 13:23:44 +00002369if test "$xen_pv_domain_build" = "yes" &&
2370 test "$xen" != "yes"; then
2371 error_exit "User requested Xen PV domain builder support" \
2372 "which requires Xen support."
2373fi
2374
aliguorie37630c2009-04-22 15:19:10 +00002375##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002376# Sparse probe
2377if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002378 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002379 sparse=yes
2380 else
2381 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002382 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002383 fi
2384 sparse=no
2385 fi
2386fi
2387
2388##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002389# X11 probe
2390x11_cflags=
2391x11_libs=-lX11
2392if $pkg_config --exists "x11"; then
Stefan Weil89138852016-05-16 15:10:20 +02002393 x11_cflags=$($pkg_config --cflags x11)
2394 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002395fi
2396
2397##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002398# GTK probe
2399
Stefan Weil9e04c682014-05-17 16:29:18 +02002400if test "$gtkabi" = ""; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002401 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2402 # Use 2.0 as a fallback if that is available.
2403 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002404 gtkabi=3.0
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002405 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002406 gtkabi=2.0
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002407 else
2408 gtkabi=3.0
Stefan Weil9e04c682014-05-17 16:29:18 +02002409 fi
2410fi
2411
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002412if test "$gtk" != "no"; then
Daniel P. Berrange528de902013-02-25 15:20:44 +00002413 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002414 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002415 if test "$gtkabi" = "3.0" ; then
2416 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002417 else
2418 gtkversion="2.18.0"
2419 fi
2420 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002421 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2422 gtk_libs=$($pkg_config --libs $gtkpackage)
2423 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002424 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Jeremy Whitef676c672015-01-09 13:08:49 -06002425 gtk_cflags="$gtk_cflags $x11_cflags"
2426 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002427 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002428 libs_softmmu="$gtk_libs $libs_softmmu"
2429 gtk="yes"
2430 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002431 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002432 else
2433 gtk="no"
2434 fi
2435fi
2436
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002437
2438##########################################
2439# GNUTLS probe
2440
Peter Maydell37371292015-07-24 18:28:08 +01002441gnutls_works() {
2442 # Unfortunately some distros have bad pkg-config information for gnutls
2443 # such that it claims to exist but you get a compiler error if you try
2444 # to use the options returned by --libs. Specifically, Ubuntu for --static
2445 # builds doesn't work:
2446 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2447 #
2448 # So sanity check the cflags/libs before assuming gnutls can be used.
2449 if ! $pkg_config --exists "gnutls"; then
2450 return 1
2451 fi
2452
2453 write_c_skeleton
2454 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2455}
2456
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002457gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002458gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002459if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002460 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002461 gnutls_cflags=$($pkg_config --cflags gnutls)
2462 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002463 libs_softmmu="$gnutls_libs $libs_softmmu"
2464 libs_tools="$gnutls_libs $libs_tools"
2465 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2466 gnutls="yes"
2467
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002468 # gnutls_rnd requires >= 2.11.0
2469 if $pkg_config --exists "gnutls >= 2.11.0"; then
2470 gnutls_rnd="yes"
2471 else
2472 gnutls_rnd="no"
2473 fi
2474
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002475 if $pkg_config --exists 'gnutls >= 3.0'; then
2476 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002477 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002478 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002479 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002480 *gcrypt*)
2481 gnutls_gcrypt=yes
2482 gnutls_nettle=no
2483 ;;
2484 *nettle*)
2485 gnutls_gcrypt=no
2486 gnutls_nettle=yes
2487 ;;
2488 *)
2489 gnutls_gcrypt=yes
2490 gnutls_nettle=no
2491 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002492 esac
2493 else
2494 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002495 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002496 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002497 elif test "$gnutls" = "yes"; then
2498 feature_not_found "gnutls" "Install gnutls devel"
2499 else
2500 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002501 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002502 fi
2503else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002504 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002505fi
2506
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002507
2508# If user didn't give a --disable/enable-gcrypt flag,
2509# then mark as disabled if user requested nettle
2510# explicitly, or if gnutls links to nettle
2511if test -z "$gcrypt"
2512then
2513 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2514 then
2515 gcrypt="no"
2516 fi
2517fi
2518
2519# If user didn't give a --disable/enable-nettle flag,
2520# then mark as disabled if user requested gcrypt
2521# explicitly, or if gnutls links to gcrypt
2522if test -z "$nettle"
2523then
2524 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2525 then
2526 nettle="no"
2527 fi
2528fi
2529
2530has_libgcrypt_config() {
2531 if ! has "libgcrypt-config"
2532 then
2533 return 1
2534 fi
2535
2536 if test -n "$cross_prefix"
2537 then
Stefan Weil89138852016-05-16 15:10:20 +02002538 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002539 if test "$host-" != $cross_prefix
2540 then
2541 return 1
2542 fi
2543 fi
2544
2545 return 0
2546}
2547
2548if test "$gcrypt" != "no"; then
2549 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002550 gcrypt_cflags=$(libgcrypt-config --cflags)
2551 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002552 # Debian has remove -lgpg-error from libgcrypt-config
2553 # as it "spreads unnecessary dependencies" which in
2554 # turn breaks static builds...
2555 if test "$static" = "yes"
2556 then
2557 gcrypt_libs="$gcrypt_libs -lgpg-error"
2558 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002559 libs_softmmu="$gcrypt_libs $libs_softmmu"
2560 libs_tools="$gcrypt_libs $libs_tools"
2561 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002562 gcrypt="yes"
2563 if test -z "$nettle"; then
2564 nettle="no"
2565 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002566
2567 cat > $TMPC << EOF
2568#include <gcrypt.h>
2569int main(void) {
2570 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2571 GCRY_MD_SHA256,
2572 NULL, 0, 0, 0, NULL);
2573 return 0;
2574}
2575EOF
2576 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2577 gcrypt_kdf=yes
2578 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002579
2580 cat > $TMPC << EOF
2581#include <gcrypt.h>
2582int main(void) {
2583 gcry_mac_hd_t handle;
2584 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2585 GCRY_MAC_FLAG_SECURE, NULL);
2586 return 0;
2587}
2588EOF
2589 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2590 gcrypt_hmac=yes
2591 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002592 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002593 if test "$gcrypt" = "yes"; then
2594 feature_not_found "gcrypt" "Install gcrypt devel"
2595 else
2596 gcrypt="no"
2597 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002598 fi
2599fi
2600
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002601
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002602if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002603 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002604 nettle_cflags=$($pkg_config --cflags nettle)
2605 nettle_libs=$($pkg_config --libs nettle)
2606 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002607 libs_softmmu="$nettle_libs $libs_softmmu"
2608 libs_tools="$nettle_libs $libs_tools"
2609 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002610 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002611
2612 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002613#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002614#include <nettle/pbkdf2.h>
2615int main(void) {
2616 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2617 return 0;
2618}
2619EOF
2620 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2621 nettle_kdf=yes
2622 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002623 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002624 if test "$nettle" = "yes"; then
2625 feature_not_found "nettle" "Install nettle devel"
2626 else
2627 nettle="no"
2628 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002629 fi
2630fi
2631
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002632if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2633then
2634 error_exit "Only one of gcrypt & nettle can be enabled"
2635fi
2636
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002637##########################################
2638# libtasn1 - only for the TLS creds/session test suite
2639
2640tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002641tasn1_cflags=""
2642tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002643if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002644 tasn1_cflags=$($pkg_config --cflags libtasn1)
2645 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002646else
2647 tasn1=no
2648fi
2649
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002650
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002651##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002652# getifaddrs (for tests/test-io-channel-socket )
2653
2654have_ifaddrs_h=yes
2655if ! check_include "ifaddrs.h" ; then
2656 have_ifaddrs_h=no
2657fi
2658
2659##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002660# VTE probe
2661
2662if test "$vte" != "no"; then
2663 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002664 vteminversion="0.32.0"
2665 if $pkg_config --exists "vte-2.91"; then
2666 vtepackage="vte-2.91"
2667 else
2668 vtepackage="vte-2.90"
2669 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002670 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002671 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002672 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002673 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002674 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002675 vte_cflags=$($pkg_config --cflags $vtepackage)
2676 vte_libs=$($pkg_config --libs $vtepackage)
2677 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002678 libs_softmmu="$vte_libs $libs_softmmu"
2679 vte="yes"
2680 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002681 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002682 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002683 else
2684 feature_not_found "vte" "Install libvte devel"
2685 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002686 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002687 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002688 fi
2689fi
2690
2691##########################################
bellard11d9f692004-04-02 20:55:59 +00002692# SDL probe
2693
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002694# Look for sdl configuration program (pkg-config or sdl-config). Try
2695# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002696
Cole Robinsonee8466d2016-05-06 14:03:07 -04002697if test "$sdlabi" = ""; then
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002698 if $pkg_config --exists "sdl2"; then
Cole Robinsonee8466d2016-05-06 14:03:07 -04002699 sdlabi=2.0
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002700 elif $pkg_config --exists "sdl"; then
Cole Robinsonee8466d2016-05-06 14:03:07 -04002701 sdlabi=1.2
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002702 else
2703 sdlabi=2.0
Cole Robinsonee8466d2016-05-06 14:03:07 -04002704 fi
2705fi
2706
Dave Airlie47c03742013-12-10 14:05:51 +10002707if test $sdlabi = "2.0"; then
2708 sdl_config=$sdl2_config
2709 sdlname=sdl2
2710 sdlconfigname=sdl2_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002711elif test $sdlabi = "1.2"; then
Dave Airlie47c03742013-12-10 14:05:51 +10002712 sdlname=sdl
2713 sdlconfigname=sdl_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002714else
2715 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002716fi
2717
Stefan Weil89138852016-05-16 15:10:20 +02002718if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
Dave Airlie47c03742013-12-10 14:05:51 +10002719 sdl_config=$sdlconfigname
2720fi
2721
2722if $pkg_config $sdlname --exists; then
2723 sdlconfig="$pkg_config $sdlname"
Stefan Weil89138852016-05-16 15:10:20 +02002724 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002725elif has ${sdl_config}; then
2726 sdlconfig="$sdl_config"
Stefan Weil89138852016-05-16 15:10:20 +02002727 sdlversion=$($sdlconfig --version)
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002728else
2729 if test "$sdl" = "yes" ; then
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002730 feature_not_found "sdl" "Install SDL2-devel"
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002731 fi
2732 sdl=no
Paolo Bonzini9316f802010-01-13 09:52:55 +01002733fi
Scott Wood29e5bad2011-04-08 14:15:50 -05002734if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002735 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2736fi
bellard11d9f692004-04-02 20:55:59 +00002737
Paolo Bonzini9316f802010-01-13 09:52:55 +01002738sdl_too_old=no
Juan Quintelac4198152009-08-12 18:29:53 +02002739if test "$sdl" != "no" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002740 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002741#include <SDL.h>
2742#undef main /* We don't want SDL to override our main() */
2743int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2744EOF
Stefan Weil89138852016-05-16 15:10:20 +02002745 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002746 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002747 if $pkg_config $sdlname --exists; then
2748 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2749 else
2750 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2751 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002752 else
Stefan Weil89138852016-05-16 15:10:20 +02002753 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002754 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002755 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002756 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002757 sdl_too_old=yes
2758 else
Peter Maydella30878e2015-08-14 16:10:52 +01002759 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002760 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002761
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002762 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002763 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002764 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002765 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2766 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002767 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002768 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002769 :
2770 else
2771 sdl=no
2772 fi
2773 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002774 else # sdl not found
2775 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002776 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002777 fi
2778 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002779 fi # sdl compile test
Juan Quintelaa68551b2009-07-27 16:13:09 +02002780fi
bellard11d9f692004-04-02 20:55:59 +00002781
aliguori5368a422009-03-03 17:37:21 +00002782if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002783 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002784#include <SDL.h>
2785#if defined(SDL_VIDEO_DRIVER_X11)
2786#include <X11/XKBlib.h>
2787#else
2788#error No x11 support
2789#endif
2790int main(void) { return 0; }
2791EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002792 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2793 sdl_cflags="$sdl_cflags $x11_cflags"
2794 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02002795 fi
Juan Quintela07056672009-08-03 14:46:27 +02002796 libs_softmmu="$sdl_libs $libs_softmmu"
aliguori5368a422009-03-03 17:37:21 +00002797fi
2798
ths8f28f3f2007-01-05 21:25:54 +00002799##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04002800# RDMA needs OpenFabrics libraries
2801if test "$rdma" != "no" ; then
2802 cat > $TMPC <<EOF
2803#include <rdma/rdma_cma.h>
2804int main(void) { return 0; }
2805EOF
2806 rdma_libs="-lrdmacm -libverbs"
2807 if compile_prog "" "$rdma_libs" ; then
2808 rdma="yes"
2809 libs_softmmu="$libs_softmmu $rdma_libs"
2810 else
2811 if test "$rdma" = "yes" ; then
2812 error_exit \
2813 " OpenFabrics librdmacm/libibverbs not present." \
2814 " Your options:" \
2815 " (1) Fast: Install infiniband packages from your distro." \
2816 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2817 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2818 fi
2819 rdma="no"
2820 fi
2821fi
2822
ths8d5d2d42007-08-25 01:37:51 +00002823
2824##########################################
aliguori2f9606b2009-03-06 20:27:28 +00002825# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002826if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02002827 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00002828#include <sasl/sasl.h>
2829#include <stdio.h>
2830int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2831EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02002832 # Assuming Cyrus-SASL installed in /usr prefix
2833 vnc_sasl_cflags=""
2834 vnc_sasl_libs="-lsasl2"
2835 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2836 vnc_sasl=yes
2837 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002838 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02002839 else
2840 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002841 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00002842 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02002843 vnc_sasl=no
2844 fi
aliguori2f9606b2009-03-06 20:27:28 +00002845fi
2846
2847##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002848# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002849if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002850cat > $TMPC <<EOF
2851#include <stdio.h>
2852#include <jpeglib.h>
2853int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2854EOF
2855 vnc_jpeg_cflags=""
2856 vnc_jpeg_libs="-ljpeg"
2857 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2858 vnc_jpeg=yes
2859 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002860 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002861 else
2862 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002863 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002864 fi
2865 vnc_jpeg=no
2866 fi
2867fi
2868
2869##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02002870# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002871if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02002872cat > $TMPC <<EOF
2873//#include <stdio.h>
2874#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05002875#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02002876int main(void) {
2877 png_structp png_ptr;
2878 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01002879 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02002880}
2881EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02002882 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02002883 vnc_png_cflags=$($pkg_config libpng --cflags)
2884 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04002885 else
Corentin Charyefe556a2010-07-07 20:57:56 +02002886 vnc_png_cflags=""
2887 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04002888 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02002889 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2890 vnc_png=yes
2891 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04002892 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02002893 else
2894 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002895 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02002896 fi
2897 vnc_png=no
2898 fi
2899fi
2900
2901##########################################
aliguori76655d62009-03-06 20:27:37 +00002902# fnmatch() probe, used for ACL routines
2903fnmatch="no"
2904cat > $TMPC << EOF
2905#include <fnmatch.h>
2906int main(void)
2907{
2908 fnmatch("foo", "foo", 0);
2909 return 0;
2910}
2911EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002912if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00002913 fnmatch="yes"
2914fi
2915
2916##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06002917# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002918if test "$xfs" != "no" ; then
2919 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01002920#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002921#include <xfs/xfs.h>
2922int main(void)
2923{
2924 xfsctl(NULL, 0, 0, NULL);
2925 return 0;
2926}
2927EOF
2928 if compile_prog "" "" ; then
2929 xfs="yes"
2930 else
2931 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002932 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002933 fi
2934 xfs=no
2935 fi
2936fi
2937
2938##########################################
ths8a16d272008-07-19 09:56:24 +00002939# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02002940if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002941 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00002942 cat > $TMPC << EOF
2943#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00002944int main(void)
2945{
2946 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01002947 char s[] = "";
2948 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00002949 return 0;
2950}
ths8a16d272008-07-19 09:56:24 +00002951EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002952 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002953 vde=yes
Juan Quintela8e02e542009-08-03 14:47:07 +02002954 libs_softmmu="$vde_libs $libs_softmmu"
2955 libs_tools="$vde_libs $libs_tools"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002956 else
2957 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002958 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002959 fi
2960 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02002961 fi
ths8a16d272008-07-19 09:56:24 +00002962fi
2963
2964##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002965# netmap support probe
2966# Apart from looking for netmap headers, we make sure that the host API version
2967# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2968# a minor/major version number. Minor new features will be marked with values up
2969# to 15, and if something happens that requires a change to the backend we will
2970# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01002971if test "$netmap" != "no" ; then
2972 cat > $TMPC << EOF
2973#include <inttypes.h>
2974#include <net/if.h>
2975#include <net/netmap.h>
2976#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002977#if (NETMAP_API < 11) || (NETMAP_API > 15)
2978#error
2979#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01002980int main(void) { return 0; }
2981EOF
2982 if compile_prog "" "" ; then
2983 netmap=yes
2984 else
2985 if test "$netmap" = "yes" ; then
2986 feature_not_found "netmap"
2987 fi
2988 netmap=no
2989 fi
2990fi
2991
2992##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05002993# libcap-ng library probe
2994if test "$cap_ng" != "no" ; then
2995 cap_libs="-lcap-ng"
2996 cat > $TMPC << EOF
2997#include <cap-ng.h>
2998int main(void)
2999{
3000 capng_capability_to_name(CAPNG_EFFECTIVE);
3001 return 0;
3002}
3003EOF
3004 if compile_prog "" "$cap_libs" ; then
3005 cap_ng=yes
3006 libs_tools="$cap_libs $libs_tools"
3007 else
3008 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003009 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003010 fi
3011 cap_ng=no
3012 fi
3013fi
3014
3015##########################################
malcc2de5c92008-06-28 19:13:06 +00003016# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003017
malcc2de5c92008-06-28 19:13:06 +00003018audio_drv_probe()
3019{
3020 drv=$1
3021 hdr=$2
3022 lib=$3
3023 exp=$4
3024 cfl=$5
3025 cat > $TMPC << EOF
3026#include <$hdr>
3027int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003028EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003029 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003030 :
3031 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003032 error_exit "$drv check failed" \
3033 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003034 fi
3035}
3036
Stefan Weil89138852016-05-16 15:10:20 +02003037audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003038for drv in $audio_drv_list; do
3039 case $drv in
3040 alsa)
3041 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003042 "return snd_pcm_close((snd_pcm_t *)0);"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003043 libs_softmmu="-lasound $libs_softmmu"
malcc2de5c92008-06-28 19:13:06 +00003044 ;;
3045
malcb8e59f12008-07-02 21:03:08 +00003046 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003047 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3048 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Marc-André Lureaua394aed2012-04-17 14:32:42 +02003049 libs_softmmu="-lpulse $libs_softmmu"
Juan Quintela67f86e82009-08-03 14:46:59 +02003050 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003051 ;;
3052
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003053 sdl)
3054 if test "$sdl" = "no"; then
3055 error_exit "sdl not found or disabled, can not use sdl audio driver"
3056 fi
3057 ;;
3058
Juan Quintela997e6902009-08-03 14:46:29 +02003059 coreaudio)
3060 libs_softmmu="-framework CoreAudio $libs_softmmu"
3061 ;;
3062
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003063 dsound)
3064 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
malcd5631632009-10-10 01:13:41 +04003065 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003066 ;;
3067
3068 oss)
3069 libs_softmmu="$oss_lib $libs_softmmu"
3070 ;;
3071
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003072 wav)
3073 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003074 ;;
3075
malce4c63a62008-07-19 16:15:16 +00003076 *)
malc1c9b2a52008-07-19 16:57:30 +00003077 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003078 error_exit "Unknown driver '$drv' selected" \
3079 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003080 }
3081 ;;
malcc2de5c92008-06-28 19:13:06 +00003082 esac
3083done
ths8f28f3f2007-01-05 21:25:54 +00003084
balrog4d3b6f62008-02-10 16:33:14 +00003085##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003086# BrlAPI probe
3087
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003088if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003089 brlapi_libs="-lbrlapi"
3090 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003091#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003092#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003093int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3094EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003095 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003096 brlapi=yes
Juan Quintela264606b2009-08-03 14:46:39 +02003097 libs_softmmu="$brlapi_libs $libs_softmmu"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003098 else
3099 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003100 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003101 fi
3102 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003103 fi
3104fi
aurel322e4d9fb2008-04-08 06:01:02 +00003105
3106##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003107# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003108if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003109 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003110 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3111 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003112 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003113 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003114 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003115 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003116 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003117 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003118#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003119#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003120#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003121int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003122 wchar_t wch = L'w';
3123 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003124 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003125 addwstr(L"wide chars\n");
3126 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003127 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003128 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003129}
balrog4d3b6f62008-02-10 16:33:14 +00003130EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003131 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003132 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003133 # Make sure we get the wide character prototypes
3134 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003135 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003136 for curses_lib in $curses_lib_list; do
3137 unset IFS
3138 if compile_prog "$curses_inc" "$curses_lib" ; then
3139 curses_found=yes
3140 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3141 libs_softmmu="$curses_lib $libs_softmmu"
3142 break
3143 fi
3144 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003145 if test "$curses_found" = yes ; then
3146 break
3147 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003148 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003149 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003150 if test "$curses_found" = "yes" ; then
3151 curses=yes
3152 else
3153 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003154 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003155 fi
3156 curses=no
3157 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003158fi
balrog4d3b6f62008-02-10 16:33:14 +00003159
blueswir1414f0da2008-08-15 18:20:52 +00003160##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003161# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003162if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003163 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003164 curlconfig="$pkg_config libcurl"
3165 else
3166 curlconfig=curl-config
3167 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003168 cat > $TMPC << EOF
3169#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003170int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003171EOF
Stefan Weil89138852016-05-16 15:10:20 +02003172 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3173 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003174 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003175 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003176 else
3177 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003178 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003179 fi
3180 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003181 fi
3182fi # test "$curl"
3183
3184##########################################
balrogfb599c92008-09-28 23:49:55 +00003185# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003186if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003187 cat > $TMPC << EOF
3188#include <bluetooth/bluetooth.h>
3189int main(void) { return bt_error(0); }
3190EOF
Stefan Weil89138852016-05-16 15:10:20 +02003191 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3192 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003193 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003194 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003195 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003196 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003197 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003198 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003199 fi
balroge820e3f2008-09-30 02:27:44 +00003200 bluez="no"
3201 fi
balrogfb599c92008-09-28 23:49:55 +00003202fi
3203
3204##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003205# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003206
Peter Maydellad04d8c2017-04-03 14:04:15 +01003207if test "$mingw32" = yes; then
3208 glib_req_ver=2.30
3209else
3210 glib_req_ver=2.22
3211fi
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003212glib_modules=gthread-2.0
3213if test "$modules" = yes; then
3214 glib_modules="$glib_modules gmodule-2.0"
3215fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003216
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003217# This workaround is required due to a bug in pkg-config file for glib as it
3218# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3219
3220if test "$static" = yes -a "$mingw32" = yes; then
3221 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3222fi
3223
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003224for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003225 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003226 glib_cflags=$($pkg_config --cflags $i)
3227 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003228 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003229 LIBS="$glib_libs $LIBS"
3230 libs_qga="$glib_libs $libs_qga"
3231 else
3232 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3233 fi
3234done
3235
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003236# Sanity check that the current size_t matches the
3237# size that glib thinks it should be. This catches
3238# problems on multi-arch where people try to build
3239# 32-bit QEMU while pointing at 64-bit glib headers
3240cat > $TMPC <<EOF
3241#include <glib.h>
3242#include <unistd.h>
3243
3244#define QEMU_BUILD_BUG_ON(x) \
3245 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3246
3247int main(void) {
3248 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3249 return 0;
3250}
3251EOF
3252
Stefan Weil5919e032016-04-28 23:33:41 +02003253if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003254 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3255 "You probably need to set PKG_CONFIG_LIBDIR"\
3256 "to point to the right pkg-config files for your"\
3257 "build target"
3258fi
3259
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003260# g_test_trap_subprocess added in 2.38. Used by some tests.
3261glib_subprocess=yes
Marc-André Lureaua0492232017-01-04 21:57:22 +01003262if ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003263 glib_subprocess=no
3264fi
3265
John Snowbbbf2e02015-03-25 18:57:38 -04003266# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3267cat > $TMPC << EOF
3268#include <glib.h>
3269int main(void) { return 0; }
3270EOF
3271if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3272 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3273 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3274 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3275 fi
3276fi
3277
Fam Zhenge26110c2014-02-10 14:48:57 +08003278##########################################
3279# SHA command probe for modules
3280if test "$modules" = yes; then
3281 shacmd_probe="sha1sum sha1 shasum"
3282 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003283 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003284 shacmd="$c"
3285 break
3286 fi
3287 done
3288 if test "$shacmd" = ""; then
3289 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3290 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003291fi
3292
3293##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003294# pixman support probe
3295
3296if test "$pixman" = ""; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003297 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3298 pixman="none"
Hu Tao236f2822014-09-15 11:41:10 +08003299 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003300 pixman="system"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003301 fi
3302fi
Robert Schiele74880fe2012-12-04 16:58:08 +01003303if test "$pixman" = "none"; then
3304 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003305 error_exit "pixman disabled but system emulation or tools build" \
3306 "enabled. You can turn off pixman only if you also" \
3307 "disable all system emulation targets and the tools" \
3308 "build with '--disable-tools --disable-system'."
Robert Schiele74880fe2012-12-04 16:58:08 +01003309 fi
3310 pixman_cflags=
3311 pixman_libs=
3312elif test "$pixman" = "system"; then
Hu Tao236f2822014-09-15 11:41:10 +08003313 # pixman version has been checked above
Stefan Weil89138852016-05-16 15:10:20 +02003314 pixman_cflags=$($pkg_config --cflags pixman-1)
3315 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003316else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003317 error_exit "pixman >= 0.21.8 not present." \
3318 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003319fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003320
3321##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303322# libcap probe
3323
3324if test "$cap" != "no" ; then
3325 cat > $TMPC <<EOF
3326#include <stdio.h>
3327#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003328int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303329EOF
3330 if compile_prog "" "-lcap" ; then
3331 cap=yes
3332 else
3333 cap=no
3334 fi
3335fi
3336
3337##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003338# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003339PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003340
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003341pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003342cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003343#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003344static void *f(void *p) { return NULL; }
3345int main(void) {
3346 pthread_t thread;
3347 pthread_create(&thread, 0, f, 0);
3348 return 0;
3349}
blueswir1414f0da2008-08-15 18:20:52 +00003350EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003351if compile_prog "" "" ; then
3352 pthread=yes
3353else
3354 for pthread_lib in $PTHREADLIBS_LIST; do
3355 if compile_prog "" "$pthread_lib" ; then
3356 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003357 found=no
3358 for lib_entry in $LIBS; do
3359 if test "$lib_entry" = "$pthread_lib"; then
3360 found=yes
3361 break
3362 fi
3363 done
3364 if test "$found" = "no"; then
3365 LIBS="$pthread_lib $LIBS"
3366 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003367 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003368 break
3369 fi
3370 done
3371fi
blueswir1414f0da2008-08-15 18:20:52 +00003372
Anthony Liguori4617e592009-08-25 17:21:56 -05003373if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003374 error_exit "pthread check failed" \
3375 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003376fi
3377
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003378# check for pthread_setname_np
3379pthread_setname_np=no
3380cat > $TMPC << EOF
3381#include <pthread.h>
3382
3383static void *f(void *p) { return NULL; }
3384int main(void)
3385{
3386 pthread_t thread;
3387 pthread_create(&thread, 0, f, 0);
3388 pthread_setname_np(thread, "QEMU");
3389 return 0;
3390}
3391EOF
3392if compile_prog "" "$pthread_lib" ; then
3393 pthread_setname_np=yes
3394fi
3395
aliguoribf9298b2008-12-05 20:05:26 +00003396##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003397# rbd probe
3398if test "$rbd" != "no" ; then
3399 cat > $TMPC <<EOF
3400#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003401#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003402int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003403 rados_t cluster;
3404 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003405 return 0;
3406}
3407EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003408 rbd_libs="-lrbd -lrados"
3409 if compile_prog "" "$rbd_libs" ; then
3410 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003411 else
3412 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003413 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003414 fi
3415 rbd=no
3416 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003417fi
3418
3419##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003420# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003421min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003422if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003423 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003424 libssh2_cflags=$($pkg_config libssh2 --cflags)
3425 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003426 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003427 else
3428 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003429 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003430 fi
3431 libssh2=no
3432 fi
3433fi
3434
3435##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003436# libssh2_sftp_fsync probe
3437
3438if test "$libssh2" = "yes"; then
3439 cat > $TMPC <<EOF
3440#include <stdio.h>
3441#include <libssh2.h>
3442#include <libssh2_sftp.h>
3443int main(void) {
3444 LIBSSH2_SESSION *session;
3445 LIBSSH2_SFTP *sftp;
3446 LIBSSH2_SFTP_HANDLE *sftp_handle;
3447 session = libssh2_session_init ();
3448 sftp = libssh2_sftp_init (session);
3449 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3450 libssh2_sftp_fsync (sftp_handle);
3451 return 0;
3452}
3453EOF
3454 # libssh2_cflags/libssh2_libs defined in previous test.
3455 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3456 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3457 fi
3458fi
3459
3460##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003461# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003462
3463if test "$linux_aio" != "no" ; then
3464 cat > $TMPC <<EOF
3465#include <libaio.h>
3466#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003467#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003468int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3469EOF
3470 if compile_prog "" "-laio" ; then
3471 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003472 else
3473 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003474 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003475 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003476 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003477 fi
3478fi
3479
3480##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003481# TPM passthrough is only on x86 Linux
3482
3483if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3484 tpm_passthrough=$tpm
3485else
3486 tpm_passthrough=no
3487fi
3488
3489##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003490# attr probe
3491
3492if test "$attr" != "no" ; then
3493 cat > $TMPC <<EOF
3494#include <stdio.h>
3495#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003496#ifdef CONFIG_LIBATTR
3497#include <attr/xattr.h>
3498#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003499#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003500#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003501int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3502EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003503 if compile_prog "" "" ; then
3504 attr=yes
3505 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003506 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003507 attr=yes
3508 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003509 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003510 else
3511 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003512 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003513 fi
3514 attr=no
3515 fi
3516fi
3517
3518##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003519# iovec probe
3520cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003521#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003522#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003523#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003524int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003525EOF
3526iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003527if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003528 iovec=yes
3529fi
3530
aurel32f652e6a2008-12-16 10:43:48 +00003531##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003532# preadv probe
3533cat > $TMPC <<EOF
3534#include <sys/types.h>
3535#include <sys/uio.h>
3536#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003537int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003538EOF
3539preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003540if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003541 preadv=yes
3542fi
3543
3544##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003545# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003546# fdt support is mandatory for at least some target architectures,
3547# so insist on it if we're building those system emulators.
3548fdt_required=no
3549for target in $target_list; do
3550 case $target in
Paul Burtondf1d8a12016-09-08 15:51:58 +01003551 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003552 fdt_required=yes
3553 ;;
3554 esac
3555done
3556
3557if test "$fdt_required" = "yes"; then
3558 if test "$fdt" = "no"; then
3559 error_exit "fdt disabled but some requested targets require it." \
3560 "You can turn off fdt only if you also disable all the system emulation" \
3561 "targets which need it (by specifying a cut down --target-list)."
3562 fi
3563 fdt=yes
3564fi
3565
Juan Quintela2df87df2009-08-12 18:29:54 +02003566if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003567 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003568 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003569 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003570 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003571#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003572#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003573int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003574EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003575 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003576 # system DTC is good - use it
aurel32f652e6a2008-12-16 10:43:48 +00003577 fdt=yes
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003578 elif test -d ${source_path}/dtc/libfdt ; then
3579 # have submodule DTC - use it
3580 fdt=yes
3581 dtc_internal="yes"
3582 mkdir -p dtc
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03003583 if [ "$pwd_is_source_path" != "y" ] ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003584 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3585 symlink "$source_path/dtc/scripts" "dtc/scripts"
Juan Quintela2df87df2009-08-12 18:29:54 +02003586 fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003587 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3588 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3589 elif test "$fdt" = "yes" ; then
3590 # have neither and want - prompt for system/submodule install
Paul Burton6e85fce2016-09-08 15:51:55 +01003591 error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \
Stewart Smith3f281822014-01-24 12:39:06 +11003592 " (1) Preferred: Install the DTC (libfdt) devel package" \
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003593 " (2) Fetch the DTC submodule, using:" \
3594 " git submodule update --init dtc"
3595 else
3596 # don't have and don't want
Michael Wallede3a3542011-04-26 00:24:07 +02003597 fdt_libs=
Juan Quintela2df87df2009-08-12 18:29:54 +02003598 fdt=no
aurel32f652e6a2008-12-16 10:43:48 +00003599 fi
3600fi
3601
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003602libs_softmmu="$libs_softmmu $fdt_libs"
3603
Michael Walle20ff0752011-03-07 23:32:39 +01003604##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003605# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003606
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003607if test "$opengl" != "no" ; then
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003608 opengl_pkgs="epoxy libdrm gbm"
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003609 if $pkg_config $opengl_pkgs x11; then
Jeremy Whitef676c672015-01-09 13:08:49 -06003610 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3611 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003612 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003613 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3614 gtk_gl="yes"
3615 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003616 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003617 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003618 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003619 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003620 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003621 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003622 opengl_libs=""
3623 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003624 fi
3625fi
3626
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003627if test "$opengl" = "yes"; then
3628 cat > $TMPC << EOF
3629#include <epoxy/egl.h>
3630#ifndef EGL_MESA_image_dma_buf_export
3631# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3632#endif
3633int main(void) { return 0; }
3634EOF
3635 if compile_prog "" "" ; then
3636 opengl_dmabuf=yes
3637 fi
3638fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003639
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003640
Bharata B Raoeb100392012-09-24 14:42:45 +05303641##########################################
3642# glusterfs probe
3643if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003644 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303645 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003646 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3647 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003648 if $pkg_config --atleast-version=4 glusterfs-api; then
3649 glusterfs_xlator_opt="yes"
3650 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003651 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303652 glusterfs_discard="yes"
3653 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303654 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05303655 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05303656 glusterfs_zerofill="yes"
3657 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303658 else
3659 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003660 feature_not_found "GlusterFS backend support" \
3661 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303662 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303663 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303664 fi
3665fi
3666
aurel3239386ac2009-04-15 19:48:17 +00003667# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003668# emulator. This is done because older glibc versions don't
3669# have syscall stubs for these implemented. In that case we
3670# don't provide them even if kernel supports them.
3671#
3672inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003673cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003674#include <sys/inotify.h>
3675
3676int
3677main(void)
3678{
3679 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003680 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003681}
3682EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003683if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003684 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003685fi
3686
Riku Voipioc05c7a72010-03-26 15:25:11 +00003687inotify1=no
3688cat > $TMPC << EOF
3689#include <sys/inotify.h>
3690
3691int
3692main(void)
3693{
3694 /* try to start inotify */
3695 return inotify_init1(0);
3696}
3697EOF
3698if compile_prog "" "" ; then
3699 inotify1=yes
3700fi
3701
Riku Voipio099d6b02009-05-05 12:10:04 +03003702# check if pipe2 is there
3703pipe2=no
3704cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003705#include <unistd.h>
3706#include <fcntl.h>
3707
3708int main(void)
3709{
3710 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003711 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003712}
3713EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003714if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003715 pipe2=yes
3716fi
3717
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003718# check if accept4 is there
3719accept4=no
3720cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003721#include <sys/socket.h>
3722#include <stddef.h>
3723
3724int main(void)
3725{
3726 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3727 return 0;
3728}
3729EOF
3730if compile_prog "" "" ; then
3731 accept4=yes
3732fi
3733
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303734# check if tee/splice is there. vmsplice was added same time.
3735splice=no
3736cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303737#include <unistd.h>
3738#include <fcntl.h>
3739#include <limits.h>
3740
3741int main(void)
3742{
Stefan Weil66ea0f22011-12-17 09:27:35 +01003743 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303744 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3745 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3746 return 0;
3747}
3748EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003749if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303750 splice=yes
3751fi
3752
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003753##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003754# libnuma probe
3755
3756if test "$numa" != "no" ; then
3757 cat > $TMPC << EOF
3758#include <numa.h>
3759int main(void) { return numa_available(); }
3760EOF
3761
3762 if compile_prog "" "-lnuma" ; then
3763 numa=yes
3764 libs_softmmu="-lnuma $libs_softmmu"
3765 else
3766 if test "$numa" = "yes" ; then
3767 feature_not_found "numa" "install numactl devel"
3768 fi
3769 numa=no
3770 fi
3771fi
3772
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003773if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3774 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3775 exit 1
3776fi
3777
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003778##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08003779# tcmalloc probe
3780
3781if test "$tcmalloc" = "yes" ; then
3782 cat > $TMPC << EOF
3783#include <stdlib.h>
3784int main(void) { malloc(1); return 0; }
3785EOF
3786
3787 if compile_prog "" "-ltcmalloc" ; then
3788 LIBS="-ltcmalloc $LIBS"
3789 else
3790 feature_not_found "tcmalloc" "install gperftools devel"
3791 fi
3792fi
3793
3794##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003795# jemalloc probe
3796
3797if test "$jemalloc" = "yes" ; then
3798 cat > $TMPC << EOF
3799#include <stdlib.h>
3800int main(void) { malloc(1); return 0; }
3801EOF
3802
3803 if compile_prog "" "-ljemalloc" ; then
3804 LIBS="-ljemalloc $LIBS"
3805 else
3806 feature_not_found "jemalloc" "install jemalloc devel"
3807 fi
3808fi
3809
3810##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003811# signalfd probe
3812signalfd="no"
3813cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003814#include <unistd.h>
3815#include <sys/syscall.h>
3816#include <signal.h>
3817int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3818EOF
3819
3820if compile_prog "" "" ; then
3821 signalfd=yes
3822fi
3823
Riku Voipioc2882b92009-08-12 15:08:24 +03003824# check if eventfd is supported
3825eventfd=no
3826cat > $TMPC << EOF
3827#include <sys/eventfd.h>
3828
3829int main(void)
3830{
Stefan Weil55cc7f32011-12-17 09:27:37 +01003831 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03003832}
3833EOF
3834if compile_prog "" "" ; then
3835 eventfd=yes
3836fi
3837
Marc-André Lureau751bcc32015-10-09 17:17:16 +02003838# check if memfd is supported
3839memfd=no
3840cat > $TMPC << EOF
3841#include <sys/memfd.h>
3842
3843int main(void)
3844{
3845 return memfd_create("foo", MFD_ALLOW_SEALING);
3846}
3847EOF
3848if compile_prog "" "" ; then
3849 memfd=yes
3850fi
3851
3852
3853
Ulrich Hechtd0927932009-09-17 20:22:14 +03003854# check for fallocate
3855fallocate=no
3856cat > $TMPC << EOF
3857#include <fcntl.h>
3858
3859int main(void)
3860{
3861 fallocate(0, 0, 0, 0);
3862 return 0;
3863}
3864EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003865if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003866 fallocate=yes
3867fi
3868
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01003869# check for fallocate hole punching
3870fallocate_punch_hole=no
3871cat > $TMPC << EOF
3872#include <fcntl.h>
3873#include <linux/falloc.h>
3874
3875int main(void)
3876{
3877 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3878 return 0;
3879}
3880EOF
3881if compile_prog "" "" ; then
3882 fallocate_punch_hole=yes
3883fi
3884
Denis V. Lunevb953f072015-01-30 11:42:14 +03003885# check that fallocate supports range zeroing inside the file
3886fallocate_zero_range=no
3887cat > $TMPC << EOF
3888#include <fcntl.h>
3889#include <linux/falloc.h>
3890
3891int main(void)
3892{
3893 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3894 return 0;
3895}
3896EOF
3897if compile_prog "" "" ; then
3898 fallocate_zero_range=yes
3899fi
3900
Kevin Wolfed911432014-09-29 17:12:59 +02003901# check for posix_fallocate
3902posix_fallocate=no
3903cat > $TMPC << EOF
3904#include <fcntl.h>
3905
3906int main(void)
3907{
3908 posix_fallocate(0, 0, 0);
3909 return 0;
3910}
3911EOF
3912if compile_prog "" "" ; then
3913 posix_fallocate=yes
3914fi
3915
Peter Maydellc727f472011-01-06 11:05:10 +00003916# check for sync_file_range
3917sync_file_range=no
3918cat > $TMPC << EOF
3919#include <fcntl.h>
3920
3921int main(void)
3922{
3923 sync_file_range(0, 0, 0, 0);
3924 return 0;
3925}
3926EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003927if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00003928 sync_file_range=yes
3929fi
3930
Peter Maydelldace20d2011-01-10 13:11:24 +00003931# check for linux/fiemap.h and FS_IOC_FIEMAP
3932fiemap=no
3933cat > $TMPC << EOF
3934#include <sys/ioctl.h>
3935#include <linux/fs.h>
3936#include <linux/fiemap.h>
3937
3938int main(void)
3939{
3940 ioctl(0, FS_IOC_FIEMAP, 0);
3941 return 0;
3942}
3943EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003944if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00003945 fiemap=yes
3946fi
3947
Ulrich Hechtd0927932009-09-17 20:22:14 +03003948# check for dup3
3949dup3=no
3950cat > $TMPC << EOF
3951#include <unistd.h>
3952
3953int main(void)
3954{
3955 dup3(0, 0, 0);
3956 return 0;
3957}
3958EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01003959if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003960 dup3=yes
3961fi
3962
Alex Bligh4e0c6522013-08-21 16:02:43 +01003963# check for ppoll support
3964ppoll=no
3965cat > $TMPC << EOF
3966#include <poll.h>
3967
3968int main(void)
3969{
3970 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3971 ppoll(&pfd, 1, 0, 0);
3972 return 0;
3973}
3974EOF
3975if compile_prog "" "" ; then
3976 ppoll=yes
3977fi
3978
Alex Blighcd758dd2013-08-21 16:02:44 +01003979# check for prctl(PR_SET_TIMERSLACK , ... ) support
3980prctl_pr_set_timerslack=no
3981cat > $TMPC << EOF
3982#include <sys/prctl.h>
3983
3984int main(void)
3985{
3986 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3987 return 0;
3988}
3989EOF
3990if compile_prog "" "" ; then
3991 prctl_pr_set_timerslack=yes
3992fi
3993
Peter Maydell3b6edd12011-02-15 18:35:05 +00003994# check for epoll support
3995epoll=no
3996cat > $TMPC << EOF
3997#include <sys/epoll.h>
3998
3999int main(void)
4000{
4001 epoll_create(0);
4002 return 0;
4003}
4004EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004005if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004006 epoll=yes
4007fi
4008
Peter Maydell227f0212016-06-06 19:58:11 +01004009# epoll_create1 is a later addition
4010# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004011epoll_create1=no
4012cat > $TMPC << EOF
4013#include <sys/epoll.h>
4014
4015int main(void)
4016{
Peter Maydell19e83f62011-04-26 16:56:40 +01004017 /* Note that we use epoll_create1 as a value, not as
4018 * a function being called. This is necessary so that on
4019 * old SPARC glibc versions where the function was present in
4020 * the library but not declared in the header file we will
4021 * fail the configure check. (Otherwise we will get a compiler
4022 * warning but not an error, and will proceed to fail the
4023 * qemu compile where we compile with -Werror.)
4024 */
Blue Swirlc075a722012-08-09 20:21:25 +00004025 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004026}
4027EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004028if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004029 epoll_create1=yes
4030fi
4031
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004032# check for sendfile support
4033sendfile=no
4034cat > $TMPC << EOF
4035#include <sys/sendfile.h>
4036
4037int main(void)
4038{
4039 return sendfile(0, 0, 0, 0);
4040}
4041EOF
4042if compile_prog "" "" ; then
4043 sendfile=yes
4044fi
4045
Riku Voipio51834342014-06-22 11:25:42 +01004046# check for timerfd support (glibc 2.8 and newer)
4047timerfd=no
4048cat > $TMPC << EOF
4049#include <sys/timerfd.h>
4050
4051int main(void)
4052{
4053 return(timerfd_create(CLOCK_REALTIME, 0));
4054}
4055EOF
4056if compile_prog "" "" ; then
4057 timerfd=yes
4058fi
4059
Riku Voipio9af5c902014-08-12 15:58:57 +03004060# check for setns and unshare support
4061setns=no
4062cat > $TMPC << EOF
4063#include <sched.h>
4064
4065int main(void)
4066{
4067 int ret;
4068 ret = setns(0, 0);
4069 ret = unshare(0);
4070 return ret;
4071}
4072EOF
4073if compile_prog "" "" ; then
4074 setns=yes
4075fi
4076
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004077# clock_adjtime probe
4078clock_adjtime=no
4079cat > $TMPC <<EOF
4080#include <time.h>
4081
4082int main(void)
4083{
4084 return clock_adjtime(0, 0);
4085}
4086EOF
4087clock_adjtime=no
4088if compile_prog "" "" ; then
4089 clock_adjtime=yes
4090fi
4091
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004092# syncfs probe
4093syncfs=no
4094cat > $TMPC <<EOF
4095#include <unistd.h>
4096
4097int main(void)
4098{
4099 return syncfs(0);
4100}
4101EOF
4102syncfs=no
4103if compile_prog "" "" ; then
4104 syncfs=yes
4105fi
4106
pbrookcc8ae6d2006-04-23 17:57:59 +00004107# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004108if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004109 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004110 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004111 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004112 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004113 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004114 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004115 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004116 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004117fi
4118
Stefan Weilf514f412009-10-11 12:44:07 +02004119# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004120byteswap_h=no
4121cat > $TMPC << EOF
4122#include <byteswap.h>
4123int main(void) { return bswap_32(0); }
4124EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004125if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004126 byteswap_h=yes
4127fi
4128
Stefan Weil75f13592013-01-05 12:17:38 +01004129# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004130bswap_h=no
4131cat > $TMPC << EOF
4132#include <sys/endian.h>
4133#include <sys/types.h>
4134#include <machine/bswap.h>
4135int main(void) { return bswap32(0); }
4136EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004137if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004138 bswap_h=yes
4139fi
4140
aliguorida93a1f2008-12-12 20:02:52 +00004141##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004142# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004143if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004144 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004145 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004146 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4147 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004148 else
4149 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004150 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004151 fi
4152 libiscsi="no"
4153 fi
4154fi
4155
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004156##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004157# Do we need libm
4158cat > $TMPC << EOF
4159#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004160int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004161EOF
4162if compile_prog "" "" ; then
4163 :
4164elif compile_prog "" "-lm" ; then
4165 LIBS="-lm $LIBS"
4166 libs_qga="-lm $libs_qga"
4167else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004168 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004169fi
4170
4171##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004172# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004173# uClibc provides 2 versions of clock_gettime(), one with realtime
4174# support and one without. This means that the clock_gettime() don't
4175# need -lrt. We still need it for timer_create() so we check for this
4176# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004177cat > $TMPC <<EOF
4178#include <signal.h>
4179#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004180int main(void) {
4181 timer_create(CLOCK_REALTIME, NULL, NULL);
4182 return clock_gettime(CLOCK_REALTIME, NULL);
4183}
aliguorida93a1f2008-12-12 20:02:52 +00004184EOF
4185
Juan Quintela52166aa2009-08-03 14:46:03 +02004186if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004187 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004188# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004189elif compile_prog "" "$pthread_lib -lrt" ; then
4190 LIBS="$LIBS -lrt"
4191 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004192fi
4193
Blue Swirl31ff5042009-09-12 12:33:07 +00004194if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004195 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004196 libs_softmmu="-lutil $libs_softmmu"
4197fi
4198
Blue Swirlde5071c2009-09-12 09:58:46 +00004199##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004200# spice probe
4201if test "$spice" != "no" ; then
4202 cat > $TMPC << EOF
4203#include <spice.h>
4204int main(void) { spice_server_new(); return 0; }
4205EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004206 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4207 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004208 if $pkg_config --atleast-version=0.12.0 spice-server && \
4209 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004210 compile_prog "$spice_cflags" "$spice_libs" ; then
4211 spice="yes"
4212 libs_softmmu="$libs_softmmu $spice_libs"
4213 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004214 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4215 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004216 else
4217 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004218 feature_not_found "spice" \
4219 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004220 fi
4221 spice="no"
4222 fi
4223fi
4224
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004225# check for smartcard support
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004226smartcard_cflags=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004227if test "$smartcard" != "no"; then
4228 if $pkg_config libcacard; then
4229 libcacard_cflags=$($pkg_config --cflags libcacard)
4230 libcacard_libs=$($pkg_config --libs libcacard)
4231 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4232 libs_softmmu="$libs_softmmu $libcacard_libs"
4233 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004234 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004235 if test "$smartcard" = "yes"; then
4236 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004237 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004238 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004239 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004240fi
4241
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004242# check for libusb
4243if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004244 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004245 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004246 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4247 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004248 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4249 libs_softmmu="$libs_softmmu $libusb_libs"
4250 else
4251 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004252 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004253 fi
4254 libusb="no"
4255 fi
4256fi
4257
Hans de Goede69354a82011-07-19 11:04:10 +02004258# check for usbredirparser for usb network redirection support
4259if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004260 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004261 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004262 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4263 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004264 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
Aurelien Jarno56ab2ad2012-09-11 20:57:58 +02004265 libs_softmmu="$libs_softmmu $usb_redir_libs"
Hans de Goede69354a82011-07-19 11:04:10 +02004266 else
4267 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004268 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004269 fi
4270 usb_redir="no"
4271 fi
4272fi
4273
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004274##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004275# check if we have VSS SDK headers for win
4276
4277if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4278 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004279 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004280 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4281 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004282 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004283 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4284 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004285 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004286 esac
4287 cat > $TMPC << EOF
4288#define __MIDL_user_allocate_free_DEFINED__
4289#include <inc/win2003/vss.h>
4290int main(void) { return VSS_CTX_BACKUP; }
4291EOF
4292 if compile_prog "$vss_win32_include" "" ; then
4293 guest_agent_with_vss="yes"
4294 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004295 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004296 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004297 else
4298 if test "$vss_win32_sdk" != "" ; then
4299 echo "ERROR: Please download and install Microsoft VSS SDK:"
4300 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4301 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4302 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4303 echo "ERROR: The headers are extracted in the directory \`inc'."
4304 feature_not_found "VSS support"
4305 fi
4306 guest_agent_with_vss="no"
4307 fi
4308fi
4309
4310##########################################
4311# lookup Windows platform SDK (if not specified)
4312# The SDK is needed only to build .tlb (type library) file of guest agent
4313# VSS provider from the source. It is usually unnecessary because the
4314# pre-compiled .tlb file is included.
4315
4316if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4317 if test -z "$win_sdk"; then
4318 programfiles="$PROGRAMFILES"
4319 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4320 if test -n "$programfiles"; then
4321 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4322 else
4323 feature_not_found "Windows SDK"
4324 fi
4325 elif test "$win_sdk" = "no"; then
4326 win_sdk=""
4327 fi
4328fi
4329
4330##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004331# check if mingw environment provides a recent ntddscsi.h
4332if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4333 cat > $TMPC << EOF
4334#include <windows.h>
4335#include <ntddscsi.h>
4336int main(void) {
4337#if !defined(IOCTL_SCSI_GET_ADDRESS)
4338#error Missing required ioctl definitions
4339#endif
4340 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4341 return addr.Lun;
4342}
4343EOF
4344 if compile_prog "" "" ; then
4345 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004346 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004347 fi
4348fi
4349
4350##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004351# virgl renderer probe
4352
4353if test "$virglrenderer" != "no" ; then
4354 cat > $TMPC << EOF
4355#include <virglrenderer.h>
4356int main(void) { virgl_renderer_poll(); return 0; }
4357EOF
4358 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4359 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4360 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4361 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4362 virglrenderer="yes"
4363 else
4364 if test "$virglrenderer" = "yes" ; then
4365 feature_not_found "virglrenderer"
4366 fi
4367 virglrenderer="no"
4368 fi
4369fi
4370
4371##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004372# check if we have fdatasync
4373
4374fdatasync=no
4375cat > $TMPC << EOF
4376#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004377int main(void) {
4378#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4379return fdatasync(0);
4380#else
Stefan Weile172fe12012-04-06 21:33:20 +02004381#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004382#endif
4383}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004384EOF
4385if compile_prog "" "" ; then
4386 fdatasync=yes
4387fi
4388
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004389##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004390# check if we have madvise
4391
4392madvise=no
4393cat > $TMPC << EOF
4394#include <sys/types.h>
4395#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004396#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004397int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4398EOF
4399if compile_prog "" "" ; then
4400 madvise=yes
4401fi
4402
4403##########################################
4404# check if we have posix_madvise
4405
4406posix_madvise=no
4407cat > $TMPC << EOF
4408#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004409#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004410int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4411EOF
4412if compile_prog "" "" ; then
4413 posix_madvise=yes
4414fi
4415
4416##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004417# check if we have posix_syslog
4418
4419posix_syslog=no
4420cat > $TMPC << EOF
4421#include <syslog.h>
4422int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4423EOF
4424if compile_prog "" "" ; then
4425 posix_syslog=yes
4426fi
4427
4428##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004429# check if trace backend exists
4430
Lluís Vilanova5b808272014-05-27 15:02:14 +02004431$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004432if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004433 error_exit "invalid trace backends" \
4434 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004435fi
4436
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004437##########################################
4438# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004439if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004440 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004441#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004442int main(void) { return 0; }
4443EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004444 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004445 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004446 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004447 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004448 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004449 fi
4450 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004451 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004452 else
4453 urcu_bp_libs="-lurcu-bp"
4454 fi
4455
4456 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4457 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004458 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004459 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004460 fi
4461fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004462
4463##########################################
4464# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004465if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004466 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004467 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004468 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004469 trace_backend_stap="no"
4470 if has 'stap' ; then
4471 trace_backend_stap="yes"
4472 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004473fi
4474
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004475##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004476# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304477
Peter Maydell7c2acc72013-04-08 12:11:27 +01004478# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004479# is sigcontext. On Windows the only valid backend is the Windows
4480# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004481
4482ucontext_works=no
4483if test "$darwin" != "yes"; then
4484 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304485#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004486#ifdef __stub_makecontext
4487#error Ignoring glibc stub makecontext which will always fail
4488#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004489int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304490EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004491 if compile_prog "" "" ; then
4492 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304493 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004494fi
4495
4496if test "$coroutine" = ""; then
4497 if test "$mingw32" = "yes"; then
4498 coroutine=win32
4499 elif test "$ucontext_works" = "yes"; then
4500 coroutine=ucontext
4501 else
4502 coroutine=sigaltstack
4503 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004504else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004505 case $coroutine in
4506 windows)
4507 if test "$mingw32" != "yes"; then
4508 error_exit "'windows' coroutine backend only valid for Windows"
4509 fi
4510 # Unfortunately the user visible backend name doesn't match the
4511 # coroutine-*.c filename for this case, so we have to adjust it here.
4512 coroutine=win32
4513 ;;
4514 ucontext)
4515 if test "$ucontext_works" != "yes"; then
4516 feature_not_found "ucontext"
4517 fi
4518 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004519 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004520 if test "$mingw32" = "yes"; then
4521 error_exit "only the 'windows' coroutine backend is valid for Windows"
4522 fi
4523 ;;
4524 *)
4525 error_exit "unknown coroutine backend $coroutine"
4526 ;;
4527 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304528fi
4529
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004530if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004531 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004532fi
4533
Peter Lieven7d992e42016-09-27 11:58:45 +02004534if test "$debug_stack_usage" = "yes"; then
4535 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4536 error_exit "stack usage debugging is not supported for $cpu"
4537 fi
4538 if test "$coroutine_pool" = "yes"; then
4539 echo "WARN: disabling coroutine pool for stack usage debugging"
4540 coroutine_pool=no
4541 fi
4542fi
4543
4544
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304545##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304546# check if we have open_by_handle_at
4547
Stefan Weil4e1797f2012-06-18 22:11:06 +02004548open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304549cat > $TMPC << EOF
4550#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004551#if !defined(AT_EMPTY_PATH)
4552# error missing definition
4553#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004554int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004555#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304556EOF
4557if compile_prog "" "" ; then
4558 open_by_handle_at=yes
4559fi
4560
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304561########################################
4562# check if we have linux/magic.h
4563
4564linux_magic_h=no
4565cat > $TMPC << EOF
4566#include <linux/magic.h>
4567int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004568 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304569}
4570EOF
4571if compile_prog "" "" ; then
4572 linux_magic_h=yes
4573fi
4574
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004575########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004576# check whether we can disable warning option with a pragma (this is needed
4577# to silence warnings in the headers of some versions of external libraries).
4578# This test has to be compiled with -Werror as otherwise an unknown pragma is
4579# only a warning.
4580#
4581# If we can't selectively disable warning in the code, disable -Werror so that
4582# the build doesn't fail anyway.
4583
Peter Maydell06d71fa2012-07-30 16:13:07 +01004584pragma_disable_unused_but_set=no
4585cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004586#pragma GCC diagnostic push
Peter Maydell06d71fa2012-07-30 16:13:07 +01004587#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
Kevin Wolfc95e3082013-02-22 21:08:51 +01004588#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004589#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004590
Peter Maydell06d71fa2012-07-30 16:13:07 +01004591int main(void) {
4592 return 0;
4593}
4594EOF
4595if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004596 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004597else
4598 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004599fi
4600
4601########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004602# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004603
4604valgrind_h=no
4605cat > $TMPC << EOF
4606#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004607int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004608 return 0;
4609}
4610EOF
4611if compile_prog "" "" ; then
4612 valgrind_h=yes
4613fi
4614
4615########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004616# check if environ is declared
4617
4618has_environ=no
4619cat > $TMPC << EOF
4620#include <unistd.h>
4621int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00004622 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004623 return 0;
4624}
4625EOF
4626if compile_prog "" "" ; then
4627 has_environ=yes
4628fi
4629
Richard Henderson76a347e2012-12-28 14:17:02 -08004630########################################
4631# check if cpuid.h is usable.
4632
Richard Henderson76a347e2012-12-28 14:17:02 -08004633cat > $TMPC << EOF
4634#include <cpuid.h>
4635int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00004636 unsigned a, b, c, d;
4637 int max = __get_cpuid_max(0, 0);
4638
4639 if (max >= 1) {
4640 __cpuid(1, a, b, c, d);
4641 }
4642
4643 if (max >= 7) {
4644 __cpuid_count(7, 0, a, b, c, d);
4645 }
4646
4647 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08004648}
4649EOF
4650if compile_prog "" "" ; then
4651 cpuid_h=yes
4652fi
4653
Richard Henderson5dd89902017-07-18 18:40:18 -10004654##########################################
4655# avx2 optimization requirement check
4656#
4657# There is no point enabling this if cpuid.h is not usable,
4658# since we won't be able to select the new routines.
4659
4660if test $cpuid_h = yes; then
4661 cat > $TMPC << EOF
4662#pragma GCC push_options
4663#pragma GCC target("avx2")
4664#include <cpuid.h>
4665#include <immintrin.h>
4666static int bar(void *a) {
4667 __m256i x = *(__m256i *)a;
4668 return _mm256_testz_si256(x, x);
4669}
4670int main(int argc, char *argv[]) { return bar(argv[0]); }
4671EOF
4672 if compile_object "" ; then
4673 avx2_opt="yes"
4674 fi
4675fi
4676
Richard Hendersonf5401662013-02-16 12:46:59 -08004677########################################
4678# check if __[u]int128_t is usable.
4679
4680int128=no
4681cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01004682#if defined(__clang_major__) && defined(__clang_minor__)
4683# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4684# error __int128_t does not work in CLANG before 3.2
4685# endif
4686#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08004687__int128_t a;
4688__uint128_t b;
4689int main (void) {
4690 a = a + b;
4691 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01004692 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08004693 return 0;
4694}
4695EOF
4696if compile_prog "" "" ; then
4697 int128=yes
4698fi
Richard Henderson76a347e2012-12-28 14:17:02 -08004699
Richard Henderson7ebee432016-06-29 21:10:59 -07004700#########################################
4701# See if 128-bit atomic operations are supported.
4702
4703atomic128=no
4704if test "$int128" = "yes"; then
4705 cat > $TMPC << EOF
4706int main(void)
4707{
4708 unsigned __int128 x = 0, y = 0;
4709 y = __atomic_load_16(&x, 0);
4710 __atomic_store_16(&x, y, 0);
4711 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4712 return 0;
4713}
4714EOF
4715 if compile_prog "" "" ; then
4716 atomic128=yes
4717 fi
4718fi
4719
Richard Hendersondf79b992016-09-02 12:23:57 -07004720#########################################
4721# See if 64-bit atomic operations are supported.
4722# Note that without __atomic builtins, we can only
4723# assume atomic loads/stores max at pointer size.
4724
4725cat > $TMPC << EOF
4726#include <stdint.h>
4727int main(void)
4728{
4729 uint64_t x = 0, y = 0;
4730#ifdef __ATOMIC_RELAXED
4731 y = __atomic_load_8(&x, 0);
4732 __atomic_store_8(&x, y, 0);
4733 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4734 __atomic_exchange_8(&x, y, 0);
4735 __atomic_fetch_add_8(&x, y, 0);
4736#else
4737 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4738 __sync_lock_test_and_set(&x, y);
4739 __sync_val_compare_and_swap(&x, y, 0);
4740 __sync_fetch_and_add(&x, y);
4741#endif
4742 return 0;
4743}
4744EOF
4745if compile_prog "" "" ; then
4746 atomic64=yes
4747fi
4748
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08004749########################################
4750# check if getauxval is available.
4751
4752getauxval=no
4753cat > $TMPC << EOF
4754#include <sys/auxv.h>
4755int main(void) {
4756 return getauxval(AT_HWCAP) == 0;
4757}
4758EOF
4759if compile_prog "" "" ; then
4760 getauxval=yes
4761fi
4762
John Snowfd0e6052015-03-25 18:57:39 -04004763########################################
4764# check if ccache is interfering with
4765# semantic analysis of macros
4766
John Snow5e4dfd32015-10-28 13:56:40 -04004767unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04004768ccache_cpp2=no
4769cat > $TMPC << EOF
4770static const int Z = 1;
4771#define fn() ({ Z; })
4772#define TAUT(X) ((X) == Z)
4773#define PAREN(X, Y) (X == Y)
4774#define ID(X) (X)
4775int main(int argc, char *argv[])
4776{
4777 int x = 0, y = 0;
4778 x = ID(x);
4779 x = fn();
4780 fn();
4781 if (PAREN(x, y)) return 0;
4782 if (TAUT(Z)) return 0;
4783 return 0;
4784}
4785EOF
4786
4787if ! compile_object "-Werror"; then
4788 ccache_cpp2=yes
4789fi
4790
John Snowb553a042015-11-03 15:43:42 -05004791#################################################
4792# clang does not support glibc + FORTIFY_SOURCE.
4793
4794if test "$fortify_source" != "no"; then
4795 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4796 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01004797 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05004798 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05004799 fortify_source="no";
4800 else
4801 fortify_source="yes"
4802 fi
4803fi
4804
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304805##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04004806# check if struct fsxattr is available via linux/fs.h
4807
4808have_fsxattr=no
4809cat > $TMPC << EOF
4810#include <linux/fs.h>
4811struct fsxattr foo;
4812int main(void) {
4813 return 0;
4814}
4815EOF
4816if compile_prog "" "" ; then
4817 have_fsxattr=yes
4818fi
4819
Peter Maydellb66e10e2016-06-08 18:34:32 +01004820##########################################
4821# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02004822have_rtnetlink=no
4823cat > $TMPC << EOF
4824#include <linux/rtnetlink.h>
4825int main(void) {
4826 return IFLA_PROTO_DOWN;
4827}
4828EOF
4829if compile_prog "" "" ; then
4830 have_rtnetlink=yes
4831fi
4832
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01004833##########################################
4834# check for usable AF_VSOCK environment
4835have_af_vsock=no
4836cat > $TMPC << EOF
4837#include <errno.h>
4838#include <sys/types.h>
4839#include <sys/socket.h>
4840#if !defined(AF_VSOCK)
4841# error missing AF_VSOCK flag
4842#endif
4843#include <linux/vm_sockets.h>
4844int main(void) {
4845 int sock, ret;
4846 struct sockaddr_vm svm;
4847 socklen_t len = sizeof(svm);
4848 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4849 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4850 if ((ret == -1) && (errno == ENOTCONN)) {
4851 return 0;
4852 }
4853 return -1;
4854}
4855EOF
4856if compile_prog "" "" ; then
4857 have_af_vsock=yes
4858fi
4859
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04004860##########################################
4861# check for usable AF_ALG environment
4862hava_afalg=no
4863cat > $TMPC << EOF
4864#include <errno.h>
4865#include <sys/types.h>
4866#include <sys/socket.h>
4867#include <linux/if_alg.h>
4868int main(void) {
4869 int sock;
4870 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
4871 return sock;
4872}
4873EOF
4874if compile_prog "" "" ; then
4875 have_afalg=yes
4876fi
4877if test "$crypto_afalg" = "yes"
4878then
4879 if test "$have_afalg" != "yes"
4880 then
4881 error_exit "AF_ALG requested but could not be detected"
4882 fi
4883fi
4884
4885
James Clarke6969ec62016-06-06 12:02:50 +01004886#################################################
4887# Sparc implicitly links with --relax, which is
4888# incompatible with -r, so --no-relax should be
4889# given. It does no harm to give it on other
4890# platforms too.
4891
4892# Note: the prototype is needed since QEMU_CFLAGS
4893# contains -Wmissing-prototypes
4894cat > $TMPC << EOF
4895extern int foo(void);
4896int foo(void) { return 0; }
4897EOF
4898if ! compile_object ""; then
4899 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4900fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01004901for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4902 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4903 LD_REL_FLAGS=$i
4904 break
4905 fi
4906done
4907if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4908 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01004909fi
4910
Jan Vesely277abf12016-04-29 13:15:23 -04004911##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05004912# check for sysmacros.h
4913
4914have_sysmacros=no
4915cat > $TMPC << EOF
4916#include <sys/sysmacros.h>
4917int main(void) {
4918 return makedev(0, 0);
4919}
4920EOF
4921if compile_prog "" "" ; then
4922 have_sysmacros=yes
4923fi
4924
4925##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07004926# Veritas HyperScale block driver VxHS
4927# Check if libvxhs is installed
4928
4929if test "$vxhs" != "no" ; then
4930 cat > $TMPC <<EOF
4931#include <stdint.h>
4932#include <qnio/qnio_api.h>
4933
4934void *vxhs_callback;
4935
4936int main(void) {
4937 iio_init(QNIO_VERSION, vxhs_callback);
4938 return 0;
4939}
4940EOF
4941 vxhs_libs="-lvxhs -lssl"
4942 if compile_prog "" "$vxhs_libs" ; then
4943 vxhs=yes
4944 else
4945 if test "$vxhs" = "yes" ; then
4946 feature_not_found "vxhs block device" "Install libvxhs See github"
4947 fi
4948 vxhs=no
4949 fi
4950fi
4951
4952##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01004953# check for _Static_assert()
4954
4955have_static_assert=no
4956cat > $TMPC << EOF
4957_Static_assert(1, "success");
4958int main(void) {
4959 return 0;
4960}
4961EOF
4962if compile_prog "" "" ; then
4963 have_static_assert=yes
4964fi
4965
4966##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02004967# check for utmpx.h, it is missing e.g. on OpenBSD
4968
4969have_utmpx=no
4970cat > $TMPC << EOF
4971#include <utmpx.h>
4972struct utmpx user_info;
4973int main(void) {
4974 return 0;
4975}
4976EOF
4977if compile_prog "" "" ; then
4978 have_utmpx=yes
4979fi
4980
4981##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02004982# End of CC checks
4983# After here, no more $cc or $ld runs
4984
Blue Swirl1d728c32012-05-01 18:45:39 +00004985if test "$gcov" = "yes" ; then
4986 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4987 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05004988elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02004989 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Peter Maydellce278612015-11-09 15:14:09 +00004990elif test "$debug" = "no"; then
4991 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02004992fi
Juan Quintelaa316e372009-09-30 01:10:55 +02004993
Peter Lieven6542aa92014-02-03 10:26:13 +01004994##########################################
4995# Do we have libnfs
4996if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01004997 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01004998 libnfs="yes"
4999 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005000 else
5001 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005002 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005003 fi
5004 libnfs="no"
5005 fi
5006fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005007
Peter Maydell6ca026c2012-07-18 15:10:18 +01005008# Now we've finished running tests it's OK to add -Werror to the compiler flags
5009if test "$werror" = "yes"; then
5010 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5011fi
5012
Juan Quintelae86ecd42009-08-03 14:45:59 +02005013if test "$solaris" = "no" ; then
5014 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005015 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005016 fi
5017fi
5018
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005019# test if pod2man has --utf8 option
5020if pod2man --help | grep -q utf8; then
5021 POD2MAN="pod2man --utf8"
5022else
5023 POD2MAN="pod2man"
5024fi
5025
Blue Swirl952afb72010-09-19 08:36:34 +00005026# Use ASLR, no-SEH and DEP if available
5027if test "$mingw32" = "yes" ; then
5028 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005029 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005030 LDFLAGS="-Wl,$flag $LDFLAGS"
5031 fi
5032 done
5033fi
5034
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005035qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005036qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005037qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005038qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005039
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005040# We can only support ivshmem if we have eventfd
5041if [ "$eventfd" = "yes" ]; then
5042 ivshmem=yes
5043fi
5044
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005045tools=""
5046if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02005047 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005048 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5049 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005050 fi
5051 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005052 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005053 fi
5054fi
5055if test "$softmmu" = yes ; then
Meador Inge983eef52012-02-24 14:00:42 +05305056 if test "$virtfs" != no ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005057 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
5058 virtfs=yes
5059 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5060 else
5061 if test "$virtfs" = yes; then
Stefan Weil3f3b5382016-04-08 18:11:13 +02005062 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305063 fi
Andreas Färber17500372012-05-01 01:12:03 +02005064 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005065 fi
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305066 fi
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005067fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005068
5069# Probe for guest agent support/options
5070
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005071if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005072 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005073 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005074 guest_agent=yes
5075 elif [ "$guest_agent" != yes ]; then
5076 guest_agent=no
5077 else
5078 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005079 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005080fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005081
Michael Roth9d6bc272015-08-26 10:49:13 -05005082# Guest agent Window MSI package
5083
5084if test "$guest_agent" != yes; then
5085 if test "$guest_agent_msi" = yes; then
5086 error_exit "MSI guest agent package requires guest agent enabled"
5087 fi
5088 guest_agent_msi=no
5089elif test "$mingw32" != "yes"; then
5090 if test "$guest_agent_msi" = "yes"; then
5091 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5092 fi
5093 guest_agent_msi=no
5094elif ! has wixl; then
5095 if test "$guest_agent_msi" = "yes"; then
5096 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5097 fi
5098 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005099else
5100 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5101 # disabled explicitly
5102 if test "$guest_agent_msi" != "no"; then
5103 guest_agent_msi=yes
5104 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005105fi
5106
Michael Roth1a349042015-08-26 11:14:31 -05005107if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005108 if test "$guest_agent_with_vss" = "yes"; then
5109 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5110 fi
5111
5112 if test "$QEMU_GA_MANUFACTURER" = ""; then
5113 QEMU_GA_MANUFACTURER=QEMU
5114 fi
5115
5116 if test "$QEMU_GA_DISTRO" = ""; then
5117 QEMU_GA_DISTRO=Linux
5118 fi
5119
5120 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005121 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005122 fi
5123
Stefan Weil89138852016-05-16 15:10:20 +02005124 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005125
5126 case "$cpu" in
5127 x86_64)
5128 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5129 ;;
5130 i386)
5131 QEMU_GA_MSI_ARCH="-D Arch=32"
5132 ;;
5133 *)
5134 error_exit "CPU $cpu not supported for building installation package"
5135 ;;
5136 esac
5137fi
5138
Paolo Bonzinica35f782010-05-26 16:08:29 +02005139# Mac OS X ships with a broken assembler
5140roms=
5141if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5142 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5143 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005144 # Different host OS linkers have different ideas about the name of the ELF
5145 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
5146 # variant; and Windows uses i386pe.
5147 for emu in elf_i386 elf_i386_fbsd i386pe; do
5148 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5149 ld_i386_emulation="$emu"
5150 roms="optionrom"
5151 break
5152 fi
5153 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005154fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005155if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005156 roms="$roms spapr-rtas"
5157fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005158
Christian Borntraeger9933c302013-04-23 01:23:03 +00005159if test "$cpu" = "s390x" ; then
5160 roms="$roms s390-ccw"
5161fi
5162
Richard Henderson964c6fa2013-06-21 19:10:16 -07005163# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005164if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005165 textseg_addr=
5166 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005167 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5168 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005169 textseg_addr=0x60000000
5170 ;;
5171 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005172 # A 256M aligned address, high in the address space, with enough
5173 # room for the code_gen_buffer above it before the stack.
5174 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005175 ;;
5176 esac
5177 if [ -n "$textseg_addr" ]; then
5178 cat > $TMPC <<EOF
5179 int main(void) { return 0; }
5180EOF
5181 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5182 if ! compile_prog "" "$textseg_ldflags"; then
5183 # In case ld does not support -Ttext-segment, edit the default linker
5184 # script via sed to set the .text start addr. This is needed on FreeBSD
5185 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005186 if ! $ld --verbose >/dev/null 2>&1; then
5187 error_exit \
5188 "We need to link the QEMU user mode binaries at a" \
5189 "specific text address. Unfortunately your linker" \
5190 "doesn't support either the -Ttext-segment option or" \
5191 "printing the default linker script with --verbose." \
5192 "If you don't want the user mode binaries, pass the" \
5193 "--disable-user option to configure."
5194 fi
5195
Richard Henderson964c6fa2013-06-21 19:10:16 -07005196 $ld --verbose | sed \
5197 -e '1,/==================================================/d' \
5198 -e '/==================================================/,$d' \
5199 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5200 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5201 textseg_ldflags="-Wl,-T../config-host.ld"
5202 fi
5203 fi
5204fi
5205
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005206# Check that the C++ compiler exists and works with the C compiler.
5207# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5208if has $cxx; then
5209 cat > $TMPC <<EOF
5210int c_function(void);
5211int main(void) { return c_function(); }
5212EOF
5213
5214 compile_object
5215
5216 cat > $TMPCXX <<EOF
5217extern "C" {
5218 int c_function(void);
5219}
5220int c_function(void) { return 42; }
5221EOF
5222
5223 update_cxxflags
5224
5225 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5226 # C++ compiler $cxx works ok with C compiler $cc
5227 :
5228 else
5229 echo "C++ compiler $cxx does not work with C compiler $cc"
5230 echo "Disabling C++ specific optional code"
5231 cxx=
5232 fi
5233else
5234 echo "No C++ compiler available; disabling C++ specific optional code"
5235 cxx=
5236fi
5237
Cole Robinson02d34f62016-05-06 14:03:09 -04005238echo_version() {
5239 if test "$1" = "yes" ; then
5240 echo "($2)"
5241 fi
5242}
5243
Jan Kiszka50e12062014-10-02 10:03:55 +02005244# prepend pixman and ftd flags after all config tests are done
5245QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5246libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005247
bellard43ce4df2003-06-09 19:53:12 +00005248echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005249echo "BIOS directory $(eval echo $qemu_datadir)"
5250echo "binary directory $(eval echo $bindir)"
5251echo "library directory $(eval echo $libdir)"
5252echo "module directory $(eval echo $qemu_moddir)"
5253echo "libexec directory $(eval echo $libexecdir)"
5254echo "include directory $(eval echo $includedir)"
5255echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005256if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005257echo "local state directory $(eval echo $local_statedir)"
5258echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005259echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005260else
5261echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005262echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005263fi
bellard5a671352003-10-01 00:13:48 +00005264echo "Source path $source_path"
bellard43ce4df2003-06-09 19:53:12 +00005265echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005266echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005267echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005268echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005269echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005270echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005271echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005272echo "LDFLAGS $LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005273echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005274echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005275echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005276if test "$slirp" = "yes" ; then
5277 echo "smbd $smbd"
5278fi
Fam Zheng17969262014-02-10 14:48:56 +08005279echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005280echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005281echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005282echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005283echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005284echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005285echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005286echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005287echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005288if test "$darwin" = "yes" ; then
5289 echo "Cocoa support $cocoa"
5290fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02005291echo "pixman $pixman"
Stefan Weil89138852016-05-16 15:10:20 +02005292echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5293echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005294echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005295echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005296echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005297echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005298echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005299echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005300echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02005301echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005302echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005303echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005304echo "curses support $curses"
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005305echo "virgl support $virglrenderer"
Alexander Graf769ce762009-05-11 17:41:42 +02005306echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005307echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005308echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005309echo "Block whitelist (rw) $block_drv_rw_whitelist"
5310echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305311echo "VirtFS support $virtfs"
Jes Sorensen821601e2011-03-16 13:33:36 +01005312echo "VNC support $vnc"
5313if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005314 echo "VNC SASL support $vnc_sasl"
5315 echo "VNC JPEG support $vnc_jpeg"
5316 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005317fi
blueswir131422552007-04-16 18:27:06 +00005318if test -n "$sparc_cpu"; then
5319 echo "Target Sparc Arch $sparc_cpu"
5320fi
aliguorie37630c2009-04-22 15:19:10 +00005321echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005322if test "$xen" = "yes" ; then
5323 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005324 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005325fi
aurel322e4d9fb2008-04-08 06:01:02 +00005326echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005327echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005328echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005329echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005330echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005331echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005332echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005333echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005334echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005335echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01005336echo "HAX support $hax"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005337echo "TCG support $tcg"
5338if test "$tcg" = "yes" ; then
5339 echo "TCG debug enabled $debug_tcg"
5340 echo "TCG interpreter $tcg_interpreter"
5341fi
Michael R. Hines2da776d2013-07-22 10:01:54 -04005342echo "RDMA support $rdma"
aurel32f652e6a2008-12-16 10:43:48 +00005343echo "fdt support $fdt"
aliguoriceb42de2009-04-07 18:43:28 +00005344echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005345echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005346echo "madvise $madvise"
5347echo "posix_madvise $posix_madvise"
Corey Bryant47e98652012-01-26 09:42:26 -05005348echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005349echo "vhost-net support $vhost_net"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005350echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005351echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005352echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005353echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005354if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005355echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005356fi
Stefan Weil89138852016-05-16 15:10:20 +02005357echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005358echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005359echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005360echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005361echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005362echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005363echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005364echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005365echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01005366echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05005367echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005368echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05005369echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05005370echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03005371echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01005372echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005373echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02005374echo "debug stack usage $debug_stack_usage"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005375echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05305376echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00005377echo "gcov $gcov_tool"
5378echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05005379echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005380echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005381echo "TPM passthrough $tpm_passthrough"
Paolo Bonzini3556c232013-05-10 14:16:40 +02005382echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01005383echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08005384echo "lzo support $lzo"
5385echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01005386echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08005387echo "NUMA host support $numa"
Fam Zheng2847b462015-03-26 11:03:12 +08005388echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02005389echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08005390echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005391echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005392echo "VxHS block device $vxhs"
bellard67b915a2004-03-31 23:37:16 +00005393
Stefan Weil1ba16962011-07-29 22:40:45 +02005394if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00005395echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00005396fi
bellard97a847b2003-08-10 21:36:04 +00005397
Peter Maydell898be3e2017-03-21 14:31:57 +00005398if test "$supported_cpu" = "no"; then
5399 echo
5400 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5401 echo
5402 echo "CPU host architecture $cpu support is not currently maintained."
5403 echo "The QEMU project intends to remove support for this host CPU in"
5404 echo "a future release if nobody volunteers to maintain it and to"
5405 echo "provide a build host for our continuous integration setup."
5406 echo "configure has succeeded and you can continue to build, but"
5407 echo "if you care about QEMU on this platform you should contact"
5408 echo "us upstream at qemu-devel@nongnu.org."
5409fi
5410
5411if test "$supported_os" = "no"; then
5412 echo
5413 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5414 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00005415 echo "Host OS $targetos support is not currently maintained."
5416 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00005417 echo "a future release if nobody volunteers to maintain it and to"
5418 echo "provide a build host for our continuous integration setup."
5419 echo "configure has succeeded and you can continue to build, but"
5420 echo "if you care about QEMU on this platform you should contact"
5421 echo "us upstream at qemu-devel@nongnu.org."
5422fi
5423
Juan Quintela98ec69a2009-07-16 18:34:18 +02005424config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00005425
Stefan Weildbd99ae2013-01-01 18:33:44 +01005426echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5427
Juan Quintela98ec69a2009-07-16 18:34:18 +02005428echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005429echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005430
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02005431echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005432echo "prefix=$prefix" >> $config_host_mak
5433echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03005434echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04005435echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02005436echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005437echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005438echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03005439echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03005440echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5441echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08005442echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005443if test "$mingw32" = "no" ; then
5444 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5445fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04005446echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +01005447echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005448echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +01005449echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06005450echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02005451echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005452
Juan Quintela98ec69a2009-07-16 18:34:18 +02005453echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02005454
aurel32f8393942009-04-13 18:45:38 +00005455if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005456 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00005457fi
aliguori1625af82009-04-05 17:41:02 +00005458if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07005459 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00005460fi
bellard7d132992003-03-06 23:23:54 +00005461if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02005462 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005463fi
bellard67b915a2004-03-31 23:37:16 +00005464if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005465 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02005466 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00005467 version_major=${rc_version%%.*}
5468 rc_version=${rc_version#*.}
5469 version_minor=${rc_version%%.*}
5470 rc_version=${rc_version#*.}
5471 version_subminor=${rc_version%%.*}
5472 version_micro=0
5473 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5474 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005475 if test "$guest_agent_with_vss" = "yes" ; then
5476 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05005477 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005478 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5479 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05005480 if test "$guest_agent_ntddscsi" = "yes" ; then
5481 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5482 fi
Michael Roth1a349042015-08-26 11:14:31 -05005483 if test "$guest_agent_msi" = "yes"; then
Yossi Hindin9dacf322015-05-06 14:57:40 +03005484 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5485 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5486 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5487 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5488 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5489 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5490 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5491 fi
pbrook210fa552007-02-27 21:04:49 +00005492else
Juan Quintela35f4df22009-07-27 16:13:07 +02005493 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00005494fi
blueswir1128ab2f2008-08-15 18:33:42 +00005495
Mark McLoughlindffcb712009-10-22 17:49:11 +01005496if test "$linux" = "yes" ; then
5497 echo "CONFIG_LINUX=y" >> $config_host_mak
5498fi
5499
bellard83fb7ad2004-07-05 21:25:26 +00005500if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005501 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00005502fi
malcb29fe3e2008-11-18 01:42:22 +00005503
bellardec530c82006-04-25 22:36:06 +00005504if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005505 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00005506fi
Andreas Färber179cf402010-09-20 00:50:43 +02005507if test "$haiku" = "yes" ; then
5508 echo "CONFIG_HAIKU=y" >> $config_host_mak
5509fi
bellard97a847b2003-08-10 21:36:04 +00005510if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005511 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005512fi
Stefan Weil1ba16962011-07-29 22:40:45 +02005513if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005514 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00005515fi
bellardc20709a2004-04-21 23:27:19 +00005516if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005517 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04005518 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00005519fi
ths8a16d272008-07-19 09:56:24 +00005520if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005521 echo "CONFIG_VDE=y" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00005522fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01005523if test "$netmap" = "yes" ; then
5524 echo "CONFIG_NETMAP=y" >> $config_host_mak
5525fi
Gonglei015a33b2014-07-01 20:58:08 +08005526if test "$l2tpv3" = "yes" ; then
5527 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5528fi
Corey Bryant47e98652012-01-26 09:42:26 -05005529if test "$cap_ng" = "yes" ; then
5530 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5531fi
Juan Quintela2358a492009-07-27 16:13:25 +02005532echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005533for drv in $audio_drv_list; do
Stefan Weil89138852016-05-16 15:10:20 +02005534 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Juan Quintela98ec69a2009-07-16 18:34:18 +02005535 echo "$def=y" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005536done
Juan Quintela67f86e82009-08-03 14:46:59 +02005537if test "$audio_pt_int" = "yes" ; then
5538 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5539fi
malcd5631632009-10-10 01:13:41 +04005540if test "$audio_win_int" = "yes" ; then
5541 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5542fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005543echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5544echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01005545if test "$vnc" = "yes" ; then
5546 echo "CONFIG_VNC=y" >> $config_host_mak
5547fi
aliguori2f9606b2009-03-06 20:27:28 +00005548if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005549 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00005550fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005551if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005552 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005553fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005554if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02005555 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02005556fi
aliguori76655d62009-03-06 20:27:37 +00005557if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005558 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00005559fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005560if test "$xfs" = "yes" ; then
5561 echo "CONFIG_XFS=y" >> $config_host_mak
5562fi
Stefan Weil89138852016-05-16 15:10:20 +02005563qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02005564echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02005565echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005566echo "SRC_PATH=$source_path" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005567echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02005568if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005569 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00005570fi
Fam Zheng17969262014-02-10 14:48:56 +08005571if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08005572 # $shacmd can generate a hash started with digit, which the compiler doesn't
5573 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02005574 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08005575 echo "CONFIG_MODULES=y" >> $config_host_mak
5576fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02005577if test "$sdl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005578 echo "CONFIG_SDL=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005579 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02005580 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005581fi
5582if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005583 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00005584fi
5585if test "$curses" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005586 echo "CONFIG_CURSES=y" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005587fi
Riku Voipio099d6b02009-05-05 12:10:04 +03005588if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005589 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03005590fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01005591if test "$accept4" = "yes" ; then
5592 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5593fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305594if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005595 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305596fi
Riku Voipioc2882b92009-08-12 15:08:24 +03005597if test "$eventfd" = "yes" ; then
5598 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5599fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02005600if test "$memfd" = "yes" ; then
5601 echo "CONFIG_MEMFD=y" >> $config_host_mak
5602fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005603if test "$fallocate" = "yes" ; then
5604 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5605fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01005606if test "$fallocate_punch_hole" = "yes" ; then
5607 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5608fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03005609if test "$fallocate_zero_range" = "yes" ; then
5610 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5611fi
Kevin Wolfed911432014-09-29 17:12:59 +02005612if test "$posix_fallocate" = "yes" ; then
5613 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5614fi
Peter Maydellc727f472011-01-06 11:05:10 +00005615if test "$sync_file_range" = "yes" ; then
5616 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5617fi
Peter Maydelldace20d2011-01-10 13:11:24 +00005618if test "$fiemap" = "yes" ; then
5619 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5620fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005621if test "$dup3" = "yes" ; then
5622 echo "CONFIG_DUP3=y" >> $config_host_mak
5623fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01005624if test "$ppoll" = "yes" ; then
5625 echo "CONFIG_PPOLL=y" >> $config_host_mak
5626fi
Alex Blighcd758dd2013-08-21 16:02:44 +01005627if test "$prctl_pr_set_timerslack" = "yes" ; then
5628 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5629fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00005630if test "$epoll" = "yes" ; then
5631 echo "CONFIG_EPOLL=y" >> $config_host_mak
5632fi
5633if test "$epoll_create1" = "yes" ; then
5634 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5635fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00005636if test "$sendfile" = "yes" ; then
5637 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5638fi
Riku Voipio51834342014-06-22 11:25:42 +01005639if test "$timerfd" = "yes" ; then
5640 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5641fi
Riku Voipio9af5c902014-08-12 15:58:57 +03005642if test "$setns" = "yes" ; then
5643 echo "CONFIG_SETNS=y" >> $config_host_mak
5644fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02005645if test "$clock_adjtime" = "yes" ; then
5646 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5647fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02005648if test "$syncfs" = "yes" ; then
5649 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5650fi
aurel323b3f24a2009-04-15 16:12:13 +00005651if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005652 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00005653fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00005654if test "$inotify1" = "yes" ; then
5655 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5656fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005657if test "$byteswap_h" = "yes" ; then
5658 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5659fi
5660if test "$bswap_h" = "yes" ; then
5661 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5662fi
Alexander Graf769ce762009-05-11 17:41:42 +02005663if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005664 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02005665 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005666 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02005667fi
aurel322e4d9fb2008-04-08 06:01:02 +00005668if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005669 echo "CONFIG_BRLAPI=y" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00005670fi
balrogfb599c92008-09-28 23:49:55 +00005671if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005672 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02005673 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00005674fi
Dr. David Alan Gilbertd46f7c92015-06-24 10:45:42 +01005675if test "$glib_subprocess" = "yes" ; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03005676 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5677fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005678if test "$gtk" = "yes" ; then
5679 echo "CONFIG_GTK=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005680 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005681 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005682 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005683 if test "$gtk_gl" = "yes" ; then
5684 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5685 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005686fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005687echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005688if test "$gnutls" = "yes" ; then
5689 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5690fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005691if test "$gnutls_rnd" = "yes" ; then
5692 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5693fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005694if test "$gcrypt" = "yes" ; then
5695 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08005696 if test "$gcrypt_hmac" = "yes" ; then
5697 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5698 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005699 if test "$gcrypt_kdf" = "yes" ; then
5700 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5701 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01005702fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005703if test "$nettle" = "yes" ; then
5704 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02005705 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005706 if test "$nettle_kdf" = "yes" ; then
5707 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5708 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01005709fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005710if test "$tasn1" = "yes" ; then
5711 echo "CONFIG_TASN1=y" >> $config_host_mak
5712fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00005713if test "$have_ifaddrs_h" = "yes" ; then
5714 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5715fi
Eric Blake6b39b062016-10-11 10:46:23 -05005716if test "$have_broken_size_max" = "yes" ; then
5717 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5718fi
Jan Vesely277abf12016-04-29 13:15:23 -04005719
5720# Work around a system header bug with some kernel/XFS header
5721# versions where they both try to define 'struct fsxattr':
5722# xfs headers will not try to redefine structs from linux headers
5723# if this macro is set.
5724if test "$have_fsxattr" = "yes" ; then
5725 echo "HAVE_FSXATTR=y" >> $config_host_mak
5726fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005727if test "$vte" = "yes" ; then
5728 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005729 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5730fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005731if test "$virglrenderer" = "yes" ; then
5732 echo "CONFIG_VIRGL=y" >> $config_host_mak
5733 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5734 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5735fi
aliguorie37630c2009-04-22 15:19:10 +00005736if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02005737 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00005738 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00005739 if test "$xen_pv_domain_build" = "yes" ; then
5740 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5741 fi
aliguorie37630c2009-04-22 15:19:10 +00005742fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005743if test "$linux_aio" = "yes" ; then
5744 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5745fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005746if test "$attr" = "yes" ; then
5747 echo "CONFIG_ATTR=y" >> $config_host_mak
5748fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02005749if test "$libattr" = "yes" ; then
5750 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5751fi
Meador Inge983eef52012-02-24 14:00:42 +05305752if test "$virtfs" = "yes" ; then
5753 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005754fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005755if test "$vhost_scsi" = "yes" ; then
5756 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5757fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005758if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03005759 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5760fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005761if test "$vhost_vsock" = "yes" ; then
5762 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5763fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005764if test "$vhost_user" = "yes" ; then
5765 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5766fi
ths77755342008-11-27 15:45:16 +00005767if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005768 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00005769fi
aliguoribf9298b2008-12-05 20:05:26 +00005770if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005771 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00005772fi
aliguoriceb42de2009-04-07 18:43:28 +00005773if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005774 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00005775fi
aurel32f652e6a2008-12-16 10:43:48 +00005776if test "$fdt" = "yes" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02005777 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00005778fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03005779if test "$signalfd" = "yes" ; then
5780 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5781fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005782if test "$tcg" = "yes"; then
5783 echo "CONFIG_TCG=y" >> $config_host_mak
5784 if test "$tcg_interpreter" = "yes" ; then
5785 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5786 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02005787fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005788if test "$fdatasync" = "yes" ; then
5789 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5790fi
Andreas Färbere78815a2010-09-25 11:26:05 +00005791if test "$madvise" = "yes" ; then
5792 echo "CONFIG_MADVISE=y" >> $config_host_mak
5793fi
5794if test "$posix_madvise" = "yes" ; then
5795 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5796fi
bellard97a847b2003-08-10 21:36:04 +00005797
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005798if test "$spice" = "yes" ; then
5799 echo "CONFIG_SPICE=y" >> $config_host_mak
5800fi
5801
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005802if test "$smartcard" = "yes" ; then
5803 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02005804fi
5805
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005806if test "$libusb" = "yes" ; then
5807 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5808fi
5809
Hans de Goede69354a82011-07-19 11:04:10 +02005810if test "$usb_redir" = "yes" ; then
5811 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5812fi
5813
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005814if test "$opengl" = "yes" ; then
5815 echo "CONFIG_OPENGL=y" >> $config_host_mak
5816 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005817 if test "$opengl_dmabuf" = "yes" ; then
5818 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5819 fi
Michael Walle20ff0752011-03-07 23:32:39 +01005820fi
5821
Liang Li99f2dbd2016-03-08 13:53:16 +08005822if test "$avx2_opt" = "yes" ; then
5823 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5824fi
5825
qiaonuohan607dacd2014-02-18 14:11:30 +08005826if test "$lzo" = "yes" ; then
5827 echo "CONFIG_LZO=y" >> $config_host_mak
5828fi
5829
5830if test "$snappy" = "yes" ; then
5831 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5832fi
5833
Peter Wu6b383c02015-01-06 18:48:14 +01005834if test "$bzip2" = "yes" ; then
5835 echo "CONFIG_BZIP2=y" >> $config_host_mak
5836 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5837fi
5838
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005839if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005840 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005841 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5842 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005843fi
5844
Peter Lieven6542aa92014-02-03 10:26:13 +01005845if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04005846 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5847 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01005848fi
5849
Eduardo Otubof7945732012-08-14 18:44:05 -03005850if test "$seccomp" = "yes"; then
5851 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5852fi
5853
bellard83fb7ad2004-07-05 21:25:26 +00005854# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00005855if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005856 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00005857fi
5858
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01005859if test "$localtime_r" = "yes" ; then
5860 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5861fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02005862if test "$qom_cast_debug" = "yes" ; then
5863 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5864fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005865if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005866 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005867 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5868 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005869fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06005870
Peter Maydell7c2acc72013-04-08 12:11:27 +01005871echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005872if test "$coroutine_pool" = "yes" ; then
5873 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5874else
5875 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5876fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305877
Peter Lieven7d992e42016-09-27 11:58:45 +02005878if test "$debug_stack_usage" = "yes" ; then
5879 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5880fi
5881
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005882if test "$crypto_afalg" = "yes" ; then
5883 echo "CONFIG_AF_ALG=y" >> $config_host_mak
5884fi
5885
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305886if test "$open_by_handle_at" = "yes" ; then
5887 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5888fi
5889
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305890if test "$linux_magic_h" = "yes" ; then
5891 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5892fi
5893
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005894if test "$pragma_diagnostic_available" = "yes" ; then
5895 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01005896fi
5897
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005898if test "$valgrind_h" = "yes" ; then
5899 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5900fi
5901
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005902if test "$has_environ" = "yes" ; then
5903 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5904fi
5905
Richard Henderson76a347e2012-12-28 14:17:02 -08005906if test "$cpuid_h" = "yes" ; then
5907 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5908fi
5909
Richard Hendersonf5401662013-02-16 12:46:59 -08005910if test "$int128" = "yes" ; then
5911 echo "CONFIG_INT128=y" >> $config_host_mak
5912fi
5913
Richard Henderson7ebee432016-06-29 21:10:59 -07005914if test "$atomic128" = "yes" ; then
5915 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5916fi
5917
Richard Hendersondf79b992016-09-02 12:23:57 -07005918if test "$atomic64" = "yes" ; then
5919 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5920fi
5921
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005922if test "$getauxval" = "yes" ; then
5923 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5924fi
5925
Bharata B Raoeb100392012-09-24 14:42:45 +05305926if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005927 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005928 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5929 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05305930fi
5931
Jeff Codyd85fa9e2016-04-05 10:40:09 -04005932if test "$glusterfs_xlator_opt" = "yes" ; then
5933 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5934fi
5935
Bharata B Rao0c14fb42013-07-16 21:47:42 +05305936if test "$glusterfs_discard" = "yes" ; then
5937 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5938fi
5939
Niels de Vosdf3a4292017-05-28 12:01:14 +05305940if test "$glusterfs_fallocate" = "yes" ; then
5941 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
5942fi
5943
Bharata B Rao7c815372013-12-21 14:51:25 +05305944if test "$glusterfs_zerofill" = "yes" ; then
5945 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5946fi
5947
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005948if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005949 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005950 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5951 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005952fi
5953
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01005954if test "$live_block_migration" = "yes" ; then
5955 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
5956fi
5957
blueswir168063642008-11-22 21:03:55 +00005958# USB host support
Gerd Hoffmannb5613fd2013-09-10 11:02:59 +02005959if test "$libusb" = "yes"; then
5960 echo "HOST_USB=libusb legacy" >> $config_host_mak
5961else
Juan Quintela98ec69a2009-07-16 18:34:18 +02005962 echo "HOST_USB=stub" >> $config_host_mak
Gerd Hoffmannb5613fd2013-09-10 11:02:59 +02005963fi
blueswir168063642008-11-22 21:03:55 +00005964
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005965# TPM passthrough support?
5966if test "$tpm" = "yes"; then
5967 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5968 if test "$tpm_passthrough" = "yes"; then
5969 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5970 fi
5971fi
5972
Lluís Vilanova5b808272014-05-27 15:02:14 +02005973echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5974if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02005975 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05305976fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005977if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02005978 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5979 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02005980 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01005981fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03005982if have_backend "log"; then
5983 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02005984fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005985if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02005986 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5987fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005988if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02005989 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5990 if test "$trace_backend_stap" = "yes" ; then
5991 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5992 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005993fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005994if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005995 if test "$linux" = "yes" ; then
5996 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005997 else
Stewart Smith21684af2014-01-24 12:39:10 +11005998 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005999 fi
6000fi
Paul Durrant0a852412016-08-04 14:44:14 +01006001if have_backend "syslog"; then
6002 if test "$posix_syslog" = "yes" ; then
6003 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6004 else
6005 feature_not_found "syslog(trace backend)" "syslog not available"
6006 fi
6007fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006008echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6009
Michael R. Hines2da776d2013-07-22 10:01:54 -04006010if test "$rdma" = "yes" ; then
6011 echo "CONFIG_RDMA=y" >> $config_host_mak
6012fi
6013
Laurent Vivier575b22b2016-06-02 22:14:15 +02006014if test "$have_rtnetlink" = "yes" ; then
6015 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6016fi
6017
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006018if test "$replication" = "yes" ; then
6019 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6020fi
6021
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006022if test "$have_af_vsock" = "yes" ; then
6023 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6024fi
6025
Christopher Covington4d043512016-12-28 15:04:33 -05006026if test "$have_sysmacros" = "yes" ; then
6027 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6028fi
6029
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006030if test "$have_static_assert" = "yes" ; then
6031 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6032fi
6033
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006034if test "$have_utmpx" = "yes" ; then
6035 echo "HAVE_UTMPX=y" >> $config_host_mak
6036fi
6037
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006038if test "$ivshmem" = "yes" ; then
6039 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6040fi
6041
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006042# Hold two types of flag:
6043# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6044# a thread we have a handle to
6045# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6046# platform
6047if test "$pthread_setname_np" = "yes" ; then
6048 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6049 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6050fi
6051
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006052if test "$vxhs" = "yes" ; then
6053 echo "CONFIG_VXHS=y" >> $config_host_mak
6054 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6055fi
6056
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006057if test "$tcg_interpreter" = "yes"; then
6058 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6059elif test "$ARCH" = "sparc64" ; then
6060 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6061elif test "$ARCH" = "s390x" ; then
6062 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006063elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006064 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006065elif test "$ARCH" = "ppc64" ; then
6066 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006067else
6068 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6069fi
6070QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6071
Juan Quintela98ec69a2009-07-16 18:34:18 +02006072echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006073echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006074echo "MAKE=$make" >> $config_host_mak
6075echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006076echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6077echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006078echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6079echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006080echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006081echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006082if $iasl -h > /dev/null 2>&1; then
6083 echo "IASL=$iasl" >> $config_host_mak
6084fi
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02006085echo "CC_I386=$cc_i386" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006086echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006087echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006088echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006089echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006090echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006091echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006092echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006093echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006094echo "OBJCOPY=$objcopy" >> $config_host_mak
6095echo "LD=$ld" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006096echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006097echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006098echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006099echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006100echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006101echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006102echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006103if test "$sparse" = "yes" ; then
6104 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006105 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006106 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006107 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6108 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6109fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006110if test "$cross_prefix" != ""; then
6111 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6112else
6113 echo "AUTOCONF_HOST := " >> $config_host_mak
6114fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006115echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006116echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006117echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006118echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006119echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006120echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006121echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006122echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006123echo "DSOSUF=$DSOSUF" >> $config_host_mak
6124echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006125echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006126echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6127echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006128echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006129echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006130if test "$gcov" = "yes" ; then
6131 echo "CONFIG_GCOV=y" >> $config_host_mak
6132 echo "GCOV=$gcov_tool" >> $config_host_mak
6133fi
Juan Quintela804edf22009-07-27 16:12:49 +02006134
Peter Maydell6efd7512011-11-30 11:59:04 +00006135# use included Linux headers
6136if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006137 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006138 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006139 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006140 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006141 ;;
6142 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006143 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006144 ;;
6145 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006146 linux_arch=s390
6147 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006148 aarch64)
6149 linux_arch=arm64
6150 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006151 mips64)
6152 linux_arch=mips
6153 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006154 *)
6155 # For most CPUs the kernel architecture name and QEMU CPU name match.
6156 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006157 ;;
6158 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006159 # For non-KVM architectures we will not have asm headers
6160 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6161 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6162 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006163fi
6164
bellard1d14ffa2005-10-30 18:58:22 +00006165for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006166target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006167config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006168target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006169target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006170
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006171case "$target_name" in
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006172 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 +02006173 target_bigendian=yes
6174 ;;
6175esac
bellard97a847b2003-08-10 21:36:04 +00006176target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006177target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006178target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006179target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006180case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006181 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006182 target_softmmu="yes"
6183 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006184 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00006185 target_user_only="yes"
6186 target_linux_user="yes"
6187 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006188 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00006189 target_user_only="yes"
6190 target_bsd_user="yes"
6191 ;;
pbrook9e407a82007-05-26 16:38:53 +00006192 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006193 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00006194 exit 1
6195 ;;
6196esac
ths831b7822007-01-18 20:06:33 +00006197
bellard97a847b2003-08-10 21:36:04 +00006198mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02006199echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006200
pbrooke5fe0c52006-06-11 13:32:59 +00006201bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00006202mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02006203interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00006204gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00006205
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006206TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02006207TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02006208TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02006209
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006210case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00006211 i386)
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006212 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
aurel322408a522008-04-20 20:19:44 +00006213 ;;
6214 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006215 TARGET_BASE_ARCH=i386
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006216 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
aurel322408a522008-04-20 20:19:44 +00006217 ;;
6218 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11006219 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00006220 ;;
6221 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006222 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00006223 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006224 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00006225 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00006226 ;;
Alexander Graf6a49fa92013-09-03 20:12:22 +01006227 aarch64)
6228 TARGET_BASE_ARCH=arm
6229 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006230 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01006231 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 +01006232 ;;
aurel322408a522008-04-20 20:19:44 +00006233 cris)
aurel322408a522008-04-20 20:19:44 +00006234 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08006235 hppa)
6236 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01006237 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01006238 ;;
aurel322408a522008-04-20 20:19:44 +00006239 m68k)
aurel322408a522008-04-20 20:19:44 +00006240 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02006241 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00006242 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006243 microblaze|microblazeel)
6244 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006245 bflt="yes"
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006246 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02006247 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006248 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006249 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006250 ;;
6251 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08006252 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006253 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006254 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08006255 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006256 ;;
6257 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006258 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006259 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006260 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006261 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006262 moxie)
6263 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006264 nios2)
6265 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006266 or1k)
Jia Liue67db062012-07-20 15:50:39 +08006267 TARGET_ARCH=openrisc
6268 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08006269 ;;
aurel322408a522008-04-20 20:19:44 +00006270 ppc)
aurel32c8b35322009-01-24 15:07:34 +00006271 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00006272 ;;
6273 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006274 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006275 TARGET_ABI_DIR=ppc
aurel32c8b35322009-01-24 15:07:34 +00006276 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00006277 ;;
6278 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006279 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006280 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306281 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006282 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00006283 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05006284 ppc64le)
6285 TARGET_ARCH=ppc64
6286 TARGET_BASE_ARCH=ppc
6287 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306288 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006289 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 -05006290 ;;
aurel322408a522008-04-20 20:19:44 +00006291 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006292 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006293 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006294 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02006295 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01006296 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00006297 ;;
6298 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006299 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00006300 bflt="yes"
6301 ;;
6302 sparc)
aurel322408a522008-04-20 20:19:44 +00006303 ;;
6304 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006305 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00006306 ;;
6307 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006308 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006309 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006310 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02006311 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006312 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006313 s390x)
Christian Borntraeger86158a22017-03-08 12:41:14 +01006314 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 +01006315 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08006316 tilegx)
6317 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07006318 tricore)
6319 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08006320 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08006321 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006322 xtensa|xtensaeb)
6323 TARGET_ARCH=xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04006324 ;;
aurel322408a522008-04-20 20:19:44 +00006325 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006326 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00006327 ;;
6328esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006329# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6330if [ "$TARGET_BASE_ARCH" = "" ]; then
6331 TARGET_BASE_ARCH=$TARGET_ARCH
6332fi
6333
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006334symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6335
Daniel P. Berrange99afc912012-08-20 15:31:38 +01006336upper() {
6337 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6338}
6339
Stefan Weil89138852016-05-16 15:10:20 +02006340target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02006341echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006342echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02006343echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02006344if [ "$TARGET_ABI_DIR" = "" ]; then
6345 TARGET_ABI_DIR=$TARGET_ARCH
6346fi
Juan Quintela25be2102009-10-07 02:41:00 +02006347echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07006348if [ "$HOST_VARIANT_DIR" != "" ]; then
6349 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6350fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006351
6352if supported_xen_target $target; then
6353 echo "CONFIG_XEN=y" >> $config_target_mak
6354 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00006355 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006356 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006357fi
6358if supported_kvm_target $target; then
6359 echo "CONFIG_KVM=y" >> $config_target_mak
6360 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006361 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006362 if test "$vhost_user" = "yes" ; then
6363 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6364 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02006365 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006366fi
6367if supported_hax_target $target; then
6368 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006369fi
bellardde83cd02003-06-15 20:25:43 +00006370if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006371 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006372fi
6373if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006374 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00006375 if test "$mttcg" = "yes" ; then
6376 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6377 fi
bellardde83cd02003-06-15 20:25:43 +00006378fi
bellard997344f2003-10-27 21:10:39 +00006379if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006380 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01006381 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00006382fi
ths831b7822007-01-18 20:06:33 +00006383if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006384 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00006385fi
pbrook56aebc82008-10-11 17:55:29 +00006386list=""
6387if test ! -z "$gdb_xml_files" ; then
6388 for x in $gdb_xml_files; do
6389 list="$list $source_path/gdb-xml/$x"
6390 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02006391 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00006392fi
bellardde83cd02003-06-15 20:25:43 +00006393
pbrooke5fe0c52006-06-11 13:32:59 +00006394if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02006395 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00006396fi
blueswir184778502008-10-26 20:33:16 +00006397if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006398 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00006399fi
bellard5b0753e2005-03-01 21:37:28 +00006400
Juan Quintela4afddb52009-08-03 14:46:45 +02006401# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02006402
Juan Quintela4afddb52009-08-03 14:46:45 +02006403cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02006404ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02006405
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006406disas_config() {
6407 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6408 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6409}
6410
Juan Quintela64656022009-08-03 14:46:53 +02006411for i in $ARCH $TARGET_BASE_ARCH ; do
6412 case "$i" in
6413 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006414 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02006415 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05006416 aarch64)
6417 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006418 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05006419 fi
6420 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006421 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006422 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006423 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006424 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006425 fi
Juan Quintela64656022009-08-03 14:46:53 +02006426 ;;
6427 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006428 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02006429 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07006430 hppa)
6431 disas_config "HPPA"
6432 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006433 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006434 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02006435 ;;
Michael Walle79368f42012-03-31 19:54:20 +02006436 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006437 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02006438 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006439 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006440 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02006441 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006442 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006443 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02006444 ;;
6445 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006446 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02006447 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006448 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006449 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04006450 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006451 nios2)
6452 disas_config "NIOS2"
6453 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006454 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006455 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08006456 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006457 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006458 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02006459 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006460 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006461 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02006462 ;;
6463 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006464 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02006465 ;;
6466 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006467 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02006468 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006469 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006470 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04006471 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006472 esac
6473done
Stefan Weil9195b2c2011-10-19 07:07:18 +02006474if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006475 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02006476fi
Juan Quintela64656022009-08-03 14:46:53 +02006477
Juan Quintela6ee71262009-08-03 14:46:47 +02006478case "$ARCH" in
6479alpha)
6480 # Ensure there's only a single GP
6481 cflags="-msmall-data $cflags"
6482;;
6483esac
6484
Juan Quintelad02c1db2009-08-03 14:46:50 +02006485if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006486 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006487 if test "$target_linux_user" = "yes" ; then
6488 cflags="-p $cflags"
6489 ldflags="-p $ldflags"
6490 fi
6491 if test "$target_softmmu" = "yes" ; then
6492 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02006493 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006494 fi
6495fi
6496
Juan Quintela9b8e1112009-08-03 14:46:46 +02006497if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006498 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02006499fi
Juan Quintelafa282482009-07-22 22:37:39 +02006500
Christian Borntraegere9a35912017-08-23 12:16:23 +02006501# Newer kernels on s390 check for an S390_PGSTE program header and
6502# enable the pgste page table extensions in that case. This makes
6503# the vm.allocate_pgste sysctl unnecessary. We enable this program
6504# header if
6505# - we build on s390x
6506# - we build the system emulation for s390x (qemu-system-s390x)
6507# - KVM is enabled
6508# - the linker supports --s390-pgste
6509if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6510 if ld_has --s390-pgste ; then
6511 ldflags="-Wl,--s390-pgste $ldflags"
6512 fi
6513fi
6514
Juan Quintela25be2102009-10-07 02:41:00 +02006515echo "LDFLAGS+=$ldflags" >> $config_target_mak
6516echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02006517
bellard97a847b2003-08-10 21:36:04 +00006518done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00006519
Peter Crosthwaitea540f152013-04-18 14:47:31 +10006520if [ "$dtc_internal" = "yes" ]; then
6521 echo "config-host.h: subdir-dtc" >> $config_host_mak
6522fi
6523
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006524if test "$numa" = "yes"; then
6525 echo "CONFIG_NUMA=y" >> $config_host_mak
6526fi
6527
John Snowfd0e6052015-03-25 18:57:39 -04006528if test "$ccache_cpp2" = "yes"; then
6529 echo "export CCACHE_CPP2=y" >> $config_host_mak
6530fi
6531
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006532# build tree in object directory in case the source is not in the current directory
Wenchao Xiaf93296e2013-09-06 11:24:32 +08006533DIRS="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 +02006534DIRS="$DIRS docs docs/interop fsdev"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006535DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006536DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2dee8d52012-06-04 09:15:43 +02006537DIRS="$DIRS qapi-generated"
Anthony Liguoric09015d2012-01-10 13:10:42 -06006538FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6539FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02006540FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006541FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02006542FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006543FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006544FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01006545FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01006546FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07006547for bios_file in \
6548 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11006549 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01006550 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07006551 $source_path/pc-bios/*.rom \
6552 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00006553 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07006554 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01006555 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07006556 $source_path/pc-bios/palcode-*
6557do
Stefan Weil89138852016-05-16 15:10:20 +02006558 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006559done
Stefan Weil89138852016-05-16 15:10:20 +02006560for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006561do
Stefan Weil89138852016-05-16 15:10:20 +02006562 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006563done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006564mkdir -p $DIRS
6565for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03006566 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01006567 symlink "$source_path/$f" "$f"
6568 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006569done
Paul Brook1ad21342009-05-19 16:17:58 +01006570
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006571# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06006572for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006573 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01006574 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006575 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006576 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006577 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006578 echo "CC=$cc" >> $config_mak
6579 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006580 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006581 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006582 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006583 echo "LD=$ld" >> $config_mak
6584done
6585
Marc-André Lureaufe310172016-06-15 13:06:00 +02006586# set up tests data directory
6587if [ ! -e tests/data ]; then
6588 symlink "$source_path/tests/data" tests/data
6589fi
6590
Max Reitz76c75602014-05-24 23:24:56 +02006591# set up qemu-iotests in this build directory
6592iotests_common_env="tests/qemu-iotests/common.env"
6593iotests_check="tests/qemu-iotests/check"
6594
6595echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6596echo >> "$iotests_common_env"
6597echo "export PYTHON='$python'" >> "$iotests_common_env"
6598
6599if [ ! -e "$iotests_check" ]; then
6600 symlink "$source_path/$iotests_check" "$iotests_check"
6601fi
6602
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006603# Save the configure command line for later reuse.
6604cat <<EOD >config.status
6605#!/bin/sh
6606# Generated by configure.
6607# Run this file to recreate the current configuration.
6608# Compiler output produced by configure, useful for debugging
6609# configure, is in config.log if it exists.
6610EOD
6611printf "exec" >>config.status
6612printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00006613echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006614chmod +x config.status
6615
Peter Maydell8cd05ab2014-05-23 17:07:24 +01006616rm -r "$TMPDIR1"