blob: 06f18ea9af608693c4082bc9133bb6ae185c829c [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=""
Daniel P. Berrange92712822017-09-29 11:11:58 +0100267
268if test -e "$source_path/.git"
269then
270 git_submodules="ui/keycodemapdb"
271else
272 git_submodules=""
273fi
aliguoriac0df512008-12-29 17:14:15 +0000274
Stefan Weilafb63eb2012-09-26 22:04:38 +0200275# Don't accept a target_list environment variable.
276unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100277
278# Default value for a variable defining feature "foo".
279# * foo="no" feature will only be used if --enable-foo arg is given
280# * foo="" feature will be searched for, and if found, will be used
281# unless --disable-foo is given
282# * foo="yes" this value will only be set by --enable-foo flag.
283# feature will searched for,
284# if not found, configure exits with error
285#
286# Always add --enable-foo and --disable-foo command line args.
287# Distributions want to ensure that several features are compiled in, and it
288# is impossible without a --enable-foo that exits if a feature is not found.
289
290bluez=""
291brlapi=""
292curl=""
293curses=""
294docs=""
295fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100296netmap="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100297sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400298sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530299virtfs=""
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200300mpath=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100301vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100302sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100303vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100304vnc_sasl=""
305vnc_jpeg=""
306vnc_png=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100307xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000308xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000309xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000310xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100311linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500312cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100313attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200314libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100315xfs=""
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +0200316tcg="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100317
Bradd41a75a2011-07-26 23:11:26 -0400318vhost_net="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000319vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100320vhost_vsock="no"
Marc-André Lureaue6a74862017-08-03 11:07:46 +0200321vhost_user=""
Bradd41a75a2011-07-26 23:11:26 -0400322kvm="no"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100323hax="no"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400324rdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100325gprof="no"
326debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100327debug="no"
John Snowb553a042015-11-03 15:43:42 -0500328fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100329strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200330tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100331bigendian="no"
332mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000333gcov="no"
334gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100335EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800336DSOSUF=".so"
337LDFLAGS_SHARED="-shared"
338modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100339prefix="/usr/local"
340mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300341datadir="\${prefix}/share"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200342firmwarepath="\${prefix}/share/qemu-firmware"
Eduardo Habkost850da182012-04-18 16:55:38 -0300343qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100344bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300345libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400346libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200347includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100348sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300349local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100350confsuffix="/qemu"
351slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100352oss_lib=""
353bsd="no"
354linux="no"
355solaris="no"
356profiler="no"
357cocoa="no"
358softmmu="yes"
359linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100360bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100361blobs="yes"
362pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200363pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200364qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300365trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100366trace_file="trace"
367spice=""
368rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200369smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100370libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200371usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100372opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100373opengl_dmabuf="no"
Richard Henderson5dd89902017-07-18 18:40:18 -1000374cpuid_h="no"
Liang Li99f2dbd2016-03-08 13:53:16 +0800375avx2_opt="no"
Alon Levy1ece9902011-07-26 12:30:40 +0300376zlib="yes"
Stefan Weilb25c9df2014-04-29 08:21:16 +0200377lzo=""
378snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100379bzip2=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400380guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400381guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500382guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300383guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400384vss_win32_sdk=""
385win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100386want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100387libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100388libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100389coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200390coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200391debug_stack_usage="no"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -0400392crypto_afalg="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300393seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530394glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400395glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530396glusterfs_discard="no"
Niels de Vosdf3a4292017-05-28 12:01:14 +0530397glusterfs_fallocate="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530398glusterfs_zerofill="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600399gtk=""
Stefan Weil9e04c682014-05-17 16:29:18 +0200400gtkabi=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200401gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100402tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100403gnutls=""
Daniel P. Berrangeb917da42015-10-31 14:39:52 +0900404gnutls_rnd=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100405nettle=""
Daniel P. Berrangefff2f982016-03-29 15:47:51 +0100406nettle_kdf="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100407gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800408gcrypt_hmac="no"
Daniel P. Berrange37788f22015-10-14 13:14:04 +0100409gcrypt_kdf="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100410vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200411virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400412tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100413libssh2=""
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +0100414live_block_migration="yes"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800415numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800416tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200417jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800418replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700419vxhs=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100420
Peter Maydell898be3e2017-03-21 14:31:57 +0000421supported_cpu="no"
422supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100423bogus_os="no"
Peter Maydell898be3e2017-03-21 14:31:57 +0000424
aliguoriac0df512008-12-29 17:14:15 +0000425# parse CC options first
426for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200427 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000428 case "$opt" in
429 --cross-prefix=*) cross_prefix="$optarg"
430 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100431 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000432 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400433 --cxx=*) CXX="$optarg"
434 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100435 --source-path=*) source_path="$optarg"
436 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200437 --cpu=*) cpu="$optarg"
438 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100439 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100440 EXTRA_CFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200441 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100442 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
443 EXTRA_CXXFLAGS="$optarg"
444 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100445 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100446 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200447 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100448 --enable-debug-info) debug_info="yes"
449 ;;
450 --disable-debug-info) debug_info="no"
451 ;;
aliguoriac0df512008-12-29 17:14:15 +0000452 esac
453done
aliguoriac0df512008-12-29 17:14:15 +0000454# OS specific
455# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100456# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000457
Peter Maydelle49d0212012-12-07 15:39:13 +0000458# Preferred compiler:
459# ${CC} (if set)
460# ${cross_prefix}gcc (if cross-prefix specified)
461# system compiler
462if test -z "${CC}${cross_prefix}"; then
463 cc="$host_cc"
464else
465 cc="${CC-${cross_prefix}gcc}"
466fi
467
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400468if test -z "${CXX}${cross_prefix}"; then
469 cxx="c++"
470else
471 cxx="${CXX-${cross_prefix}g++}"
472fi
473
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500474ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700475as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700476ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000477cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500478objcopy="${OBJCOPY-${cross_prefix}objcopy}"
479ld="${LD-${cross_prefix}ld}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200480nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500481strip="${STRIP-${cross_prefix}strip}"
482windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300483pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
484query_pkg_config() {
485 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
486}
487pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500488sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000489sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000490
Peter Maydell45d285a2013-10-21 21:03:06 +0100491# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
492ARFLAGS="${ARFLAGS-rv}"
493
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200494# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100495# We use -fwrapv to tell the compiler that we require a C dialect where
496# left shift of signed integers is well defined and has the expected
497# 2s-complement style results. (Both clang and gcc agree that it
498# provides these semantics.)
499QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400500QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100501QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200502QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Yang Zhong244f1442017-06-02 14:06:45 +0800503QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100504if test "$debug_info" = "yes"; then
505 CFLAGS="-g $CFLAGS"
506 LDFLAGS="-g $LDFLAGS"
507fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200508
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100509# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200510source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100511
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300512# running configure in the source tree?
513# we know that's the case if configure is there.
514if test -f "./configure"; then
515 pwd_is_source_path="y"
516else
517 pwd_is_source_path="n"
518fi
519
aliguoriac0df512008-12-29 17:14:15 +0000520check_define() {
521cat > $TMPC <<EOF
522#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000523#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000524#endif
525int main(void) { return 0; }
526EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200527 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000528}
529
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200530check_include() {
531cat > $TMPC <<EOF
532#include <$1>
533int main(void) { return 0; }
534EOF
535 compile_object
536}
537
John Snow93b25862015-03-25 18:57:37 -0400538write_c_skeleton() {
539 cat > $TMPC <<EOF
540int main(void) { return 0; }
541EOF
542}
543
Peter Maydellbbea4052012-08-14 15:35:34 +0100544if check_define __linux__ ; then
545 targetos="Linux"
546elif check_define _WIN32 ; then
547 targetos='MINGW32'
548elif check_define __OpenBSD__ ; then
549 targetos='OpenBSD'
550elif check_define __sun__ ; then
551 targetos='SunOS'
552elif check_define __HAIKU__ ; then
553 targetos='Haiku'
Peter Maydell951fedf2017-07-13 16:15:32 +0100554elif check_define __FreeBSD__ ; then
555 targetos='FreeBSD'
556elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
557 targetos='GNU/kFreeBSD'
558elif check_define __DragonFly__ ; then
559 targetos='DragonFly'
560elif check_define __NetBSD__; then
561 targetos='NetBSD'
562elif check_define __APPLE__; then
563 targetos='Darwin'
Peter Maydellbbea4052012-08-14 15:35:34 +0100564else
Peter Maydell951fedf2017-07-13 16:15:32 +0100565 # This is a fatal error, but don't report it yet, because we
566 # might be going to just print the --help text, or it might
567 # be the result of a missing compiler.
568 targetos='bogus'
569 bogus_os='yes'
Peter Maydellbbea4052012-08-14 15:35:34 +0100570fi
571
572# Some host OSes need non-standard checks for which CPU to use.
573# Note that these checks are broken for cross-compilation: if you're
574# cross-compiling to one of these OSes then you'll need to specify
575# the correct CPU with the --cpu option.
576case $targetos in
577Darwin)
578 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
579 # run 64-bit userspace code.
580 # If the user didn't specify a CPU explicitly and the kernel says this is
581 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
582 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
583 cpu="x86_64"
584 fi
585 ;;
586SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200587 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100588 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
589 cpu="x86_64"
590 fi
591esac
592
Juan Quintela2ff6b912009-08-03 14:45:55 +0200593if test ! -z "$cpu" ; then
594 # command line argument
595 :
596elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000597 cpu="i386"
598elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700599 if check_define __ILP32__ ; then
600 cpu="x32"
601 else
602 cpu="x86_64"
603 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000604elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000605 if check_define __arch64__ ; then
606 cpu="sparc64"
607 else
608 cpu="sparc"
609 fi
malcfdf7ed92009-01-14 18:39:52 +0000610elif check_define _ARCH_PPC ; then
611 if check_define _ARCH_PPC64 ; then
612 cpu="ppc64"
613 else
614 cpu="ppc"
615 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200616elif check_define __mips__ ; then
617 cpu="mips"
Aurelien Jarno477ba622010-03-29 02:12:51 +0200618elif check_define __ia64__ ; then
619 cpu="ia64"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200620elif check_define __s390__ ; then
621 if check_define __s390x__ ; then
622 cpu="s390x"
623 else
624 cpu="s390"
625 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100626elif check_define __arm__ ; then
627 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100628elif check_define __aarch64__ ; then
629 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000630else
Stefan Weil89138852016-05-16 15:10:20 +0200631 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000632fi
633
Peter Maydell359bc952011-12-24 13:07:25 +0000634ARCH=
635# Normalise host CPU name and set ARCH.
636# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000637case "$cpu" in
Peter Maydell6499fd12017-03-28 11:58:38 +0100638 ppc|ppc64|s390|s390x|sparc64|x32)
Peter Maydell898be3e2017-03-21 14:31:57 +0000639 cpu="$cpu"
640 supported_cpu="yes"
641 ;;
bellard7d132992003-03-06 23:23:54 +0000642 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000643 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000644 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000645 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000646 x86_64|amd64)
647 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000648 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000649 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100650 armv*b|armv*l|arm)
651 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000652 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000653 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100654 aarch64)
655 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000656 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100657 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200658 mips*)
659 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000660 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200661 ;;
blueswir131422552007-04-16 18:27:06 +0000662 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000663 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100664 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000665 ;;
bellard7d132992003-03-06 23:23:54 +0000666 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000667 # This will result in either an error or falling back to TCI later
668 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000669 ;;
670esac
Peter Maydell359bc952011-12-24 13:07:25 +0000671if test -z "$ARCH"; then
672 ARCH="$cpu"
673fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200674
bellard7d132992003-03-06 23:23:54 +0000675# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200676
Stacey Sonadfc3e92014-06-08 09:57:22 -0700677# host *BSD for user mode
678HOST_VARIANT_DIR=""
679
bellard7d132992003-03-06 23:23:54 +0000680case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000681MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200682 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100683 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200684 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200685 if check_include dsound.h; then
686 audio_drv_list="dsound"
687 else
688 audio_drv_list=""
689 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000690 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000691;;
ths5c40d2b2007-06-23 16:03:36 +0000692GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100693 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200694 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200695 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000696;;
bellard7d3505c2004-05-12 19:32:15 +0000697FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200698 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100699 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200700 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200701 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100702 # needed for kinfo_getvmmap(3) in libutil.h
703 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500704 # needed for kinfo_getproc
705 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100706 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700707 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000708 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000709;;
blueswir1c5e97232009-03-07 20:06:23 +0000710DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200711 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100712 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200713 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200714 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700715 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000716;;
bellard7d3505c2004-05-12 19:32:15 +0000717NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200718 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100719 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200720 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200721 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200722 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700723 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200724 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000725;;
726OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200727 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100728 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400729 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200730 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700731 HOST_VARIANT_DIR="openbsd"
bellard7d3505c2004-05-12 19:32:15 +0000732;;
bellard83fb7ad2004-07-05 21:25:26 +0000733Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200734 bsd="yes"
735 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100736 hax="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800737 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200738 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200739 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200740 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200741 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200742 cocoa="yes"
743 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200744 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200745 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200746 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100747 # Disable attempts to use ObjectiveC features in os/object.h since they
748 # won't work when we're compiling with gcc as a C compiler.
749 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700750 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000751 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000752;;
bellardec530c82006-04-25 22:36:06 +0000753SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200754 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100755 make="${MAKE-gmake}"
756 install="${INSTALL-ginstall}"
Brade2d88302011-09-02 16:53:28 -0400757 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200758 if test -f /usr/include/sys/soundcard.h ; then
759 audio_drv_list="oss"
760 fi
761 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000762# needed for CMSG_ macros in sys/socket.h
763 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
764# needed for TIOCWIN* defines in termios.h
765 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200766 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200767 solarisnetlibs="-lsocket -lnsl -lresolv"
768 LIBS="$solarisnetlibs $LIBS"
769 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000770;;
Andreas Färber179cf402010-09-20 00:50:43 +0200771Haiku)
772 haiku="yes"
773 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
774 LIBS="-lposix_error_mapper -lnetwork $LIBS"
775;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000776Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200777 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200778 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200779 linux="yes"
780 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200781 kvm="yes"
782 vhost_net="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000783 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100784 vhost_vsock="yes"
Alexey Kardashevskiya5851402013-05-29 23:30:43 +1000785 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000786 supported_os="yes"
787;;
bellard7d132992003-03-06 23:23:54 +0000788esac
789
bellard7d3505c2004-05-12 19:32:15 +0000790if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000791 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200792 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000793 fi
bellard7d3505c2004-05-12 19:32:15 +0000794fi
795
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100796: ${make=${MAKE-make}}
797: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100798: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400799: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100800
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100801# Default objcc to clang if available, otherwise use CC
802if has clang; then
803 objcc=clang
804else
805 objcc="$cc"
806fi
807
Juan Quintela3457a3f2009-08-03 14:46:07 +0200808if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200809 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800810 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200811 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100812 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
813 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100814 # MinGW needs -mthreads for TLS and macro _MT.
815 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100816 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400817 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100818 if compile_prog "" "-liberty" ; then
819 LIBS="-liberty $LIBS"
820 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200821 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200822 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300823 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300824 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200825 bindir="\${prefix}"
826 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200827 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200828 confsuffix=""
Vinzenz Feenstra161a56a2017-04-19 11:26:15 +0200829 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200830fi
831
Anthony Liguori487fefd2009-06-11 13:28:25 -0500832werror=""
bellard85aa5182007-11-11 20:17:03 +0000833
bellard7d132992003-03-06 23:23:54 +0000834for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200835 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000836 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000837 --help|-h) show_help=yes
838 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400839 --version|-V) exec cat $source_path/VERSION
840 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000841 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000842 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000843 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000844 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100845 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000846 ;;
aliguoriac0df512008-12-29 17:14:15 +0000847 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000848 ;;
aliguoriac0df512008-12-29 17:14:15 +0000849 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000850 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000851 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000852 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400853 --cxx=*)
854 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200855 --iasl=*) iasl="$optarg"
856 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100857 --objcc=*) objcc="$optarg"
858 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000859 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000860 ;;
pbrook6a882642006-04-17 13:57:12 +0000861 --install=*) install="$optarg"
862 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000863 --python=*) python="$optarg"
864 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000865 --gcov=*) gcov_tool="$optarg"
866 ;;
Brade2d88302011-09-02 16:53:28 -0400867 --smbd=*) smbd="$optarg"
868 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200869 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000870 ;;
Bruno Dominguez11cde1c2017-06-06 14:07:47 +0100871 --extra-cxxflags=*)
872 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200873 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000874 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100875 --enable-debug-info)
876 ;;
877 --disable-debug-info)
878 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800879 --enable-modules)
880 modules="yes"
881 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000882 --disable-modules)
883 modules="no"
884 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200885 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000886 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000887 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000888 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +0200889 --enable-trace-backends=*) trace_backends="$optarg"
890 ;;
891 # XXX: backwards compatibility
892 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100893 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100894 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100895 ;;
bellard7d132992003-03-06 23:23:54 +0000896 --enable-gprof) gprof="yes"
897 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000898 --enable-gcov) gcov="yes"
899 ;;
Loïc Minier79427692010-01-31 12:23:45 +0100900 --static)
901 static="yes"
902 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300903 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +0000904 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200905 --mandir=*) mandir="$optarg"
906 ;;
907 --bindir=*) bindir="$optarg"
908 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300909 --libdir=*) libdir="$optarg"
910 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400911 --libexecdir=*) libexecdir="$optarg"
912 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +0200913 --includedir=*) includedir="$optarg"
914 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300915 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200916 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -0300917 --with-confsuffix=*) confsuffix="$optarg"
918 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -0300919 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200920 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +0100921 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -0600922 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300923 --localstatedir=*) local_statedir="$optarg"
924 ;;
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +0200925 --firmwarepath=*) firmwarepath="$optarg"
926 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300927 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +0400928 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
929 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
930 # These switches are silently ignored, for compatibility with
931 # autoconf-generated configure scripts. This allows QEMU's
932 # configure to be used by RPM and similar macros that set
933 # lots of directory switches by default.
934 ;;
bellard97a847b2003-08-10 21:36:04 +0000935 --disable-sdl) sdl="no"
936 ;;
Juan Quintelac4198152009-08-12 18:29:53 +0200937 --enable-sdl) sdl="yes"
938 ;;
Dave Airlie47c03742013-12-10 14:05:51 +1000939 --with-sdlabi=*) sdlabi="$optarg"
940 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +0200941 --disable-qom-cast-debug) qom_cast_debug="no"
942 ;;
943 --enable-qom-cast-debug) qom_cast_debug="yes"
944 ;;
Meador Inge983eef52012-02-24 14:00:42 +0530945 --disable-virtfs) virtfs="no"
946 ;;
947 --enable-virtfs) virtfs="yes"
948 ;;
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +0200949 --disable-mpath) mpath="no"
950 ;;
951 --enable-mpath) mpath="yes"
952 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +0100953 --disable-vnc) vnc="no"
954 ;;
955 --enable-vnc) vnc="yes"
956 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +0000957 --oss-lib=*) oss_lib="$optarg"
958 ;;
malc0c58ac12008-06-25 21:04:05 +0000959 --audio-drv-list=*) audio_drv_list="$optarg"
960 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200961 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800962 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200963 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +0100964 ;;
aurel32f8393942009-04-13 18:45:38 +0000965 --enable-debug-tcg) debug_tcg="yes"
966 ;;
967 --disable-debug-tcg) debug_tcg="no"
968 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +0100969 --enable-debug)
970 # Enable debugging options that aren't excessively noisy
971 debug_tcg="yes"
972 debug="yes"
973 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -0500974 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +0100975 ;;
aliguori03b4fe72008-10-07 19:16:17 +0000976 --enable-sparse) sparse="yes"
977 ;;
978 --disable-sparse) sparse="no"
979 ;;
aliguori1625af82009-04-05 17:41:02 +0000980 --disable-strip) strip_opt="no"
981 ;;
aliguori2f9606b2009-03-06 20:27:28 +0000982 --disable-vnc-sasl) vnc_sasl="no"
983 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +0200984 --enable-vnc-sasl) vnc_sasl="yes"
985 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +0200986 --disable-vnc-jpeg) vnc_jpeg="no"
987 ;;
988 --enable-vnc-jpeg) vnc_jpeg="yes"
989 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +0200990 --disable-vnc-png) vnc_png="no"
991 ;;
992 --enable-vnc-png) vnc_png="yes"
993 ;;
bellard443f1372004-06-04 11:13:20 +0000994 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +0000995 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +0000996 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +0000997 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +0200998 --enable-vde) vde="yes"
999 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +01001000 --disable-netmap) netmap="no"
1001 ;;
1002 --enable-netmap) netmap="yes"
1003 ;;
aliguorie37630c2009-04-22 15:19:10 +00001004 --disable-xen) xen="no"
1005 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +02001006 --enable-xen) xen="yes"
1007 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +00001008 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1009 ;;
1010 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1011 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +00001012 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1013 ;;
1014 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1015 ;;
aurel322e4d9fb2008-04-08 06:01:02 +00001016 --disable-brlapi) brlapi="no"
1017 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +02001018 --enable-brlapi) brlapi="yes"
1019 ;;
balrogfb599c92008-09-28 23:49:55 +00001020 --disable-bluez) bluez="no"
1021 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +02001022 --enable-bluez) bluez="yes"
1023 ;;
aliguori7ba1e612008-11-05 16:04:33 +00001024 --disable-kvm) kvm="no"
1025 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +02001026 --enable-kvm) kvm="yes"
1027 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001028 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +08001029 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001030 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +08001031 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +02001032 --disable-tcg-interpreter) tcg_interpreter="no"
1033 ;;
1034 --enable-tcg-interpreter) tcg_interpreter="yes"
1035 ;;
Corey Bryant47e98652012-01-26 09:42:26 -05001036 --disable-cap-ng) cap_ng="no"
1037 ;;
1038 --enable-cap-ng) cap_ng="yes"
1039 ;;
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02001040 --disable-tcg) tcg="no"
1041 ;;
1042 --enable-tcg) tcg="yes"
1043 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01001044 --disable-spice) spice="no"
1045 ;;
1046 --enable-spice) spice="yes"
1047 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11001048 --disable-libiscsi) libiscsi="no"
1049 ;;
1050 --enable-libiscsi) libiscsi="yes"
1051 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +01001052 --disable-libnfs) libnfs="no"
1053 ;;
1054 --enable-libnfs) libnfs="yes"
1055 ;;
bellard05c2a3e2006-02-08 22:39:17 +00001056 --enable-profiler) profiler="yes"
1057 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +04001058 --disable-cocoa) cocoa="no"
1059 ;;
malcc2de5c92008-06-28 19:13:06 +00001060 --enable-cocoa)
1061 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +02001062 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +00001063 ;;
pbrookcad25d62006-03-19 16:31:11 +00001064 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001065 ;;
pbrookcad25d62006-03-19 16:31:11 +00001066 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +00001067 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -10001068 --disable-user)
1069 linux_user="no" ;
1070 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -10001071 ;;
1072 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +00001073 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +00001074 ;;
ths831b7822007-01-18 20:06:33 +00001075 --enable-linux-user) linux_user="yes"
1076 ;;
blueswir184778502008-10-26 20:33:16 +00001077 --disable-bsd-user) bsd_user="no"
1078 ;;
1079 --enable-bsd-user) bsd_user="yes"
1080 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001081 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001082 ;;
Avi Kivity40d64442011-11-15 20:12:17 +02001083 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +03001084 ;;
bellard85aa5182007-11-11 20:17:03 +00001085 --enable-werror) werror="yes"
1086 ;;
1087 --disable-werror) werror="no"
1088 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001089 --enable-stack-protector) stack_protector="yes"
1090 ;;
1091 --disable-stack-protector) stack_protector="no"
1092 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001093 --disable-curses) curses="no"
1094 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001095 --enable-curses) curses="yes"
1096 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001097 --disable-curl) curl="no"
1098 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001099 --enable-curl) curl="yes"
1100 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001101 --disable-fdt) fdt="no"
1102 ;;
1103 --enable-fdt) fdt="yes"
1104 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001105 --disable-linux-aio) linux_aio="no"
1106 ;;
1107 --enable-linux-aio) linux_aio="yes"
1108 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001109 --disable-attr) attr="no"
1110 ;;
1111 --enable-attr) attr="yes"
1112 ;;
ths77755342008-11-27 15:45:16 +00001113 --disable-blobs) blobs="no"
1114 ;;
pbrook4a19f1e2009-04-07 23:17:49 +00001115 --with-pkgversion=*) pkgversion=" ($optarg)"
1116 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001117 --with-coroutine=*) coroutine="$optarg"
1118 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001119 --disable-coroutine-pool) coroutine_pool="no"
1120 ;;
1121 --enable-coroutine-pool) coroutine_pool="yes"
1122 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001123 --enable-debug-stack-usage) debug_stack_usage="yes"
1124 ;;
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001125 --enable-crypto-afalg) crypto_afalg="yes"
1126 ;;
1127 --disable-crypto-afalg) crypto_afalg="no"
1128 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001129 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001130 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001131 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001132 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001133 --disable-vhost-net) vhost_net="no"
1134 ;;
1135 --enable-vhost-net) vhost_net="yes"
1136 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001137 --disable-vhost-scsi) vhost_scsi="no"
1138 ;;
1139 --enable-vhost-scsi) vhost_scsi="yes"
1140 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001141 --disable-vhost-vsock) vhost_vsock="no"
1142 ;;
1143 --enable-vhost-vsock) vhost_vsock="yes"
1144 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001145 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001146 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001147 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001148 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001149 --disable-rbd) rbd="no"
1150 ;;
1151 --enable-rbd) rbd="yes"
1152 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001153 --disable-xfsctl) xfs="no"
1154 ;;
1155 --enable-xfsctl) xfs="yes"
1156 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001157 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001158 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001159 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001160 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001161 --disable-libusb) libusb="no"
1162 ;;
1163 --enable-libusb) libusb="yes"
1164 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001165 --disable-usb-redir) usb_redir="no"
1166 ;;
1167 --enable-usb-redir) usb_redir="yes"
1168 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001169 --disable-zlib-test) zlib="no"
1170 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001171 --disable-lzo) lzo="no"
1172 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001173 --enable-lzo) lzo="yes"
1174 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001175 --disable-snappy) snappy="no"
1176 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001177 --enable-snappy) snappy="yes"
1178 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001179 --disable-bzip2) bzip2="no"
1180 ;;
1181 --enable-bzip2) bzip2="yes"
1182 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001183 --enable-guest-agent) guest_agent="yes"
1184 ;;
1185 --disable-guest-agent) guest_agent="no"
1186 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001187 --enable-guest-agent-msi) guest_agent_msi="yes"
1188 ;;
1189 --disable-guest-agent-msi) guest_agent_msi="no"
1190 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001191 --with-vss-sdk) vss_win32_sdk=""
1192 ;;
1193 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1194 ;;
1195 --without-vss-sdk) vss_win32_sdk="no"
1196 ;;
1197 --with-win-sdk) win_sdk=""
1198 ;;
1199 --with-win-sdk=*) win_sdk="$optarg"
1200 ;;
1201 --without-win-sdk) win_sdk="no"
1202 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001203 --enable-tools) want_tools="yes"
1204 ;;
1205 --disable-tools) want_tools="no"
1206 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001207 --enable-seccomp) seccomp="yes"
1208 ;;
1209 --disable-seccomp) seccomp="no"
1210 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301211 --disable-glusterfs) glusterfs="no"
1212 ;;
1213 --enable-glusterfs) glusterfs="yes"
1214 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001215 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1216 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001217 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001218 --enable-vhdx|--disable-vhdx)
1219 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1220 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001221 --enable-uuid|--disable-uuid)
1222 echo "$0: $opt is obsolete, UUID support is always built" >&2
1223 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001224 --disable-gtk) gtk="no"
1225 ;;
1226 --enable-gtk) gtk="yes"
1227 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001228 --tls-priority=*) tls_priority="$optarg"
1229 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001230 --disable-gnutls) gnutls="no"
1231 ;;
1232 --enable-gnutls) gnutls="yes"
1233 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001234 --disable-nettle) nettle="no"
1235 ;;
1236 --enable-nettle) nettle="yes"
1237 ;;
1238 --disable-gcrypt) gcrypt="no"
1239 ;;
1240 --enable-gcrypt) gcrypt="yes"
1241 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001242 --enable-rdma) rdma="yes"
1243 ;;
1244 --disable-rdma) rdma="no"
1245 ;;
Daniel P. Berrange528de902013-02-25 15:20:44 +00001246 --with-gtkabi=*) gtkabi="$optarg"
1247 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001248 --disable-vte) vte="no"
1249 ;;
1250 --enable-vte) vte="yes"
1251 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001252 --disable-virglrenderer) virglrenderer="no"
1253 ;;
1254 --enable-virglrenderer) virglrenderer="yes"
1255 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001256 --disable-tpm) tpm="no"
1257 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001258 --enable-tpm) tpm="yes"
1259 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001260 --disable-libssh2) libssh2="no"
1261 ;;
1262 --enable-libssh2) libssh2="yes"
1263 ;;
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001264 --disable-live-block-migration) live_block_migration="no"
1265 ;;
1266 --enable-live-block-migration) live_block_migration="yes"
1267 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001268 --disable-numa) numa="no"
1269 ;;
1270 --enable-numa) numa="yes"
1271 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001272 --disable-tcmalloc) tcmalloc="no"
1273 ;;
1274 --enable-tcmalloc) tcmalloc="yes"
1275 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001276 --disable-jemalloc) jemalloc="no"
1277 ;;
1278 --enable-jemalloc) jemalloc="yes"
1279 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001280 --disable-replication) replication="no"
1281 ;;
1282 --enable-replication) replication="yes"
1283 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001284 --disable-vxhs) vxhs="no"
1285 ;;
1286 --enable-vxhs) vxhs="yes"
1287 ;;
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001288 --disable-vhost-user) vhost_user="no"
1289 ;;
1290 --enable-vhost-user)
1291 vhost_user="yes"
1292 if test "$mingw32" = "yes"; then
1293 error_exit "vhost-user isn't available on win32"
1294 fi
1295 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001296 *)
1297 echo "ERROR: unknown option $opt"
1298 echo "Try '$0 --help' for more information"
1299 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001300 ;;
bellard7d132992003-03-06 23:23:54 +00001301 esac
1302done
1303
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001304if test "$vhost_user" = ""; then
1305 if test "$mingw32" = "yes"; then
1306 vhost_user="no"
1307 else
1308 vhost_user="yes"
1309 fi
1310fi
1311
bellard40293e52008-01-31 11:32:10 +00001312case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001313 ppc)
1314 CPU_CFLAGS="-m32"
1315 LDFLAGS="-m32 $LDFLAGS"
1316 ;;
1317 ppc64)
1318 CPU_CFLAGS="-m64"
1319 LDFLAGS="-m64 $LDFLAGS"
1320 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001321 sparc)
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001322 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1323 LDFLAGS="-m32 -mv8plus $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001324 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001325 sparc64)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001326 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
Richard Hendersonf1079bb2017-04-26 10:39:08 -07001327 LDFLAGS="-m64 $LDFLAGS"
blueswir131422552007-04-16 18:27:06 +00001328 ;;
ths76d83bd2007-11-18 21:22:10 +00001329 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001330 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001331 LDFLAGS="-m31 $LDFLAGS"
1332 ;;
1333 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001334 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001335 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001336 ;;
bellard40293e52008-01-31 11:32:10 +00001337 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001338 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001339 LDFLAGS="-m32 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001340 cc_i386='$(CC) -m32'
bellard40293e52008-01-31 11:32:10 +00001341 ;;
1342 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001343 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1344 # If we truly care, we should simply detect this case at
1345 # runtime and generate the fallback to serial emulation.
1346 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001347 LDFLAGS="-m64 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001348 cc_i386='$(CC) -m32'
Paul Brook379f6692009-07-17 12:48:08 +01001349 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001350 x32)
1351 CPU_CFLAGS="-mx32"
1352 LDFLAGS="-mx32 $LDFLAGS"
1353 cc_i386='$(CC) -m32'
1354 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001355 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001356esac
1357
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001358QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1359EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1360
Peter Maydellaffc88c2016-06-13 11:32:24 +01001361# For user-mode emulation the host arch has to be one we explicitly
1362# support, even if we're using TCI.
1363if [ "$ARCH" = "unknown" ]; then
1364 bsd_user="no"
1365 linux_user="no"
1366fi
1367
Peter Maydell60e0df22011-05-03 14:50:13 +01001368default_target_list=""
1369
Peter Maydell6e92f822013-05-20 16:16:15 +01001370mak_wilds=""
1371
1372if [ "$softmmu" = "yes" ]; then
1373 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001374fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001375if [ "$linux_user" = "yes" ]; then
1376 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001377fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001378if [ "$bsd_user" = "yes" ]; then
1379 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001380fi
1381
Peter Maydell6e92f822013-05-20 16:16:15 +01001382for config in $mak_wilds; do
1383 default_target_list="${default_target_list} $(basename "$config" .mak)"
1384done
1385
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001386# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001387trace_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 +01001388
pbrookaf5db582006-04-08 14:26:41 +00001389if test x"$show_help" = x"yes" ; then
1390cat << EOF
1391
1392Usage: configure [options]
1393Options: [defaults in brackets after descriptions]
1394
Stefan Weil08fb77e2013-12-18 22:09:39 +01001395Standard options:
1396 --help print this message
1397 --prefix=PREFIX install in PREFIX [$prefix]
1398 --interp-prefix=PREFIX where to find shared libraries, etc.
1399 use %M for cpu name [$interp_prefix]
1400 --target-list=LIST set target list (default: build everything)
1401$(echo Available targets: $default_target_list | \
1402 fold -s -w 53 | sed -e 's/^/ /')
1403
1404Advanced options (experts only):
1405 --source-path=PATH path of source code [$source_path]
1406 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1407 --cc=CC use C compiler CC [$cc]
1408 --iasl=IASL use ACPI compiler IASL [$iasl]
1409 --host-cc=CC use C compiler CC [$host_cc] for code run at
1410 build time
1411 --cxx=CXX use C++ compiler CXX [$cxx]
1412 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1413 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01001414 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
Stefan Weil08fb77e2013-12-18 22:09:39 +01001415 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1416 --make=MAKE use specified make [$make]
1417 --install=INSTALL use specified install [$install]
1418 --python=PYTHON use specified python [$python]
1419 --smbd=SMBD use specified smbd [$smbd]
1420 --static enable static build [$static]
1421 --mandir=PATH install man pages in PATH
1422 --datadir=PATH install firmware in PATH$confsuffix
1423 --docdir=PATH install documentation in PATH$confsuffix
1424 --bindir=PATH install binaries in PATH
1425 --libdir=PATH install libraries in PATH
1426 --sysconfdir=PATH install config in PATH$confsuffix
1427 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02001428 --firmwarepath=PATH search PATH for firmware files
Fam Zhenge26110c2014-02-10 14:48:57 +08001429 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001430 --enable-debug enable common debug build options
Stefan Weil08fb77e2013-12-18 22:09:39 +01001431 --disable-strip disable stripping binaries
1432 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001433 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001434 --audio-drv-list=LIST set audio drivers list:
1435 Available drivers: $audio_possible_drivers
1436 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1437 --block-drv-rw-whitelist=L
1438 set block driver read-write whitelist
1439 (affects only QEMU, not qemu-img)
1440 --block-drv-ro-whitelist=L
1441 set block driver read-only whitelist
1442 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001443 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001444 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001445 --with-trace-file=NAME Full PATH,NAME of file to store traces
1446 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001447 --disable-slirp disable SLIRP userspace network connectivity
1448 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1449 --oss-lib path to OSS library
1450 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001451 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001452 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001453 --enable-gcov enable test coverage analysis with gcov
1454 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001455 --disable-blobs disable installing provided firmware blobs
1456 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1457 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001458 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001459 --enable-gprof QEMU profiling with gprof
1460 --enable-profiler profiler support
1461 --enable-xen-pv-domain-build
1462 xen pv domain builder
1463 --enable-debug-stack-usage
1464 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001465
1466Optional features, enabled with --enable-FEATURE and
1467disabled with --disable-FEATURE, default is enabled if available:
1468
1469 system all system emulation targets
1470 user supported user emulation targets
1471 linux-user all linux usermode emulation targets
1472 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001473 docs build documentation
1474 guest-agent build the QEMU Guest Agent
1475 guest-agent-msi build guest agent Windows MSI installation package
1476 pie Position Independent Executables
1477 modules modules support
1478 debug-tcg TCG debugging (default is disabled)
1479 debug-info debugging information
1480 sparse sparse checker
1481
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001482 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001483 nettle nettle cryptography support
1484 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001485 sdl SDL UI
1486 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1487 gtk gtk UI
1488 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1489 vte vte support for the gtk UI
1490 curses curses UI
1491 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001492 vnc-sasl SASL encryption for VNC server
1493 vnc-jpeg JPEG lossy compression for VNC server
1494 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001495 cocoa Cocoa UI (Mac OS X only)
1496 virtfs VirtFS
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02001497 mpath Multipath persistent reservation passthrough
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001498 xen xen backend driver support
1499 xen-pci-passthrough
1500 brlapi BrlAPI (Braile)
1501 curl curl connectivity
1502 fdt fdt device tree
1503 bluez bluez stack connectivity
1504 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001505 hax HAX acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001506 rdma RDMA-based migration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001507 vde support for vde network
1508 netmap support for netmap network
1509 linux-aio Linux AIO support
1510 cap-ng libcap-ng support
1511 attr attr and xattr support
1512 vhost-net vhost-net acceleration support
1513 spice spice
1514 rbd rados block device (rbd)
1515 libiscsi iscsi support
1516 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001517 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001518 libusb libusb (for usb passthrough)
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01001519 live-block-migration Block migration in the main migration stream
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001520 usb-redir usb network redirection support
1521 lzo support of lzo compression library
1522 snappy support of snappy compression library
1523 bzip2 support of bzip2 compression library
1524 (for reading bzip2-compressed dmg images)
1525 seccomp seccomp support
1526 coroutine-pool coroutine freelist (better performance)
1527 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001528 tpm TPM support
1529 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001530 numa libnuma support
1531 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001532 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001533 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001534 vhost-vsock virtio sockets device support
1535 opengl opengl support
1536 virglrenderer virgl rendering support
1537 xfsctl xfsctl support
1538 qom-cast-debug cast debugging support
1539 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001540 vxhs Veritas HyperScale vDisk backend support
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04001541 crypto-afalg Linux AF_ALG crypto backend driver
Marc-André Lureaue6a74862017-08-03 11:07:46 +02001542 vhost-user vhost-user support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001543
1544NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001545EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001546exit 0
pbrookaf5db582006-04-08 14:26:41 +00001547fi
1548
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001549if ! has $python; then
1550 error_exit "Python not found. Use --python=/path/to/python"
1551fi
1552
1553# Note that if the Python conditional here evaluates True we will exit
1554# with status 1 which is a shell 'false' value.
1555if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1556 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1557 "Note that Python 3 or later is not yet supported." \
1558 "Use --python=/path/to/python to specify a supported Python."
1559fi
1560
1561# Suppress writing compiled files
1562python="$python -B"
1563
Peter Maydell359bc952011-12-24 13:07:25 +00001564# Now we have handled --enable-tcg-interpreter and know we're not just
1565# printing the help message, bail out if the host CPU isn't supported.
1566if test "$ARCH" = "unknown"; then
1567 if test "$tcg_interpreter" = "yes" ; then
1568 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001569 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001570 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001571 fi
1572fi
1573
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001574# Consult white-list to determine whether to enable werror
1575# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001576if test -z "$werror" ; then
1577 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001578 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001579 werror="yes"
1580 else
1581 werror="no"
1582 fi
1583fi
1584
Paolo Bonzini8d050952010-12-23 11:43:52 +01001585# check that the C compiler works.
John Snow93b25862015-03-25 18:57:37 -04001586write_c_skeleton;
Paolo Bonzini8d050952010-12-23 11:43:52 +01001587if compile_object ; then
1588 : C compiler works ok
1589else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001590 error_exit "\"$cc\" either does not exist or does not work"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001591fi
Peter Maydell0ef74c72015-11-24 14:55:46 +00001592if ! compile_prog ; then
1593 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1594fi
Paolo Bonzini8d050952010-12-23 11:43:52 +01001595
Peter Maydellfb59dab2017-03-28 14:01:52 +01001596if test "$bogus_os" = "yes"; then
1597 # Now that we know that we're not printing the help and that
1598 # the compiler works (so the results of the check_defines we used
1599 # to identify the OS are reliable), if we didn't recognize the
1600 # host OS we should stop now.
Peter Maydell951fedf2017-07-13 16:15:32 +01001601 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
Peter Maydellfb59dab2017-03-28 14:01:52 +01001602fi
1603
Paolo Bonzini8d050952010-12-23 11:43:52 +01001604gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1605gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001606gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001607gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Paolo Bonzinib98fcfd2017-07-11 10:08:55 +02001608gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001609gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001610# Note that we do not add -Werror to gcc_flags here, because that would
1611# enable it for all configure tests. If a configure test failed due
1612# to -Werror this would just silently disable some features,
1613# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001614
1615cc_has_warning_flag() {
1616 write_c_skeleton;
1617
Peter Maydella1d29d62012-10-27 22:19:07 +01001618 # Use the positive sense of the flag when testing for -Wno-wombat
1619 # support (gcc will happily accept the -Wno- form of unknown
1620 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001621 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1622 compile_prog "-Werror $optflag" ""
1623}
1624
1625for flag in $gcc_flags; do
1626 if cc_has_warning_flag $flag ; then
1627 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001628 fi
1629done
1630
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001631if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001632 cat > $TMPC << EOF
1633int main(int argc, char *argv[])
1634{
1635 char arr[64], *p = arr, *c = argv[0];
1636 while (*c) {
1637 *p++ = *c++;
1638 }
1639 return 0;
1640}
1641EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001642 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001643 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001644 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001645 # We need to check both a compile and a link, since some compiler
1646 # setups fail only on a .c->.o compile and some only at link time
1647 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1648 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001649 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001650 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001651 break
1652 fi
1653 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001654 if test "$stack_protector" = yes; then
1655 if test $sp_on = 0; then
1656 error_exit "Stack protector not supported"
1657 fi
1658 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001659fi
1660
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001661# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1662# large functions that use global variables. The bug is in all releases of
1663# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1664# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1665cat > $TMPC << EOF
1666#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1667int main(void) { return 0; }
1668#else
1669#error No bug in this compiler.
1670#endif
1671EOF
1672if compile_prog "-Werror -fno-gcse" "" ; then
1673 TRANSLATE_OPT_CFLAGS=-fno-gcse
1674fi
1675
Avi Kivity40d64442011-11-15 20:12:17 +02001676if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001677 if test "$modules" = "yes" ; then
1678 error_exit "static and modules are mutually incompatible"
1679 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001680 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001681 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001682 else
1683 pie="no"
1684 fi
1685fi
1686
Emilio G. Cota768b7852015-04-29 13:09:02 +02001687# Unconditional check for compiler __thread support
1688 cat > $TMPC << EOF
1689static __thread int tls_var;
1690int main(void) { return tls_var; }
1691EOF
1692
1693if ! compile_prog "-Werror" "" ; then
1694 error_exit "Your compiler does not support the __thread specifier for " \
1695 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1696fi
1697
Avi Kivity40d64442011-11-15 20:12:17 +02001698if test "$pie" = ""; then
1699 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001700 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001701 ;;
1702 *)
1703 pie="no"
1704 ;;
1705 esac
1706fi
1707
1708if test "$pie" != "no" ; then
1709 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001710
1711#ifdef __linux__
1712# define THREAD __thread
1713#else
1714# define THREAD
1715#endif
1716
1717static THREAD int tls_var;
1718
1719int main(void) { return tls_var; }
1720
Avi Kivity40d64442011-11-15 20:12:17 +02001721EOF
1722 if compile_prog "-fPIE -DPIE" "-pie"; then
1723 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1724 LDFLAGS="-pie $LDFLAGS"
1725 pie="yes"
1726 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1727 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1728 fi
1729 else
1730 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001731 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001732 else
1733 echo "Disabling PIE due to missing toolchain support"
1734 pie="no"
1735 fi
1736 fi
Brad46eef332013-12-10 19:49:08 -05001737
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001738 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001739 CFLAGS_NOPIE="-fno-pie"
1740 LDFLAGS_NOPIE="-nopie"
1741 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001742fi
1743
Paolo Bonzini09dada42013-04-17 16:26:47 +02001744##########################################
1745# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1746# use i686 as default anyway, but for those that don't, an explicit
1747# specification is necessary
1748
1749if test "$cpu" = "i386"; then
1750 cat > $TMPC << EOF
1751static int sfaa(int *ptr)
1752{
1753 return __sync_fetch_and_and(ptr, 0);
1754}
1755
1756int main(void)
1757{
1758 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001759 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001760 sfaa(&val);
1761 return val;
1762}
1763EOF
1764 if ! compile_prog "" "" ; then
1765 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1766 fi
1767fi
1768
1769#########################################
bellardec530c82006-04-25 22:36:06 +00001770# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001771
bellardec530c82006-04-25 22:36:06 +00001772if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001773 if has $install; then
1774 :
1775 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001776 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1777 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1778 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001779 fi
Stefan Weil89138852016-05-16 15:10:20 +02001780 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001781 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1782 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1783 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001784 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001785 if has ar; then
1786 :
1787 else
bellardec530c82006-04-25 22:36:06 +00001788 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001789 error_exit "No path includes ar" \
1790 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001791 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001792 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001793 fi
ths5fafdf22007-09-16 21:08:06 +00001794fi
bellardec530c82006-04-25 22:36:06 +00001795
Stefan Weilafb63eb2012-09-26 22:04:38 +02001796if test -z "${target_list+xxx}" ; then
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001797 for target in $default_target_list; do
1798 supported_target $target 2>/dev/null && \
1799 target_list="$target_list $target"
1800 done
1801 target_list="${target_list# }"
Anthony Liguori121afa92012-09-14 08:17:03 -05001802else
Stefan Weil89138852016-05-16 15:10:20 +02001803 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
Paolo Bonzinid880a3b2017-07-03 16:58:28 +02001804 for target in $target_list; do
1805 # Check that we recognised the target name; this allows a more
1806 # friendly error message than if we let it fall through.
1807 case " $default_target_list " in
1808 *" $target "*)
1809 ;;
1810 *)
1811 error_exit "Unknown target name '$target'"
1812 ;;
1813 esac
1814 supported_target $target || exit 1
1815 done
bellard5327cf42005-01-10 23:18:50 +00001816fi
Peter Maydell25b48332013-05-20 16:16:16 +01001817
Paolo Bonzinif55fe272010-05-26 16:08:17 +02001818# see if system emulation was really requested
1819case " $target_list " in
1820 *"-softmmu "*) softmmu=yes
1821 ;;
1822 *) softmmu=no
1823 ;;
1824esac
bellard5327cf42005-01-10 23:18:50 +00001825
Juan Quintela249247c2009-08-12 18:20:25 +02001826feature_not_found() {
1827 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11001828 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02001829
Peter Maydell76ad07a2013-04-08 12:11:26 +01001830 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11001831 "configure was not able to find it." \
1832 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02001833}
1834
bellard7d132992003-03-06 23:23:54 +00001835# ---
1836# big/little endian test
1837cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04001838short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1839short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1840extern int foo(short *, short *);
1841int main(int argc, char *argv[]) {
1842 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00001843}
1844EOF
1845
Mike Frysinger61cc9192013-06-30 23:30:18 -04001846if compile_object ; then
1847 if grep -q BiGeNdIaN $TMPO ; then
1848 bigendian="yes"
1849 elif grep -q LiTtLeEnDiAn $TMPO ; then
1850 bigendian="no"
1851 else
1852 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01001853 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04001854else
1855 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00001856fi
1857
Juan Quintelab0a47e72009-08-12 18:29:49 +02001858##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01001859# cocoa implies not SDL or GTK
1860# (the cocoa UI code currently assumes it is always the active UI
1861# and doesn't interact well with other UI frontend code)
1862if test "$cocoa" = "yes"; then
1863 if test "$sdl" = "yes"; then
1864 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1865 fi
1866 if test "$gtk" = "yes"; then
1867 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1868 fi
1869 gtk=no
1870 sdl=no
1871fi
1872
Eric Blake6b39b062016-10-11 10:46:23 -05001873# Some versions of Mac OS X incorrectly define SIZE_MAX
1874cat > $TMPC << EOF
1875#include <stdint.h>
1876#include <stdio.h>
1877int main(int argc, char *argv[]) {
1878 return printf("%zu", SIZE_MAX);
1879}
1880EOF
1881have_broken_size_max=no
1882if ! compile_object -Werror ; then
1883 have_broken_size_max=yes
1884fi
1885
Peter Maydella30878e2015-08-14 16:10:52 +01001886##########################################
Gonglei015a33b2014-07-01 20:58:08 +08001887# L2TPV3 probe
1888
1889cat > $TMPC <<EOF
1890#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04001891#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08001892int main(void) { return sizeof(struct mmsghdr); }
1893EOF
1894if compile_prog "" "" ; then
1895 l2tpv3=yes
1896else
1897 l2tpv3=no
1898fi
1899
1900##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01001901# MinGW / Mingw-w64 localtime_r/gmtime_r check
1902
1903if test "$mingw32" = "yes"; then
1904 # Some versions of MinGW / Mingw-w64 lack localtime_r
1905 # and gmtime_r entirely.
1906 #
1907 # Some versions of Mingw-w64 define a macro for
1908 # localtime_r/gmtime_r.
1909 #
1910 # Some versions of Mingw-w64 will define functions
1911 # for localtime_r/gmtime_r, but only if you have
1912 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1913 # though, unistd.h and pthread.h both define
1914 # that for you.
1915 #
1916 # So this #undef localtime_r and #include <unistd.h>
1917 # are not in fact redundant.
1918cat > $TMPC << EOF
1919#include <unistd.h>
1920#include <time.h>
1921#undef localtime_r
1922int main(void) { localtime_r(NULL, NULL); return 0; }
1923EOF
1924 if compile_prog "" "" ; then
1925 localtime_r="yes"
1926 else
1927 localtime_r="no"
1928 fi
1929fi
1930
1931##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01001932# pkg-config probe
1933
1934if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001935 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01001936fi
1937
1938##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02001939# NPTL probe
1940
Peter Maydell24cb36a2013-07-16 18:45:00 +01001941if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02001942 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00001943#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00001944#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01001945int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00001946#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1947#error bork
1948#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01001949 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00001950}
1951EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01001952 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11001953 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02001954 fi
pbrookbd0c5662008-05-29 14:34:11 +00001955fi
1956
Liang Li99f2dbd2016-03-08 13:53:16 +08001957#########################################
balrogac629222008-10-11 09:56:04 +00001958# zlib check
1959
Alon Levy1ece9902011-07-26 12:30:40 +03001960if test "$zlib" != "no" ; then
1961 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00001962#include <zlib.h>
1963int main(void) { zlibVersion(); return 0; }
1964EOF
Alon Levy1ece9902011-07-26 12:30:40 +03001965 if compile_prog "" "-lz" ; then
1966 :
1967 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001968 error_exit "zlib check failed" \
1969 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03001970 fi
balrogac629222008-10-11 09:56:04 +00001971fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00001972LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00001973
1974##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08001975# lzo check
1976
1977if test "$lzo" != "no" ; then
1978 cat > $TMPC << EOF
1979#include <lzo/lzo1x.h>
1980int main(void) { lzo_version(); return 0; }
1981EOF
1982 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001983 libs_softmmu="$libs_softmmu -llzo2"
1984 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001985 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001986 if test "$lzo" = "yes"; then
1987 feature_not_found "liblzo2" "Install liblzo2 devel"
1988 fi
1989 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08001990 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08001991fi
1992
1993##########################################
1994# snappy check
1995
1996if test "$snappy" != "no" ; then
1997 cat > $TMPC << EOF
1998#include <snappy-c.h>
1999int main(void) { snappy_max_compressed_length(4096); return 0; }
2000EOF
2001 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02002002 libs_softmmu="$libs_softmmu -lsnappy"
2003 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08002004 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02002005 if test "$snappy" = "yes"; then
2006 feature_not_found "libsnappy" "Install libsnappy devel"
2007 fi
2008 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08002009 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08002010fi
2011
2012##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01002013# bzip2 check
2014
2015if test "$bzip2" != "no" ; then
2016 cat > $TMPC << EOF
2017#include <bzlib.h>
2018int main(void) { BZ2_bzlibVersion(); return 0; }
2019EOF
2020 if compile_prog "" "-lbz2" ; then
2021 bzip2="yes"
2022 else
2023 if test "$bzip2" = "yes"; then
2024 feature_not_found "libbzip2" "Install libbzip2 devel"
2025 fi
2026 bzip2="no"
2027 fi
2028fi
2029
2030##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03002031# libseccomp check
2032
2033if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04002034 case "$cpu" in
2035 i386|x86_64)
dann frazierba060c52015-10-23 15:34:22 -06002036 libseccomp_minver="2.1.0"
Andrew Jones693e5912015-09-30 11:59:18 -04002037 ;;
James Hogan5ce43972016-04-08 14:16:34 +01002038 mips)
2039 libseccomp_minver="2.2.0"
2040 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002041 arm|aarch64)
2042 libseccomp_minver="2.2.3"
2043 ;;
Thomas Huth3aa35fc2017-09-14 12:36:03 +02002044 ppc|ppc64|s390x)
Michael Strosaker3e684452016-06-01 18:30:18 -05002045 libseccomp_minver="2.3.0"
2046 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04002047 *)
2048 libseccomp_minver=""
2049 ;;
2050 esac
2051
2052 if test "$libseccomp_minver" != "" &&
2053 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Fam Zhengc3883e12017-09-07 16:53:16 +08002054 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2055 seccomp_libs="$($pkg_config --libs libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04002056 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03002057 else
Andrew Jones693e5912015-09-30 11:59:18 -04002058 if test "$seccomp" = "yes" ; then
2059 if test "$libseccomp_minver" != "" ; then
2060 feature_not_found "libseccomp" \
2061 "Install libseccomp devel >= $libseccomp_minver"
2062 else
2063 feature_not_found "libseccomp" \
2064 "libseccomp is not supported for host cpu $cpu"
2065 fi
2066 fi
2067 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03002068 fi
2069fi
2070##########################################
aliguorie37630c2009-04-22 15:19:10 +00002071# xen probe
2072
Juan Quintelafc321b42009-08-12 18:29:55 +02002073if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002074 # Check whether Xen library path is specified via --extra-ldflags to avoid
2075 # overriding this setting with pkg-config output. If not, try pkg-config
2076 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002077
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002078 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2079 $pkg_config --exists xencontrol ; then
2080 xen_ctrl_version="$(printf '%d%02d%02d' \
2081 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2082 xen=yes
2083 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2084 xen_pc="$xen_pc xenevtchn xendevicemodel"
2085 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2086 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2087 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2088 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002089
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002090 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002091 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002092
2093 # First we test whether Xen headers and libraries are available.
2094 # If no, we are done and there is no Xen support.
2095 # If yes, more tests are run to detect the Xen version.
2096
2097 # Xen (any)
2098 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002099#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002100int main(void) {
2101 return 0;
2102}
2103EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002104 if ! compile_prog "" "$xen_libs" ; then
2105 # Xen not found
2106 if test "$xen" = "yes" ; then
2107 feature_not_found "xen" "Install xen devel"
2108 fi
2109 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002110
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002111 # Xen unstable
2112 elif
2113 cat > $TMPC <<EOF &&
Igor Druzhinin5ba3d752017-07-10 23:40:02 +01002114#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2115#include <xenforeignmemory.h>
2116int main(void) {
2117 xenforeignmemory_handle *xfmem;
2118
2119 xfmem = xenforeignmemory_open(0, 0);
2120 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2121
2122 return 0;
2123}
2124EOF
2125 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2126 then
2127 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2128 xen_ctrl_version=41000
2129 xen=yes
2130 elif
2131 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002132#undef XC_WANT_COMPAT_DEVICEMODEL_API
2133#define __XEN_TOOLS__
2134#include <xendevicemodel.h>
2135int main(void) {
2136 xendevicemodel_handle *xd;
2137
2138 xd = xendevicemodel_open(0, 0);
2139 xendevicemodel_close(xd);
2140
2141 return 0;
2142}
2143EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002144 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2145 then
2146 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2147 xen_ctrl_version=40900
2148 xen=yes
2149 elif
2150 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002151/*
2152 * If we have stable libs the we don't want the libxc compat
2153 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002154 *
2155 * Also, check if xengnttab_grant_copy_segment_t is defined and
2156 * grant copy operation is implemented.
2157 */
2158#undef XC_WANT_COMPAT_EVTCHN_API
2159#undef XC_WANT_COMPAT_GNTTAB_API
2160#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2161#include <xenctrl.h>
2162#include <xenstore.h>
2163#include <xenevtchn.h>
2164#include <xengnttab.h>
2165#include <xenforeignmemory.h>
2166#include <stdint.h>
2167#include <xen/hvm/hvm_info_table.h>
2168#if !defined(HVM_MAX_VCPUS)
2169# error HVM_MAX_VCPUS not defined
2170#endif
2171int main(void) {
2172 xc_interface *xc = NULL;
2173 xenforeignmemory_handle *xfmem;
2174 xenevtchn_handle *xe;
2175 xengnttab_handle *xg;
2176 xen_domain_handle_t handle;
2177 xengnttab_grant_copy_segment_t* seg = NULL;
2178
2179 xs_daemon_open();
2180
2181 xc = xc_interface_open(0, 0, 0);
2182 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2183 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2184 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2185 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2186 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2187
2188 xfmem = xenforeignmemory_open(0, 0);
2189 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2190
2191 xe = xenevtchn_open(0, 0);
2192 xenevtchn_fd(xe);
2193
2194 xg = xengnttab_open(0, 0);
2195 xengnttab_grant_copy(xg, 0, seg);
2196
2197 return 0;
2198}
2199EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002200 compile_prog "" "$xen_libs $xen_stable_libs"
2201 then
2202 xen_ctrl_version=40800
2203 xen=yes
2204 elif
2205 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002206/*
2207 * If we have stable libs the we don't want the libxc compat
2208 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002209 */
2210#undef XC_WANT_COMPAT_EVTCHN_API
2211#undef XC_WANT_COMPAT_GNTTAB_API
2212#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2213#include <xenctrl.h>
2214#include <xenstore.h>
2215#include <xenevtchn.h>
2216#include <xengnttab.h>
2217#include <xenforeignmemory.h>
2218#include <stdint.h>
2219#include <xen/hvm/hvm_info_table.h>
2220#if !defined(HVM_MAX_VCPUS)
2221# error HVM_MAX_VCPUS not defined
2222#endif
2223int main(void) {
2224 xc_interface *xc = NULL;
2225 xenforeignmemory_handle *xfmem;
2226 xenevtchn_handle *xe;
2227 xengnttab_handle *xg;
2228 xen_domain_handle_t handle;
2229
2230 xs_daemon_open();
2231
2232 xc = xc_interface_open(0, 0, 0);
2233 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2234 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2235 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2236 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2237 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2238
2239 xfmem = xenforeignmemory_open(0, 0);
2240 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2241
2242 xe = xenevtchn_open(0, 0);
2243 xenevtchn_fd(xe);
2244
2245 xg = xengnttab_open(0, 0);
2246 xengnttab_map_grant_ref(xg, 0, 0, 0);
2247
2248 return 0;
2249}
2250EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002251 compile_prog "" "$xen_libs $xen_stable_libs"
2252 then
2253 xen_ctrl_version=40701
2254 xen=yes
2255 elif
2256 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002257#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002258#include <stdint.h>
2259int main(void) {
2260 xc_interface *xc = NULL;
2261 xen_domain_handle_t handle;
2262 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2263 return 0;
2264}
2265EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002266 compile_prog "" "$xen_libs"
2267 then
2268 xen_ctrl_version=40700
2269 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002270
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002271 # Xen 4.6
2272 elif
2273 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002274#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002275#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002276#include <stdint.h>
2277#include <xen/hvm/hvm_info_table.h>
2278#if !defined(HVM_MAX_VCPUS)
2279# error HVM_MAX_VCPUS not defined
2280#endif
2281int main(void) {
2282 xc_interface *xc;
2283 xs_daemon_open();
2284 xc = xc_interface_open(0, 0, 0);
2285 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2286 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002287 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002288 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002289 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002290 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002291 return 0;
2292}
2293EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002294 compile_prog "" "$xen_libs"
2295 then
2296 xen_ctrl_version=40600
2297 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002298
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002299 # Xen 4.5
2300 elif
2301 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002302#include <xenctrl.h>
2303#include <xenstore.h>
2304#include <stdint.h>
2305#include <xen/hvm/hvm_info_table.h>
2306#if !defined(HVM_MAX_VCPUS)
2307# error HVM_MAX_VCPUS not defined
2308#endif
2309int main(void) {
2310 xc_interface *xc;
2311 xs_daemon_open();
2312 xc = xc_interface_open(0, 0, 0);
2313 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2314 xc_gnttab_open(NULL, 0);
2315 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2316 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002317 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2318 return 0;
2319}
2320EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002321 compile_prog "" "$xen_libs"
2322 then
2323 xen_ctrl_version=40500
2324 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002325
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002326 elif
2327 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002328#include <xenctrl.h>
2329#include <xenstore.h>
2330#include <stdint.h>
2331#include <xen/hvm/hvm_info_table.h>
2332#if !defined(HVM_MAX_VCPUS)
2333# error HVM_MAX_VCPUS not defined
2334#endif
2335int main(void) {
2336 xc_interface *xc;
2337 xs_daemon_open();
2338 xc = xc_interface_open(0, 0, 0);
2339 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2340 xc_gnttab_open(NULL, 0);
2341 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2342 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002343 return 0;
2344}
2345EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002346 compile_prog "" "$xen_libs"
2347 then
2348 xen_ctrl_version=40200
2349 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002350
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002351 else
2352 if test "$xen" = "yes" ; then
2353 feature_not_found "xen (unsupported version)" \
2354 "Install a supported xen (xen 4.2 or newer)"
2355 fi
2356 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002357 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002358
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002359 if test "$xen" = yes; then
2360 if test $xen_ctrl_version -ge 40701 ; then
2361 libs_softmmu="$xen_stable_libs $libs_softmmu"
2362 fi
2363 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002364 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002365 fi
aliguorie37630c2009-04-22 15:19:10 +00002366fi
2367
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002368if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002369 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002370 xen_pci_passthrough=yes
2371 else
2372 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002373 error_exit "User requested feature Xen PCI Passthrough" \
2374 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002375 fi
2376 xen_pci_passthrough=no
2377 fi
2378fi
2379
Ian Campbell64a7ad62016-01-15 13:23:44 +00002380if test "$xen_pv_domain_build" = "yes" &&
2381 test "$xen" != "yes"; then
2382 error_exit "User requested Xen PV domain builder support" \
2383 "which requires Xen support."
2384fi
2385
aliguorie37630c2009-04-22 15:19:10 +00002386##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002387# Sparse probe
2388if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002389 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002390 sparse=yes
2391 else
2392 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002393 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002394 fi
2395 sparse=no
2396 fi
2397fi
2398
2399##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002400# X11 probe
2401x11_cflags=
2402x11_libs=-lX11
2403if $pkg_config --exists "x11"; then
Stefan Weil89138852016-05-16 15:10:20 +02002404 x11_cflags=$($pkg_config --cflags x11)
2405 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002406fi
2407
2408##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002409# GTK probe
2410
Stefan Weil9e04c682014-05-17 16:29:18 +02002411if test "$gtkabi" = ""; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002412 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2413 # Use 2.0 as a fallback if that is available.
2414 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002415 gtkabi=3.0
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002416 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002417 gtkabi=2.0
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002418 else
2419 gtkabi=3.0
Stefan Weil9e04c682014-05-17 16:29:18 +02002420 fi
2421fi
2422
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002423if test "$gtk" != "no"; then
Daniel P. Berrange528de902013-02-25 15:20:44 +00002424 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002425 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002426 if test "$gtkabi" = "3.0" ; then
2427 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002428 else
2429 gtkversion="2.18.0"
2430 fi
2431 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002432 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2433 gtk_libs=$($pkg_config --libs $gtkpackage)
2434 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002435 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Jeremy Whitef676c672015-01-09 13:08:49 -06002436 gtk_cflags="$gtk_cflags $x11_cflags"
2437 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002438 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002439 libs_softmmu="$gtk_libs $libs_softmmu"
2440 gtk="yes"
2441 elif test "$gtk" = "yes"; then
Gerd Hoffmann5fe309f2017-06-06 12:53:36 +02002442 feature_not_found "gtk" "Install gtk3-devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002443 else
2444 gtk="no"
2445 fi
2446fi
2447
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002448
2449##########################################
2450# GNUTLS probe
2451
Peter Maydell37371292015-07-24 18:28:08 +01002452gnutls_works() {
2453 # Unfortunately some distros have bad pkg-config information for gnutls
2454 # such that it claims to exist but you get a compiler error if you try
2455 # to use the options returned by --libs. Specifically, Ubuntu for --static
2456 # builds doesn't work:
2457 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2458 #
2459 # So sanity check the cflags/libs before assuming gnutls can be used.
2460 if ! $pkg_config --exists "gnutls"; then
2461 return 1
2462 fi
2463
2464 write_c_skeleton
2465 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2466}
2467
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002468gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002469gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002470if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002471 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002472 gnutls_cflags=$($pkg_config --cflags gnutls)
2473 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002474 libs_softmmu="$gnutls_libs $libs_softmmu"
2475 libs_tools="$gnutls_libs $libs_tools"
2476 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2477 gnutls="yes"
2478
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002479 # gnutls_rnd requires >= 2.11.0
2480 if $pkg_config --exists "gnutls >= 2.11.0"; then
2481 gnutls_rnd="yes"
2482 else
2483 gnutls_rnd="no"
2484 fi
2485
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002486 if $pkg_config --exists 'gnutls >= 3.0'; then
2487 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002488 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002489 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002490 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002491 *gcrypt*)
2492 gnutls_gcrypt=yes
2493 gnutls_nettle=no
2494 ;;
2495 *nettle*)
2496 gnutls_gcrypt=no
2497 gnutls_nettle=yes
2498 ;;
2499 *)
2500 gnutls_gcrypt=yes
2501 gnutls_nettle=no
2502 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002503 esac
2504 else
2505 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002506 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002507 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002508 elif test "$gnutls" = "yes"; then
2509 feature_not_found "gnutls" "Install gnutls devel"
2510 else
2511 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002512 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002513 fi
2514else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002515 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002516fi
2517
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002518
2519# If user didn't give a --disable/enable-gcrypt flag,
2520# then mark as disabled if user requested nettle
2521# explicitly, or if gnutls links to nettle
2522if test -z "$gcrypt"
2523then
2524 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2525 then
2526 gcrypt="no"
2527 fi
2528fi
2529
2530# If user didn't give a --disable/enable-nettle flag,
2531# then mark as disabled if user requested gcrypt
2532# explicitly, or if gnutls links to gcrypt
2533if test -z "$nettle"
2534then
2535 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2536 then
2537 nettle="no"
2538 fi
2539fi
2540
2541has_libgcrypt_config() {
2542 if ! has "libgcrypt-config"
2543 then
2544 return 1
2545 fi
2546
2547 if test -n "$cross_prefix"
2548 then
Stefan Weil89138852016-05-16 15:10:20 +02002549 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002550 if test "$host-" != $cross_prefix
2551 then
2552 return 1
2553 fi
2554 fi
2555
2556 return 0
2557}
2558
2559if test "$gcrypt" != "no"; then
2560 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002561 gcrypt_cflags=$(libgcrypt-config --cflags)
2562 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002563 # Debian has remove -lgpg-error from libgcrypt-config
2564 # as it "spreads unnecessary dependencies" which in
2565 # turn breaks static builds...
2566 if test "$static" = "yes"
2567 then
2568 gcrypt_libs="$gcrypt_libs -lgpg-error"
2569 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002570 libs_softmmu="$gcrypt_libs $libs_softmmu"
2571 libs_tools="$gcrypt_libs $libs_tools"
2572 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002573 gcrypt="yes"
2574 if test -z "$nettle"; then
2575 nettle="no"
2576 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002577
2578 cat > $TMPC << EOF
2579#include <gcrypt.h>
2580int main(void) {
2581 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2582 GCRY_MD_SHA256,
2583 NULL, 0, 0, 0, NULL);
2584 return 0;
2585}
2586EOF
2587 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2588 gcrypt_kdf=yes
2589 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002590
2591 cat > $TMPC << EOF
2592#include <gcrypt.h>
2593int main(void) {
2594 gcry_mac_hd_t handle;
2595 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2596 GCRY_MAC_FLAG_SECURE, NULL);
2597 return 0;
2598}
2599EOF
2600 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2601 gcrypt_hmac=yes
2602 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002603 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002604 if test "$gcrypt" = "yes"; then
2605 feature_not_found "gcrypt" "Install gcrypt devel"
2606 else
2607 gcrypt="no"
2608 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002609 fi
2610fi
2611
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002612
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002613if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002614 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002615 nettle_cflags=$($pkg_config --cflags nettle)
2616 nettle_libs=$($pkg_config --libs nettle)
2617 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002618 libs_softmmu="$nettle_libs $libs_softmmu"
2619 libs_tools="$nettle_libs $libs_tools"
2620 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002621 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002622
2623 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002624#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002625#include <nettle/pbkdf2.h>
2626int main(void) {
2627 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2628 return 0;
2629}
2630EOF
2631 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2632 nettle_kdf=yes
2633 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002634 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002635 if test "$nettle" = "yes"; then
2636 feature_not_found "nettle" "Install nettle devel"
2637 else
2638 nettle="no"
2639 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002640 fi
2641fi
2642
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002643if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2644then
2645 error_exit "Only one of gcrypt & nettle can be enabled"
2646fi
2647
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002648##########################################
2649# libtasn1 - only for the TLS creds/session test suite
2650
2651tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002652tasn1_cflags=""
2653tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002654if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002655 tasn1_cflags=$($pkg_config --cflags libtasn1)
2656 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002657else
2658 tasn1=no
2659fi
2660
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002661
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002662##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002663# getifaddrs (for tests/test-io-channel-socket )
2664
2665have_ifaddrs_h=yes
2666if ! check_include "ifaddrs.h" ; then
2667 have_ifaddrs_h=no
2668fi
2669
2670##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002671# VTE probe
2672
2673if test "$vte" != "no"; then
2674 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002675 vteminversion="0.32.0"
2676 if $pkg_config --exists "vte-2.91"; then
2677 vtepackage="vte-2.91"
2678 else
2679 vtepackage="vte-2.90"
2680 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002681 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002682 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002683 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002684 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002685 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002686 vte_cflags=$($pkg_config --cflags $vtepackage)
2687 vte_libs=$($pkg_config --libs $vtepackage)
2688 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002689 libs_softmmu="$vte_libs $libs_softmmu"
2690 vte="yes"
2691 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002692 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002693 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002694 else
2695 feature_not_found "vte" "Install libvte devel"
2696 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002697 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002698 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002699 fi
2700fi
2701
2702##########################################
bellard11d9f692004-04-02 20:55:59 +00002703# SDL probe
2704
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002705# Look for sdl configuration program (pkg-config or sdl-config). Try
2706# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002707
Cole Robinsonee8466d2016-05-06 14:03:07 -04002708if test "$sdlabi" = ""; then
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002709 if $pkg_config --exists "sdl2"; then
Cole Robinsonee8466d2016-05-06 14:03:07 -04002710 sdlabi=2.0
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002711 elif $pkg_config --exists "sdl"; then
Cole Robinsonee8466d2016-05-06 14:03:07 -04002712 sdlabi=1.2
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002713 else
2714 sdlabi=2.0
Cole Robinsonee8466d2016-05-06 14:03:07 -04002715 fi
2716fi
2717
Dave Airlie47c03742013-12-10 14:05:51 +10002718if test $sdlabi = "2.0"; then
2719 sdl_config=$sdl2_config
2720 sdlname=sdl2
2721 sdlconfigname=sdl2_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002722elif test $sdlabi = "1.2"; then
Dave Airlie47c03742013-12-10 14:05:51 +10002723 sdlname=sdl
2724 sdlconfigname=sdl_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002725else
2726 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002727fi
2728
Stefan Weil89138852016-05-16 15:10:20 +02002729if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
Dave Airlie47c03742013-12-10 14:05:51 +10002730 sdl_config=$sdlconfigname
2731fi
2732
2733if $pkg_config $sdlname --exists; then
2734 sdlconfig="$pkg_config $sdlname"
Stefan Weil89138852016-05-16 15:10:20 +02002735 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002736elif has ${sdl_config}; then
2737 sdlconfig="$sdl_config"
Stefan Weil89138852016-05-16 15:10:20 +02002738 sdlversion=$($sdlconfig --version)
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002739else
2740 if test "$sdl" = "yes" ; then
Gerd Hoffmann8f4ea9c2017-06-06 12:53:37 +02002741 feature_not_found "sdl" "Install SDL2-devel"
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002742 fi
2743 sdl=no
Paolo Bonzini9316f802010-01-13 09:52:55 +01002744fi
Scott Wood29e5bad2011-04-08 14:15:50 -05002745if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002746 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2747fi
bellard11d9f692004-04-02 20:55:59 +00002748
Paolo Bonzini9316f802010-01-13 09:52:55 +01002749sdl_too_old=no
Juan Quintelac4198152009-08-12 18:29:53 +02002750if test "$sdl" != "no" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002751 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002752#include <SDL.h>
2753#undef main /* We don't want SDL to override our main() */
2754int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2755EOF
Stefan Weil89138852016-05-16 15:10:20 +02002756 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002757 if test "$static" = "yes" ; then
Thomas Huth5f37e6d2017-06-13 20:00:44 +02002758 if $pkg_config $sdlname --exists; then
2759 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2760 else
2761 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2762 fi
TeLeMan74f42e12010-02-08 13:56:44 +08002763 else
Stefan Weil89138852016-05-16 15:10:20 +02002764 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002765 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002766 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002767 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002768 sdl_too_old=yes
2769 else
Peter Maydella30878e2015-08-14 16:10:52 +01002770 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002771 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002772
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002773 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002774 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002775 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002776 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2777 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002778 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002779 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002780 :
2781 else
2782 sdl=no
2783 fi
2784 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002785 else # sdl not found
2786 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002787 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002788 fi
2789 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002790 fi # sdl compile test
Juan Quintelaa68551b2009-07-27 16:13:09 +02002791fi
bellard11d9f692004-04-02 20:55:59 +00002792
aliguori5368a422009-03-03 17:37:21 +00002793if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002794 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002795#include <SDL.h>
2796#if defined(SDL_VIDEO_DRIVER_X11)
2797#include <X11/XKBlib.h>
2798#else
2799#error No x11 support
2800#endif
2801int main(void) { return 0; }
2802EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002803 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2804 sdl_cflags="$sdl_cflags $x11_cflags"
2805 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02002806 fi
aliguori5368a422009-03-03 17:37:21 +00002807fi
2808
ths8f28f3f2007-01-05 21:25:54 +00002809##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04002810# RDMA needs OpenFabrics libraries
2811if test "$rdma" != "no" ; then
2812 cat > $TMPC <<EOF
2813#include <rdma/rdma_cma.h>
2814int main(void) { return 0; }
2815EOF
2816 rdma_libs="-lrdmacm -libverbs"
2817 if compile_prog "" "$rdma_libs" ; then
2818 rdma="yes"
Michael R. Hines2da776d2013-07-22 10:01:54 -04002819 else
2820 if test "$rdma" = "yes" ; then
2821 error_exit \
2822 " OpenFabrics librdmacm/libibverbs not present." \
2823 " Your options:" \
2824 " (1) Fast: Install infiniband packages from your distro." \
2825 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2826 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2827 fi
2828 rdma="no"
2829 fi
2830fi
2831
ths8d5d2d42007-08-25 01:37:51 +00002832
2833##########################################
aliguori2f9606b2009-03-06 20:27:28 +00002834# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002835if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02002836 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00002837#include <sasl/sasl.h>
2838#include <stdio.h>
2839int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2840EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02002841 # Assuming Cyrus-SASL installed in /usr prefix
2842 vnc_sasl_cflags=""
2843 vnc_sasl_libs="-lsasl2"
2844 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2845 vnc_sasl=yes
2846 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002847 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02002848 else
2849 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002850 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00002851 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02002852 vnc_sasl=no
2853 fi
aliguori2f9606b2009-03-06 20:27:28 +00002854fi
2855
2856##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002857# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002858if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002859cat > $TMPC <<EOF
2860#include <stdio.h>
2861#include <jpeglib.h>
2862int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2863EOF
2864 vnc_jpeg_cflags=""
2865 vnc_jpeg_libs="-ljpeg"
2866 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2867 vnc_jpeg=yes
2868 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002869 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002870 else
2871 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002872 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002873 fi
2874 vnc_jpeg=no
2875 fi
2876fi
2877
2878##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02002879# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002880if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02002881cat > $TMPC <<EOF
2882//#include <stdio.h>
2883#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05002884#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02002885int main(void) {
2886 png_structp png_ptr;
2887 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01002888 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02002889}
2890EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02002891 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02002892 vnc_png_cflags=$($pkg_config libpng --cflags)
2893 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04002894 else
Corentin Charyefe556a2010-07-07 20:57:56 +02002895 vnc_png_cflags=""
2896 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04002897 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02002898 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2899 vnc_png=yes
2900 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04002901 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02002902 else
2903 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002904 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02002905 fi
2906 vnc_png=no
2907 fi
2908fi
2909
2910##########################################
aliguori76655d62009-03-06 20:27:37 +00002911# fnmatch() probe, used for ACL routines
2912fnmatch="no"
2913cat > $TMPC << EOF
2914#include <fnmatch.h>
2915int main(void)
2916{
2917 fnmatch("foo", "foo", 0);
2918 return 0;
2919}
2920EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002921if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00002922 fnmatch="yes"
2923fi
2924
2925##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06002926# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002927if test "$xfs" != "no" ; then
2928 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01002929#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002930#include <xfs/xfs.h>
2931int main(void)
2932{
2933 xfsctl(NULL, 0, 0, NULL);
2934 return 0;
2935}
2936EOF
2937 if compile_prog "" "" ; then
2938 xfs="yes"
2939 else
2940 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002941 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002942 fi
2943 xfs=no
2944 fi
2945fi
2946
2947##########################################
ths8a16d272008-07-19 09:56:24 +00002948# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02002949if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002950 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00002951 cat > $TMPC << EOF
2952#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00002953int main(void)
2954{
2955 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01002956 char s[] = "";
2957 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00002958 return 0;
2959}
ths8a16d272008-07-19 09:56:24 +00002960EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002961 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002962 vde=yes
Juan Quinteladfb278b2009-08-12 18:20:27 +02002963 else
2964 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002965 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002966 fi
2967 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02002968 fi
ths8a16d272008-07-19 09:56:24 +00002969fi
2970
2971##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002972# netmap support probe
2973# Apart from looking for netmap headers, we make sure that the host API version
2974# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2975# a minor/major version number. Minor new features will be marked with values up
2976# to 15, and if something happens that requires a change to the backend we will
2977# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01002978if test "$netmap" != "no" ; then
2979 cat > $TMPC << EOF
2980#include <inttypes.h>
2981#include <net/if.h>
2982#include <net/netmap.h>
2983#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002984#if (NETMAP_API < 11) || (NETMAP_API > 15)
2985#error
2986#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01002987int main(void) { return 0; }
2988EOF
2989 if compile_prog "" "" ; then
2990 netmap=yes
2991 else
2992 if test "$netmap" = "yes" ; then
2993 feature_not_found "netmap"
2994 fi
2995 netmap=no
2996 fi
2997fi
2998
2999##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05003000# libcap-ng library probe
3001if test "$cap_ng" != "no" ; then
3002 cap_libs="-lcap-ng"
3003 cat > $TMPC << EOF
3004#include <cap-ng.h>
3005int main(void)
3006{
3007 capng_capability_to_name(CAPNG_EFFECTIVE);
3008 return 0;
3009}
3010EOF
3011 if compile_prog "" "$cap_libs" ; then
3012 cap_ng=yes
3013 libs_tools="$cap_libs $libs_tools"
3014 else
3015 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003016 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05003017 fi
3018 cap_ng=no
3019 fi
3020fi
3021
3022##########################################
malcc2de5c92008-06-28 19:13:06 +00003023# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00003024
malcc2de5c92008-06-28 19:13:06 +00003025audio_drv_probe()
3026{
3027 drv=$1
3028 hdr=$2
3029 lib=$3
3030 exp=$4
3031 cfl=$5
3032 cat > $TMPC << EOF
3033#include <$hdr>
3034int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00003035EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003036 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00003037 :
3038 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01003039 error_exit "$drv check failed" \
3040 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00003041 fi
3042}
3043
Stefan Weil89138852016-05-16 15:10:20 +02003044audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00003045for drv in $audio_drv_list; do
3046 case $drv in
3047 alsa)
3048 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01003049 "return snd_pcm_close((snd_pcm_t *)0);"
Fam Zhengb1149912017-09-07 16:29:13 +08003050 alsa_libs="-lasound"
malcc2de5c92008-06-28 19:13:06 +00003051 ;;
3052
malcb8e59f12008-07-02 21:03:08 +00003053 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02003054 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3055 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Fam Zhengb1149912017-09-07 16:29:13 +08003056 pulse_libs="-lpulse"
Juan Quintela67f86e82009-08-03 14:46:59 +02003057 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00003058 ;;
3059
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003060 sdl)
3061 if test "$sdl" = "no"; then
3062 error_exit "sdl not found or disabled, can not use sdl audio driver"
3063 fi
3064 ;;
3065
Juan Quintela997e6902009-08-03 14:46:29 +02003066 coreaudio)
Fam Zhengb1149912017-09-07 16:29:13 +08003067 coreaudio_libs="-framework CoreAudio"
Juan Quintela997e6902009-08-03 14:46:29 +02003068 ;;
3069
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003070 dsound)
Fam Zhengb1149912017-09-07 16:29:13 +08003071 dsound_libs="-lole32 -ldxguid"
malcd5631632009-10-10 01:13:41 +04003072 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003073 ;;
3074
3075 oss)
Fam Zhengb1149912017-09-07 16:29:13 +08003076 oss_libs="$oss_lib"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02003077 ;;
3078
Gerd Hoffmann373967b2017-03-20 10:05:43 +01003079 wav)
3080 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00003081 ;;
3082
malce4c63a62008-07-19 16:15:16 +00003083 *)
malc1c9b2a52008-07-19 16:57:30 +00003084 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01003085 error_exit "Unknown driver '$drv' selected" \
3086 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00003087 }
3088 ;;
malcc2de5c92008-06-28 19:13:06 +00003089 esac
3090done
ths8f28f3f2007-01-05 21:25:54 +00003091
balrog4d3b6f62008-02-10 16:33:14 +00003092##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003093# BrlAPI probe
3094
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003095if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003096 brlapi_libs="-lbrlapi"
3097 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003098#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003099#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003100int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3101EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003102 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003103 brlapi=yes
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003104 else
3105 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003106 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003107 fi
3108 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003109 fi
3110fi
aurel322e4d9fb2008-04-08 06:01:02 +00003111
3112##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003113# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003114if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003115 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003116 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3117 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003118 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003119 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003120 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003121 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003122 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003123 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003124#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003125#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003126#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003127int main(void) {
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003128 wchar_t wch = L'w';
3129 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003130 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003131 addwstr(L"wide chars\n");
3132 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003133 add_wch(WACS_DEGREE);
Kamil Rytarowski271f37a2017-04-26 12:50:27 +02003134 return 0;
Stefan Weilef9a2522011-12-17 17:46:02 +01003135}
balrog4d3b6f62008-02-10 16:33:14 +00003136EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003137 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003138 for curses_inc in $curses_inc_list; do
Peter Maydellb01a4fd2017-06-02 15:35:38 +01003139 # Make sure we get the wide character prototypes
3140 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
Samuel Thibault7c703002016-11-09 11:27:52 +01003141 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003142 for curses_lib in $curses_lib_list; do
3143 unset IFS
3144 if compile_prog "$curses_inc" "$curses_lib" ; then
3145 curses_found=yes
3146 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3147 libs_softmmu="$curses_lib $libs_softmmu"
3148 break
3149 fi
3150 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003151 if test "$curses_found" = yes ; then
3152 break
3153 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003154 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003155 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003156 if test "$curses_found" = "yes" ; then
3157 curses=yes
3158 else
3159 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003160 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003161 fi
3162 curses=no
3163 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003164fi
balrog4d3b6f62008-02-10 16:33:14 +00003165
blueswir1414f0da2008-08-15 18:20:52 +00003166##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003167# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003168if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003169 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003170 curlconfig="$pkg_config libcurl"
3171 else
3172 curlconfig=curl-config
3173 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003174 cat > $TMPC << EOF
3175#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003176int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003177EOF
Stefan Weil89138852016-05-16 15:10:20 +02003178 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3179 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003180 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003181 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003182 else
3183 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003184 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003185 fi
3186 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003187 fi
3188fi # test "$curl"
3189
3190##########################################
balrogfb599c92008-09-28 23:49:55 +00003191# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003192if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003193 cat > $TMPC << EOF
3194#include <bluetooth/bluetooth.h>
3195int main(void) { return bt_error(0); }
3196EOF
Stefan Weil89138852016-05-16 15:10:20 +02003197 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3198 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003199 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003200 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003201 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003202 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003203 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003204 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003205 fi
balroge820e3f2008-09-30 02:27:44 +00003206 bluez="no"
3207 fi
balrogfb599c92008-09-28 23:49:55 +00003208fi
3209
3210##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003211# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003212
Peter Maydellad04d8c2017-04-03 14:04:15 +01003213if test "$mingw32" = yes; then
3214 glib_req_ver=2.30
3215else
3216 glib_req_ver=2.22
3217fi
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003218glib_modules=gthread-2.0
3219if test "$modules" = yes; then
3220 glib_modules="$glib_modules gmodule-2.0"
3221fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003222
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003223# This workaround is required due to a bug in pkg-config file for glib as it
3224# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3225
3226if test "$static" = yes -a "$mingw32" = yes; then
3227 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3228fi
3229
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003230for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003231 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003232 glib_cflags=$($pkg_config --cflags $i)
3233 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003234 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003235 LIBS="$glib_libs $LIBS"
3236 libs_qga="$glib_libs $libs_qga"
3237 else
3238 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3239 fi
3240done
3241
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003242# Sanity check that the current size_t matches the
3243# size that glib thinks it should be. This catches
3244# problems on multi-arch where people try to build
3245# 32-bit QEMU while pointing at 64-bit glib headers
3246cat > $TMPC <<EOF
3247#include <glib.h>
3248#include <unistd.h>
3249
3250#define QEMU_BUILD_BUG_ON(x) \
3251 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3252
3253int main(void) {
3254 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3255 return 0;
3256}
3257EOF
3258
Stefan Weil5919e032016-04-28 23:33:41 +02003259if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003260 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3261 "You probably need to set PKG_CONFIG_LIBDIR"\
3262 "to point to the right pkg-config files for your"\
3263 "build target"
3264fi
3265
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003266# g_test_trap_subprocess added in 2.38. Used by some tests.
3267glib_subprocess=yes
Marc-André Lureaua0492232017-01-04 21:57:22 +01003268if ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003269 glib_subprocess=no
3270fi
3271
John Snowbbbf2e02015-03-25 18:57:38 -04003272# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3273cat > $TMPC << EOF
3274#include <glib.h>
3275int main(void) { return 0; }
3276EOF
3277if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3278 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3279 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3280 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3281 fi
3282fi
3283
Fam Zhenge26110c2014-02-10 14:48:57 +08003284##########################################
3285# SHA command probe for modules
3286if test "$modules" = yes; then
3287 shacmd_probe="sha1sum sha1 shasum"
3288 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003289 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003290 shacmd="$c"
3291 break
3292 fi
3293 done
3294 if test "$shacmd" = ""; then
3295 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3296 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003297fi
3298
3299##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003300# pixman support probe
3301
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003302if test "$want_tools" = "no" -a "$softmmu" = "no"; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003303 pixman_cflags=
3304 pixman_libs=
Gerd Hoffmann35c4e862017-09-05 16:01:16 +02003305elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Stefan Weil89138852016-05-16 15:10:20 +02003306 pixman_cflags=$($pkg_config --cflags pixman-1)
3307 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003308else
Gerd Hoffmannc12b6d72017-09-05 16:01:15 +02003309 error_exit "pixman >= 0.21.8 not present." \
3310 "Please install the pixman devel package."
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003311fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003312
3313##########################################
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02003314# libmpathpersist probe
3315
3316if test "$mpath" != "no" ; then
3317 cat > $TMPC <<EOF
3318#include <libudev.h>
3319#include <mpath_persist.h>
3320unsigned mpath_mx_alloc_len = 1024;
3321int logsink;
3322int main(void) {
3323 struct udev *udev = udev_new();
3324 mpath_lib_init(udev);
3325 return 0;
3326}
3327EOF
3328 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3329 mpathpersist=yes
3330 else
3331 mpathpersist=no
3332 fi
3333else
3334 mpathpersist=no
3335fi
3336
3337##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303338# libcap probe
3339
3340if test "$cap" != "no" ; then
3341 cat > $TMPC <<EOF
3342#include <stdio.h>
3343#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003344int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303345EOF
3346 if compile_prog "" "-lcap" ; then
3347 cap=yes
3348 else
3349 cap=no
3350 fi
3351fi
3352
3353##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003354# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003355PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003356
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003357pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003358cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003359#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003360static void *f(void *p) { return NULL; }
3361int main(void) {
3362 pthread_t thread;
3363 pthread_create(&thread, 0, f, 0);
3364 return 0;
3365}
blueswir1414f0da2008-08-15 18:20:52 +00003366EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003367if compile_prog "" "" ; then
3368 pthread=yes
3369else
3370 for pthread_lib in $PTHREADLIBS_LIST; do
3371 if compile_prog "" "$pthread_lib" ; then
3372 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003373 found=no
3374 for lib_entry in $LIBS; do
3375 if test "$lib_entry" = "$pthread_lib"; then
3376 found=yes
3377 break
3378 fi
3379 done
3380 if test "$found" = "no"; then
3381 LIBS="$pthread_lib $LIBS"
3382 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003383 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003384 break
3385 fi
3386 done
3387fi
blueswir1414f0da2008-08-15 18:20:52 +00003388
Anthony Liguori4617e592009-08-25 17:21:56 -05003389if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003390 error_exit "pthread check failed" \
3391 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003392fi
3393
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003394# check for pthread_setname_np
3395pthread_setname_np=no
3396cat > $TMPC << EOF
3397#include <pthread.h>
3398
3399static void *f(void *p) { return NULL; }
3400int main(void)
3401{
3402 pthread_t thread;
3403 pthread_create(&thread, 0, f, 0);
3404 pthread_setname_np(thread, "QEMU");
3405 return 0;
3406}
3407EOF
3408if compile_prog "" "$pthread_lib" ; then
3409 pthread_setname_np=yes
3410fi
3411
aliguoribf9298b2008-12-05 20:05:26 +00003412##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003413# rbd probe
3414if test "$rbd" != "no" ; then
3415 cat > $TMPC <<EOF
3416#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003417#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003418int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003419 rados_t cluster;
3420 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003421 return 0;
3422}
3423EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003424 rbd_libs="-lrbd -lrados"
3425 if compile_prog "" "$rbd_libs" ; then
3426 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003427 else
3428 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003429 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003430 fi
3431 rbd=no
3432 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003433fi
3434
3435##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003436# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003437min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003438if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003439 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003440 libssh2_cflags=$($pkg_config libssh2 --cflags)
3441 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003442 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003443 else
3444 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003445 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003446 fi
3447 libssh2=no
3448 fi
3449fi
3450
3451##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003452# libssh2_sftp_fsync probe
3453
3454if test "$libssh2" = "yes"; then
3455 cat > $TMPC <<EOF
3456#include <stdio.h>
3457#include <libssh2.h>
3458#include <libssh2_sftp.h>
3459int main(void) {
3460 LIBSSH2_SESSION *session;
3461 LIBSSH2_SFTP *sftp;
3462 LIBSSH2_SFTP_HANDLE *sftp_handle;
3463 session = libssh2_session_init ();
3464 sftp = libssh2_sftp_init (session);
3465 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3466 libssh2_sftp_fsync (sftp_handle);
3467 return 0;
3468}
3469EOF
3470 # libssh2_cflags/libssh2_libs defined in previous test.
3471 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3472 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3473 fi
3474fi
3475
3476##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003477# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003478
3479if test "$linux_aio" != "no" ; then
3480 cat > $TMPC <<EOF
3481#include <libaio.h>
3482#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003483#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003484int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3485EOF
3486 if compile_prog "" "-laio" ; then
3487 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003488 else
3489 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003490 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003491 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003492 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003493 fi
3494fi
3495
3496##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003497# TPM passthrough is only on x86 Linux
3498
3499if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3500 tpm_passthrough=$tpm
3501else
3502 tpm_passthrough=no
3503fi
3504
3505##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003506# attr probe
3507
3508if test "$attr" != "no" ; then
3509 cat > $TMPC <<EOF
3510#include <stdio.h>
3511#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003512#ifdef CONFIG_LIBATTR
3513#include <attr/xattr.h>
3514#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003515#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003516#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003517int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3518EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003519 if compile_prog "" "" ; then
3520 attr=yes
3521 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003522 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003523 attr=yes
3524 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003525 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003526 else
3527 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003528 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003529 fi
3530 attr=no
3531 fi
3532fi
3533
3534##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003535# iovec probe
3536cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003537#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003538#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003539#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003540int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003541EOF
3542iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003543if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003544 iovec=yes
3545fi
3546
aurel32f652e6a2008-12-16 10:43:48 +00003547##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003548# preadv probe
3549cat > $TMPC <<EOF
3550#include <sys/types.h>
3551#include <sys/uio.h>
3552#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003553int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003554EOF
3555preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003556if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003557 preadv=yes
3558fi
3559
3560##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003561# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003562# fdt support is mandatory for at least some target architectures,
3563# so insist on it if we're building those system emulators.
3564fdt_required=no
3565for target in $target_list; do
3566 case $target in
Paul Burtondf1d8a12016-09-08 15:51:58 +01003567 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003568 fdt_required=yes
3569 ;;
3570 esac
3571done
3572
3573if test "$fdt_required" = "yes"; then
3574 if test "$fdt" = "no"; then
3575 error_exit "fdt disabled but some requested targets require it." \
3576 "You can turn off fdt only if you also disable all the system emulation" \
3577 "targets which need it (by specifying a cut down --target-list)."
3578 fi
3579 fdt=yes
3580fi
3581
Juan Quintela2df87df2009-08-12 18:29:54 +02003582if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003583 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003584 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003585 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003586 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003587#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003588#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003589int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003590EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003591 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003592 # system DTC is good - use it
aurel32f652e6a2008-12-16 10:43:48 +00003593 fdt=yes
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003594 else
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01003595 # have GIT checkout, so activate dtc submodule
3596 if test -e "${source_path}/.git" ; then
3597 git_submodules="${git_submodules} dtc"
3598 fi
3599 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3600 fdt=yes
3601 dtc_internal="yes"
3602 mkdir -p dtc
3603 if [ "$pwd_is_source_path" != "y" ] ; then
3604 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3605 symlink "$source_path/dtc/scripts" "dtc/scripts"
3606 fi
3607 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3608 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3609 elif test "$fdt" = "yes" ; then
3610 # Not a git build & no libfdt found, prompt for system install
3611 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3612 "Please install the DTC (libfdt) devel package"
3613 else
3614 # don't have and don't want
3615 fdt_libs=
3616 fdt=no
3617 fi
aurel32f652e6a2008-12-16 10:43:48 +00003618 fi
3619fi
3620
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003621libs_softmmu="$libs_softmmu $fdt_libs"
3622
Michael Walle20ff0752011-03-07 23:32:39 +01003623##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003624# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003625
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003626if test "$opengl" != "no" ; then
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003627 opengl_pkgs="epoxy libdrm gbm"
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003628 if $pkg_config $opengl_pkgs x11; then
Jeremy Whitef676c672015-01-09 13:08:49 -06003629 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3630 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003631 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003632 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3633 gtk_gl="yes"
3634 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003635 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003636 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003637 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003638 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003639 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003640 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003641 opengl_libs=""
3642 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003643 fi
3644fi
3645
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003646if test "$opengl" = "yes"; then
3647 cat > $TMPC << EOF
3648#include <epoxy/egl.h>
3649#ifndef EGL_MESA_image_dma_buf_export
3650# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3651#endif
3652int main(void) { return 0; }
3653EOF
3654 if compile_prog "" "" ; then
3655 opengl_dmabuf=yes
3656 fi
3657fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003658
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003659
Bharata B Raoeb100392012-09-24 14:42:45 +05303660##########################################
3661# glusterfs probe
3662if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003663 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303664 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003665 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3666 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003667 if $pkg_config --atleast-version=4 glusterfs-api; then
3668 glusterfs_xlator_opt="yes"
3669 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003670 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303671 glusterfs_discard="yes"
3672 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303673 if $pkg_config --atleast-version=6 glusterfs-api; then
Niels de Vosdf3a4292017-05-28 12:01:14 +05303674 glusterfs_fallocate="yes"
Bharata B Rao7c815372013-12-21 14:51:25 +05303675 glusterfs_zerofill="yes"
3676 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303677 else
3678 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003679 feature_not_found "GlusterFS backend support" \
3680 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303681 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303682 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303683 fi
3684fi
3685
aurel3239386ac2009-04-15 19:48:17 +00003686# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003687# emulator. This is done because older glibc versions don't
3688# have syscall stubs for these implemented. In that case we
3689# don't provide them even if kernel supports them.
3690#
3691inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003692cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003693#include <sys/inotify.h>
3694
3695int
3696main(void)
3697{
3698 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003699 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003700}
3701EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003702if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003703 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003704fi
3705
Riku Voipioc05c7a72010-03-26 15:25:11 +00003706inotify1=no
3707cat > $TMPC << EOF
3708#include <sys/inotify.h>
3709
3710int
3711main(void)
3712{
3713 /* try to start inotify */
3714 return inotify_init1(0);
3715}
3716EOF
3717if compile_prog "" "" ; then
3718 inotify1=yes
3719fi
3720
Riku Voipio099d6b02009-05-05 12:10:04 +03003721# check if pipe2 is there
3722pipe2=no
3723cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003724#include <unistd.h>
3725#include <fcntl.h>
3726
3727int main(void)
3728{
3729 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003730 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003731}
3732EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003733if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003734 pipe2=yes
3735fi
3736
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003737# check if accept4 is there
3738accept4=no
3739cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003740#include <sys/socket.h>
3741#include <stddef.h>
3742
3743int main(void)
3744{
3745 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3746 return 0;
3747}
3748EOF
3749if compile_prog "" "" ; then
3750 accept4=yes
3751fi
3752
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303753# check if tee/splice is there. vmsplice was added same time.
3754splice=no
3755cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303756#include <unistd.h>
3757#include <fcntl.h>
3758#include <limits.h>
3759
3760int main(void)
3761{
Stefan Weil66ea0f22011-12-17 09:27:35 +01003762 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303763 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3764 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3765 return 0;
3766}
3767EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003768if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303769 splice=yes
3770fi
3771
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003772##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003773# libnuma probe
3774
3775if test "$numa" != "no" ; then
3776 cat > $TMPC << EOF
3777#include <numa.h>
3778int main(void) { return numa_available(); }
3779EOF
3780
3781 if compile_prog "" "-lnuma" ; then
3782 numa=yes
3783 libs_softmmu="-lnuma $libs_softmmu"
3784 else
3785 if test "$numa" = "yes" ; then
3786 feature_not_found "numa" "install numactl devel"
3787 fi
3788 numa=no
3789 fi
3790fi
3791
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003792if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3793 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3794 exit 1
3795fi
3796
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003797##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08003798# tcmalloc probe
3799
3800if test "$tcmalloc" = "yes" ; then
3801 cat > $TMPC << EOF
3802#include <stdlib.h>
3803int main(void) { malloc(1); return 0; }
3804EOF
3805
3806 if compile_prog "" "-ltcmalloc" ; then
3807 LIBS="-ltcmalloc $LIBS"
3808 else
3809 feature_not_found "tcmalloc" "install gperftools devel"
3810 fi
3811fi
3812
3813##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003814# jemalloc probe
3815
3816if test "$jemalloc" = "yes" ; then
3817 cat > $TMPC << EOF
3818#include <stdlib.h>
3819int main(void) { malloc(1); return 0; }
3820EOF
3821
3822 if compile_prog "" "-ljemalloc" ; then
3823 LIBS="-ljemalloc $LIBS"
3824 else
3825 feature_not_found "jemalloc" "install jemalloc devel"
3826 fi
3827fi
3828
3829##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003830# signalfd probe
3831signalfd="no"
3832cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003833#include <unistd.h>
3834#include <sys/syscall.h>
3835#include <signal.h>
3836int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3837EOF
3838
3839if compile_prog "" "" ; then
3840 signalfd=yes
3841fi
3842
Riku Voipioc2882b92009-08-12 15:08:24 +03003843# check if eventfd is supported
3844eventfd=no
3845cat > $TMPC << EOF
3846#include <sys/eventfd.h>
3847
3848int main(void)
3849{
Stefan Weil55cc7f32011-12-17 09:27:37 +01003850 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03003851}
3852EOF
3853if compile_prog "" "" ; then
3854 eventfd=yes
3855fi
3856
Marc-André Lureau751bcc32015-10-09 17:17:16 +02003857# check if memfd is supported
3858memfd=no
3859cat > $TMPC << EOF
3860#include <sys/memfd.h>
3861
3862int main(void)
3863{
3864 return memfd_create("foo", MFD_ALLOW_SEALING);
3865}
3866EOF
3867if compile_prog "" "" ; then
3868 memfd=yes
3869fi
3870
3871
3872
Ulrich Hechtd0927932009-09-17 20:22:14 +03003873# check for fallocate
3874fallocate=no
3875cat > $TMPC << EOF
3876#include <fcntl.h>
3877
3878int main(void)
3879{
3880 fallocate(0, 0, 0, 0);
3881 return 0;
3882}
3883EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003884if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003885 fallocate=yes
3886fi
3887
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01003888# check for fallocate hole punching
3889fallocate_punch_hole=no
3890cat > $TMPC << EOF
3891#include <fcntl.h>
3892#include <linux/falloc.h>
3893
3894int main(void)
3895{
3896 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3897 return 0;
3898}
3899EOF
3900if compile_prog "" "" ; then
3901 fallocate_punch_hole=yes
3902fi
3903
Denis V. Lunevb953f072015-01-30 11:42:14 +03003904# check that fallocate supports range zeroing inside the file
3905fallocate_zero_range=no
3906cat > $TMPC << EOF
3907#include <fcntl.h>
3908#include <linux/falloc.h>
3909
3910int main(void)
3911{
3912 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3913 return 0;
3914}
3915EOF
3916if compile_prog "" "" ; then
3917 fallocate_zero_range=yes
3918fi
3919
Kevin Wolfed911432014-09-29 17:12:59 +02003920# check for posix_fallocate
3921posix_fallocate=no
3922cat > $TMPC << EOF
3923#include <fcntl.h>
3924
3925int main(void)
3926{
3927 posix_fallocate(0, 0, 0);
3928 return 0;
3929}
3930EOF
3931if compile_prog "" "" ; then
3932 posix_fallocate=yes
3933fi
3934
Peter Maydellc727f472011-01-06 11:05:10 +00003935# check for sync_file_range
3936sync_file_range=no
3937cat > $TMPC << EOF
3938#include <fcntl.h>
3939
3940int main(void)
3941{
3942 sync_file_range(0, 0, 0, 0);
3943 return 0;
3944}
3945EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003946if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00003947 sync_file_range=yes
3948fi
3949
Peter Maydelldace20d2011-01-10 13:11:24 +00003950# check for linux/fiemap.h and FS_IOC_FIEMAP
3951fiemap=no
3952cat > $TMPC << EOF
3953#include <sys/ioctl.h>
3954#include <linux/fs.h>
3955#include <linux/fiemap.h>
3956
3957int main(void)
3958{
3959 ioctl(0, FS_IOC_FIEMAP, 0);
3960 return 0;
3961}
3962EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003963if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00003964 fiemap=yes
3965fi
3966
Ulrich Hechtd0927932009-09-17 20:22:14 +03003967# check for dup3
3968dup3=no
3969cat > $TMPC << EOF
3970#include <unistd.h>
3971
3972int main(void)
3973{
3974 dup3(0, 0, 0);
3975 return 0;
3976}
3977EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01003978if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003979 dup3=yes
3980fi
3981
Alex Bligh4e0c6522013-08-21 16:02:43 +01003982# check for ppoll support
3983ppoll=no
3984cat > $TMPC << EOF
3985#include <poll.h>
3986
3987int main(void)
3988{
3989 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3990 ppoll(&pfd, 1, 0, 0);
3991 return 0;
3992}
3993EOF
3994if compile_prog "" "" ; then
3995 ppoll=yes
3996fi
3997
Alex Blighcd758dd2013-08-21 16:02:44 +01003998# check for prctl(PR_SET_TIMERSLACK , ... ) support
3999prctl_pr_set_timerslack=no
4000cat > $TMPC << EOF
4001#include <sys/prctl.h>
4002
4003int main(void)
4004{
4005 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4006 return 0;
4007}
4008EOF
4009if compile_prog "" "" ; then
4010 prctl_pr_set_timerslack=yes
4011fi
4012
Peter Maydell3b6edd12011-02-15 18:35:05 +00004013# check for epoll support
4014epoll=no
4015cat > $TMPC << EOF
4016#include <sys/epoll.h>
4017
4018int main(void)
4019{
4020 epoll_create(0);
4021 return 0;
4022}
4023EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004024if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004025 epoll=yes
4026fi
4027
Peter Maydell227f0212016-06-06 19:58:11 +01004028# epoll_create1 is a later addition
4029# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00004030epoll_create1=no
4031cat > $TMPC << EOF
4032#include <sys/epoll.h>
4033
4034int main(void)
4035{
Peter Maydell19e83f62011-04-26 16:56:40 +01004036 /* Note that we use epoll_create1 as a value, not as
4037 * a function being called. This is necessary so that on
4038 * old SPARC glibc versions where the function was present in
4039 * the library but not declared in the header file we will
4040 * fail the configure check. (Otherwise we will get a compiler
4041 * warning but not an error, and will proceed to fail the
4042 * qemu compile where we compile with -Werror.)
4043 */
Blue Swirlc075a722012-08-09 20:21:25 +00004044 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00004045}
4046EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01004047if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00004048 epoll_create1=yes
4049fi
4050
Peter Maydella8fd1ab2013-02-08 07:31:55 +00004051# check for sendfile support
4052sendfile=no
4053cat > $TMPC << EOF
4054#include <sys/sendfile.h>
4055
4056int main(void)
4057{
4058 return sendfile(0, 0, 0, 0);
4059}
4060EOF
4061if compile_prog "" "" ; then
4062 sendfile=yes
4063fi
4064
Riku Voipio51834342014-06-22 11:25:42 +01004065# check for timerfd support (glibc 2.8 and newer)
4066timerfd=no
4067cat > $TMPC << EOF
4068#include <sys/timerfd.h>
4069
4070int main(void)
4071{
4072 return(timerfd_create(CLOCK_REALTIME, 0));
4073}
4074EOF
4075if compile_prog "" "" ; then
4076 timerfd=yes
4077fi
4078
Riku Voipio9af5c902014-08-12 15:58:57 +03004079# check for setns and unshare support
4080setns=no
4081cat > $TMPC << EOF
4082#include <sched.h>
4083
4084int main(void)
4085{
4086 int ret;
4087 ret = setns(0, 0);
4088 ret = unshare(0);
4089 return ret;
4090}
4091EOF
4092if compile_prog "" "" ; then
4093 setns=yes
4094fi
4095
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004096# clock_adjtime probe
4097clock_adjtime=no
4098cat > $TMPC <<EOF
4099#include <time.h>
4100
4101int main(void)
4102{
4103 return clock_adjtime(0, 0);
4104}
4105EOF
4106clock_adjtime=no
4107if compile_prog "" "" ; then
4108 clock_adjtime=yes
4109fi
4110
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004111# syncfs probe
4112syncfs=no
4113cat > $TMPC <<EOF
4114#include <unistd.h>
4115
4116int main(void)
4117{
4118 return syncfs(0);
4119}
4120EOF
4121syncfs=no
4122if compile_prog "" "" ; then
4123 syncfs=yes
4124fi
4125
pbrookcc8ae6d2006-04-23 17:57:59 +00004126# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004127if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004128 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004129 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004130 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004131 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004132 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004133 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004134 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004135 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004136fi
4137
Stefan Weilf514f412009-10-11 12:44:07 +02004138# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004139byteswap_h=no
4140cat > $TMPC << EOF
4141#include <byteswap.h>
4142int main(void) { return bswap_32(0); }
4143EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004144if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004145 byteswap_h=yes
4146fi
4147
Stefan Weil75f13592013-01-05 12:17:38 +01004148# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004149bswap_h=no
4150cat > $TMPC << EOF
4151#include <sys/endian.h>
4152#include <sys/types.h>
4153#include <machine/bswap.h>
4154int main(void) { return bswap32(0); }
4155EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004156if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004157 bswap_h=yes
4158fi
4159
aliguorida93a1f2008-12-12 20:02:52 +00004160##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004161# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004162if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004163 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004164 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004165 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4166 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004167 else
4168 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004169 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004170 fi
4171 libiscsi="no"
4172 fi
4173fi
4174
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004175##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004176# Do we need libm
4177cat > $TMPC << EOF
4178#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004179int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004180EOF
4181if compile_prog "" "" ; then
4182 :
4183elif compile_prog "" "-lm" ; then
4184 LIBS="-lm $LIBS"
4185 libs_qga="-lm $libs_qga"
4186else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004187 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004188fi
4189
4190##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004191# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004192# uClibc provides 2 versions of clock_gettime(), one with realtime
4193# support and one without. This means that the clock_gettime() don't
4194# need -lrt. We still need it for timer_create() so we check for this
4195# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004196cat > $TMPC <<EOF
4197#include <signal.h>
4198#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004199int main(void) {
4200 timer_create(CLOCK_REALTIME, NULL, NULL);
4201 return clock_gettime(CLOCK_REALTIME, NULL);
4202}
aliguorida93a1f2008-12-12 20:02:52 +00004203EOF
4204
Juan Quintela52166aa2009-08-03 14:46:03 +02004205if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004206 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004207# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004208elif compile_prog "" "$pthread_lib -lrt" ; then
4209 LIBS="$LIBS -lrt"
4210 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004211fi
4212
Blue Swirl31ff5042009-09-12 12:33:07 +00004213if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Peter Maydell78723752017-09-04 18:19:00 +01004214 "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004215 libs_softmmu="-lutil $libs_softmmu"
4216fi
4217
Blue Swirlde5071c2009-09-12 09:58:46 +00004218##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004219# spice probe
4220if test "$spice" != "no" ; then
4221 cat > $TMPC << EOF
4222#include <spice.h>
4223int main(void) { spice_server_new(); return 0; }
4224EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004225 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4226 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004227 if $pkg_config --atleast-version=0.12.0 spice-server && \
4228 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004229 compile_prog "$spice_cflags" "$spice_libs" ; then
4230 spice="yes"
4231 libs_softmmu="$libs_softmmu $spice_libs"
4232 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004233 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4234 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004235 else
4236 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004237 feature_not_found "spice" \
4238 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004239 fi
4240 spice="no"
4241 fi
4242fi
4243
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004244# check for smartcard support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004245if test "$smartcard" != "no"; then
4246 if $pkg_config libcacard; then
4247 libcacard_cflags=$($pkg_config --cflags libcacard)
4248 libcacard_libs=$($pkg_config --libs libcacard)
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004249 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004250 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004251 if test "$smartcard" = "yes"; then
4252 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004253 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004254 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004255 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004256fi
4257
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004258# check for libusb
4259if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004260 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004261 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004262 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4263 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004264 else
4265 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004266 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004267 fi
4268 libusb="no"
4269 fi
4270fi
4271
Hans de Goede69354a82011-07-19 11:04:10 +02004272# check for usbredirparser for usb network redirection support
4273if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004274 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004275 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004276 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4277 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004278 else
4279 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004280 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004281 fi
4282 usb_redir="no"
4283 fi
4284fi
4285
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004286##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004287# check if we have VSS SDK headers for win
4288
4289if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4290 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004291 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004292 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4293 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004294 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004295 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4296 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004297 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004298 esac
4299 cat > $TMPC << EOF
4300#define __MIDL_user_allocate_free_DEFINED__
4301#include <inc/win2003/vss.h>
4302int main(void) { return VSS_CTX_BACKUP; }
4303EOF
4304 if compile_prog "$vss_win32_include" "" ; then
4305 guest_agent_with_vss="yes"
4306 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004307 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004308 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004309 else
4310 if test "$vss_win32_sdk" != "" ; then
4311 echo "ERROR: Please download and install Microsoft VSS SDK:"
4312 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4313 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4314 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4315 echo "ERROR: The headers are extracted in the directory \`inc'."
4316 feature_not_found "VSS support"
4317 fi
4318 guest_agent_with_vss="no"
4319 fi
4320fi
4321
4322##########################################
4323# lookup Windows platform SDK (if not specified)
4324# The SDK is needed only to build .tlb (type library) file of guest agent
4325# VSS provider from the source. It is usually unnecessary because the
4326# pre-compiled .tlb file is included.
4327
4328if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4329 if test -z "$win_sdk"; then
4330 programfiles="$PROGRAMFILES"
4331 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4332 if test -n "$programfiles"; then
4333 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4334 else
4335 feature_not_found "Windows SDK"
4336 fi
4337 elif test "$win_sdk" = "no"; then
4338 win_sdk=""
4339 fi
4340fi
4341
4342##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004343# check if mingw environment provides a recent ntddscsi.h
4344if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4345 cat > $TMPC << EOF
4346#include <windows.h>
4347#include <ntddscsi.h>
4348int main(void) {
4349#if !defined(IOCTL_SCSI_GET_ADDRESS)
4350#error Missing required ioctl definitions
4351#endif
4352 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4353 return addr.Lun;
4354}
4355EOF
4356 if compile_prog "" "" ; then
4357 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004358 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004359 fi
4360fi
4361
4362##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004363# virgl renderer probe
4364
4365if test "$virglrenderer" != "no" ; then
4366 cat > $TMPC << EOF
4367#include <virglrenderer.h>
4368int main(void) { virgl_renderer_poll(); return 0; }
4369EOF
4370 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4371 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4372 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4373 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4374 virglrenderer="yes"
4375 else
4376 if test "$virglrenderer" = "yes" ; then
4377 feature_not_found "virglrenderer"
4378 fi
4379 virglrenderer="no"
4380 fi
4381fi
4382
4383##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004384# check if we have fdatasync
4385
4386fdatasync=no
4387cat > $TMPC << EOF
4388#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004389int main(void) {
4390#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4391return fdatasync(0);
4392#else
Stefan Weile172fe12012-04-06 21:33:20 +02004393#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004394#endif
4395}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004396EOF
4397if compile_prog "" "" ; then
4398 fdatasync=yes
4399fi
4400
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004401##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004402# check if we have madvise
4403
4404madvise=no
4405cat > $TMPC << EOF
4406#include <sys/types.h>
4407#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004408#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004409int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4410EOF
4411if compile_prog "" "" ; then
4412 madvise=yes
4413fi
4414
4415##########################################
4416# check if we have posix_madvise
4417
4418posix_madvise=no
4419cat > $TMPC << EOF
4420#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004421#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004422int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4423EOF
4424if compile_prog "" "" ; then
4425 posix_madvise=yes
4426fi
4427
4428##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004429# check if we have posix_syslog
4430
4431posix_syslog=no
4432cat > $TMPC << EOF
4433#include <syslog.h>
4434int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4435EOF
4436if compile_prog "" "" ; then
4437 posix_syslog=yes
4438fi
4439
4440##########################################
Peter Maydell401bc052017-09-05 13:19:32 +01004441# check if we have sem_timedwait
4442
4443sem_timedwait=no
4444cat > $TMPC << EOF
4445#include <semaphore.h>
4446int main(void) { return sem_timedwait(0, 0); }
4447EOF
4448if compile_prog "" "" ; then
4449 sem_timedwait=yes
4450fi
4451
4452##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004453# check if trace backend exists
4454
Lluís Vilanova5b808272014-05-27 15:02:14 +02004455$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004456if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004457 error_exit "invalid trace backends" \
4458 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004459fi
4460
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004461##########################################
4462# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004463if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004464 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004465#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004466int main(void) { return 0; }
4467EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004468 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004469 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004470 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004471 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004472 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004473 fi
4474 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004475 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004476 else
4477 urcu_bp_libs="-lurcu-bp"
4478 fi
4479
4480 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4481 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004482 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004483 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004484 fi
4485fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004486
4487##########################################
4488# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004489if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004490 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004491 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004492 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004493 trace_backend_stap="no"
4494 if has 'stap' ; then
4495 trace_backend_stap="yes"
4496 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004497fi
4498
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004499##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004500# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304501
Peter Maydell7c2acc72013-04-08 12:11:27 +01004502# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004503# is sigcontext. On Windows the only valid backend is the Windows
4504# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004505
4506ucontext_works=no
4507if test "$darwin" != "yes"; then
4508 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304509#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004510#ifdef __stub_makecontext
4511#error Ignoring glibc stub makecontext which will always fail
4512#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004513int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304514EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004515 if compile_prog "" "" ; then
4516 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304517 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004518fi
4519
4520if test "$coroutine" = ""; then
4521 if test "$mingw32" = "yes"; then
4522 coroutine=win32
4523 elif test "$ucontext_works" = "yes"; then
4524 coroutine=ucontext
4525 else
4526 coroutine=sigaltstack
4527 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004528else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004529 case $coroutine in
4530 windows)
4531 if test "$mingw32" != "yes"; then
4532 error_exit "'windows' coroutine backend only valid for Windows"
4533 fi
4534 # Unfortunately the user visible backend name doesn't match the
4535 # coroutine-*.c filename for this case, so we have to adjust it here.
4536 coroutine=win32
4537 ;;
4538 ucontext)
4539 if test "$ucontext_works" != "yes"; then
4540 feature_not_found "ucontext"
4541 fi
4542 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004543 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004544 if test "$mingw32" = "yes"; then
4545 error_exit "only the 'windows' coroutine backend is valid for Windows"
4546 fi
4547 ;;
4548 *)
4549 error_exit "unknown coroutine backend $coroutine"
4550 ;;
4551 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304552fi
4553
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004554if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004555 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004556fi
4557
Peter Lieven7d992e42016-09-27 11:58:45 +02004558if test "$debug_stack_usage" = "yes"; then
4559 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4560 error_exit "stack usage debugging is not supported for $cpu"
4561 fi
4562 if test "$coroutine_pool" = "yes"; then
4563 echo "WARN: disabling coroutine pool for stack usage debugging"
4564 coroutine_pool=no
4565 fi
4566fi
4567
4568
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304569##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304570# check if we have open_by_handle_at
4571
Stefan Weil4e1797f2012-06-18 22:11:06 +02004572open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304573cat > $TMPC << EOF
4574#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004575#if !defined(AT_EMPTY_PATH)
4576# error missing definition
4577#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004578int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004579#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304580EOF
4581if compile_prog "" "" ; then
4582 open_by_handle_at=yes
4583fi
4584
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304585########################################
4586# check if we have linux/magic.h
4587
4588linux_magic_h=no
4589cat > $TMPC << EOF
4590#include <linux/magic.h>
4591int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004592 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304593}
4594EOF
4595if compile_prog "" "" ; then
4596 linux_magic_h=yes
4597fi
4598
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004599########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004600# check whether we can disable warning option with a pragma (this is needed
4601# to silence warnings in the headers of some versions of external libraries).
4602# This test has to be compiled with -Werror as otherwise an unknown pragma is
4603# only a warning.
4604#
4605# If we can't selectively disable warning in the code, disable -Werror so that
4606# the build doesn't fail anyway.
4607
Peter Maydell06d71fa2012-07-30 16:13:07 +01004608pragma_disable_unused_but_set=no
4609cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004610#pragma GCC diagnostic push
Peter Maydell06d71fa2012-07-30 16:13:07 +01004611#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
Kevin Wolfc95e3082013-02-22 21:08:51 +01004612#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004613#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004614
Peter Maydell06d71fa2012-07-30 16:13:07 +01004615int main(void) {
4616 return 0;
4617}
4618EOF
4619if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004620 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004621else
4622 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004623fi
4624
4625########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004626# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004627
4628valgrind_h=no
4629cat > $TMPC << EOF
4630#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004631int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004632 return 0;
4633}
4634EOF
4635if compile_prog "" "" ; then
4636 valgrind_h=yes
4637fi
4638
4639########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004640# check if environ is declared
4641
4642has_environ=no
4643cat > $TMPC << EOF
4644#include <unistd.h>
4645int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00004646 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004647 return 0;
4648}
4649EOF
4650if compile_prog "" "" ; then
4651 has_environ=yes
4652fi
4653
Richard Henderson76a347e2012-12-28 14:17:02 -08004654########################################
4655# check if cpuid.h is usable.
4656
Richard Henderson76a347e2012-12-28 14:17:02 -08004657cat > $TMPC << EOF
4658#include <cpuid.h>
4659int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00004660 unsigned a, b, c, d;
4661 int max = __get_cpuid_max(0, 0);
4662
4663 if (max >= 1) {
4664 __cpuid(1, a, b, c, d);
4665 }
4666
4667 if (max >= 7) {
4668 __cpuid_count(7, 0, a, b, c, d);
4669 }
4670
4671 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08004672}
4673EOF
4674if compile_prog "" "" ; then
4675 cpuid_h=yes
4676fi
4677
Richard Henderson5dd89902017-07-18 18:40:18 -10004678##########################################
4679# avx2 optimization requirement check
4680#
4681# There is no point enabling this if cpuid.h is not usable,
4682# since we won't be able to select the new routines.
4683
4684if test $cpuid_h = yes; then
4685 cat > $TMPC << EOF
4686#pragma GCC push_options
4687#pragma GCC target("avx2")
4688#include <cpuid.h>
4689#include <immintrin.h>
4690static int bar(void *a) {
4691 __m256i x = *(__m256i *)a;
4692 return _mm256_testz_si256(x, x);
4693}
4694int main(int argc, char *argv[]) { return bar(argv[0]); }
4695EOF
4696 if compile_object "" ; then
4697 avx2_opt="yes"
4698 fi
4699fi
4700
Richard Hendersonf5401662013-02-16 12:46:59 -08004701########################################
4702# check if __[u]int128_t is usable.
4703
4704int128=no
4705cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01004706#if defined(__clang_major__) && defined(__clang_minor__)
4707# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4708# error __int128_t does not work in CLANG before 3.2
4709# endif
4710#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08004711__int128_t a;
4712__uint128_t b;
4713int main (void) {
4714 a = a + b;
4715 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01004716 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08004717 return 0;
4718}
4719EOF
4720if compile_prog "" "" ; then
4721 int128=yes
4722fi
Richard Henderson76a347e2012-12-28 14:17:02 -08004723
Richard Henderson7ebee432016-06-29 21:10:59 -07004724#########################################
4725# See if 128-bit atomic operations are supported.
4726
4727atomic128=no
4728if test "$int128" = "yes"; then
4729 cat > $TMPC << EOF
4730int main(void)
4731{
4732 unsigned __int128 x = 0, y = 0;
4733 y = __atomic_load_16(&x, 0);
4734 __atomic_store_16(&x, y, 0);
4735 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4736 return 0;
4737}
4738EOF
4739 if compile_prog "" "" ; then
4740 atomic128=yes
4741 fi
4742fi
4743
Richard Hendersondf79b992016-09-02 12:23:57 -07004744#########################################
4745# See if 64-bit atomic operations are supported.
4746# Note that without __atomic builtins, we can only
4747# assume atomic loads/stores max at pointer size.
4748
4749cat > $TMPC << EOF
4750#include <stdint.h>
4751int main(void)
4752{
4753 uint64_t x = 0, y = 0;
4754#ifdef __ATOMIC_RELAXED
4755 y = __atomic_load_8(&x, 0);
4756 __atomic_store_8(&x, y, 0);
4757 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4758 __atomic_exchange_8(&x, y, 0);
4759 __atomic_fetch_add_8(&x, y, 0);
4760#else
4761 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4762 __sync_lock_test_and_set(&x, y);
4763 __sync_val_compare_and_swap(&x, y, 0);
4764 __sync_fetch_and_add(&x, y);
4765#endif
4766 return 0;
4767}
4768EOF
4769if compile_prog "" "" ; then
4770 atomic64=yes
4771fi
4772
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08004773########################################
4774# check if getauxval is available.
4775
4776getauxval=no
4777cat > $TMPC << EOF
4778#include <sys/auxv.h>
4779int main(void) {
4780 return getauxval(AT_HWCAP) == 0;
4781}
4782EOF
4783if compile_prog "" "" ; then
4784 getauxval=yes
4785fi
4786
John Snowfd0e6052015-03-25 18:57:39 -04004787########################################
4788# check if ccache is interfering with
4789# semantic analysis of macros
4790
John Snow5e4dfd32015-10-28 13:56:40 -04004791unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04004792ccache_cpp2=no
4793cat > $TMPC << EOF
4794static const int Z = 1;
4795#define fn() ({ Z; })
4796#define TAUT(X) ((X) == Z)
4797#define PAREN(X, Y) (X == Y)
4798#define ID(X) (X)
4799int main(int argc, char *argv[])
4800{
4801 int x = 0, y = 0;
4802 x = ID(x);
4803 x = fn();
4804 fn();
4805 if (PAREN(x, y)) return 0;
4806 if (TAUT(Z)) return 0;
4807 return 0;
4808}
4809EOF
4810
4811if ! compile_object "-Werror"; then
4812 ccache_cpp2=yes
4813fi
4814
John Snowb553a042015-11-03 15:43:42 -05004815#################################################
4816# clang does not support glibc + FORTIFY_SOURCE.
4817
4818if test "$fortify_source" != "no"; then
4819 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4820 fortify_source="no";
Peter Maydelle1890912017-06-26 16:25:24 +01004821 elif test -n "$cxx" && has $cxx &&
John Snowcfcc7c12015-11-12 11:29:49 -05004822 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05004823 fortify_source="no";
4824 else
4825 fortify_source="yes"
4826 fi
4827fi
4828
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304829##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04004830# check if struct fsxattr is available via linux/fs.h
4831
4832have_fsxattr=no
4833cat > $TMPC << EOF
4834#include <linux/fs.h>
4835struct fsxattr foo;
4836int main(void) {
4837 return 0;
4838}
4839EOF
4840if compile_prog "" "" ; then
4841 have_fsxattr=yes
4842fi
4843
Peter Maydellb66e10e2016-06-08 18:34:32 +01004844##########################################
4845# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02004846have_rtnetlink=no
4847cat > $TMPC << EOF
4848#include <linux/rtnetlink.h>
4849int main(void) {
4850 return IFLA_PROTO_DOWN;
4851}
4852EOF
4853if compile_prog "" "" ; then
4854 have_rtnetlink=yes
4855fi
4856
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01004857##########################################
4858# check for usable AF_VSOCK environment
4859have_af_vsock=no
4860cat > $TMPC << EOF
4861#include <errno.h>
4862#include <sys/types.h>
4863#include <sys/socket.h>
4864#if !defined(AF_VSOCK)
4865# error missing AF_VSOCK flag
4866#endif
4867#include <linux/vm_sockets.h>
4868int main(void) {
4869 int sock, ret;
4870 struct sockaddr_vm svm;
4871 socklen_t len = sizeof(svm);
4872 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4873 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4874 if ((ret == -1) && (errno == ENOTCONN)) {
4875 return 0;
4876 }
4877 return -1;
4878}
4879EOF
4880if compile_prog "" "" ; then
4881 have_af_vsock=yes
4882fi
4883
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04004884##########################################
4885# check for usable AF_ALG environment
4886hava_afalg=no
4887cat > $TMPC << EOF
4888#include <errno.h>
4889#include <sys/types.h>
4890#include <sys/socket.h>
4891#include <linux/if_alg.h>
4892int main(void) {
4893 int sock;
4894 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
4895 return sock;
4896}
4897EOF
4898if compile_prog "" "" ; then
4899 have_afalg=yes
4900fi
4901if test "$crypto_afalg" = "yes"
4902then
4903 if test "$have_afalg" != "yes"
4904 then
4905 error_exit "AF_ALG requested but could not be detected"
4906 fi
4907fi
4908
4909
James Clarke6969ec62016-06-06 12:02:50 +01004910#################################################
4911# Sparc implicitly links with --relax, which is
4912# incompatible with -r, so --no-relax should be
4913# given. It does no harm to give it on other
4914# platforms too.
4915
4916# Note: the prototype is needed since QEMU_CFLAGS
4917# contains -Wmissing-prototypes
4918cat > $TMPC << EOF
4919extern int foo(void);
4920int foo(void) { return 0; }
4921EOF
4922if ! compile_object ""; then
4923 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4924fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01004925for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4926 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4927 LD_REL_FLAGS=$i
4928 break
4929 fi
4930done
4931if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4932 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01004933fi
4934
Jan Vesely277abf12016-04-29 13:15:23 -04004935##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05004936# check for sysmacros.h
4937
4938have_sysmacros=no
4939cat > $TMPC << EOF
4940#include <sys/sysmacros.h>
4941int main(void) {
4942 return makedev(0, 0);
4943}
4944EOF
4945if compile_prog "" "" ; then
4946 have_sysmacros=yes
4947fi
4948
4949##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07004950# Veritas HyperScale block driver VxHS
4951# Check if libvxhs is installed
4952
4953if test "$vxhs" != "no" ; then
4954 cat > $TMPC <<EOF
4955#include <stdint.h>
4956#include <qnio/qnio_api.h>
4957
4958void *vxhs_callback;
4959
4960int main(void) {
4961 iio_init(QNIO_VERSION, vxhs_callback);
4962 return 0;
4963}
4964EOF
4965 vxhs_libs="-lvxhs -lssl"
4966 if compile_prog "" "$vxhs_libs" ; then
4967 vxhs=yes
4968 else
4969 if test "$vxhs" = "yes" ; then
4970 feature_not_found "vxhs block device" "Install libvxhs See github"
4971 fi
4972 vxhs=no
4973 fi
4974fi
4975
4976##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01004977# check for _Static_assert()
4978
4979have_static_assert=no
4980cat > $TMPC << EOF
4981_Static_assert(1, "success");
4982int main(void) {
4983 return 0;
4984}
4985EOF
4986if compile_prog "" "" ; then
4987 have_static_assert=yes
4988fi
4989
4990##########################################
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02004991# check for utmpx.h, it is missing e.g. on OpenBSD
4992
4993have_utmpx=no
4994cat > $TMPC << EOF
4995#include <utmpx.h>
4996struct utmpx user_info;
4997int main(void) {
4998 return 0;
4999}
5000EOF
5001if compile_prog "" "" ; then
5002 have_utmpx=yes
5003fi
5004
5005##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02005006# End of CC checks
5007# After here, no more $cc or $ld runs
5008
Blue Swirl1d728c32012-05-01 18:45:39 +00005009if test "$gcov" = "yes" ; then
5010 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5011 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05005012elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02005013 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Peter Maydellce278612015-11-09 15:14:09 +00005014elif test "$debug" = "no"; then
5015 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005016fi
Juan Quintelaa316e372009-09-30 01:10:55 +02005017
Peter Lieven6542aa92014-02-03 10:26:13 +01005018##########################################
5019# Do we have libnfs
5020if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01005021 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01005022 libnfs="yes"
5023 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01005024 else
5025 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08005026 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01005027 fi
5028 libnfs="no"
5029 fi
5030fi
Blue Swirl1d728c32012-05-01 18:45:39 +00005031
Peter Maydell6ca026c2012-07-18 15:10:18 +01005032# Now we've finished running tests it's OK to add -Werror to the compiler flags
5033if test "$werror" = "yes"; then
5034 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5035fi
5036
Juan Quintelae86ecd42009-08-03 14:45:59 +02005037if test "$solaris" = "no" ; then
5038 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02005039 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02005040 fi
5041fi
5042
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005043# test if pod2man has --utf8 option
5044if pod2man --help | grep -q utf8; then
5045 POD2MAN="pod2man --utf8"
5046else
5047 POD2MAN="pod2man"
5048fi
5049
Blue Swirl952afb72010-09-19 08:36:34 +00005050# Use ASLR, no-SEH and DEP if available
5051if test "$mingw32" = "yes" ; then
5052 for flag in --dynamicbase --no-seh --nxcompat; do
Christian Borntraegere9a35912017-08-23 12:16:23 +02005053 if ld_has $flag ; then
Blue Swirl952afb72010-09-19 08:36:34 +00005054 LDFLAGS="-Wl,$flag $LDFLAGS"
5055 fi
5056 done
5057fi
5058
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03005059qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08005060qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03005061qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06005062qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02005063
Kamil Rytarowskie0580342017-07-14 09:33:44 +01005064# We can only support ivshmem if we have eventfd
5065if [ "$eventfd" = "yes" ]; then
5066 ivshmem=yes
5067fi
5068
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005069tools=""
5070if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02005071 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005072 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5073 tools="qemu-nbd\$(EXESUF) $tools"
Kamil Rytarowskib1449ed2017-07-14 09:33:45 +01005074 fi
5075 if [ "$ivshmem" = "yes" ]; then
David Marchanda75eb032014-09-08 11:17:48 +02005076 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01005077 fi
5078fi
5079if test "$softmmu" = yes ; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005080 if test "$linux" = yes; then
5081 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02005082 virtfs=yes
5083 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5084 else
5085 if test "$virtfs" = yes; then
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005086 error_exit "VirtFS requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05305087 fi
Andreas Färber17500372012-05-01 01:12:03 +02005088 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02005089 fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005090 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5091 mpath=yes
5092 else
5093 if test "$mpath" = yes; then
5094 error_exit "Multipath requires libmpathpersist devel"
5095 fi
5096 mpath=no
5097 fi
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02005098 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5099 else
5100 if test "$virtfs" = yes; then
5101 error_exit "VirtFS is supported only on Linux"
5102 fi
5103 virtfs=no
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005104 if test "$mpath" = yes; then
5105 error_exit "Multipath is supported only on Linux"
5106 fi
5107 mpath=no
M. Mohan Kumar17bff522011-12-14 13:58:42 +05305108 fi
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005109fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005110
5111# Probe for guest agent support/options
5112
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005113if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04005114 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05005115 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04005116 guest_agent=yes
5117 elif [ "$guest_agent" != yes ]; then
5118 guest_agent=no
5119 else
5120 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02005121 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02005122fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005123
Michael Roth9d6bc272015-08-26 10:49:13 -05005124# Guest agent Window MSI package
5125
5126if test "$guest_agent" != yes; then
5127 if test "$guest_agent_msi" = yes; then
5128 error_exit "MSI guest agent package requires guest agent enabled"
5129 fi
5130 guest_agent_msi=no
5131elif test "$mingw32" != "yes"; then
5132 if test "$guest_agent_msi" = "yes"; then
5133 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5134 fi
5135 guest_agent_msi=no
5136elif ! has wixl; then
5137 if test "$guest_agent_msi" = "yes"; then
5138 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5139 fi
5140 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05005141else
5142 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5143 # disabled explicitly
5144 if test "$guest_agent_msi" != "no"; then
5145 guest_agent_msi=yes
5146 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05005147fi
5148
Michael Roth1a349042015-08-26 11:14:31 -05005149if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05005150 if test "$guest_agent_with_vss" = "yes"; then
5151 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5152 fi
5153
5154 if test "$QEMU_GA_MANUFACTURER" = ""; then
5155 QEMU_GA_MANUFACTURER=QEMU
5156 fi
5157
5158 if test "$QEMU_GA_DISTRO" = ""; then
5159 QEMU_GA_DISTRO=Linux
5160 fi
5161
5162 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02005163 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05005164 fi
5165
Stefan Weil89138852016-05-16 15:10:20 +02005166 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05005167
5168 case "$cpu" in
5169 x86_64)
5170 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5171 ;;
5172 i386)
5173 QEMU_GA_MSI_ARCH="-D Arch=32"
5174 ;;
5175 *)
5176 error_exit "CPU $cpu not supported for building installation package"
5177 ;;
5178 esac
5179fi
5180
Paolo Bonzinica35f782010-05-26 16:08:29 +02005181# Mac OS X ships with a broken assembler
5182roms=
5183if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5184 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5185 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005186 # Different host OS linkers have different ideas about the name of the ELF
5187 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
5188 # variant; and Windows uses i386pe.
5189 for emu in elf_i386 elf_i386_fbsd i386pe; do
5190 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5191 ld_i386_emulation="$emu"
5192 roms="optionrom"
5193 break
5194 fi
5195 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005196fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005197if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005198 roms="$roms spapr-rtas"
5199fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005200
Christian Borntraeger9933c302013-04-23 01:23:03 +00005201if test "$cpu" = "s390x" ; then
5202 roms="$roms s390-ccw"
5203fi
5204
Richard Henderson964c6fa2013-06-21 19:10:16 -07005205# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005206if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005207 textseg_addr=
5208 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005209 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5210 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005211 textseg_addr=0x60000000
5212 ;;
5213 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005214 # A 256M aligned address, high in the address space, with enough
5215 # room for the code_gen_buffer above it before the stack.
5216 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005217 ;;
5218 esac
5219 if [ -n "$textseg_addr" ]; then
5220 cat > $TMPC <<EOF
5221 int main(void) { return 0; }
5222EOF
5223 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5224 if ! compile_prog "" "$textseg_ldflags"; then
5225 # In case ld does not support -Ttext-segment, edit the default linker
5226 # script via sed to set the .text start addr. This is needed on FreeBSD
5227 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005228 if ! $ld --verbose >/dev/null 2>&1; then
5229 error_exit \
5230 "We need to link the QEMU user mode binaries at a" \
5231 "specific text address. Unfortunately your linker" \
5232 "doesn't support either the -Ttext-segment option or" \
5233 "printing the default linker script with --verbose." \
5234 "If you don't want the user mode binaries, pass the" \
5235 "--disable-user option to configure."
5236 fi
5237
Richard Henderson964c6fa2013-06-21 19:10:16 -07005238 $ld --verbose | sed \
5239 -e '1,/==================================================/d' \
5240 -e '/==================================================/,$d' \
5241 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5242 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5243 textseg_ldflags="-Wl,-T../config-host.ld"
5244 fi
5245 fi
5246fi
5247
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005248# Check that the C++ compiler exists and works with the C compiler.
5249# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5250if has $cxx; then
5251 cat > $TMPC <<EOF
5252int c_function(void);
5253int main(void) { return c_function(); }
5254EOF
5255
5256 compile_object
5257
5258 cat > $TMPCXX <<EOF
5259extern "C" {
5260 int c_function(void);
5261}
5262int c_function(void) { return 42; }
5263EOF
5264
5265 update_cxxflags
5266
5267 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5268 # C++ compiler $cxx works ok with C compiler $cc
5269 :
5270 else
5271 echo "C++ compiler $cxx does not work with C compiler $cc"
5272 echo "Disabling C++ specific optional code"
5273 cxx=
5274 fi
5275else
5276 echo "No C++ compiler available; disabling C++ specific optional code"
5277 cxx=
5278fi
5279
Cole Robinson02d34f62016-05-06 14:03:09 -04005280echo_version() {
5281 if test "$1" = "yes" ; then
5282 echo "($2)"
5283 fi
5284}
5285
Jan Kiszka50e12062014-10-02 10:03:55 +02005286# prepend pixman and ftd flags after all config tests are done
5287QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5288libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005289
bellard43ce4df2003-06-09 19:53:12 +00005290echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005291echo "BIOS directory $(eval echo $qemu_datadir)"
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005292echo "firmware path $(eval echo $firmwarepath)"
Stefan Weil89138852016-05-16 15:10:20 +02005293echo "binary directory $(eval echo $bindir)"
5294echo "library directory $(eval echo $libdir)"
5295echo "module directory $(eval echo $qemu_moddir)"
5296echo "libexec directory $(eval echo $libexecdir)"
5297echo "include directory $(eval echo $includedir)"
5298echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005299if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005300echo "local state directory $(eval echo $local_statedir)"
5301echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005302echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005303else
5304echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005305echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005306fi
bellard5a671352003-10-01 00:13:48 +00005307echo "Source path $source_path"
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005308echo "GIT submodules $git_submodules"
bellard43ce4df2003-06-09 19:53:12 +00005309echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005310echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005311echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005312echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005313echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005314echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005315echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005316echo "LDFLAGS $LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005317echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005318echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005319echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005320if test "$slirp" = "yes" ; then
5321 echo "smbd $smbd"
5322fi
Fam Zheng17969262014-02-10 14:48:56 +08005323echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005324echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005325echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005326echo "target list $target_list"
bellard43ce4df2003-06-09 19:53:12 +00005327echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005328echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005329echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005330echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005331echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005332if test "$darwin" = "yes" ; then
5333 echo "Cocoa support $cocoa"
5334fi
Stefan Weil89138852016-05-16 15:10:20 +02005335echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5336echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005337echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005338echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005339echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005340echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005341echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005342echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005343echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02005344echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005345echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005346echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005347echo "curses support $curses"
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005348echo "virgl support $virglrenderer"
Alexander Graf769ce762009-05-11 17:41:42 +02005349echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005350echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005351echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005352echo "Block whitelist (rw) $block_drv_rw_whitelist"
5353echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305354echo "VirtFS support $virtfs"
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005355echo "Multipath support $mpath"
Jes Sorensen821601e2011-03-16 13:33:36 +01005356echo "VNC support $vnc"
5357if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005358 echo "VNC SASL support $vnc_sasl"
5359 echo "VNC JPEG support $vnc_jpeg"
5360 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005361fi
blueswir131422552007-04-16 18:27:06 +00005362if test -n "$sparc_cpu"; then
5363 echo "Target Sparc Arch $sparc_cpu"
5364fi
aliguorie37630c2009-04-22 15:19:10 +00005365echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005366if test "$xen" = "yes" ; then
5367 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005368 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005369fi
aurel322e4d9fb2008-04-08 06:01:02 +00005370echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005371echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005372echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005373echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005374echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005375echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005376echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005377echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005378echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005379echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01005380echo "HAX support $hax"
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005381echo "TCG support $tcg"
5382if test "$tcg" = "yes" ; then
5383 echo "TCG debug enabled $debug_tcg"
5384 echo "TCG interpreter $tcg_interpreter"
5385fi
Michael R. Hines2da776d2013-07-22 10:01:54 -04005386echo "RDMA support $rdma"
aurel32f652e6a2008-12-16 10:43:48 +00005387echo "fdt support $fdt"
aliguoriceb42de2009-04-07 18:43:28 +00005388echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005389echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005390echo "madvise $madvise"
5391echo "posix_madvise $posix_madvise"
Corey Bryant47e98652012-01-26 09:42:26 -05005392echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005393echo "vhost-net support $vhost_net"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005394echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005395echo "vhost-vsock support $vhost_vsock"
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005396echo "vhost-user support $vhost_user"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005397echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005398if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005399echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005400fi
Stefan Weil89138852016-05-16 15:10:20 +02005401echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005402echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005403echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005404echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005405echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005406echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005407echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005408echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005409echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01005410echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05005411echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005412echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05005413echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05005414echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03005415echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01005416echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005417echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02005418echo "debug stack usage $debug_stack_usage"
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005419echo "crypto afalg $crypto_afalg"
Bharata B Raoeb100392012-09-24 14:42:45 +05305420echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00005421echo "gcov $gcov_tool"
5422echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05005423echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005424echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005425echo "TPM passthrough $tpm_passthrough"
Paolo Bonzini3556c232013-05-10 14:16:40 +02005426echo "QOM debugging $qom_cast_debug"
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01005427echo "Live block migration $live_block_migration"
qiaonuohan607dacd2014-02-18 14:11:30 +08005428echo "lzo support $lzo"
5429echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01005430echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08005431echo "NUMA host support $numa"
Fam Zheng2847b462015-03-26 11:03:12 +08005432echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02005433echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08005434echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005435echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005436echo "VxHS block device $vxhs"
bellard67b915a2004-03-31 23:37:16 +00005437
Stefan Weil1ba16962011-07-29 22:40:45 +02005438if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00005439echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00005440fi
bellard97a847b2003-08-10 21:36:04 +00005441
Peter Maydell898be3e2017-03-21 14:31:57 +00005442if test "$supported_cpu" = "no"; then
5443 echo
5444 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5445 echo
5446 echo "CPU host architecture $cpu support is not currently maintained."
5447 echo "The QEMU project intends to remove support for this host CPU in"
5448 echo "a future release if nobody volunteers to maintain it and to"
5449 echo "provide a build host for our continuous integration setup."
5450 echo "configure has succeeded and you can continue to build, but"
5451 echo "if you care about QEMU on this platform you should contact"
5452 echo "us upstream at qemu-devel@nongnu.org."
5453fi
5454
5455if test "$supported_os" = "no"; then
5456 echo
5457 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5458 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00005459 echo "Host OS $targetos support is not currently maintained."
5460 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00005461 echo "a future release if nobody volunteers to maintain it and to"
5462 echo "provide a build host for our continuous integration setup."
5463 echo "configure has succeeded and you can continue to build, but"
5464 echo "if you care about QEMU on this platform you should contact"
5465 echo "us upstream at qemu-devel@nongnu.org."
5466fi
5467
Juan Quintela98ec69a2009-07-16 18:34:18 +02005468config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00005469
Stefan Weildbd99ae2013-01-01 18:33:44 +01005470echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5471
Juan Quintela98ec69a2009-07-16 18:34:18 +02005472echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005473echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005474
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02005475echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005476echo "prefix=$prefix" >> $config_host_mak
5477echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03005478echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04005479echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02005480echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005481echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005482echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03005483echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03005484echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
Gerd Hoffmann3d5eeca2017-09-14 13:42:36 +02005485echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03005486echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08005487echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005488if test "$mingw32" = "no" ; then
5489 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5490fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04005491echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +01005492echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01005493echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +01005494echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06005495echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02005496echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Daniel P. Berrangeaef45d52017-09-29 11:11:56 +01005497echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005498
Juan Quintela98ec69a2009-07-16 18:34:18 +02005499echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02005500
aurel32f8393942009-04-13 18:45:38 +00005501if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005502 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00005503fi
aliguori1625af82009-04-05 17:41:02 +00005504if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07005505 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00005506fi
bellard7d132992003-03-06 23:23:54 +00005507if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02005508 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005509fi
bellard67b915a2004-03-31 23:37:16 +00005510if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005511 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02005512 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00005513 version_major=${rc_version%%.*}
5514 rc_version=${rc_version#*.}
5515 version_minor=${rc_version%%.*}
5516 rc_version=${rc_version#*.}
5517 version_subminor=${rc_version%%.*}
5518 version_micro=0
5519 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5520 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005521 if test "$guest_agent_with_vss" = "yes" ; then
5522 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05005523 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005524 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5525 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05005526 if test "$guest_agent_ntddscsi" = "yes" ; then
5527 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5528 fi
Michael Roth1a349042015-08-26 11:14:31 -05005529 if test "$guest_agent_msi" = "yes"; then
Yossi Hindin9dacf322015-05-06 14:57:40 +03005530 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5531 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5532 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5533 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5534 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5535 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5536 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5537 fi
pbrook210fa552007-02-27 21:04:49 +00005538else
Juan Quintela35f4df22009-07-27 16:13:07 +02005539 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00005540fi
blueswir1128ab2f2008-08-15 18:33:42 +00005541
Mark McLoughlindffcb712009-10-22 17:49:11 +01005542if test "$linux" = "yes" ; then
5543 echo "CONFIG_LINUX=y" >> $config_host_mak
5544fi
5545
bellard83fb7ad2004-07-05 21:25:26 +00005546if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005547 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00005548fi
malcb29fe3e2008-11-18 01:42:22 +00005549
bellardec530c82006-04-25 22:36:06 +00005550if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005551 echo "CONFIG_SOLARIS=y" >> $config_host_mak
bellardec530c82006-04-25 22:36:06 +00005552fi
Andreas Färber179cf402010-09-20 00:50:43 +02005553if test "$haiku" = "yes" ; then
5554 echo "CONFIG_HAIKU=y" >> $config_host_mak
5555fi
bellard97a847b2003-08-10 21:36:04 +00005556if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005557 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005558fi
Stefan Weil1ba16962011-07-29 22:40:45 +02005559if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005560 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00005561fi
bellardc20709a2004-04-21 23:27:19 +00005562if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005563 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04005564 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00005565fi
ths8a16d272008-07-19 09:56:24 +00005566if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005567 echo "CONFIG_VDE=y" >> $config_host_mak
Fam Zhenge2ad6f12017-09-07 16:35:52 +08005568 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00005569fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01005570if test "$netmap" = "yes" ; then
5571 echo "CONFIG_NETMAP=y" >> $config_host_mak
5572fi
Gonglei015a33b2014-07-01 20:58:08 +08005573if test "$l2tpv3" = "yes" ; then
5574 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5575fi
Corey Bryant47e98652012-01-26 09:42:26 -05005576if test "$cap_ng" = "yes" ; then
5577 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5578fi
Juan Quintela2358a492009-07-27 16:13:25 +02005579echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005580for drv in $audio_drv_list; do
Stefan Weil89138852016-05-16 15:10:20 +02005581 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Juan Quintela98ec69a2009-07-16 18:34:18 +02005582 echo "$def=y" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005583done
Fam Zhengb1149912017-09-07 16:29:13 +08005584echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5585echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5586echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5587echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5588echo "OSS_LIBS=$oss_libs" >> $config_host_mak
Juan Quintela67f86e82009-08-03 14:46:59 +02005589if test "$audio_pt_int" = "yes" ; then
5590 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5591fi
malcd5631632009-10-10 01:13:41 +04005592if test "$audio_win_int" = "yes" ; then
5593 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5594fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005595echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5596echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01005597if test "$vnc" = "yes" ; then
5598 echo "CONFIG_VNC=y" >> $config_host_mak
5599fi
aliguori2f9606b2009-03-06 20:27:28 +00005600if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005601 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00005602fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005603if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005604 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005605fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005606if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02005607 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02005608fi
aliguori76655d62009-03-06 20:27:37 +00005609if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005610 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00005611fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005612if test "$xfs" = "yes" ; then
5613 echo "CONFIG_XFS=y" >> $config_host_mak
5614fi
Stefan Weil89138852016-05-16 15:10:20 +02005615qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02005616echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02005617echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005618echo "SRC_PATH=$source_path" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005619echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02005620if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005621 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00005622fi
Fam Zheng17969262014-02-10 14:48:56 +08005623if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08005624 # $shacmd can generate a hash started with digit, which the compiler doesn't
5625 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02005626 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08005627 echo "CONFIG_MODULES=y" >> $config_host_mak
5628fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02005629if test "$sdl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005630 echo "CONFIG_SDL=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005631 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02005632 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
Fam Zheng8ecc89f2017-09-07 16:29:11 +08005633 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005634fi
5635if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005636 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00005637fi
5638if test "$curses" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005639 echo "CONFIG_CURSES=y" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005640fi
Riku Voipio099d6b02009-05-05 12:10:04 +03005641if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005642 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03005643fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01005644if test "$accept4" = "yes" ; then
5645 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5646fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305647if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005648 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305649fi
Riku Voipioc2882b92009-08-12 15:08:24 +03005650if test "$eventfd" = "yes" ; then
5651 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5652fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02005653if test "$memfd" = "yes" ; then
5654 echo "CONFIG_MEMFD=y" >> $config_host_mak
5655fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005656if test "$fallocate" = "yes" ; then
5657 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5658fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01005659if test "$fallocate_punch_hole" = "yes" ; then
5660 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5661fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03005662if test "$fallocate_zero_range" = "yes" ; then
5663 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5664fi
Kevin Wolfed911432014-09-29 17:12:59 +02005665if test "$posix_fallocate" = "yes" ; then
5666 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5667fi
Peter Maydellc727f472011-01-06 11:05:10 +00005668if test "$sync_file_range" = "yes" ; then
5669 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5670fi
Peter Maydelldace20d2011-01-10 13:11:24 +00005671if test "$fiemap" = "yes" ; then
5672 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5673fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005674if test "$dup3" = "yes" ; then
5675 echo "CONFIG_DUP3=y" >> $config_host_mak
5676fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01005677if test "$ppoll" = "yes" ; then
5678 echo "CONFIG_PPOLL=y" >> $config_host_mak
5679fi
Alex Blighcd758dd2013-08-21 16:02:44 +01005680if test "$prctl_pr_set_timerslack" = "yes" ; then
5681 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5682fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00005683if test "$epoll" = "yes" ; then
5684 echo "CONFIG_EPOLL=y" >> $config_host_mak
5685fi
5686if test "$epoll_create1" = "yes" ; then
5687 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5688fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00005689if test "$sendfile" = "yes" ; then
5690 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5691fi
Riku Voipio51834342014-06-22 11:25:42 +01005692if test "$timerfd" = "yes" ; then
5693 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5694fi
Riku Voipio9af5c902014-08-12 15:58:57 +03005695if test "$setns" = "yes" ; then
5696 echo "CONFIG_SETNS=y" >> $config_host_mak
5697fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02005698if test "$clock_adjtime" = "yes" ; then
5699 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5700fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02005701if test "$syncfs" = "yes" ; then
5702 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5703fi
aurel323b3f24a2009-04-15 16:12:13 +00005704if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005705 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00005706fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00005707if test "$inotify1" = "yes" ; then
5708 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5709fi
Peter Maydell401bc052017-09-05 13:19:32 +01005710if test "$sem_timedwait" = "yes" ; then
5711 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5712fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005713if test "$byteswap_h" = "yes" ; then
5714 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5715fi
5716if test "$bswap_h" = "yes" ; then
5717 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5718fi
Alexander Graf769ce762009-05-11 17:41:42 +02005719if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005720 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02005721 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005722 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02005723fi
aurel322e4d9fb2008-04-08 06:01:02 +00005724if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005725 echo "CONFIG_BRLAPI=y" >> $config_host_mak
Fam Zheng8eca2882017-09-07 16:47:00 +08005726 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00005727fi
balrogfb599c92008-09-28 23:49:55 +00005728if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005729 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02005730 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00005731fi
Dr. David Alan Gilbertd46f7c92015-06-24 10:45:42 +01005732if test "$glib_subprocess" = "yes" ; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03005733 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5734fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005735if test "$gtk" = "yes" ; then
5736 echo "CONFIG_GTK=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005737 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005738 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005739 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005740 if test "$gtk_gl" = "yes" ; then
5741 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5742 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005743fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005744echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005745if test "$gnutls" = "yes" ; then
5746 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5747fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005748if test "$gnutls_rnd" = "yes" ; then
5749 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5750fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005751if test "$gcrypt" = "yes" ; then
5752 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08005753 if test "$gcrypt_hmac" = "yes" ; then
5754 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5755 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005756 if test "$gcrypt_kdf" = "yes" ; then
5757 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5758 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01005759fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005760if test "$nettle" = "yes" ; then
5761 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02005762 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005763 if test "$nettle_kdf" = "yes" ; then
5764 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5765 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01005766fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005767if test "$tasn1" = "yes" ; then
5768 echo "CONFIG_TASN1=y" >> $config_host_mak
5769fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00005770if test "$have_ifaddrs_h" = "yes" ; then
5771 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5772fi
Eric Blake6b39b062016-10-11 10:46:23 -05005773if test "$have_broken_size_max" = "yes" ; then
5774 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5775fi
Jan Vesely277abf12016-04-29 13:15:23 -04005776
5777# Work around a system header bug with some kernel/XFS header
5778# versions where they both try to define 'struct fsxattr':
5779# xfs headers will not try to redefine structs from linux headers
5780# if this macro is set.
5781if test "$have_fsxattr" = "yes" ; then
5782 echo "HAVE_FSXATTR=y" >> $config_host_mak
5783fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005784if test "$vte" = "yes" ; then
5785 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005786 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5787fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005788if test "$virglrenderer" = "yes" ; then
5789 echo "CONFIG_VIRGL=y" >> $config_host_mak
5790 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5791 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5792fi
aliguorie37630c2009-04-22 15:19:10 +00005793if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02005794 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00005795 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00005796 if test "$xen_pv_domain_build" = "yes" ; then
5797 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5798 fi
aliguorie37630c2009-04-22 15:19:10 +00005799fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005800if test "$linux_aio" = "yes" ; then
5801 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5802fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005803if test "$attr" = "yes" ; then
5804 echo "CONFIG_ATTR=y" >> $config_host_mak
5805fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02005806if test "$libattr" = "yes" ; then
5807 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5808fi
Meador Inge983eef52012-02-24 14:00:42 +05305809if test "$virtfs" = "yes" ; then
5810 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005811fi
Paolo Bonzinife8fc5a2017-08-22 06:50:55 +02005812if test "$mpath" = "yes" ; then
5813 echo "CONFIG_MPATH=y" >> $config_host_mak
5814fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005815if test "$vhost_scsi" = "yes" ; then
5816 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5817fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005818if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03005819 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5820fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005821if test "$vhost_vsock" = "yes" ; then
5822 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5823fi
Marc-André Lureaue6a74862017-08-03 11:07:46 +02005824if test "$vhost_user" = "yes" ; then
5825 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5826fi
ths77755342008-11-27 15:45:16 +00005827if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005828 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00005829fi
aliguoribf9298b2008-12-05 20:05:26 +00005830if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005831 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00005832fi
aliguoriceb42de2009-04-07 18:43:28 +00005833if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005834 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00005835fi
aurel32f652e6a2008-12-16 10:43:48 +00005836if test "$fdt" = "yes" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02005837 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00005838fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03005839if test "$signalfd" = "yes" ; then
5840 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5841fi
Paolo Bonzinib3f6ea72017-07-03 16:59:07 +02005842if test "$tcg" = "yes"; then
5843 echo "CONFIG_TCG=y" >> $config_host_mak
5844 if test "$tcg_interpreter" = "yes" ; then
5845 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5846 fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02005847fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005848if test "$fdatasync" = "yes" ; then
5849 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5850fi
Andreas Färbere78815a2010-09-25 11:26:05 +00005851if test "$madvise" = "yes" ; then
5852 echo "CONFIG_MADVISE=y" >> $config_host_mak
5853fi
5854if test "$posix_madvise" = "yes" ; then
5855 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5856fi
bellard97a847b2003-08-10 21:36:04 +00005857
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005858if test "$spice" = "yes" ; then
5859 echo "CONFIG_SPICE=y" >> $config_host_mak
5860fi
5861
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005862if test "$smartcard" = "yes" ; then
5863 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Fam Zheng7b62bf52017-09-07 16:29:16 +08005864 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
5865 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02005866fi
5867
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005868if test "$libusb" = "yes" ; then
5869 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
Fam Zhengb878b652017-09-07 16:29:17 +08005870 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
5871 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005872fi
5873
Hans de Goede69354a82011-07-19 11:04:10 +02005874if test "$usb_redir" = "yes" ; then
5875 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
Fam Zhengcc7923f2017-09-07 16:29:18 +08005876 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
5877 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
Hans de Goede69354a82011-07-19 11:04:10 +02005878fi
5879
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005880if test "$opengl" = "yes" ; then
5881 echo "CONFIG_OPENGL=y" >> $config_host_mak
5882 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005883 if test "$opengl_dmabuf" = "yes" ; then
5884 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5885 fi
Michael Walle20ff0752011-03-07 23:32:39 +01005886fi
5887
Liang Li99f2dbd2016-03-08 13:53:16 +08005888if test "$avx2_opt" = "yes" ; then
5889 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5890fi
5891
qiaonuohan607dacd2014-02-18 14:11:30 +08005892if test "$lzo" = "yes" ; then
5893 echo "CONFIG_LZO=y" >> $config_host_mak
5894fi
5895
5896if test "$snappy" = "yes" ; then
5897 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5898fi
5899
Peter Wu6b383c02015-01-06 18:48:14 +01005900if test "$bzip2" = "yes" ; then
5901 echo "CONFIG_BZIP2=y" >> $config_host_mak
5902 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5903fi
5904
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005905if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005906 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005907 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5908 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005909fi
5910
Peter Lieven6542aa92014-02-03 10:26:13 +01005911if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04005912 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5913 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01005914fi
5915
Eduardo Otubof7945732012-08-14 18:44:05 -03005916if test "$seccomp" = "yes"; then
5917 echo "CONFIG_SECCOMP=y" >> $config_host_mak
Fam Zhengc3883e12017-09-07 16:53:16 +08005918 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
5919 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
Eduardo Otubof7945732012-08-14 18:44:05 -03005920fi
5921
bellard83fb7ad2004-07-05 21:25:26 +00005922# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00005923if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005924 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00005925fi
5926
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01005927if test "$localtime_r" = "yes" ; then
5928 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5929fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02005930if test "$qom_cast_debug" = "yes" ; then
5931 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5932fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005933if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005934 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005935 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5936 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005937fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06005938
Peter Maydell7c2acc72013-04-08 12:11:27 +01005939echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005940if test "$coroutine_pool" = "yes" ; then
5941 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5942else
5943 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5944fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305945
Peter Lieven7d992e42016-09-27 11:58:45 +02005946if test "$debug_stack_usage" = "yes" ; then
5947 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5948fi
5949
Longpeng(Mike)f0d92b52017-07-14 14:04:05 -04005950if test "$crypto_afalg" = "yes" ; then
5951 echo "CONFIG_AF_ALG=y" >> $config_host_mak
5952fi
5953
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305954if test "$open_by_handle_at" = "yes" ; then
5955 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5956fi
5957
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305958if test "$linux_magic_h" = "yes" ; then
5959 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5960fi
5961
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005962if test "$pragma_diagnostic_available" = "yes" ; then
5963 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01005964fi
5965
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005966if test "$valgrind_h" = "yes" ; then
5967 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5968fi
5969
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005970if test "$has_environ" = "yes" ; then
5971 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5972fi
5973
Richard Henderson76a347e2012-12-28 14:17:02 -08005974if test "$cpuid_h" = "yes" ; then
5975 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5976fi
5977
Richard Hendersonf5401662013-02-16 12:46:59 -08005978if test "$int128" = "yes" ; then
5979 echo "CONFIG_INT128=y" >> $config_host_mak
5980fi
5981
Richard Henderson7ebee432016-06-29 21:10:59 -07005982if test "$atomic128" = "yes" ; then
5983 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5984fi
5985
Richard Hendersondf79b992016-09-02 12:23:57 -07005986if test "$atomic64" = "yes" ; then
5987 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5988fi
5989
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005990if test "$getauxval" = "yes" ; then
5991 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5992fi
5993
Bharata B Raoeb100392012-09-24 14:42:45 +05305994if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005995 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005996 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5997 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05305998fi
5999
Jeff Codyd85fa9e2016-04-05 10:40:09 -04006000if test "$glusterfs_xlator_opt" = "yes" ; then
6001 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6002fi
6003
Bharata B Rao0c14fb42013-07-16 21:47:42 +05306004if test "$glusterfs_discard" = "yes" ; then
6005 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6006fi
6007
Niels de Vosdf3a4292017-05-28 12:01:14 +05306008if test "$glusterfs_fallocate" = "yes" ; then
6009 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6010fi
6011
Bharata B Rao7c815372013-12-21 14:51:25 +05306012if test "$glusterfs_zerofill" = "yes" ; then
6013 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6014fi
6015
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006016if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08006017 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08006018 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6019 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01006020fi
6021
Dr. David Alan Gilberted1701c2017-05-15 15:05:29 +01006022if test "$live_block_migration" = "yes" ; then
6023 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6024fi
6025
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01006026# TPM passthrough support?
6027if test "$tpm" = "yes"; then
6028 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6029 if test "$tpm_passthrough" = "yes"; then
6030 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6031 fi
6032fi
6033
Lluís Vilanova5b808272014-05-27 15:02:14 +02006034echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6035if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02006036 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05306037fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006038if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02006039 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6040 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02006041 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01006042fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03006043if have_backend "log"; then
6044 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02006045fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006046if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02006047 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6048fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006049if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02006050 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6051 if test "$trace_backend_stap" = "yes" ; then
6052 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6053 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00006054fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02006055if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006056 if test "$linux" = "yes" ; then
6057 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006058 else
Stewart Smith21684af2014-01-24 12:39:10 +11006059 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09006060 fi
6061fi
Paul Durrant0a852412016-08-04 14:44:14 +01006062if have_backend "syslog"; then
6063 if test "$posix_syslog" = "yes" ; then
6064 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6065 else
6066 feature_not_found "syslog(trace backend)" "syslog not available"
6067 fi
6068fi
Prerna Saxena9410b562010-07-13 09:26:32 +01006069echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6070
Michael R. Hines2da776d2013-07-22 10:01:54 -04006071if test "$rdma" = "yes" ; then
6072 echo "CONFIG_RDMA=y" >> $config_host_mak
Fam Zheng392fb642017-09-07 16:42:30 +08006073 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
Michael R. Hines2da776d2013-07-22 10:01:54 -04006074fi
6075
Laurent Vivier575b22b2016-06-02 22:14:15 +02006076if test "$have_rtnetlink" = "yes" ; then
6077 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6078fi
6079
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08006080if test "$replication" = "yes" ; then
6081 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6082fi
6083
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01006084if test "$have_af_vsock" = "yes" ; then
6085 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6086fi
6087
Christopher Covington4d043512016-12-28 15:04:33 -05006088if test "$have_sysmacros" = "yes" ; then
6089 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6090fi
6091
Andreas Grapentin49e00a12017-03-14 17:59:53 +01006092if test "$have_static_assert" = "yes" ; then
6093 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6094fi
6095
Tomáš Golembiovskýe6746052017-07-17 15:58:33 +02006096if test "$have_utmpx" = "yes" ; then
6097 echo "HAVE_UTMPX=y" >> $config_host_mak
6098fi
6099
Kamil Rytarowskie0580342017-07-14 09:33:44 +01006100if test "$ivshmem" = "yes" ; then
6101 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6102fi
6103
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00006104# Hold two types of flag:
6105# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6106# a thread we have a handle to
6107# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6108# platform
6109if test "$pthread_setname_np" = "yes" ; then
6110 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6111 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6112fi
6113
Ashish Mittalda92c3f2017-04-03 20:48:08 -07006114if test "$vxhs" = "yes" ; then
6115 echo "CONFIG_VXHS=y" >> $config_host_mak
6116 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6117fi
6118
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006119if test "$tcg_interpreter" = "yes"; then
6120 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6121elif test "$ARCH" = "sparc64" ; then
6122 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6123elif test "$ARCH" = "s390x" ; then
6124 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006125elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006126 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07006127elif test "$ARCH" = "ppc64" ; then
6128 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02006129else
6130 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6131fi
6132QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6133
Juan Quintela98ec69a2009-07-16 18:34:18 +02006134echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02006135echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006136echo "MAKE=$make" >> $config_host_mak
6137echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04006138echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6139echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03006140echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6141echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00006142echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006143echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006144if $iasl -h > /dev/null 2>&1; then
6145 echo "IASL=$iasl" >> $config_host_mak
6146fi
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02006147echo "CC_I386=$cc_i386" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006148echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04006149echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01006150echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006151echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01006152echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006153echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006154echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006155echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006156echo "OBJCOPY=$objcopy" >> $config_host_mak
6157echo "LD=$ld" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02006158echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00006159echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006160echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006161echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02006162echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Bruno Dominguez11cde1c2017-06-06 14:07:47 +01006163echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01006164echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006165if test "$sparse" = "yes" ; then
6166 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01006167 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02006168 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01006169 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6170 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6171fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01006172if test "$cross_prefix" != ""; then
6173 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6174else
6175 echo "AUTOCONF_HOST := " >> $config_host_mak
6176fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02006177echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05006178echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01006179echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01006180echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02006181echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02006182echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01006183echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02006184echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08006185echo "DSOSUF=$DSOSUF" >> $config_host_mak
6186echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05006187echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01006188echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6189echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02006190echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01006191echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00006192if test "$gcov" = "yes" ; then
6193 echo "CONFIG_GCOV=y" >> $config_host_mak
6194 echo "GCOV=$gcov_tool" >> $config_host_mak
6195fi
Juan Quintela804edf22009-07-27 16:12:49 +02006196
Peter Maydell6efd7512011-11-30 11:59:04 +00006197# use included Linux headers
6198if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00006199 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00006200 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006201 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01006202 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00006203 ;;
6204 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01006205 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00006206 ;;
6207 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01006208 linux_arch=s390
6209 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01006210 aarch64)
6211 linux_arch=arm64
6212 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01006213 mips64)
6214 linux_arch=mips
6215 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01006216 *)
6217 # For most CPUs the kernel architecture name and QEMU CPU name match.
6218 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00006219 ;;
6220 esac
Peter Maydell08312a62012-08-03 13:51:25 +01006221 # For non-KVM architectures we will not have asm headers
6222 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6223 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6224 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00006225fi
6226
bellard1d14ffa2005-10-30 18:58:22 +00006227for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00006228target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02006229config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02006230target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00006231target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02006232
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006233case "$target_name" in
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006234 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 +02006235 target_bigendian=yes
6236 ;;
6237esac
bellard97a847b2003-08-10 21:36:04 +00006238target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00006239target_user_only="no"
ths831b7822007-01-18 20:06:33 +00006240target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00006241target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00006242case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006243 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006244 target_softmmu="yes"
6245 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006246 ${target_name}-linux-user)
pbrook9e407a82007-05-26 16:38:53 +00006247 target_user_only="yes"
6248 target_linux_user="yes"
6249 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006250 ${target_name}-bsd-user)
blueswir184778502008-10-26 20:33:16 +00006251 target_user_only="yes"
6252 target_bsd_user="yes"
6253 ;;
pbrook9e407a82007-05-26 16:38:53 +00006254 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006255 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00006256 exit 1
6257 ;;
6258esac
ths831b7822007-01-18 20:06:33 +00006259
bellard97a847b2003-08-10 21:36:04 +00006260mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02006261echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006262
pbrooke5fe0c52006-06-11 13:32:59 +00006263bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00006264mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02006265interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00006266gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00006267
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006268TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02006269TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02006270TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02006271
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006272case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00006273 i386)
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006274 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
aurel322408a522008-04-20 20:19:44 +00006275 ;;
6276 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006277 TARGET_BASE_ARCH=i386
Abdallah Bouassidab8158192017-06-01 11:33:15 +02006278 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
aurel322408a522008-04-20 20:19:44 +00006279 ;;
6280 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11006281 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00006282 ;;
6283 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006284 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00006285 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006286 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00006287 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00006288 ;;
Alexander Graf6a49fa92013-09-03 20:12:22 +01006289 aarch64)
6290 TARGET_BASE_ARCH=arm
6291 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006292 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01006293 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 +01006294 ;;
aurel322408a522008-04-20 20:19:44 +00006295 cris)
aurel322408a522008-04-20 20:19:44 +00006296 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08006297 hppa)
6298 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01006299 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01006300 ;;
aurel322408a522008-04-20 20:19:44 +00006301 m68k)
aurel322408a522008-04-20 20:19:44 +00006302 bflt="yes"
Laurent Vivier5a4526b2017-06-20 22:51:19 +02006303 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
aurel322408a522008-04-20 20:19:44 +00006304 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006305 microblaze|microblazeel)
6306 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006307 bflt="yes"
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006308 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02006309 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006310 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006311 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006312 ;;
6313 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08006314 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006315 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006316 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08006317 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006318 ;;
6319 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006320 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006321 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006322 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006323 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006324 moxie)
6325 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006326 nios2)
6327 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006328 or1k)
Jia Liue67db062012-07-20 15:50:39 +08006329 TARGET_ARCH=openrisc
6330 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08006331 ;;
aurel322408a522008-04-20 20:19:44 +00006332 ppc)
aurel32c8b35322009-01-24 15:07:34 +00006333 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00006334 ;;
6335 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006336 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006337 TARGET_ABI_DIR=ppc
aurel32c8b35322009-01-24 15:07:34 +00006338 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00006339 ;;
6340 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006341 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006342 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306343 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006344 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00006345 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05006346 ppc64le)
6347 TARGET_ARCH=ppc64
6348 TARGET_BASE_ARCH=ppc
6349 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306350 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006351 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 -05006352 ;;
aurel322408a522008-04-20 20:19:44 +00006353 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006354 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006355 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006356 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02006357 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01006358 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00006359 ;;
6360 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006361 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00006362 bflt="yes"
6363 ;;
6364 sparc)
aurel322408a522008-04-20 20:19:44 +00006365 ;;
6366 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006367 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00006368 ;;
6369 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006370 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006371 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006372 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02006373 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006374 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006375 s390x)
Christian Borntraeger86158a22017-03-08 12:41:14 +01006376 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 +01006377 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08006378 tilegx)
6379 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07006380 tricore)
6381 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08006382 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08006383 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006384 xtensa|xtensaeb)
6385 TARGET_ARCH=xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04006386 ;;
aurel322408a522008-04-20 20:19:44 +00006387 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006388 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00006389 ;;
6390esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006391# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6392if [ "$TARGET_BASE_ARCH" = "" ]; then
6393 TARGET_BASE_ARCH=$TARGET_ARCH
6394fi
6395
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006396symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6397
Daniel P. Berrange99afc912012-08-20 15:31:38 +01006398upper() {
6399 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6400}
6401
Stefan Weil89138852016-05-16 15:10:20 +02006402target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02006403echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006404echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02006405echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02006406if [ "$TARGET_ABI_DIR" = "" ]; then
6407 TARGET_ABI_DIR=$TARGET_ARCH
6408fi
Juan Quintela25be2102009-10-07 02:41:00 +02006409echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07006410if [ "$HOST_VARIANT_DIR" != "" ]; then
6411 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6412fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006413
6414if supported_xen_target $target; then
6415 echo "CONFIG_XEN=y" >> $config_target_mak
6416 if test "$xen_pci_passthrough" = yes; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00006417 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006418 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006419fi
6420if supported_kvm_target $target; then
6421 echo "CONFIG_KVM=y" >> $config_target_mak
6422 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006423 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureaue6a74862017-08-03 11:07:46 +02006424 if test "$vhost_user" = "yes" ; then
6425 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6426 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02006427 fi
Paolo Bonzini3b6b7552012-09-17 11:59:41 +02006428fi
6429if supported_hax_target $target; then
6430 echo "CONFIG_HAX=y" >> $config_target_mak
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006431fi
bellardde83cd02003-06-15 20:25:43 +00006432if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006433 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006434fi
6435if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006436 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00006437 if test "$mttcg" = "yes" ; then
6438 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6439 fi
bellardde83cd02003-06-15 20:25:43 +00006440fi
bellard997344f2003-10-27 21:10:39 +00006441if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006442 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01006443 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00006444fi
ths831b7822007-01-18 20:06:33 +00006445if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006446 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00006447fi
pbrook56aebc82008-10-11 17:55:29 +00006448list=""
6449if test ! -z "$gdb_xml_files" ; then
6450 for x in $gdb_xml_files; do
6451 list="$list $source_path/gdb-xml/$x"
6452 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02006453 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00006454fi
bellardde83cd02003-06-15 20:25:43 +00006455
pbrooke5fe0c52006-06-11 13:32:59 +00006456if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02006457 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00006458fi
blueswir184778502008-10-26 20:33:16 +00006459if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006460 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00006461fi
bellard5b0753e2005-03-01 21:37:28 +00006462
Juan Quintela4afddb52009-08-03 14:46:45 +02006463# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02006464
Juan Quintela4afddb52009-08-03 14:46:45 +02006465cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02006466ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02006467
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006468disas_config() {
6469 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6470 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6471}
6472
Juan Quintela64656022009-08-03 14:46:53 +02006473for i in $ARCH $TARGET_BASE_ARCH ; do
6474 case "$i" in
6475 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006476 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02006477 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05006478 aarch64)
6479 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006480 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05006481 fi
6482 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006483 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006484 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006485 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006486 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006487 fi
Juan Quintela64656022009-08-03 14:46:53 +02006488 ;;
6489 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006490 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02006491 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07006492 hppa)
6493 disas_config "HPPA"
6494 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006495 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006496 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02006497 ;;
Michael Walle79368f42012-03-31 19:54:20 +02006498 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006499 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02006500 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006501 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006502 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02006503 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006504 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006505 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02006506 ;;
6507 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006508 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02006509 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006510 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006511 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04006512 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006513 nios2)
6514 disas_config "NIOS2"
6515 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006516 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006517 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08006518 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006519 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006520 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02006521 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006522 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006523 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02006524 ;;
6525 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006526 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02006527 ;;
6528 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006529 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02006530 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006531 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006532 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04006533 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006534 esac
6535done
Stefan Weil9195b2c2011-10-19 07:07:18 +02006536if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006537 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02006538fi
Juan Quintela64656022009-08-03 14:46:53 +02006539
Juan Quintela6ee71262009-08-03 14:46:47 +02006540case "$ARCH" in
6541alpha)
6542 # Ensure there's only a single GP
6543 cflags="-msmall-data $cflags"
6544;;
6545esac
6546
Juan Quintelad02c1db2009-08-03 14:46:50 +02006547if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006548 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006549 if test "$target_linux_user" = "yes" ; then
6550 cflags="-p $cflags"
6551 ldflags="-p $ldflags"
6552 fi
6553 if test "$target_softmmu" = "yes" ; then
6554 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02006555 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006556 fi
6557fi
6558
Juan Quintela9b8e1112009-08-03 14:46:46 +02006559if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006560 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02006561fi
Juan Quintelafa282482009-07-22 22:37:39 +02006562
Christian Borntraegere9a35912017-08-23 12:16:23 +02006563# Newer kernels on s390 check for an S390_PGSTE program header and
6564# enable the pgste page table extensions in that case. This makes
6565# the vm.allocate_pgste sysctl unnecessary. We enable this program
6566# header if
6567# - we build on s390x
6568# - we build the system emulation for s390x (qemu-system-s390x)
6569# - KVM is enabled
6570# - the linker supports --s390-pgste
6571if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6572 if ld_has --s390-pgste ; then
6573 ldflags="-Wl,--s390-pgste $ldflags"
6574 fi
6575fi
6576
Juan Quintela25be2102009-10-07 02:41:00 +02006577echo "LDFLAGS+=$ldflags" >> $config_target_mak
6578echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02006579
bellard97a847b2003-08-10 21:36:04 +00006580done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00006581
Peter Crosthwaitea540f152013-04-18 14:47:31 +10006582if [ "$dtc_internal" = "yes" ]; then
6583 echo "config-host.h: subdir-dtc" >> $config_host_mak
6584fi
6585
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006586if test "$numa" = "yes"; then
6587 echo "CONFIG_NUMA=y" >> $config_host_mak
6588fi
6589
John Snowfd0e6052015-03-25 18:57:39 -04006590if test "$ccache_cpp2" = "yes"; then
6591 echo "export CCACHE_CPP2=y" >> $config_host_mak
6592fi
6593
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006594# build tree in object directory in case the source is not in the current directory
Fam Zhengb1fb9a62017-09-05 10:11:58 +08006595DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
Paolo Bonzinib855f8d2017-08-22 06:50:18 +02006596DIRS="$DIRS docs docs/interop fsdev scsi"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006597DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006598DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2dee8d52012-06-04 09:15:43 +02006599DIRS="$DIRS qapi-generated"
Anthony Liguoric09015d2012-01-10 13:10:42 -06006600FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6601FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02006602FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006603FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02006604FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006605FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006606FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01006607FILES="$FILES pc-bios/qemu-icon.bmp"
Stefan Hajnoczi3a586d22017-05-17 13:40:42 +01006608FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
Richard Henderson753d11f2011-06-24 11:58:37 -07006609for bios_file in \
6610 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11006611 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01006612 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07006613 $source_path/pc-bios/*.rom \
6614 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00006615 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07006616 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01006617 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07006618 $source_path/pc-bios/palcode-*
6619do
Stefan Weil89138852016-05-16 15:10:20 +02006620 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006621done
Stefan Weil89138852016-05-16 15:10:20 +02006622for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006623do
Stefan Weil89138852016-05-16 15:10:20 +02006624 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006625done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006626mkdir -p $DIRS
6627for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03006628 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01006629 symlink "$source_path/$f" "$f"
6630 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006631done
Paul Brook1ad21342009-05-19 16:17:58 +01006632
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006633# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06006634for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006635 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01006636 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006637 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006638 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006639 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006640 echo "CC=$cc" >> $config_mak
6641 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006642 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006643 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006644 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006645 echo "LD=$ld" >> $config_mak
6646done
6647
Marc-André Lureaufe310172016-06-15 13:06:00 +02006648# set up tests data directory
6649if [ ! -e tests/data ]; then
6650 symlink "$source_path/tests/data" tests/data
6651fi
6652
Max Reitz76c75602014-05-24 23:24:56 +02006653# set up qemu-iotests in this build directory
6654iotests_common_env="tests/qemu-iotests/common.env"
6655iotests_check="tests/qemu-iotests/check"
6656
6657echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6658echo >> "$iotests_common_env"
6659echo "export PYTHON='$python'" >> "$iotests_common_env"
6660
6661if [ ! -e "$iotests_check" ]; then
6662 symlink "$source_path/$iotests_check" "$iotests_check"
6663fi
6664
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006665# Save the configure command line for later reuse.
6666cat <<EOD >config.status
6667#!/bin/sh
6668# Generated by configure.
6669# Run this file to recreate the current configuration.
6670# Compiler output produced by configure, useful for debugging
6671# configure, is in config.log if it exists.
6672EOD
6673printf "exec" >>config.status
6674printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00006675echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006676chmod +x config.status
6677
Peter Maydell8cd05ab2014-05-23 17:07:24 +01006678rm -r "$TMPDIR1"