blob: 5e66828e648db014af0ca4dbb6569ae20027dce0 [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"
Don Slutz66518bf2014-01-02 21:12:46 -050031TMPL="${TMPDIR1}/${TMPB}.lo"
32TMPA="${TMPDIR1}/lib${TMPB}.la"
Peter Maydell8cd05ab2014-05-23 17:07:24 +010033TMPE="${TMPDIR1}/${TMPB}.exe"
James Clarke6969ec62016-06-06 12:02:50 +010034TMPMO="${TMPDIR1}/${TMPB}.mo"
bellard7d132992003-03-06 23:23:54 +000035
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020036rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000037
Peter Maydellb48e3612011-11-23 17:26:44 +000038# Print a helpful header at the top of config.log
39echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000040printf "# Configured with:" >> config.log
41printf " '%s'" "$0" "$@" >> config.log
42echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000043echo "#" >> config.log
44
Peter Maydell76ad07a2013-04-08 12:11:26 +010045error_exit() {
46 echo
47 echo "ERROR: $1"
48 while test -n "$2"; do
49 echo " $2"
50 shift
51 done
52 echo
53 exit 1
54}
55
Peter Maydell9c83ffd2014-02-25 18:27:49 +000056do_compiler() {
57 # Run the compiler, capturing its output to the log. First argument
58 # is compiler binary to execute.
59 local compiler="$1"
60 shift
61 echo $compiler "$@" >> config.log
62 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010063 # Test passed. If this is an --enable-werror build, rerun
64 # the test with -Werror and bail out if it fails. This
65 # makes warning-generating-errors in configure test code
66 # obvious to developers.
67 if test "$werror" != "yes"; then
68 return 0
69 fi
70 # Don't bother rerunning the compile if we were already using -Werror
71 case "$*" in
72 *-Werror*)
73 return 0
74 ;;
75 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000076 echo $compiler -Werror "$@" >> config.log
77 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010078 error_exit "configure test passed without -Werror but failed with -Werror." \
79 "This is probably a bug in the configure script. The failing command" \
80 "will be at the bottom of config.log." \
81 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010082}
83
Peter Maydell9c83ffd2014-02-25 18:27:49 +000084do_cc() {
85 do_compiler "$cc" "$@"
86}
87
88do_cxx() {
89 do_compiler "$cxx" "$@"
90}
91
92update_cxxflags() {
93 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
94 # options which some versions of GCC's C++ compiler complain about
95 # because they only make sense for C programs.
96 QEMU_CXXFLAGS=
97 for arg in $QEMU_CFLAGS; do
98 case $arg in
99 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
100 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
101 ;;
102 *)
103 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
104 ;;
105 esac
106 done
107}
108
Juan Quintela52166aa2009-08-03 14:46:03 +0200109compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400110 local_cflags="$1"
111 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200112}
113
114compile_prog() {
115 local_cflags="$1"
116 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100117 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200118}
119
Paolo Bonzini11568d62010-12-23 11:43:58 +0100120# symbolically link $1 to $2. Portable version of "ln -sf".
121symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100122 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800123 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100124 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100125}
126
Loïc Minier0dba6192010-01-28 21:26:51 +0000127# check whether a command is available to this shell (may be either an
128# executable or a builtin)
129has() {
130 type "$1" >/dev/null 2>&1
131}
132
133# search for an executable in PATH
134path_of() {
135 local_command="$1"
136 local_ifs="$IFS"
137 local_dir=""
138
139 # pathname has a dir component?
140 if [ "${local_command#*/}" != "$local_command" ]; then
141 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
142 echo "$local_command"
143 return 0
144 fi
145 fi
146 if [ -z "$local_command" ]; then
147 return 1
148 fi
149
150 IFS=:
151 for local_dir in $PATH; do
152 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
153 echo "$local_dir/$local_command"
154 IFS="${local_ifs:-$(printf ' \t\n')}"
155 return 0
156 fi
157 done
158 # not found
159 IFS="${local_ifs:-$(printf ' \t\n')}"
160 return 1
161}
162
Lluís Vilanova5b808272014-05-27 15:02:14 +0200163have_backend () {
164 echo "$trace_backends" | grep "$1" >/dev/null
165}
166
bellard7d132992003-03-06 23:23:54 +0000167# default parameters
Stefan Weil89138852016-05-16 15:10:20 +0200168source_path=$(dirname "$0")
Juan Quintela2ff6b912009-08-03 14:45:55 +0200169cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300170iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000171interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000172static="no"
bellard7d132992003-03-06 23:23:54 +0000173cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000174audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800175block_drv_rw_whitelist=""
176block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000177host_cc="cc"
Juan Quintela73da3752009-08-03 14:46:26 +0200178libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200179libs_tools=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200180audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400181audio_win_int=""
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +0200182cc_i386=i386-pc-linux-gnu-gcc
Michael Roth957f1f92011-08-11 15:38:12 -0500183libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100184debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100185stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000186
Stefan Weilafb63eb2012-09-26 22:04:38 +0200187# Don't accept a target_list environment variable.
188unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100189
190# Default value for a variable defining feature "foo".
191# * foo="no" feature will only be used if --enable-foo arg is given
192# * foo="" feature will be searched for, and if found, will be used
193# unless --disable-foo is given
194# * foo="yes" this value will only be set by --enable-foo flag.
195# feature will searched for,
196# if not found, configure exits with error
197#
198# Always add --enable-foo and --disable-foo command line args.
199# Distributions want to ensure that several features are compiled in, and it
200# is impossible without a --enable-foo that exits if a feature is not found.
201
202bluez=""
203brlapi=""
204curl=""
205curses=""
206docs=""
207fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100208netmap="no"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +0200209pixman=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100210sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400211sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530212virtfs=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100213vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100214sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100215vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100216vnc_sasl=""
217vnc_jpeg=""
218vnc_png=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100219xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000220xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000221xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000222xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100223linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500224cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100225attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200226libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100227xfs=""
228
Bradd41a75a2011-07-26 23:11:26 -0400229vhost_net="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000230vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100231vhost_vsock="no"
Bradd41a75a2011-07-26 23:11:26 -0400232kvm="no"
zhanghailiang180fb752016-10-27 14:43:08 +0800233colo="yes"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400234rdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100235gprof="no"
236debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100237debug="no"
John Snowb553a042015-11-03 15:43:42 -0500238fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100239strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200240tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100241bigendian="no"
242mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000243gcov="no"
244gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100245EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800246DSOSUF=".so"
247LDFLAGS_SHARED="-shared"
248modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100249prefix="/usr/local"
250mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300251datadir="\${prefix}/share"
Eduardo Habkost850da182012-04-18 16:55:38 -0300252qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100253bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300254libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400255libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200256includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100257sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300258local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100259confsuffix="/qemu"
260slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100261oss_lib=""
262bsd="no"
263linux="no"
264solaris="no"
265profiler="no"
266cocoa="no"
267softmmu="yes"
268linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100269bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100270aix="no"
271blobs="yes"
272pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200273pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200274qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300275trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100276trace_file="trace"
277spice=""
278rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200279smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100280libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200281usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100282opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100283opengl_dmabuf="no"
Liang Li99f2dbd2016-03-08 13:53:16 +0800284avx2_opt="no"
Alon Levy1ece9902011-07-26 12:30:40 +0300285zlib="yes"
Stefan Weilb25c9df2014-04-29 08:21:16 +0200286lzo=""
287snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100288bzip2=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400289guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400290guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500291guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300292guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400293vss_win32_sdk=""
294win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100295want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100296libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100297libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100298coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200299coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200300debug_stack_usage="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300301seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530302glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400303glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530304glusterfs_discard="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530305glusterfs_zerofill="no"
Stefan Hajnoczi6a460ed2015-04-09 14:52:18 +0100306archipelago="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600307gtk=""
Stefan Weil9e04c682014-05-17 16:29:18 +0200308gtkabi=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200309gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100310tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100311gnutls=""
Daniel P. Berrangeb917da42015-10-31 14:39:52 +0900312gnutls_rnd=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100313nettle=""
Daniel P. Berrangefff2f982016-03-29 15:47:51 +0100314nettle_kdf="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100315gcrypt=""
Daniel P. Berrange37788f22015-10-14 13:14:04 +0100316gcrypt_kdf="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100317vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200318virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400319tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100320libssh2=""
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800321numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800322tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200323jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800324replication="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100325
aliguoriac0df512008-12-29 17:14:15 +0000326# parse CC options first
327for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200328 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000329 case "$opt" in
330 --cross-prefix=*) cross_prefix="$optarg"
331 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100332 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000333 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400334 --cxx=*) CXX="$optarg"
335 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100336 --source-path=*) source_path="$optarg"
337 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200338 --cpu=*) cpu="$optarg"
339 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100340 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100341 EXTRA_CFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200342 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100343 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100344 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200345 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100346 --enable-debug-info) debug_info="yes"
347 ;;
348 --disable-debug-info) debug_info="no"
349 ;;
aliguoriac0df512008-12-29 17:14:15 +0000350 esac
351done
aliguoriac0df512008-12-29 17:14:15 +0000352# OS specific
353# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100354# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000355
Peter Maydelle49d0212012-12-07 15:39:13 +0000356# Preferred compiler:
357# ${CC} (if set)
358# ${cross_prefix}gcc (if cross-prefix specified)
359# system compiler
360if test -z "${CC}${cross_prefix}"; then
361 cc="$host_cc"
362else
363 cc="${CC-${cross_prefix}gcc}"
364fi
365
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400366if test -z "${CXX}${cross_prefix}"; then
367 cxx="c++"
368else
369 cxx="${CXX-${cross_prefix}g++}"
370fi
371
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500372ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700373as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700374ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000375cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500376objcopy="${OBJCOPY-${cross_prefix}objcopy}"
377ld="${LD-${cross_prefix}ld}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200378nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500379strip="${STRIP-${cross_prefix}strip}"
380windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300381pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
382query_pkg_config() {
383 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
384}
385pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500386sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000387sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000388
Peter Maydell45d285a2013-10-21 21:03:06 +0100389# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
390ARFLAGS="${ARFLAGS-rv}"
391
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200392# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100393# We use -fwrapv to tell the compiler that we require a C dialect where
394# left shift of signed integers is well defined and has the expected
395# 2s-complement style results. (Both clang and gcc agree that it
396# provides these semantics.)
397QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400398QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100399QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200400QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Paolo Bonzini6b4c3052012-10-24 13:12:00 +0200401QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100402if test "$debug_info" = "yes"; then
403 CFLAGS="-g $CFLAGS"
404 LDFLAGS="-g $LDFLAGS"
405fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200406
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100407# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200408source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100409
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300410# running configure in the source tree?
411# we know that's the case if configure is there.
412if test -f "./configure"; then
413 pwd_is_source_path="y"
414else
415 pwd_is_source_path="n"
416fi
417
aliguoriac0df512008-12-29 17:14:15 +0000418check_define() {
419cat > $TMPC <<EOF
420#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000421#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000422#endif
423int main(void) { return 0; }
424EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200425 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000426}
427
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200428check_include() {
429cat > $TMPC <<EOF
430#include <$1>
431int main(void) { return 0; }
432EOF
433 compile_object
434}
435
John Snow93b25862015-03-25 18:57:37 -0400436write_c_skeleton() {
437 cat > $TMPC <<EOF
438int main(void) { return 0; }
439EOF
440}
441
Peter Maydellbbea4052012-08-14 15:35:34 +0100442if check_define __linux__ ; then
443 targetos="Linux"
444elif check_define _WIN32 ; then
445 targetos='MINGW32'
446elif check_define __OpenBSD__ ; then
447 targetos='OpenBSD'
448elif check_define __sun__ ; then
449 targetos='SunOS'
450elif check_define __HAIKU__ ; then
451 targetos='Haiku'
452else
Stefan Weil89138852016-05-16 15:10:20 +0200453 targetos=$(uname -s)
Peter Maydellbbea4052012-08-14 15:35:34 +0100454fi
455
456# Some host OSes need non-standard checks for which CPU to use.
457# Note that these checks are broken for cross-compilation: if you're
458# cross-compiling to one of these OSes then you'll need to specify
459# the correct CPU with the --cpu option.
460case $targetos in
461Darwin)
462 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
463 # run 64-bit userspace code.
464 # If the user didn't specify a CPU explicitly and the kernel says this is
465 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
466 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
467 cpu="x86_64"
468 fi
469 ;;
470SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200471 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100472 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
473 cpu="x86_64"
474 fi
475esac
476
Juan Quintela2ff6b912009-08-03 14:45:55 +0200477if test ! -z "$cpu" ; then
478 # command line argument
479 :
480elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000481 cpu="i386"
482elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700483 if check_define __ILP32__ ; then
484 cpu="x32"
485 else
486 cpu="x86_64"
487 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000488elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000489 if check_define __arch64__ ; then
490 cpu="sparc64"
491 else
492 cpu="sparc"
493 fi
malcfdf7ed92009-01-14 18:39:52 +0000494elif check_define _ARCH_PPC ; then
495 if check_define _ARCH_PPC64 ; then
496 cpu="ppc64"
497 else
498 cpu="ppc"
499 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200500elif check_define __mips__ ; then
501 cpu="mips"
Aurelien Jarno477ba622010-03-29 02:12:51 +0200502elif check_define __ia64__ ; then
503 cpu="ia64"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200504elif check_define __s390__ ; then
505 if check_define __s390x__ ; then
506 cpu="s390x"
507 else
508 cpu="s390"
509 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100510elif check_define __arm__ ; then
511 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100512elif check_define __aarch64__ ; then
513 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000514else
Stefan Weil89138852016-05-16 15:10:20 +0200515 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000516fi
517
Peter Maydell359bc952011-12-24 13:07:25 +0000518ARCH=
519# Normalise host CPU name and set ARCH.
520# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000521case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700522 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
Juan Quintelaea8f20f2009-08-03 14:46:12 +0200523 cpu="$cpu"
524 ;;
bellard7d132992003-03-06 23:23:54 +0000525 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000526 cpu="i386"
bellard7d132992003-03-06 23:23:54 +0000527 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000528 x86_64|amd64)
529 cpu="x86_64"
530 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100531 armv*b|armv*l|arm)
532 cpu="arm"
bellard7d132992003-03-06 23:23:54 +0000533 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100534 aarch64)
535 cpu="aarch64"
536 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200537 mips*)
538 cpu="mips"
539 ;;
blueswir131422552007-04-16 18:27:06 +0000540 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000541 cpu="sparc"
542 ;;
bellard7d132992003-03-06 23:23:54 +0000543 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000544 # This will result in either an error or falling back to TCI later
545 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000546 ;;
547esac
Peter Maydell359bc952011-12-24 13:07:25 +0000548if test -z "$ARCH"; then
549 ARCH="$cpu"
550fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200551
bellard7d132992003-03-06 23:23:54 +0000552# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200553
Stacey Sonadfc3e92014-06-08 09:57:22 -0700554# host *BSD for user mode
555HOST_VARIANT_DIR=""
556
bellard7d132992003-03-06 23:23:54 +0000557case $targetos in
bellardc326e0a2005-04-23 18:30:28 +0000558CYGWIN*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200559 mingw32="yes"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200560 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200561 audio_possible_drivers="sdl"
562 audio_drv_list="sdl"
bellardc326e0a2005-04-23 18:30:28 +0000563;;
bellard67b915a2004-03-31 23:37:16 +0000564MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200565 mingw32="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200566 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200567 if check_include dsound.h; then
568 audio_drv_list="dsound"
569 else
570 audio_drv_list=""
571 fi
bellard67b915a2004-03-31 23:37:16 +0000572;;
ths5c40d2b2007-06-23 16:03:36 +0000573GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100574 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200575 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200576 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000577;;
bellard7d3505c2004-05-12 19:32:15 +0000578FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200579 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100580 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200581 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200582 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100583 # needed for kinfo_getvmmap(3) in libutil.h
584 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500585 # needed for kinfo_getproc
586 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100587 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700588 HOST_VARIANT_DIR="freebsd"
bellard7d3505c2004-05-12 19:32:15 +0000589;;
blueswir1c5e97232009-03-07 20:06:23 +0000590DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200591 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100592 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200593 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200594 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700595 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000596;;
bellard7d3505c2004-05-12 19:32:15 +0000597NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200598 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100599 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200600 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200601 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200602 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700603 HOST_VARIANT_DIR="netbsd"
bellard7d3505c2004-05-12 19:32:15 +0000604;;
605OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200606 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100607 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400608 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200609 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700610 HOST_VARIANT_DIR="openbsd"
bellard7d3505c2004-05-12 19:32:15 +0000611;;
bellard83fb7ad2004-07-05 21:25:26 +0000612Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200613 bsd="yes"
614 darwin="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800615 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200616 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200617 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200618 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200619 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200620 cocoa="yes"
621 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200622 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200623 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200624 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100625 # Disable attempts to use ObjectiveC features in os/object.h since they
626 # won't work when we're compiling with gcc as a C compiler.
627 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700628 HOST_VARIANT_DIR="darwin"
bellard83fb7ad2004-07-05 21:25:26 +0000629;;
bellardec530c82006-04-25 22:36:06 +0000630SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200631 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100632 make="${MAKE-gmake}"
633 install="${INSTALL-ginstall}"
Blue Swirlfa589482009-10-02 19:38:25 +0000634 ld="gld"
Brade2d88302011-09-02 16:53:28 -0400635 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200636 needs_libsunmath="no"
Stefan Weil89138852016-05-16 15:10:20 +0200637 solarisrev=$(uname -r | cut -f2 -d.)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200638 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
639 if test "$solarisrev" -le 9 ; then
640 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
641 needs_libsunmath="yes"
Juan Quintelaf14bfdf2009-08-03 14:47:11 +0200642 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
643 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
644 LIBS="-lsunmath $LIBS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200645 else
Peter Maydell76ad07a2013-04-08 12:11:26 +0100646 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
647 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
648 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
649 "Studio 11 can be downloaded from www.sun.com."
Juan Quintela0dbfc672009-08-03 14:46:13 +0200650 fi
thsef18c882007-09-16 22:12:39 +0000651 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200652 fi
653 if test -f /usr/include/sys/soundcard.h ; then
654 audio_drv_list="oss"
655 fi
656 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000657# needed for CMSG_ macros in sys/socket.h
658 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
659# needed for TIOCWIN* defines in termios.h
660 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200661 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200662 solarisnetlibs="-lsocket -lnsl -lresolv"
663 LIBS="$solarisnetlibs $LIBS"
664 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000665;;
malcb29fe3e2008-11-18 01:42:22 +0000666AIX)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200667 aix="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100668 make="${MAKE-gmake}"
malcb29fe3e2008-11-18 01:42:22 +0000669;;
Andreas Färber179cf402010-09-20 00:50:43 +0200670Haiku)
671 haiku="yes"
672 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
673 LIBS="-lposix_error_mapper -lnetwork $LIBS"
674;;
bellard1d14ffa2005-10-30 18:58:22 +0000675*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200676 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200677 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200678 linux="yes"
679 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200680 kvm="yes"
681 vhost_net="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000682 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100683 vhost_vsock="yes"
Alexey Kardashevskiya5851402013-05-29 23:30:43 +1000684 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
bellardfb065182004-11-09 23:09:44 +0000685;;
bellard7d132992003-03-06 23:23:54 +0000686esac
687
bellard7d3505c2004-05-12 19:32:15 +0000688if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000689 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200690 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000691 fi
bellard7d3505c2004-05-12 19:32:15 +0000692fi
693
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100694: ${make=${MAKE-make}}
695: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100696: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400697: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100698
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100699# Default objcc to clang if available, otherwise use CC
700if has clang; then
701 objcc=clang
702else
703 objcc="$cc"
704fi
705
Juan Quintela3457a3f2009-08-03 14:46:07 +0200706if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200707 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800708 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200709 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100710 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
711 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100712 # MinGW needs -mthreads for TLS and macro _MT.
713 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100714 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400715 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100716 if compile_prog "" "-liberty" ; then
717 LIBS="-liberty $LIBS"
718 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200719 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200720 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300721 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300722 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200723 bindir="\${prefix}"
724 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200725 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200726 confsuffix=""
Marc-André Lureau259434b2015-06-30 16:37:13 +0200727 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200728fi
729
Anthony Liguori487fefd2009-06-11 13:28:25 -0500730werror=""
bellard85aa5182007-11-11 20:17:03 +0000731
bellard7d132992003-03-06 23:23:54 +0000732for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200733 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000734 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000735 --help|-h) show_help=yes
736 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400737 --version|-V) exec cat $source_path/VERSION
738 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000739 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000740 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000741 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000742 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100743 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000744 ;;
aliguoriac0df512008-12-29 17:14:15 +0000745 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000746 ;;
aliguoriac0df512008-12-29 17:14:15 +0000747 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000748 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000749 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000750 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400751 --cxx=*)
752 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200753 --iasl=*) iasl="$optarg"
754 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100755 --objcc=*) objcc="$optarg"
756 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000757 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000758 ;;
pbrook6a882642006-04-17 13:57:12 +0000759 --install=*) install="$optarg"
760 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000761 --python=*) python="$optarg"
762 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000763 --gcov=*) gcov_tool="$optarg"
764 ;;
Brade2d88302011-09-02 16:53:28 -0400765 --smbd=*) smbd="$optarg"
766 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200767 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000768 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200769 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000770 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100771 --enable-debug-info)
772 ;;
773 --disable-debug-info)
774 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800775 --enable-modules)
776 modules="yes"
777 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000778 --disable-modules)
779 modules="no"
780 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200781 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000782 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000783 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000784 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +0200785 --enable-trace-backends=*) trace_backends="$optarg"
786 ;;
787 # XXX: backwards compatibility
788 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100789 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100790 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100791 ;;
bellard7d132992003-03-06 23:23:54 +0000792 --enable-gprof) gprof="yes"
793 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000794 --enable-gcov) gcov="yes"
795 ;;
Loïc Minier79427692010-01-31 12:23:45 +0100796 --static)
797 static="yes"
798 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300799 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +0000800 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200801 --mandir=*) mandir="$optarg"
802 ;;
803 --bindir=*) bindir="$optarg"
804 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300805 --libdir=*) libdir="$optarg"
806 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400807 --libexecdir=*) libexecdir="$optarg"
808 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +0200809 --includedir=*) includedir="$optarg"
810 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300811 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200812 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -0300813 --with-confsuffix=*) confsuffix="$optarg"
814 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -0300815 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200816 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +0100817 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -0600818 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300819 --localstatedir=*) local_statedir="$optarg"
820 ;;
821 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +0400822 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
823 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
824 # These switches are silently ignored, for compatibility with
825 # autoconf-generated configure scripts. This allows QEMU's
826 # configure to be used by RPM and similar macros that set
827 # lots of directory switches by default.
828 ;;
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +0200829 --with-system-pixman) pixman="system"
830 ;;
831 --without-system-pixman) pixman="internal"
832 ;;
Robert Schiele74880fe2012-12-04 16:58:08 +0100833 --without-pixman) pixman="none"
834 ;;
bellard97a847b2003-08-10 21:36:04 +0000835 --disable-sdl) sdl="no"
836 ;;
Juan Quintelac4198152009-08-12 18:29:53 +0200837 --enable-sdl) sdl="yes"
838 ;;
Dave Airlie47c03742013-12-10 14:05:51 +1000839 --with-sdlabi=*) sdlabi="$optarg"
840 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +0200841 --disable-qom-cast-debug) qom_cast_debug="no"
842 ;;
843 --enable-qom-cast-debug) qom_cast_debug="yes"
844 ;;
Meador Inge983eef52012-02-24 14:00:42 +0530845 --disable-virtfs) virtfs="no"
846 ;;
847 --enable-virtfs) virtfs="yes"
848 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +0100849 --disable-vnc) vnc="no"
850 ;;
851 --enable-vnc) vnc="yes"
852 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +0000853 --oss-lib=*) oss_lib="$optarg"
854 ;;
malc0c58ac12008-06-25 21:04:05 +0000855 --audio-drv-list=*) audio_drv_list="$optarg"
856 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200857 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800858 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200859 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +0100860 ;;
aurel32f8393942009-04-13 18:45:38 +0000861 --enable-debug-tcg) debug_tcg="yes"
862 ;;
863 --disable-debug-tcg) debug_tcg="no"
864 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +0100865 --enable-debug)
866 # Enable debugging options that aren't excessively noisy
867 debug_tcg="yes"
868 debug="yes"
869 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -0500870 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +0100871 ;;
aliguori03b4fe72008-10-07 19:16:17 +0000872 --enable-sparse) sparse="yes"
873 ;;
874 --disable-sparse) sparse="no"
875 ;;
aliguori1625af82009-04-05 17:41:02 +0000876 --disable-strip) strip_opt="no"
877 ;;
aliguori2f9606b2009-03-06 20:27:28 +0000878 --disable-vnc-sasl) vnc_sasl="no"
879 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +0200880 --enable-vnc-sasl) vnc_sasl="yes"
881 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +0200882 --disable-vnc-jpeg) vnc_jpeg="no"
883 ;;
884 --enable-vnc-jpeg) vnc_jpeg="yes"
885 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +0200886 --disable-vnc-png) vnc_png="no"
887 ;;
888 --enable-vnc-png) vnc_png="yes"
889 ;;
bellard443f1372004-06-04 11:13:20 +0000890 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +0000891 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +0000892 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +0000893 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +0200894 --enable-vde) vde="yes"
895 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +0100896 --disable-netmap) netmap="no"
897 ;;
898 --enable-netmap) netmap="yes"
899 ;;
aliguorie37630c2009-04-22 15:19:10 +0000900 --disable-xen) xen="no"
901 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +0200902 --enable-xen) xen="yes"
903 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000904 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
905 ;;
906 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
907 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +0000908 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
909 ;;
910 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
911 ;;
aurel322e4d9fb2008-04-08 06:01:02 +0000912 --disable-brlapi) brlapi="no"
913 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +0200914 --enable-brlapi) brlapi="yes"
915 ;;
balrogfb599c92008-09-28 23:49:55 +0000916 --disable-bluez) bluez="no"
917 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +0200918 --enable-bluez) bluez="yes"
919 ;;
aliguori7ba1e612008-11-05 16:04:33 +0000920 --disable-kvm) kvm="no"
921 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +0200922 --enable-kvm) kvm="yes"
923 ;;
zhanghailiang180fb752016-10-27 14:43:08 +0800924 --disable-colo) colo="no"
925 ;;
926 --enable-colo) colo="yes"
927 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +0200928 --disable-tcg-interpreter) tcg_interpreter="no"
929 ;;
930 --enable-tcg-interpreter) tcg_interpreter="yes"
931 ;;
Corey Bryant47e98652012-01-26 09:42:26 -0500932 --disable-cap-ng) cap_ng="no"
933 ;;
934 --enable-cap-ng) cap_ng="yes"
935 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +0100936 --disable-spice) spice="no"
937 ;;
938 --enable-spice) spice="yes"
939 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100940 --disable-libiscsi) libiscsi="no"
941 ;;
942 --enable-libiscsi) libiscsi="yes"
943 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +0100944 --disable-libnfs) libnfs="no"
945 ;;
946 --enable-libnfs) libnfs="yes"
947 ;;
bellard05c2a3e2006-02-08 22:39:17 +0000948 --enable-profiler) profiler="yes"
949 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +0400950 --disable-cocoa) cocoa="no"
951 ;;
malcc2de5c92008-06-28 19:13:06 +0000952 --enable-cocoa)
953 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +0200954 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +0000955 ;;
pbrookcad25d62006-03-19 16:31:11 +0000956 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +0000957 ;;
pbrookcad25d62006-03-19 16:31:11 +0000958 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +0000959 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -1000960 --disable-user)
961 linux_user="no" ;
962 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -1000963 ;;
964 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +0000965 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +0000966 ;;
ths831b7822007-01-18 20:06:33 +0000967 --enable-linux-user) linux_user="yes"
968 ;;
blueswir184778502008-10-26 20:33:16 +0000969 --disable-bsd-user) bsd_user="no"
970 ;;
971 --enable-bsd-user) bsd_user="yes"
972 ;;
Avi Kivity40d64442011-11-15 20:12:17 +0200973 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +0300974 ;;
Avi Kivity40d64442011-11-15 20:12:17 +0200975 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +0300976 ;;
bellard85aa5182007-11-11 20:17:03 +0000977 --enable-werror) werror="yes"
978 ;;
979 --disable-werror) werror="no"
980 ;;
Steven Noonan63678e12014-03-28 17:19:02 +0100981 --enable-stack-protector) stack_protector="yes"
982 ;;
983 --disable-stack-protector) stack_protector="no"
984 ;;
balrog4d3b6f62008-02-10 16:33:14 +0000985 --disable-curses) curses="no"
986 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +0200987 --enable-curses) curses="yes"
988 ;;
Alexander Graf769ce762009-05-11 17:41:42 +0200989 --disable-curl) curl="no"
990 ;;
Juan Quintela788c8192009-08-12 18:29:47 +0200991 --enable-curl) curl="yes"
992 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +0200993 --disable-fdt) fdt="no"
994 ;;
995 --enable-fdt) fdt="yes"
996 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +0200997 --disable-linux-aio) linux_aio="no"
998 ;;
999 --enable-linux-aio) linux_aio="yes"
1000 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001001 --disable-attr) attr="no"
1002 ;;
1003 --enable-attr) attr="yes"
1004 ;;
ths77755342008-11-27 15:45:16 +00001005 --disable-blobs) blobs="no"
1006 ;;
pbrook4a19f1e2009-04-07 23:17:49 +00001007 --with-pkgversion=*) pkgversion=" ($optarg)"
1008 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001009 --with-coroutine=*) coroutine="$optarg"
1010 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001011 --disable-coroutine-pool) coroutine_pool="no"
1012 ;;
1013 --enable-coroutine-pool) coroutine_pool="yes"
1014 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001015 --enable-debug-stack-usage) debug_stack_usage="yes"
1016 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001017 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001018 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001019 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001020 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001021 --disable-vhost-net) vhost_net="no"
1022 ;;
1023 --enable-vhost-net) vhost_net="yes"
1024 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001025 --disable-vhost-scsi) vhost_scsi="no"
1026 ;;
1027 --enable-vhost-scsi) vhost_scsi="yes"
1028 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001029 --disable-vhost-vsock) vhost_vsock="no"
1030 ;;
1031 --enable-vhost-vsock) vhost_vsock="yes"
1032 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001033 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001034 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001035 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001036 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001037 --disable-rbd) rbd="no"
1038 ;;
1039 --enable-rbd) rbd="yes"
1040 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001041 --disable-xfsctl) xfs="no"
1042 ;;
1043 --enable-xfsctl) xfs="yes"
1044 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001045 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001046 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001047 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001048 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001049 --disable-libusb) libusb="no"
1050 ;;
1051 --enable-libusb) libusb="yes"
1052 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001053 --disable-usb-redir) usb_redir="no"
1054 ;;
1055 --enable-usb-redir) usb_redir="yes"
1056 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001057 --disable-zlib-test) zlib="no"
1058 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001059 --disable-lzo) lzo="no"
1060 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001061 --enable-lzo) lzo="yes"
1062 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001063 --disable-snappy) snappy="no"
1064 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001065 --enable-snappy) snappy="yes"
1066 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001067 --disable-bzip2) bzip2="no"
1068 ;;
1069 --enable-bzip2) bzip2="yes"
1070 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001071 --enable-guest-agent) guest_agent="yes"
1072 ;;
1073 --disable-guest-agent) guest_agent="no"
1074 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001075 --enable-guest-agent-msi) guest_agent_msi="yes"
1076 ;;
1077 --disable-guest-agent-msi) guest_agent_msi="no"
1078 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001079 --with-vss-sdk) vss_win32_sdk=""
1080 ;;
1081 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1082 ;;
1083 --without-vss-sdk) vss_win32_sdk="no"
1084 ;;
1085 --with-win-sdk) win_sdk=""
1086 ;;
1087 --with-win-sdk=*) win_sdk="$optarg"
1088 ;;
1089 --without-win-sdk) win_sdk="no"
1090 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001091 --enable-tools) want_tools="yes"
1092 ;;
1093 --disable-tools) want_tools="no"
1094 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001095 --enable-seccomp) seccomp="yes"
1096 ;;
1097 --disable-seccomp) seccomp="no"
1098 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301099 --disable-glusterfs) glusterfs="no"
1100 ;;
1101 --enable-glusterfs) glusterfs="yes"
1102 ;;
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03001103 --disable-archipelago) archipelago="no"
1104 ;;
1105 --enable-archipelago) archipelago="yes"
1106 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001107 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1108 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001109 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001110 --enable-vhdx|--disable-vhdx)
1111 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1112 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001113 --enable-uuid|--disable-uuid)
1114 echo "$0: $opt is obsolete, UUID support is always built" >&2
1115 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001116 --disable-gtk) gtk="no"
1117 ;;
1118 --enable-gtk) gtk="yes"
1119 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001120 --tls-priority=*) tls_priority="$optarg"
1121 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001122 --disable-gnutls) gnutls="no"
1123 ;;
1124 --enable-gnutls) gnutls="yes"
1125 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001126 --disable-nettle) nettle="no"
1127 ;;
1128 --enable-nettle) nettle="yes"
1129 ;;
1130 --disable-gcrypt) gcrypt="no"
1131 ;;
1132 --enable-gcrypt) gcrypt="yes"
1133 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001134 --enable-rdma) rdma="yes"
1135 ;;
1136 --disable-rdma) rdma="no"
1137 ;;
Daniel P. Berrange528de902013-02-25 15:20:44 +00001138 --with-gtkabi=*) gtkabi="$optarg"
1139 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001140 --disable-vte) vte="no"
1141 ;;
1142 --enable-vte) vte="yes"
1143 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001144 --disable-virglrenderer) virglrenderer="no"
1145 ;;
1146 --enable-virglrenderer) virglrenderer="yes"
1147 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001148 --disable-tpm) tpm="no"
1149 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001150 --enable-tpm) tpm="yes"
1151 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001152 --disable-libssh2) libssh2="no"
1153 ;;
1154 --enable-libssh2) libssh2="yes"
1155 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001156 --disable-numa) numa="no"
1157 ;;
1158 --enable-numa) numa="yes"
1159 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001160 --disable-tcmalloc) tcmalloc="no"
1161 ;;
1162 --enable-tcmalloc) tcmalloc="yes"
1163 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001164 --disable-jemalloc) jemalloc="no"
1165 ;;
1166 --enable-jemalloc) jemalloc="yes"
1167 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001168 --disable-replication) replication="no"
1169 ;;
1170 --enable-replication) replication="yes"
1171 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001172 *)
1173 echo "ERROR: unknown option $opt"
1174 echo "Try '$0 --help' for more information"
1175 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001176 ;;
bellard7d132992003-03-06 23:23:54 +00001177 esac
1178done
1179
Stefan Weilf6f0b7d2013-12-18 22:30:26 +01001180if ! has $python; then
1181 error_exit "Python not found. Use --python=/path/to/python"
1182fi
1183
1184# Note that if the Python conditional here evaluates True we will exit
1185# with status 1 which is a shell 'false' value.
Markus Armbrusterfec21032015-09-04 21:53:03 +02001186if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1187 error_exit "Cannot use '$python', Python 2.6 or later is required." \
Stefan Weilf6f0b7d2013-12-18 22:30:26 +01001188 "Note that Python 3 or later is not yet supported." \
1189 "Use --python=/path/to/python to specify a supported Python."
1190fi
1191
Markus Armbrusterfec21032015-09-04 21:53:03 +02001192# Suppress writing compiled files
1193python="$python -B"
Stefan Weilf6f0b7d2013-12-18 22:30:26 +01001194
bellard40293e52008-01-31 11:32:10 +00001195case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001196 ppc)
1197 CPU_CFLAGS="-m32"
1198 LDFLAGS="-m32 $LDFLAGS"
1199 ;;
1200 ppc64)
1201 CPU_CFLAGS="-m64"
1202 LDFLAGS="-m64 $LDFLAGS"
1203 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001204 sparc)
Juan Quintelaed968ff2009-08-03 14:46:11 +02001205 LDFLAGS="-m32 $LDFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001206 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
blueswir131422552007-04-16 18:27:06 +00001207 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001208 sparc64)
Juan Quintelaed968ff2009-08-03 14:46:11 +02001209 LDFLAGS="-m64 $LDFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001210 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
blueswir131422552007-04-16 18:27:06 +00001211 ;;
ths76d83bd2007-11-18 21:22:10 +00001212 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001213 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001214 LDFLAGS="-m31 $LDFLAGS"
1215 ;;
1216 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001217 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001218 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001219 ;;
bellard40293e52008-01-31 11:32:10 +00001220 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001221 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001222 LDFLAGS="-m32 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001223 cc_i386='$(CC) -m32'
bellard40293e52008-01-31 11:32:10 +00001224 ;;
1225 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001226 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1227 # If we truly care, we should simply detect this case at
1228 # runtime and generate the fallback to serial emulation.
1229 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001230 LDFLAGS="-m64 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001231 cc_i386='$(CC) -m32'
Paul Brook379f6692009-07-17 12:48:08 +01001232 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001233 x32)
1234 CPU_CFLAGS="-mx32"
1235 LDFLAGS="-mx32 $LDFLAGS"
1236 cc_i386='$(CC) -m32'
1237 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001238 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001239esac
1240
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001241QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1242EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1243
Peter Maydellaffc88c2016-06-13 11:32:24 +01001244# For user-mode emulation the host arch has to be one we explicitly
1245# support, even if we're using TCI.
1246if [ "$ARCH" = "unknown" ]; then
1247 bsd_user="no"
1248 linux_user="no"
1249fi
1250
Peter Maydell60e0df22011-05-03 14:50:13 +01001251default_target_list=""
1252
Peter Maydell6e92f822013-05-20 16:16:15 +01001253mak_wilds=""
1254
1255if [ "$softmmu" = "yes" ]; then
1256 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001257fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001258if [ "$linux_user" = "yes" ]; then
1259 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001260fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001261if [ "$bsd_user" = "yes" ]; then
1262 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001263fi
1264
Peter Maydell6e92f822013-05-20 16:16:15 +01001265for config in $mak_wilds; do
1266 default_target_list="${default_target_list} $(basename "$config" .mak)"
1267done
1268
pbrookaf5db582006-04-08 14:26:41 +00001269if test x"$show_help" = x"yes" ; then
1270cat << EOF
1271
1272Usage: configure [options]
1273Options: [defaults in brackets after descriptions]
1274
Stefan Weil08fb77e2013-12-18 22:09:39 +01001275Standard options:
1276 --help print this message
1277 --prefix=PREFIX install in PREFIX [$prefix]
1278 --interp-prefix=PREFIX where to find shared libraries, etc.
1279 use %M for cpu name [$interp_prefix]
1280 --target-list=LIST set target list (default: build everything)
1281$(echo Available targets: $default_target_list | \
1282 fold -s -w 53 | sed -e 's/^/ /')
1283
1284Advanced options (experts only):
1285 --source-path=PATH path of source code [$source_path]
1286 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1287 --cc=CC use C compiler CC [$cc]
1288 --iasl=IASL use ACPI compiler IASL [$iasl]
1289 --host-cc=CC use C compiler CC [$host_cc] for code run at
1290 build time
1291 --cxx=CXX use C++ compiler CXX [$cxx]
1292 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1293 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1294 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1295 --make=MAKE use specified make [$make]
1296 --install=INSTALL use specified install [$install]
1297 --python=PYTHON use specified python [$python]
1298 --smbd=SMBD use specified smbd [$smbd]
1299 --static enable static build [$static]
1300 --mandir=PATH install man pages in PATH
1301 --datadir=PATH install firmware in PATH$confsuffix
1302 --docdir=PATH install documentation in PATH$confsuffix
1303 --bindir=PATH install binaries in PATH
1304 --libdir=PATH install libraries in PATH
1305 --sysconfdir=PATH install config in PATH$confsuffix
1306 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Fam Zhenge26110c2014-02-10 14:48:57 +08001307 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001308 --enable-debug enable common debug build options
Stefan Weil08fb77e2013-12-18 22:09:39 +01001309 --disable-strip disable stripping binaries
1310 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001311 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001312 --audio-drv-list=LIST set audio drivers list:
1313 Available drivers: $audio_possible_drivers
1314 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1315 --block-drv-rw-whitelist=L
1316 set block driver read-write whitelist
1317 (affects only QEMU, not qemu-img)
1318 --block-drv-ro-whitelist=L
1319 set block driver read-only whitelist
1320 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001321 --enable-trace-backends=B Set trace backend
Stefan Weil08fb77e2013-12-18 22:09:39 +01001322 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1323 --with-trace-file=NAME Full PATH,NAME of file to store traces
1324 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001325 --disable-slirp disable SLIRP userspace network connectivity
1326 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1327 --oss-lib path to OSS library
1328 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001329 --with-coroutine=BACKEND coroutine backend. Supported options:
1330 gthread, ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001331 --enable-gcov enable test coverage analysis with gcov
1332 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001333 --disable-blobs disable installing provided firmware blobs
1334 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1335 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001336 --tls-priority default TLS protocol/cipher priority string
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001337
1338Optional features, enabled with --enable-FEATURE and
1339disabled with --disable-FEATURE, default is enabled if available:
1340
1341 system all system emulation targets
1342 user supported user emulation targets
1343 linux-user all linux usermode emulation targets
1344 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001345 docs build documentation
1346 guest-agent build the QEMU Guest Agent
1347 guest-agent-msi build guest agent Windows MSI installation package
1348 pie Position Independent Executables
1349 modules modules support
1350 debug-tcg TCG debugging (default is disabled)
1351 debug-info debugging information
1352 sparse sparse checker
1353
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001354 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001355 nettle nettle cryptography support
1356 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001357 sdl SDL UI
1358 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1359 gtk gtk UI
1360 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1361 vte vte support for the gtk UI
1362 curses curses UI
1363 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001364 vnc-sasl SASL encryption for VNC server
1365 vnc-jpeg JPEG lossy compression for VNC server
1366 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001367 cocoa Cocoa UI (Mac OS X only)
1368 virtfs VirtFS
1369 xen xen backend driver support
1370 xen-pci-passthrough
1371 brlapi BrlAPI (Braile)
1372 curl curl connectivity
1373 fdt fdt device tree
1374 bluez bluez stack connectivity
1375 kvm KVM acceleration support
zhanghailiang180fb752016-10-27 14:43:08 +08001376 colo COarse-grain LOck-stepping VM for Non-stop Service
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001377 rdma RDMA-based migration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001378 vde support for vde network
1379 netmap support for netmap network
1380 linux-aio Linux AIO support
1381 cap-ng libcap-ng support
1382 attr attr and xattr support
1383 vhost-net vhost-net acceleration support
1384 spice spice
1385 rbd rados block device (rbd)
1386 libiscsi iscsi support
1387 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001388 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001389 libusb libusb (for usb passthrough)
1390 usb-redir usb network redirection support
1391 lzo support of lzo compression library
1392 snappy support of snappy compression library
1393 bzip2 support of bzip2 compression library
1394 (for reading bzip2-compressed dmg images)
1395 seccomp seccomp support
1396 coroutine-pool coroutine freelist (better performance)
1397 glusterfs GlusterFS backend
1398 archipelago Archipelago backend
1399 tpm TPM support
1400 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001401 numa libnuma support
1402 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001403 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001404 replication replication support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001405
1406NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001407EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001408exit 0
pbrookaf5db582006-04-08 14:26:41 +00001409fi
1410
Peter Maydell359bc952011-12-24 13:07:25 +00001411# Now we have handled --enable-tcg-interpreter and know we're not just
1412# printing the help message, bail out if the host CPU isn't supported.
1413if test "$ARCH" = "unknown"; then
1414 if test "$tcg_interpreter" = "yes" ; then
1415 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001416 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001417 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001418 fi
1419fi
1420
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001421# Consult white-list to determine whether to enable werror
1422# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001423if test -z "$werror" ; then
1424 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001425 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001426 werror="yes"
1427 else
1428 werror="no"
1429 fi
1430fi
1431
Paolo Bonzini8d050952010-12-23 11:43:52 +01001432# check that the C compiler works.
John Snow93b25862015-03-25 18:57:37 -04001433write_c_skeleton;
Paolo Bonzini8d050952010-12-23 11:43:52 +01001434if compile_object ; then
1435 : C compiler works ok
1436else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001437 error_exit "\"$cc\" either does not exist or does not work"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001438fi
Peter Maydell0ef74c72015-11-24 14:55:46 +00001439if ! compile_prog ; then
1440 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1441fi
Paolo Bonzini8d050952010-12-23 11:43:52 +01001442
Peter Maydell98b21dc2014-02-20 15:10:16 +00001443# Check that the C++ compiler exists and works with the C compiler
1444if has $cxx; then
1445 cat > $TMPC <<EOF
1446int c_function(void);
1447int main(void) { return c_function(); }
1448EOF
1449
1450 compile_object
1451
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001452 cat > $TMPCXX <<EOF
Peter Maydell98b21dc2014-02-20 15:10:16 +00001453extern "C" {
1454 int c_function(void);
1455}
1456int c_function(void) { return 42; }
1457EOF
1458
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001459 update_cxxflags
1460
1461 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
Peter Maydell98b21dc2014-02-20 15:10:16 +00001462 # C++ compiler $cxx works ok with C compiler $cc
1463 :
1464 else
1465 echo "C++ compiler $cxx does not work with C compiler $cc"
1466 echo "Disabling C++ specific optional code"
1467 cxx=
1468 fi
1469else
1470 echo "No C++ compiler available; disabling C++ specific optional code"
1471 cxx=
1472fi
1473
Paolo Bonzini8d050952010-12-23 11:43:52 +01001474gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1475gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1476gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001477gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Peter Maydellc1556a82012-10-14 21:00:39 +01001478gcc_flags="-Wno-initializer-overrides $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001479gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001480# Note that we do not add -Werror to gcc_flags here, because that would
1481# enable it for all configure tests. If a configure test failed due
1482# to -Werror this would just silently disable some features,
1483# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001484
1485cc_has_warning_flag() {
1486 write_c_skeleton;
1487
Peter Maydella1d29d62012-10-27 22:19:07 +01001488 # Use the positive sense of the flag when testing for -Wno-wombat
1489 # support (gcc will happily accept the -Wno- form of unknown
1490 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001491 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1492 compile_prog "-Werror $optflag" ""
1493}
1494
1495for flag in $gcc_flags; do
1496 if cc_has_warning_flag $flag ; then
1497 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001498 fi
1499done
1500
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001501if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001502 cat > $TMPC << EOF
1503int main(int argc, char *argv[])
1504{
1505 char arr[64], *p = arr, *c = argv[0];
1506 while (*c) {
1507 *p++ = *c++;
1508 }
1509 return 0;
1510}
1511EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001512 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001513 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001514 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001515 # We need to check both a compile and a link, since some compiler
1516 # setups fail only on a .c->.o compile and some only at link time
1517 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1518 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001519 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001520 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001521 break
1522 fi
1523 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001524 if test "$stack_protector" = yes; then
1525 if test $sp_on = 0; then
1526 error_exit "Stack protector not supported"
1527 fi
1528 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001529fi
1530
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001531# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1532# large functions that use global variables. The bug is in all releases of
1533# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1534# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1535cat > $TMPC << EOF
1536#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1537int main(void) { return 0; }
1538#else
1539#error No bug in this compiler.
1540#endif
1541EOF
1542if compile_prog "-Werror -fno-gcse" "" ; then
1543 TRANSLATE_OPT_CFLAGS=-fno-gcse
1544fi
1545
Avi Kivity40d64442011-11-15 20:12:17 +02001546if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001547 if test "$modules" = "yes" ; then
1548 error_exit "static and modules are mutually incompatible"
1549 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001550 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001551 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001552 else
1553 pie="no"
1554 fi
1555fi
1556
Emilio G. Cota768b7852015-04-29 13:09:02 +02001557# Unconditional check for compiler __thread support
1558 cat > $TMPC << EOF
1559static __thread int tls_var;
1560int main(void) { return tls_var; }
1561EOF
1562
1563if ! compile_prog "-Werror" "" ; then
1564 error_exit "Your compiler does not support the __thread specifier for " \
1565 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1566fi
1567
Avi Kivity40d64442011-11-15 20:12:17 +02001568if test "$pie" = ""; then
1569 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001570 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001571 ;;
1572 *)
1573 pie="no"
1574 ;;
1575 esac
1576fi
1577
1578if test "$pie" != "no" ; then
1579 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001580
1581#ifdef __linux__
1582# define THREAD __thread
1583#else
1584# define THREAD
1585#endif
1586
1587static THREAD int tls_var;
1588
1589int main(void) { return tls_var; }
1590
Avi Kivity40d64442011-11-15 20:12:17 +02001591EOF
1592 if compile_prog "-fPIE -DPIE" "-pie"; then
1593 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1594 LDFLAGS="-pie $LDFLAGS"
1595 pie="yes"
1596 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1597 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1598 fi
1599 else
1600 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001601 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001602 else
1603 echo "Disabling PIE due to missing toolchain support"
1604 pie="no"
1605 fi
1606 fi
Brad46eef332013-12-10 19:49:08 -05001607
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001608 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001609 CFLAGS_NOPIE="-fno-pie"
1610 LDFLAGS_NOPIE="-nopie"
1611 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001612fi
1613
Paolo Bonzini09dada42013-04-17 16:26:47 +02001614##########################################
1615# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1616# use i686 as default anyway, but for those that don't, an explicit
1617# specification is necessary
1618
1619if test "$cpu" = "i386"; then
1620 cat > $TMPC << EOF
1621static int sfaa(int *ptr)
1622{
1623 return __sync_fetch_and_and(ptr, 0);
1624}
1625
1626int main(void)
1627{
1628 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001629 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001630 sfaa(&val);
1631 return val;
1632}
1633EOF
1634 if ! compile_prog "" "" ; then
1635 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1636 fi
1637fi
1638
1639#########################################
bellardec530c82006-04-25 22:36:06 +00001640# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001641
bellardec530c82006-04-25 22:36:06 +00001642if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001643 if has $install; then
1644 :
1645 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001646 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1647 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1648 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001649 fi
Stefan Weil89138852016-05-16 15:10:20 +02001650 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001651 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1652 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1653 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001654 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001655 if has ar; then
1656 :
1657 else
bellardec530c82006-04-25 22:36:06 +00001658 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001659 error_exit "No path includes ar" \
1660 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001661 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001662 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001663 fi
ths5fafdf22007-09-16 21:08:06 +00001664fi
bellardec530c82006-04-25 22:36:06 +00001665
Stefan Weilafb63eb2012-09-26 22:04:38 +02001666if test -z "${target_list+xxx}" ; then
Anthony Liguori121afa92012-09-14 08:17:03 -05001667 target_list="$default_target_list"
1668else
Stefan Weil89138852016-05-16 15:10:20 +02001669 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
bellard5327cf42005-01-10 23:18:50 +00001670fi
Peter Maydell25b48332013-05-20 16:16:16 +01001671
1672# Check that we recognised the target name; this allows a more
1673# friendly error message than if we let it fall through.
1674for target in $target_list; do
1675 case " $default_target_list " in
1676 *" $target "*)
1677 ;;
1678 *)
1679 error_exit "Unknown target name '$target'"
1680 ;;
1681 esac
1682done
1683
Paolo Bonzinif55fe272010-05-26 16:08:17 +02001684# see if system emulation was really requested
1685case " $target_list " in
1686 *"-softmmu "*) softmmu=yes
1687 ;;
1688 *) softmmu=no
1689 ;;
1690esac
bellard5327cf42005-01-10 23:18:50 +00001691
Juan Quintela249247c2009-08-12 18:20:25 +02001692feature_not_found() {
1693 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11001694 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02001695
Peter Maydell76ad07a2013-04-08 12:11:26 +01001696 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11001697 "configure was not able to find it." \
1698 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02001699}
1700
bellard7d132992003-03-06 23:23:54 +00001701# ---
1702# big/little endian test
1703cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04001704short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1705short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1706extern int foo(short *, short *);
1707int main(int argc, char *argv[]) {
1708 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00001709}
1710EOF
1711
Mike Frysinger61cc9192013-06-30 23:30:18 -04001712if compile_object ; then
1713 if grep -q BiGeNdIaN $TMPO ; then
1714 bigendian="yes"
1715 elif grep -q LiTtLeEnDiAn $TMPO ; then
1716 bigendian="no"
1717 else
1718 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01001719 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04001720else
1721 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00001722fi
1723
Juan Quintelab0a47e72009-08-12 18:29:49 +02001724##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01001725# cocoa implies not SDL or GTK
1726# (the cocoa UI code currently assumes it is always the active UI
1727# and doesn't interact well with other UI frontend code)
1728if test "$cocoa" = "yes"; then
1729 if test "$sdl" = "yes"; then
1730 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1731 fi
1732 if test "$gtk" = "yes"; then
1733 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1734 fi
1735 gtk=no
1736 sdl=no
1737fi
1738
Eric Blake6b39b062016-10-11 10:46:23 -05001739# Some versions of Mac OS X incorrectly define SIZE_MAX
1740cat > $TMPC << EOF
1741#include <stdint.h>
1742#include <stdio.h>
1743int main(int argc, char *argv[]) {
1744 return printf("%zu", SIZE_MAX);
1745}
1746EOF
1747have_broken_size_max=no
1748if ! compile_object -Werror ; then
1749 have_broken_size_max=yes
1750fi
1751
Peter Maydella30878e2015-08-14 16:10:52 +01001752##########################################
Gonglei015a33b2014-07-01 20:58:08 +08001753# L2TPV3 probe
1754
1755cat > $TMPC <<EOF
1756#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04001757#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08001758int main(void) { return sizeof(struct mmsghdr); }
1759EOF
1760if compile_prog "" "" ; then
1761 l2tpv3=yes
1762else
1763 l2tpv3=no
1764fi
1765
1766##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01001767# MinGW / Mingw-w64 localtime_r/gmtime_r check
1768
1769if test "$mingw32" = "yes"; then
1770 # Some versions of MinGW / Mingw-w64 lack localtime_r
1771 # and gmtime_r entirely.
1772 #
1773 # Some versions of Mingw-w64 define a macro for
1774 # localtime_r/gmtime_r.
1775 #
1776 # Some versions of Mingw-w64 will define functions
1777 # for localtime_r/gmtime_r, but only if you have
1778 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1779 # though, unistd.h and pthread.h both define
1780 # that for you.
1781 #
1782 # So this #undef localtime_r and #include <unistd.h>
1783 # are not in fact redundant.
1784cat > $TMPC << EOF
1785#include <unistd.h>
1786#include <time.h>
1787#undef localtime_r
1788int main(void) { localtime_r(NULL, NULL); return 0; }
1789EOF
1790 if compile_prog "" "" ; then
1791 localtime_r="yes"
1792 else
1793 localtime_r="no"
1794 fi
1795fi
1796
1797##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01001798# pkg-config probe
1799
1800if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001801 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01001802fi
1803
1804##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02001805# NPTL probe
1806
Peter Maydell24cb36a2013-07-16 18:45:00 +01001807if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02001808 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00001809#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00001810#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01001811int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00001812#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1813#error bork
1814#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01001815 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00001816}
1817EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01001818 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11001819 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02001820 fi
pbrookbd0c5662008-05-29 14:34:11 +00001821fi
1822
bellard11d9f692004-04-02 20:55:59 +00001823##########################################
Liang Li99f2dbd2016-03-08 13:53:16 +08001824# avx2 optimization requirement check
1825
Richard Henderson5e33a872016-08-29 11:46:15 -07001826cat > $TMPC << EOF
Dr. David Alan Gilbert4fb83202016-06-10 12:16:18 +01001827#pragma GCC push_options
1828#pragma GCC target("avx2")
1829#include <cpuid.h>
1830#include <immintrin.h>
Dr. David Alan Gilbert4fb83202016-06-10 12:16:18 +01001831static int bar(void *a) {
Richard Henderson5e33a872016-08-29 11:46:15 -07001832 __m256i x = *(__m256i *)a;
1833 return _mm256_testz_si256(x, x);
Dr. David Alan Gilbert4fb83202016-06-10 12:16:18 +01001834}
Richard Henderson5e33a872016-08-29 11:46:15 -07001835int main(int argc, char *argv[]) { return bar(argv[0]); }
Liang Li99f2dbd2016-03-08 13:53:16 +08001836EOF
Richard Henderson5e33a872016-08-29 11:46:15 -07001837if compile_object "" ; then
1838 avx2_opt="yes"
Liang Li99f2dbd2016-03-08 13:53:16 +08001839fi
1840
1841#########################################
balrogac629222008-10-11 09:56:04 +00001842# zlib check
1843
Alon Levy1ece9902011-07-26 12:30:40 +03001844if test "$zlib" != "no" ; then
1845 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00001846#include <zlib.h>
1847int main(void) { zlibVersion(); return 0; }
1848EOF
Alon Levy1ece9902011-07-26 12:30:40 +03001849 if compile_prog "" "-lz" ; then
1850 :
1851 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001852 error_exit "zlib check failed" \
1853 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03001854 fi
balrogac629222008-10-11 09:56:04 +00001855fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00001856LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00001857
1858##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08001859# lzo check
1860
1861if test "$lzo" != "no" ; then
1862 cat > $TMPC << EOF
1863#include <lzo/lzo1x.h>
1864int main(void) { lzo_version(); return 0; }
1865EOF
1866 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001867 libs_softmmu="$libs_softmmu -llzo2"
1868 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001869 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001870 if test "$lzo" = "yes"; then
1871 feature_not_found "liblzo2" "Install liblzo2 devel"
1872 fi
1873 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08001874 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08001875fi
1876
1877##########################################
1878# snappy check
1879
1880if test "$snappy" != "no" ; then
1881 cat > $TMPC << EOF
1882#include <snappy-c.h>
1883int main(void) { snappy_max_compressed_length(4096); return 0; }
1884EOF
1885 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001886 libs_softmmu="$libs_softmmu -lsnappy"
1887 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001888 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001889 if test "$snappy" = "yes"; then
1890 feature_not_found "libsnappy" "Install libsnappy devel"
1891 fi
1892 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08001893 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08001894fi
1895
1896##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01001897# bzip2 check
1898
1899if test "$bzip2" != "no" ; then
1900 cat > $TMPC << EOF
1901#include <bzlib.h>
1902int main(void) { BZ2_bzlibVersion(); return 0; }
1903EOF
1904 if compile_prog "" "-lbz2" ; then
1905 bzip2="yes"
1906 else
1907 if test "$bzip2" = "yes"; then
1908 feature_not_found "libbzip2" "Install libbzip2 devel"
1909 fi
1910 bzip2="no"
1911 fi
1912fi
1913
1914##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03001915# libseccomp check
1916
1917if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04001918 case "$cpu" in
1919 i386|x86_64)
dann frazierba060c52015-10-23 15:34:22 -06001920 libseccomp_minver="2.1.0"
Andrew Jones693e5912015-09-30 11:59:18 -04001921 ;;
James Hogan5ce43972016-04-08 14:16:34 +01001922 mips)
1923 libseccomp_minver="2.2.0"
1924 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04001925 arm|aarch64)
1926 libseccomp_minver="2.2.3"
1927 ;;
Michael Strosaker3e684452016-06-01 18:30:18 -05001928 ppc|ppc64)
1929 libseccomp_minver="2.3.0"
1930 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04001931 *)
1932 libseccomp_minver=""
1933 ;;
1934 esac
1935
1936 if test "$libseccomp_minver" != "" &&
1937 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Stefan Weil89138852016-05-16 15:10:20 +02001938 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
1939 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04001940 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03001941 else
Andrew Jones693e5912015-09-30 11:59:18 -04001942 if test "$seccomp" = "yes" ; then
1943 if test "$libseccomp_minver" != "" ; then
1944 feature_not_found "libseccomp" \
1945 "Install libseccomp devel >= $libseccomp_minver"
1946 else
1947 feature_not_found "libseccomp" \
1948 "libseccomp is not supported for host cpu $cpu"
1949 fi
1950 fi
1951 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03001952 fi
1953fi
1954##########################################
aliguorie37630c2009-04-22 15:19:10 +00001955# xen probe
1956
Juan Quintelafc321b42009-08-12 18:29:55 +02001957if test "$xen" != "no" ; then
Juan Quintelab2266be2009-07-27 16:13:16 +02001958 xen_libs="-lxenstore -lxenctrl -lxenguest"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00001959 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00001960
Stefan Weil50ced5b2011-12-17 09:27:39 +01001961 # First we test whether Xen headers and libraries are available.
1962 # If no, we are done and there is no Xen support.
1963 # If yes, more tests are run to detect the Xen version.
1964
1965 # Xen (any)
Juan Quintelab2266be2009-07-27 16:13:16 +02001966 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00001967#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01001968int main(void) {
1969 return 0;
1970}
1971EOF
1972 if ! compile_prog "" "$xen_libs" ; then
1973 # Xen not found
1974 if test "$xen" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11001975 feature_not_found "xen" "Install xen devel"
Stefan Weil50ced5b2011-12-17 09:27:39 +01001976 fi
1977 xen=no
1978
1979 # Xen unstable
Peter Maydell69deef02012-08-02 18:30:26 +01001980 elif
1981 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00001982/*
1983 * If we have stable libs the we don't want the libxc compat
1984 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02001985 *
1986 * Also, check if xengnttab_grant_copy_segment_t is defined and
1987 * grant copy operation is implemented.
1988 */
1989#undef XC_WANT_COMPAT_EVTCHN_API
1990#undef XC_WANT_COMPAT_GNTTAB_API
1991#undef XC_WANT_COMPAT_MAP_FOREIGN_API
1992#include <xenctrl.h>
1993#include <xenstore.h>
1994#include <xenevtchn.h>
1995#include <xengnttab.h>
1996#include <xenforeignmemory.h>
1997#include <stdint.h>
1998#include <xen/hvm/hvm_info_table.h>
1999#if !defined(HVM_MAX_VCPUS)
2000# error HVM_MAX_VCPUS not defined
2001#endif
2002int main(void) {
2003 xc_interface *xc = NULL;
2004 xenforeignmemory_handle *xfmem;
2005 xenevtchn_handle *xe;
2006 xengnttab_handle *xg;
2007 xen_domain_handle_t handle;
2008 xengnttab_grant_copy_segment_t* seg = NULL;
2009
2010 xs_daemon_open();
2011
2012 xc = xc_interface_open(0, 0, 0);
2013 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2014 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2015 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2016 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2017 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2018
2019 xfmem = xenforeignmemory_open(0, 0);
2020 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2021
2022 xe = xenevtchn_open(0, 0);
2023 xenevtchn_fd(xe);
2024
2025 xg = xengnttab_open(0, 0);
2026 xengnttab_grant_copy(xg, 0, seg);
2027
2028 return 0;
2029}
2030EOF
2031 compile_prog "" "$xen_libs $xen_stable_libs"
2032 then
2033 xen_ctrl_version=480
2034 xen=yes
2035 elif
2036 cat > $TMPC <<EOF &&
2037/*
2038 * If we have stable libs the we don't want the libxc compat
2039 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002040 */
2041#undef XC_WANT_COMPAT_EVTCHN_API
2042#undef XC_WANT_COMPAT_GNTTAB_API
2043#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2044#include <xenctrl.h>
2045#include <xenstore.h>
2046#include <xenevtchn.h>
2047#include <xengnttab.h>
2048#include <xenforeignmemory.h>
2049#include <stdint.h>
2050#include <xen/hvm/hvm_info_table.h>
2051#if !defined(HVM_MAX_VCPUS)
2052# error HVM_MAX_VCPUS not defined
2053#endif
2054int main(void) {
2055 xc_interface *xc = NULL;
2056 xenforeignmemory_handle *xfmem;
2057 xenevtchn_handle *xe;
2058 xengnttab_handle *xg;
2059 xen_domain_handle_t handle;
2060
2061 xs_daemon_open();
2062
2063 xc = xc_interface_open(0, 0, 0);
2064 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2065 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2066 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2067 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2068 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2069
2070 xfmem = xenforeignmemory_open(0, 0);
2071 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2072
2073 xe = xenevtchn_open(0, 0);
2074 xenevtchn_fd(xe);
2075
2076 xg = xengnttab_open(0, 0);
2077 xengnttab_map_grant_ref(xg, 0, 0, 0);
2078
2079 return 0;
2080}
2081EOF
2082 compile_prog "" "$xen_libs $xen_stable_libs"
2083 then
2084 xen_ctrl_version=471
2085 xen=yes
2086 elif
2087 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002088#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002089#include <stdint.h>
2090int main(void) {
2091 xc_interface *xc = NULL;
2092 xen_domain_handle_t handle;
2093 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2094 return 0;
2095}
2096EOF
2097 compile_prog "" "$xen_libs"
2098 then
2099 xen_ctrl_version=470
2100 xen=yes
2101
2102 # Xen 4.6
2103 elif
2104 cat > $TMPC <<EOF &&
2105#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002106#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002107#include <stdint.h>
2108#include <xen/hvm/hvm_info_table.h>
2109#if !defined(HVM_MAX_VCPUS)
2110# error HVM_MAX_VCPUS not defined
2111#endif
2112int main(void) {
2113 xc_interface *xc;
2114 xs_daemon_open();
2115 xc = xc_interface_open(0, 0, 0);
2116 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2117 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002118 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002119 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002120 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002121 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002122 return 0;
2123}
2124EOF
2125 compile_prog "" "$xen_libs"
2126 then
2127 xen_ctrl_version=460
2128 xen=yes
2129
2130 # Xen 4.5
2131 elif
2132 cat > $TMPC <<EOF &&
2133#include <xenctrl.h>
2134#include <xenstore.h>
2135#include <stdint.h>
2136#include <xen/hvm/hvm_info_table.h>
2137#if !defined(HVM_MAX_VCPUS)
2138# error HVM_MAX_VCPUS not defined
2139#endif
2140int main(void) {
2141 xc_interface *xc;
2142 xs_daemon_open();
2143 xc = xc_interface_open(0, 0, 0);
2144 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2145 xc_gnttab_open(NULL, 0);
2146 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2147 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002148 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2149 return 0;
2150}
2151EOF
2152 compile_prog "" "$xen_libs"
2153 then
2154 xen_ctrl_version=450
2155 xen=yes
2156
2157 elif
2158 cat > $TMPC <<EOF &&
2159#include <xenctrl.h>
2160#include <xenstore.h>
2161#include <stdint.h>
2162#include <xen/hvm/hvm_info_table.h>
2163#if !defined(HVM_MAX_VCPUS)
2164# error HVM_MAX_VCPUS not defined
2165#endif
2166int main(void) {
2167 xc_interface *xc;
2168 xs_daemon_open();
2169 xc = xc_interface_open(0, 0, 0);
2170 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2171 xc_gnttab_open(NULL, 0);
2172 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2173 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002174 return 0;
2175}
2176EOF
2177 compile_prog "" "$xen_libs"
Peter Maydell69deef02012-08-02 18:30:26 +01002178 then
Stefano Stabellini8688e062012-04-17 17:04:18 +00002179 xen_ctrl_version=420
2180 xen=yes
2181
Juan Quintelab2266be2009-07-27 16:13:16 +02002182 else
Juan Quintelafc321b42009-08-12 18:29:55 +02002183 if test "$xen" = "yes" ; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002184 feature_not_found "xen (unsupported version)" \
2185 "Install a supported xen (xen 4.2 or newer)"
Juan Quintelafc321b42009-08-12 18:29:55 +02002186 fi
2187 xen=no
Juan Quintelab2266be2009-07-27 16:13:16 +02002188 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002189
2190 if test "$xen" = yes; then
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002191 if test $xen_ctrl_version -ge 471 ; then
2192 libs_softmmu="$xen_stable_libs $libs_softmmu"
2193 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002194 libs_softmmu="$xen_libs $libs_softmmu"
2195 fi
aliguorie37630c2009-04-22 15:19:10 +00002196fi
2197
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002198if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002199 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002200 xen_pci_passthrough=yes
2201 else
2202 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002203 error_exit "User requested feature Xen PCI Passthrough" \
2204 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002205 fi
2206 xen_pci_passthrough=no
2207 fi
2208fi
2209
Ian Campbell64a7ad62016-01-15 13:23:44 +00002210if test "$xen_pv_domain_build" = "yes" &&
2211 test "$xen" != "yes"; then
2212 error_exit "User requested Xen PV domain builder support" \
2213 "which requires Xen support."
2214fi
2215
aliguorie37630c2009-04-22 15:19:10 +00002216##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002217# Sparse probe
2218if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002219 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002220 sparse=yes
2221 else
2222 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002223 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002224 fi
2225 sparse=no
2226 fi
2227fi
2228
2229##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002230# X11 probe
2231x11_cflags=
2232x11_libs=-lX11
2233if $pkg_config --exists "x11"; then
Stefan Weil89138852016-05-16 15:10:20 +02002234 x11_cflags=$($pkg_config --cflags x11)
2235 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002236fi
2237
2238##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002239# GTK probe
2240
Stefan Weil9e04c682014-05-17 16:29:18 +02002241if test "$gtkabi" = ""; then
2242 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2243 # Use 3.0 as a fallback if that is available.
2244 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2245 gtkabi=2.0
2246 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2247 gtkabi=3.0
2248 else
2249 gtkabi=2.0
2250 fi
2251fi
2252
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002253if test "$gtk" != "no"; then
Daniel P. Berrange528de902013-02-25 15:20:44 +00002254 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002255 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002256 if test "$gtkabi" = "3.0" ; then
2257 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002258 else
2259 gtkversion="2.18.0"
2260 fi
2261 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002262 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2263 gtk_libs=$($pkg_config --libs $gtkpackage)
2264 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002265 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Jeremy Whitef676c672015-01-09 13:08:49 -06002266 gtk_cflags="$gtk_cflags $x11_cflags"
2267 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002268 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002269 libs_softmmu="$gtk_libs $libs_softmmu"
2270 gtk="yes"
2271 elif test "$gtk" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002272 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002273 else
2274 gtk="no"
2275 fi
2276fi
2277
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002278
2279##########################################
2280# GNUTLS probe
2281
Peter Maydell37371292015-07-24 18:28:08 +01002282gnutls_works() {
2283 # Unfortunately some distros have bad pkg-config information for gnutls
2284 # such that it claims to exist but you get a compiler error if you try
2285 # to use the options returned by --libs. Specifically, Ubuntu for --static
2286 # builds doesn't work:
2287 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2288 #
2289 # So sanity check the cflags/libs before assuming gnutls can be used.
2290 if ! $pkg_config --exists "gnutls"; then
2291 return 1
2292 fi
2293
2294 write_c_skeleton
2295 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2296}
2297
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002298gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002299gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002300if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002301 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002302 gnutls_cflags=$($pkg_config --cflags gnutls)
2303 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002304 libs_softmmu="$gnutls_libs $libs_softmmu"
2305 libs_tools="$gnutls_libs $libs_tools"
2306 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2307 gnutls="yes"
2308
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002309 # gnutls_rnd requires >= 2.11.0
2310 if $pkg_config --exists "gnutls >= 2.11.0"; then
2311 gnutls_rnd="yes"
2312 else
2313 gnutls_rnd="no"
2314 fi
2315
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002316 if $pkg_config --exists 'gnutls >= 3.0'; then
2317 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002318 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002319 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002320 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002321 *gcrypt*)
2322 gnutls_gcrypt=yes
2323 gnutls_nettle=no
2324 ;;
2325 *nettle*)
2326 gnutls_gcrypt=no
2327 gnutls_nettle=yes
2328 ;;
2329 *)
2330 gnutls_gcrypt=yes
2331 gnutls_nettle=no
2332 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002333 esac
2334 else
2335 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002336 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002337 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002338 elif test "$gnutls" = "yes"; then
2339 feature_not_found "gnutls" "Install gnutls devel"
2340 else
2341 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002342 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002343 fi
2344else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002345 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002346fi
2347
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002348
2349# If user didn't give a --disable/enable-gcrypt flag,
2350# then mark as disabled if user requested nettle
2351# explicitly, or if gnutls links to nettle
2352if test -z "$gcrypt"
2353then
2354 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2355 then
2356 gcrypt="no"
2357 fi
2358fi
2359
2360# If user didn't give a --disable/enable-nettle flag,
2361# then mark as disabled if user requested gcrypt
2362# explicitly, or if gnutls links to gcrypt
2363if test -z "$nettle"
2364then
2365 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2366 then
2367 nettle="no"
2368 fi
2369fi
2370
2371has_libgcrypt_config() {
2372 if ! has "libgcrypt-config"
2373 then
2374 return 1
2375 fi
2376
2377 if test -n "$cross_prefix"
2378 then
Stefan Weil89138852016-05-16 15:10:20 +02002379 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002380 if test "$host-" != $cross_prefix
2381 then
2382 return 1
2383 fi
2384 fi
2385
2386 return 0
2387}
2388
2389if test "$gcrypt" != "no"; then
2390 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002391 gcrypt_cflags=$(libgcrypt-config --cflags)
2392 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002393 # Debian has remove -lgpg-error from libgcrypt-config
2394 # as it "spreads unnecessary dependencies" which in
2395 # turn breaks static builds...
2396 if test "$static" = "yes"
2397 then
2398 gcrypt_libs="$gcrypt_libs -lgpg-error"
2399 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002400 libs_softmmu="$gcrypt_libs $libs_softmmu"
2401 libs_tools="$gcrypt_libs $libs_tools"
2402 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002403 gcrypt="yes"
2404 if test -z "$nettle"; then
2405 nettle="no"
2406 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002407
2408 cat > $TMPC << EOF
2409#include <gcrypt.h>
2410int main(void) {
2411 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2412 GCRY_MD_SHA256,
2413 NULL, 0, 0, 0, NULL);
2414 return 0;
2415}
2416EOF
2417 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2418 gcrypt_kdf=yes
2419 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002420 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002421 if test "$gcrypt" = "yes"; then
2422 feature_not_found "gcrypt" "Install gcrypt devel"
2423 else
2424 gcrypt="no"
2425 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002426 fi
2427fi
2428
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002429
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002430if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002431 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002432 nettle_cflags=$($pkg_config --cflags nettle)
2433 nettle_libs=$($pkg_config --libs nettle)
2434 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002435 libs_softmmu="$nettle_libs $libs_softmmu"
2436 libs_tools="$nettle_libs $libs_tools"
2437 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002438 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002439
2440 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002441#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002442#include <nettle/pbkdf2.h>
2443int main(void) {
2444 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2445 return 0;
2446}
2447EOF
2448 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2449 nettle_kdf=yes
2450 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002451 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002452 if test "$nettle" = "yes"; then
2453 feature_not_found "nettle" "Install nettle devel"
2454 else
2455 nettle="no"
2456 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002457 fi
2458fi
2459
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002460if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2461then
2462 error_exit "Only one of gcrypt & nettle can be enabled"
2463fi
2464
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002465##########################################
2466# libtasn1 - only for the TLS creds/session test suite
2467
2468tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002469tasn1_cflags=""
2470tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002471if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002472 tasn1_cflags=$($pkg_config --cflags libtasn1)
2473 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002474else
2475 tasn1=no
2476fi
2477
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002478
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002479##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002480# getifaddrs (for tests/test-io-channel-socket )
2481
2482have_ifaddrs_h=yes
2483if ! check_include "ifaddrs.h" ; then
2484 have_ifaddrs_h=no
2485fi
2486
2487##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002488# VTE probe
2489
2490if test "$vte" != "no"; then
2491 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002492 vteminversion="0.32.0"
2493 if $pkg_config --exists "vte-2.91"; then
2494 vtepackage="vte-2.91"
2495 else
2496 vtepackage="vte-2.90"
2497 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002498 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002499 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002500 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002501 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002502 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002503 vte_cflags=$($pkg_config --cflags $vtepackage)
2504 vte_libs=$($pkg_config --libs $vtepackage)
2505 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002506 libs_softmmu="$vte_libs $libs_softmmu"
2507 vte="yes"
2508 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002509 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002510 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002511 else
2512 feature_not_found "vte" "Install libvte devel"
2513 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002514 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002515 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002516 fi
2517fi
2518
2519##########################################
bellard11d9f692004-04-02 20:55:59 +00002520# SDL probe
2521
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002522# Look for sdl configuration program (pkg-config or sdl-config). Try
2523# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002524
Cole Robinsonee8466d2016-05-06 14:03:07 -04002525if test "$sdlabi" = ""; then
2526 if $pkg_config --exists "sdl"; then
2527 sdlabi=1.2
2528 elif $pkg_config --exists "sdl2"; then
2529 sdlabi=2.0
2530 else
2531 sdlabi=1.2
2532 fi
2533fi
2534
Dave Airlie47c03742013-12-10 14:05:51 +10002535if test $sdlabi = "2.0"; then
2536 sdl_config=$sdl2_config
2537 sdlname=sdl2
2538 sdlconfigname=sdl2_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002539elif test $sdlabi = "1.2"; then
Dave Airlie47c03742013-12-10 14:05:51 +10002540 sdlname=sdl
2541 sdlconfigname=sdl_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002542else
2543 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002544fi
2545
Stefan Weil89138852016-05-16 15:10:20 +02002546if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
Dave Airlie47c03742013-12-10 14:05:51 +10002547 sdl_config=$sdlconfigname
2548fi
2549
2550if $pkg_config $sdlname --exists; then
2551 sdlconfig="$pkg_config $sdlname"
Stefan Weil89138852016-05-16 15:10:20 +02002552 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002553elif has ${sdl_config}; then
2554 sdlconfig="$sdl_config"
Stefan Weil89138852016-05-16 15:10:20 +02002555 sdlversion=$($sdlconfig --version)
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002556else
2557 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002558 feature_not_found "sdl" "Install SDL devel"
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002559 fi
2560 sdl=no
Paolo Bonzini9316f802010-01-13 09:52:55 +01002561fi
Scott Wood29e5bad2011-04-08 14:15:50 -05002562if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002563 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2564fi
bellard11d9f692004-04-02 20:55:59 +00002565
Paolo Bonzini9316f802010-01-13 09:52:55 +01002566sdl_too_old=no
Juan Quintelac4198152009-08-12 18:29:53 +02002567if test "$sdl" != "no" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002568 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002569#include <SDL.h>
2570#undef main /* We don't want SDL to override our main() */
2571int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2572EOF
Stefan Weil89138852016-05-16 15:10:20 +02002573 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002574 if test "$static" = "yes" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002575 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002576 else
Stefan Weil89138852016-05-16 15:10:20 +02002577 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002578 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002579 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002580 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002581 sdl_too_old=yes
2582 else
Peter Maydella30878e2015-08-14 16:10:52 +01002583 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002584 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002585
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002586 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002587 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002588 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002589 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2590 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002591 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002592 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002593 :
2594 else
2595 sdl=no
2596 fi
2597 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002598 else # sdl not found
2599 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002600 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002601 fi
2602 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002603 fi # sdl compile test
Juan Quintelaa68551b2009-07-27 16:13:09 +02002604fi
bellard11d9f692004-04-02 20:55:59 +00002605
aliguori5368a422009-03-03 17:37:21 +00002606if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002607 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002608#include <SDL.h>
2609#if defined(SDL_VIDEO_DRIVER_X11)
2610#include <X11/XKBlib.h>
2611#else
2612#error No x11 support
2613#endif
2614int main(void) { return 0; }
2615EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002616 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2617 sdl_cflags="$sdl_cflags $x11_cflags"
2618 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02002619 fi
Juan Quintela07056672009-08-03 14:46:27 +02002620 libs_softmmu="$sdl_libs $libs_softmmu"
aliguori5368a422009-03-03 17:37:21 +00002621fi
2622
ths8f28f3f2007-01-05 21:25:54 +00002623##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04002624# RDMA needs OpenFabrics libraries
2625if test "$rdma" != "no" ; then
2626 cat > $TMPC <<EOF
2627#include <rdma/rdma_cma.h>
2628int main(void) { return 0; }
2629EOF
2630 rdma_libs="-lrdmacm -libverbs"
2631 if compile_prog "" "$rdma_libs" ; then
2632 rdma="yes"
2633 libs_softmmu="$libs_softmmu $rdma_libs"
2634 else
2635 if test "$rdma" = "yes" ; then
2636 error_exit \
2637 " OpenFabrics librdmacm/libibverbs not present." \
2638 " Your options:" \
2639 " (1) Fast: Install infiniband packages from your distro." \
2640 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2641 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2642 fi
2643 rdma="no"
2644 fi
2645fi
2646
ths8d5d2d42007-08-25 01:37:51 +00002647
2648##########################################
aliguori2f9606b2009-03-06 20:27:28 +00002649# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002650if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02002651 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00002652#include <sasl/sasl.h>
2653#include <stdio.h>
2654int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2655EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02002656 # Assuming Cyrus-SASL installed in /usr prefix
2657 vnc_sasl_cflags=""
2658 vnc_sasl_libs="-lsasl2"
2659 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2660 vnc_sasl=yes
2661 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002662 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02002663 else
2664 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002665 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00002666 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02002667 vnc_sasl=no
2668 fi
aliguori2f9606b2009-03-06 20:27:28 +00002669fi
2670
2671##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002672# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002673if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002674cat > $TMPC <<EOF
2675#include <stdio.h>
2676#include <jpeglib.h>
2677int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2678EOF
2679 vnc_jpeg_cflags=""
2680 vnc_jpeg_libs="-ljpeg"
2681 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2682 vnc_jpeg=yes
2683 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002684 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002685 else
2686 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002687 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002688 fi
2689 vnc_jpeg=no
2690 fi
2691fi
2692
2693##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02002694# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002695if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02002696cat > $TMPC <<EOF
2697//#include <stdio.h>
2698#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05002699#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02002700int main(void) {
2701 png_structp png_ptr;
2702 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01002703 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02002704}
2705EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02002706 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02002707 vnc_png_cflags=$($pkg_config libpng --cflags)
2708 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04002709 else
Corentin Charyefe556a2010-07-07 20:57:56 +02002710 vnc_png_cflags=""
2711 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04002712 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02002713 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2714 vnc_png=yes
2715 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04002716 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02002717 else
2718 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002719 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02002720 fi
2721 vnc_png=no
2722 fi
2723fi
2724
2725##########################################
aliguori76655d62009-03-06 20:27:37 +00002726# fnmatch() probe, used for ACL routines
2727fnmatch="no"
2728cat > $TMPC << EOF
2729#include <fnmatch.h>
2730int main(void)
2731{
2732 fnmatch("foo", "foo", 0);
2733 return 0;
2734}
2735EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002736if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00002737 fnmatch="yes"
2738fi
2739
2740##########################################
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002741# xfsctl() probe, used for raw-posix
2742if test "$xfs" != "no" ; then
2743 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01002744#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002745#include <xfs/xfs.h>
2746int main(void)
2747{
2748 xfsctl(NULL, 0, 0, NULL);
2749 return 0;
2750}
2751EOF
2752 if compile_prog "" "" ; then
2753 xfs="yes"
2754 else
2755 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002756 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002757 fi
2758 xfs=no
2759 fi
2760fi
2761
2762##########################################
ths8a16d272008-07-19 09:56:24 +00002763# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02002764if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002765 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00002766 cat > $TMPC << EOF
2767#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00002768int main(void)
2769{
2770 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01002771 char s[] = "";
2772 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00002773 return 0;
2774}
ths8a16d272008-07-19 09:56:24 +00002775EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002776 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002777 vde=yes
Juan Quintela8e02e542009-08-03 14:47:07 +02002778 libs_softmmu="$vde_libs $libs_softmmu"
2779 libs_tools="$vde_libs $libs_tools"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002780 else
2781 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002782 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002783 fi
2784 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02002785 fi
ths8a16d272008-07-19 09:56:24 +00002786fi
2787
2788##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002789# netmap support probe
2790# Apart from looking for netmap headers, we make sure that the host API version
2791# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2792# a minor/major version number. Minor new features will be marked with values up
2793# to 15, and if something happens that requires a change to the backend we will
2794# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01002795if test "$netmap" != "no" ; then
2796 cat > $TMPC << EOF
2797#include <inttypes.h>
2798#include <net/if.h>
2799#include <net/netmap.h>
2800#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002801#if (NETMAP_API < 11) || (NETMAP_API > 15)
2802#error
2803#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01002804int main(void) { return 0; }
2805EOF
2806 if compile_prog "" "" ; then
2807 netmap=yes
2808 else
2809 if test "$netmap" = "yes" ; then
2810 feature_not_found "netmap"
2811 fi
2812 netmap=no
2813 fi
2814fi
2815
2816##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05002817# libcap-ng library probe
2818if test "$cap_ng" != "no" ; then
2819 cap_libs="-lcap-ng"
2820 cat > $TMPC << EOF
2821#include <cap-ng.h>
2822int main(void)
2823{
2824 capng_capability_to_name(CAPNG_EFFECTIVE);
2825 return 0;
2826}
2827EOF
2828 if compile_prog "" "$cap_libs" ; then
2829 cap_ng=yes
2830 libs_tools="$cap_libs $libs_tools"
2831 else
2832 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002833 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05002834 fi
2835 cap_ng=no
2836 fi
2837fi
2838
2839##########################################
malcc2de5c92008-06-28 19:13:06 +00002840# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00002841
malcc2de5c92008-06-28 19:13:06 +00002842audio_drv_probe()
2843{
2844 drv=$1
2845 hdr=$2
2846 lib=$3
2847 exp=$4
2848 cfl=$5
2849 cat > $TMPC << EOF
2850#include <$hdr>
2851int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00002852EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002853 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00002854 :
2855 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002856 error_exit "$drv check failed" \
2857 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00002858 fi
2859}
2860
Stefan Weil89138852016-05-16 15:10:20 +02002861audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00002862for drv in $audio_drv_list; do
2863 case $drv in
2864 alsa)
2865 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01002866 "return snd_pcm_close((snd_pcm_t *)0);"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02002867 libs_softmmu="-lasound $libs_softmmu"
malcc2de5c92008-06-28 19:13:06 +00002868 ;;
2869
malcb8e59f12008-07-02 21:03:08 +00002870 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02002871 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
2872 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Marc-André Lureaua394aed2012-04-17 14:32:42 +02002873 libs_softmmu="-lpulse $libs_softmmu"
Juan Quintela67f86e82009-08-03 14:46:59 +02002874 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00002875 ;;
2876
Juan Quintela997e6902009-08-03 14:46:29 +02002877 coreaudio)
2878 libs_softmmu="-framework CoreAudio $libs_softmmu"
2879 ;;
2880
Juan Quintelaa4bf6782009-08-03 14:46:30 +02002881 dsound)
2882 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
malcd5631632009-10-10 01:13:41 +04002883 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02002884 ;;
2885
2886 oss)
2887 libs_softmmu="$oss_lib $libs_softmmu"
2888 ;;
2889
2890 sdl|wav)
blueswir12f6a1ab2008-08-21 18:00:53 +00002891 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2892 ;;
2893
malce4c63a62008-07-19 16:15:16 +00002894 *)
malc1c9b2a52008-07-19 16:57:30 +00002895 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01002896 error_exit "Unknown driver '$drv' selected" \
2897 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00002898 }
2899 ;;
malcc2de5c92008-06-28 19:13:06 +00002900 esac
2901done
ths8f28f3f2007-01-05 21:25:54 +00002902
balrog4d3b6f62008-02-10 16:33:14 +00002903##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00002904# BrlAPI probe
2905
Juan Quintela4ffcedb2009-08-12 18:20:26 +02002906if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02002907 brlapi_libs="-lbrlapi"
2908 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00002909#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05002910#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00002911int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2912EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002913 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02002914 brlapi=yes
Juan Quintela264606b2009-08-03 14:46:39 +02002915 libs_softmmu="$brlapi_libs $libs_softmmu"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02002916 else
2917 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002918 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02002919 fi
2920 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02002921 fi
2922fi
aurel322e4d9fb2008-04-08 06:01:02 +00002923
2924##########################################
balrog4d3b6f62008-02-10 16:33:14 +00002925# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02002926if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04002927 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002928 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
2929 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04002930 else
Samuel Thibault7c703002016-11-09 11:27:52 +01002931 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002932 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04002933 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02002934 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00002935 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002936#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00002937#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002938#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01002939int main(void) {
2940 const char *s = curses_version();
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002941 wchar_t wch = L'w';
2942 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01002943 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002944 addwstr(L"wide chars\n");
2945 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01002946 add_wch(WACS_DEGREE);
Stefan Weilef9a2522011-12-17 17:46:02 +01002947 return s != 0;
2948}
balrog4d3b6f62008-02-10 16:33:14 +00002949EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04002950 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002951 for curses_inc in $curses_inc_list; do
Samuel Thibault7c703002016-11-09 11:27:52 +01002952 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002953 for curses_lib in $curses_lib_list; do
2954 unset IFS
2955 if compile_prog "$curses_inc" "$curses_lib" ; then
2956 curses_found=yes
2957 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
2958 libs_softmmu="$curses_lib $libs_softmmu"
2959 break
2960 fi
2961 done
Samuel Thibault7c703002016-11-09 11:27:52 +01002962 if test "$curses_found" = yes ; then
2963 break
2964 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02002965 done
Vadim Evardecbe2512013-01-15 16:17:24 +04002966 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02002967 if test "$curses_found" = "yes" ; then
2968 curses=yes
2969 else
2970 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002971 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02002972 fi
2973 curses=no
2974 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02002975fi
balrog4d3b6f62008-02-10 16:33:14 +00002976
blueswir1414f0da2008-08-15 18:20:52 +00002977##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02002978# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02002979if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02002980 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04002981 curlconfig="$pkg_config libcurl"
2982 else
2983 curlconfig=curl-config
2984 fi
Alexander Graf769ce762009-05-11 17:41:42 +02002985 cat > $TMPC << EOF
2986#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01002987int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02002988EOF
Stefan Weil89138852016-05-16 15:10:20 +02002989 curl_cflags=$($curlconfig --cflags 2>/dev/null)
2990 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02002991 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02002992 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02002993 else
2994 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002995 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02002996 fi
2997 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02002998 fi
2999fi # test "$curl"
3000
3001##########################################
balrogfb599c92008-09-28 23:49:55 +00003002# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003003if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003004 cat > $TMPC << EOF
3005#include <bluetooth/bluetooth.h>
3006int main(void) { return bt_error(0); }
3007EOF
Stefan Weil89138852016-05-16 15:10:20 +02003008 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3009 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003010 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003011 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003012 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003013 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003014 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003015 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003016 fi
balroge820e3f2008-09-30 02:27:44 +00003017 bluez="no"
3018 fi
balrogfb599c92008-09-28 23:49:55 +00003019fi
3020
3021##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003022# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003023
John Snowf40685c2015-05-22 14:13:42 -04003024glib_req_ver=2.22
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003025glib_modules=gthread-2.0
3026if test "$modules" = yes; then
3027 glib_modules="$glib_modules gmodule-2.0"
3028fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003029
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003030for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003031 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003032 glib_cflags=$($pkg_config --cflags $i)
3033 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003034 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003035 LIBS="$glib_libs $LIBS"
3036 libs_qga="$glib_libs $libs_qga"
3037 else
3038 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3039 fi
3040done
3041
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003042# Sanity check that the current size_t matches the
3043# size that glib thinks it should be. This catches
3044# problems on multi-arch where people try to build
3045# 32-bit QEMU while pointing at 64-bit glib headers
3046cat > $TMPC <<EOF
3047#include <glib.h>
3048#include <unistd.h>
3049
3050#define QEMU_BUILD_BUG_ON(x) \
3051 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3052
3053int main(void) {
3054 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3055 return 0;
3056}
3057EOF
3058
Stefan Weil5919e032016-04-28 23:33:41 +02003059if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003060 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3061 "You probably need to set PKG_CONFIG_LIBDIR"\
3062 "to point to the right pkg-config files for your"\
3063 "build target"
3064fi
3065
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003066# g_test_trap_subprocess added in 2.38. Used by some tests.
3067glib_subprocess=yes
Eduardo Habkost7ad93392016-06-14 13:00:23 -03003068if test "$mingw32" = "yes" || ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003069 glib_subprocess=no
3070fi
3071
John Snowbbbf2e02015-03-25 18:57:38 -04003072# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3073cat > $TMPC << EOF
3074#include <glib.h>
3075int main(void) { return 0; }
3076EOF
3077if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3078 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3079 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3080 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3081 fi
3082fi
3083
Fam Zhenge26110c2014-02-10 14:48:57 +08003084##########################################
3085# SHA command probe for modules
3086if test "$modules" = yes; then
3087 shacmd_probe="sha1sum sha1 shasum"
3088 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003089 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003090 shacmd="$c"
3091 break
3092 fi
3093 done
3094 if test "$shacmd" = ""; then
3095 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3096 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003097fi
3098
3099##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003100# pixman support probe
3101
3102if test "$pixman" = ""; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003103 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3104 pixman="none"
Hu Tao236f2822014-09-15 11:41:10 +08003105 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003106 pixman="system"
3107 else
3108 pixman="internal"
3109 fi
3110fi
Robert Schiele74880fe2012-12-04 16:58:08 +01003111if test "$pixman" = "none"; then
3112 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003113 error_exit "pixman disabled but system emulation or tools build" \
3114 "enabled. You can turn off pixman only if you also" \
3115 "disable all system emulation targets and the tools" \
3116 "build with '--disable-tools --disable-system'."
Robert Schiele74880fe2012-12-04 16:58:08 +01003117 fi
3118 pixman_cflags=
3119 pixman_libs=
3120elif test "$pixman" = "system"; then
Hu Tao236f2822014-09-15 11:41:10 +08003121 # pixman version has been checked above
Stefan Weil89138852016-05-16 15:10:20 +02003122 pixman_cflags=$($pkg_config --cflags pixman-1)
3123 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003124else
3125 if test ! -d ${source_path}/pixman/pixman; then
Hu Tao236f2822014-09-15 11:41:10 +08003126 error_exit "pixman >= 0.21.8 not present. Your options:" \
Peter Maydell76ad07a2013-04-08 12:11:26 +01003127 " (1) Preferred: Install the pixman devel package (any recent" \
3128 " distro should have packages as Xorg needs pixman too)." \
3129 " (2) Fetch the pixman submodule, using:" \
3130 " git submodule update --init pixman"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003131 fi
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01003132 mkdir -p pixman/pixman
3133 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3134 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003135fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003136
3137##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303138# libcap probe
3139
3140if test "$cap" != "no" ; then
3141 cat > $TMPC <<EOF
3142#include <stdio.h>
3143#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003144int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303145EOF
3146 if compile_prog "" "-lcap" ; then
3147 cap=yes
3148 else
3149 cap=no
3150 fi
3151fi
3152
3153##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003154# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003155PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003156
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003157pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003158cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003159#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003160static void *f(void *p) { return NULL; }
3161int main(void) {
3162 pthread_t thread;
3163 pthread_create(&thread, 0, f, 0);
3164 return 0;
3165}
blueswir1414f0da2008-08-15 18:20:52 +00003166EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003167if compile_prog "" "" ; then
3168 pthread=yes
3169else
3170 for pthread_lib in $PTHREADLIBS_LIST; do
3171 if compile_prog "" "$pthread_lib" ; then
3172 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003173 found=no
3174 for lib_entry in $LIBS; do
3175 if test "$lib_entry" = "$pthread_lib"; then
3176 found=yes
3177 break
3178 fi
3179 done
3180 if test "$found" = "no"; then
3181 LIBS="$pthread_lib $LIBS"
3182 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003183 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003184 break
3185 fi
3186 done
3187fi
blueswir1414f0da2008-08-15 18:20:52 +00003188
Anthony Liguori4617e592009-08-25 17:21:56 -05003189if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003190 error_exit "pthread check failed" \
3191 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003192fi
3193
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003194# check for pthread_setname_np
3195pthread_setname_np=no
3196cat > $TMPC << EOF
3197#include <pthread.h>
3198
3199static void *f(void *p) { return NULL; }
3200int main(void)
3201{
3202 pthread_t thread;
3203 pthread_create(&thread, 0, f, 0);
3204 pthread_setname_np(thread, "QEMU");
3205 return 0;
3206}
3207EOF
3208if compile_prog "" "$pthread_lib" ; then
3209 pthread_setname_np=yes
3210fi
3211
aliguoribf9298b2008-12-05 20:05:26 +00003212##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003213# rbd probe
3214if test "$rbd" != "no" ; then
3215 cat > $TMPC <<EOF
3216#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003217#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003218int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003219 rados_t cluster;
3220 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003221 return 0;
3222}
3223EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003224 rbd_libs="-lrbd -lrados"
3225 if compile_prog "" "$rbd_libs" ; then
3226 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003227 else
3228 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003229 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003230 fi
3231 rbd=no
3232 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003233fi
3234
3235##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003236# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003237min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003238if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003239 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003240 libssh2_cflags=$($pkg_config libssh2 --cflags)
3241 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003242 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003243 else
3244 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003245 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003246 fi
3247 libssh2=no
3248 fi
3249fi
3250
3251##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003252# libssh2_sftp_fsync probe
3253
3254if test "$libssh2" = "yes"; then
3255 cat > $TMPC <<EOF
3256#include <stdio.h>
3257#include <libssh2.h>
3258#include <libssh2_sftp.h>
3259int main(void) {
3260 LIBSSH2_SESSION *session;
3261 LIBSSH2_SFTP *sftp;
3262 LIBSSH2_SFTP_HANDLE *sftp_handle;
3263 session = libssh2_session_init ();
3264 sftp = libssh2_sftp_init (session);
3265 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3266 libssh2_sftp_fsync (sftp_handle);
3267 return 0;
3268}
3269EOF
3270 # libssh2_cflags/libssh2_libs defined in previous test.
3271 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3272 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3273 fi
3274fi
3275
3276##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003277# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003278
3279if test "$linux_aio" != "no" ; then
3280 cat > $TMPC <<EOF
3281#include <libaio.h>
3282#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003283#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003284int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3285EOF
3286 if compile_prog "" "-laio" ; then
3287 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003288 else
3289 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003290 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003291 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003292 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003293 fi
3294fi
3295
3296##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003297# TPM passthrough is only on x86 Linux
3298
3299if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3300 tpm_passthrough=$tpm
3301else
3302 tpm_passthrough=no
3303fi
3304
3305##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003306# attr probe
3307
3308if test "$attr" != "no" ; then
3309 cat > $TMPC <<EOF
3310#include <stdio.h>
3311#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003312#ifdef CONFIG_LIBATTR
3313#include <attr/xattr.h>
3314#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003315#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003316#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003317int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3318EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003319 if compile_prog "" "" ; then
3320 attr=yes
3321 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003322 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003323 attr=yes
3324 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003325 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003326 else
3327 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003328 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003329 fi
3330 attr=no
3331 fi
3332fi
3333
3334##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003335# iovec probe
3336cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003337#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003338#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003339#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003340int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003341EOF
3342iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003343if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003344 iovec=yes
3345fi
3346
aurel32f652e6a2008-12-16 10:43:48 +00003347##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003348# preadv probe
3349cat > $TMPC <<EOF
3350#include <sys/types.h>
3351#include <sys/uio.h>
3352#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003353int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003354EOF
3355preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003356if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003357 preadv=yes
3358fi
3359
3360##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003361# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003362# fdt support is mandatory for at least some target architectures,
3363# so insist on it if we're building those system emulators.
3364fdt_required=no
3365for target in $target_list; do
3366 case $target in
Alexander Graf6a49fa92013-09-03 20:12:22 +01003367 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003368 fdt_required=yes
3369 ;;
3370 esac
3371done
3372
3373if test "$fdt_required" = "yes"; then
3374 if test "$fdt" = "no"; then
3375 error_exit "fdt disabled but some requested targets require it." \
3376 "You can turn off fdt only if you also disable all the system emulation" \
3377 "targets which need it (by specifying a cut down --target-list)."
3378 fi
3379 fdt=yes
3380fi
3381
Juan Quintela2df87df2009-08-12 18:29:54 +02003382if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003383 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003384 # explicitly check for libfdt_env.h as it is missing in some stable installs
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003385 # and test for required functions to make sure we are on a version >= 1.4.0
Juan Quintelab41af4b2009-07-27 16:13:20 +02003386 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003387#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003388#include <libfdt_env.h>
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003389int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003390EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003391 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003392 # system DTC is good - use it
aurel32f652e6a2008-12-16 10:43:48 +00003393 fdt=yes
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003394 elif test -d ${source_path}/dtc/libfdt ; then
3395 # have submodule DTC - use it
3396 fdt=yes
3397 dtc_internal="yes"
3398 mkdir -p dtc
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03003399 if [ "$pwd_is_source_path" != "y" ] ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003400 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3401 symlink "$source_path/dtc/scripts" "dtc/scripts"
Juan Quintela2df87df2009-08-12 18:29:54 +02003402 fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003403 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3404 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3405 elif test "$fdt" = "yes" ; then
3406 # have neither and want - prompt for system/submodule install
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003407 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
Stewart Smith3f281822014-01-24 12:39:06 +11003408 " (1) Preferred: Install the DTC (libfdt) devel package" \
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003409 " (2) Fetch the DTC submodule, using:" \
3410 " git submodule update --init dtc"
3411 else
3412 # don't have and don't want
Michael Wallede3a3542011-04-26 00:24:07 +02003413 fdt_libs=
Juan Quintela2df87df2009-08-12 18:29:54 +02003414 fdt=no
aurel32f652e6a2008-12-16 10:43:48 +00003415 fi
3416fi
3417
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003418libs_softmmu="$libs_softmmu $fdt_libs"
3419
Michael Walle20ff0752011-03-07 23:32:39 +01003420##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003421# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003422
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003423if test "$opengl" != "no" ; then
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003424 opengl_pkgs="epoxy libdrm gbm"
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003425 if $pkg_config $opengl_pkgs x11; then
Jeremy Whitef676c672015-01-09 13:08:49 -06003426 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3427 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003428 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003429 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3430 gtk_gl="yes"
3431 fi
Michael Walle20ff0752011-03-07 23:32:39 +01003432 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003433 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003434 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003435 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003436 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003437 opengl_libs=""
3438 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003439 fi
3440fi
3441
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003442if test "$opengl" = "yes"; then
3443 cat > $TMPC << EOF
3444#include <epoxy/egl.h>
3445#ifndef EGL_MESA_image_dma_buf_export
3446# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3447#endif
3448int main(void) { return 0; }
3449EOF
3450 if compile_prog "" "" ; then
3451 opengl_dmabuf=yes
3452 fi
3453fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003454
3455##########################################
3456# archipelago probe
3457if test "$archipelago" != "no" ; then
3458 cat > $TMPC <<EOF
3459#include <stdio.h>
3460#include <xseg/xseg.h>
3461#include <xseg/protocol.h>
3462int main(void) {
3463 xseg_initialize();
3464 return 0;
3465}
3466EOF
3467 archipelago_libs=-lxseg
3468 if compile_prog "" "$archipelago_libs"; then
3469 archipelago="yes"
3470 libs_tools="$archipelago_libs $libs_tools"
3471 libs_softmmu="$archipelago_libs $libs_softmmu"
Stefan Hajnoczi6a460ed2015-04-09 14:52:18 +01003472
3473 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3474 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3475 echo "license and therefore prevent redistribution."
3476 echo
3477 echo "To disable Archipelago, use --disable-archipelago"
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003478 else
3479 if test "$archipelago" = "yes" ; then
3480 feature_not_found "Archipelago backend support" "Install libxseg devel"
3481 fi
3482 archipelago="no"
3483 fi
3484fi
3485
3486
Bharata B Raoeb100392012-09-24 14:42:45 +05303487##########################################
3488# glusterfs probe
3489if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003490 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303491 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003492 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3493 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003494 if $pkg_config --atleast-version=4 glusterfs-api; then
3495 glusterfs_xlator_opt="yes"
3496 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003497 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303498 glusterfs_discard="yes"
3499 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303500 if $pkg_config --atleast-version=6 glusterfs-api; then
3501 glusterfs_zerofill="yes"
3502 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303503 else
3504 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003505 feature_not_found "GlusterFS backend support" \
3506 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303507 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303508 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303509 fi
3510fi
3511
aurel3239386ac2009-04-15 19:48:17 +00003512# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003513# emulator. This is done because older glibc versions don't
3514# have syscall stubs for these implemented. In that case we
3515# don't provide them even if kernel supports them.
3516#
3517inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003518cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003519#include <sys/inotify.h>
3520
3521int
3522main(void)
3523{
3524 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003525 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003526}
3527EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003528if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003529 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003530fi
3531
Riku Voipioc05c7a72010-03-26 15:25:11 +00003532inotify1=no
3533cat > $TMPC << EOF
3534#include <sys/inotify.h>
3535
3536int
3537main(void)
3538{
3539 /* try to start inotify */
3540 return inotify_init1(0);
3541}
3542EOF
3543if compile_prog "" "" ; then
3544 inotify1=yes
3545fi
3546
Riku Voipioebc996f2009-04-21 15:01:51 +03003547# check if utimensat and futimens are supported
3548utimens=no
3549cat > $TMPC << EOF
3550#define _ATFILE_SOURCE
Riku Voipioebc996f2009-04-21 15:01:51 +03003551#include <stddef.h>
3552#include <fcntl.h>
Peter Maydell3014ee02012-07-18 15:10:26 +01003553#include <sys/stat.h>
Riku Voipioebc996f2009-04-21 15:01:51 +03003554
3555int main(void)
3556{
3557 utimensat(AT_FDCWD, "foo", NULL, 0);
3558 futimens(0, NULL);
3559 return 0;
3560}
3561EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003562if compile_prog "" "" ; then
Riku Voipioebc996f2009-04-21 15:01:51 +03003563 utimens=yes
3564fi
3565
Riku Voipio099d6b02009-05-05 12:10:04 +03003566# check if pipe2 is there
3567pipe2=no
3568cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003569#include <unistd.h>
3570#include <fcntl.h>
3571
3572int main(void)
3573{
3574 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003575 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003576}
3577EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003578if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003579 pipe2=yes
3580fi
3581
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003582# check if accept4 is there
3583accept4=no
3584cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003585#include <sys/socket.h>
3586#include <stddef.h>
3587
3588int main(void)
3589{
3590 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3591 return 0;
3592}
3593EOF
3594if compile_prog "" "" ; then
3595 accept4=yes
3596fi
3597
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303598# check if tee/splice is there. vmsplice was added same time.
3599splice=no
3600cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303601#include <unistd.h>
3602#include <fcntl.h>
3603#include <limits.h>
3604
3605int main(void)
3606{
Stefan Weil66ea0f22011-12-17 09:27:35 +01003607 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303608 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3609 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3610 return 0;
3611}
3612EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003613if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303614 splice=yes
3615fi
3616
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003617##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003618# libnuma probe
3619
3620if test "$numa" != "no" ; then
3621 cat > $TMPC << EOF
3622#include <numa.h>
3623int main(void) { return numa_available(); }
3624EOF
3625
3626 if compile_prog "" "-lnuma" ; then
3627 numa=yes
3628 libs_softmmu="-lnuma $libs_softmmu"
3629 else
3630 if test "$numa" = "yes" ; then
3631 feature_not_found "numa" "install numactl devel"
3632 fi
3633 numa=no
3634 fi
3635fi
3636
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003637if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3638 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3639 exit 1
3640fi
3641
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003642##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08003643# tcmalloc probe
3644
3645if test "$tcmalloc" = "yes" ; then
3646 cat > $TMPC << EOF
3647#include <stdlib.h>
3648int main(void) { malloc(1); return 0; }
3649EOF
3650
3651 if compile_prog "" "-ltcmalloc" ; then
3652 LIBS="-ltcmalloc $LIBS"
3653 else
3654 feature_not_found "tcmalloc" "install gperftools devel"
3655 fi
3656fi
3657
3658##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003659# jemalloc probe
3660
3661if test "$jemalloc" = "yes" ; then
3662 cat > $TMPC << EOF
3663#include <stdlib.h>
3664int main(void) { malloc(1); return 0; }
3665EOF
3666
3667 if compile_prog "" "-ljemalloc" ; then
3668 LIBS="-ljemalloc $LIBS"
3669 else
3670 feature_not_found "jemalloc" "install jemalloc devel"
3671 fi
3672fi
3673
3674##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003675# signalfd probe
3676signalfd="no"
3677cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003678#include <unistd.h>
3679#include <sys/syscall.h>
3680#include <signal.h>
3681int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3682EOF
3683
3684if compile_prog "" "" ; then
3685 signalfd=yes
3686fi
3687
Riku Voipioc2882b92009-08-12 15:08:24 +03003688# check if eventfd is supported
3689eventfd=no
3690cat > $TMPC << EOF
3691#include <sys/eventfd.h>
3692
3693int main(void)
3694{
Stefan Weil55cc7f32011-12-17 09:27:37 +01003695 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03003696}
3697EOF
3698if compile_prog "" "" ; then
3699 eventfd=yes
3700fi
3701
Marc-André Lureau751bcc32015-10-09 17:17:16 +02003702# check if memfd is supported
3703memfd=no
3704cat > $TMPC << EOF
3705#include <sys/memfd.h>
3706
3707int main(void)
3708{
3709 return memfd_create("foo", MFD_ALLOW_SEALING);
3710}
3711EOF
3712if compile_prog "" "" ; then
3713 memfd=yes
3714fi
3715
3716
3717
Ulrich Hechtd0927932009-09-17 20:22:14 +03003718# check for fallocate
3719fallocate=no
3720cat > $TMPC << EOF
3721#include <fcntl.h>
3722
3723int main(void)
3724{
3725 fallocate(0, 0, 0, 0);
3726 return 0;
3727}
3728EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003729if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003730 fallocate=yes
3731fi
3732
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01003733# check for fallocate hole punching
3734fallocate_punch_hole=no
3735cat > $TMPC << EOF
3736#include <fcntl.h>
3737#include <linux/falloc.h>
3738
3739int main(void)
3740{
3741 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3742 return 0;
3743}
3744EOF
3745if compile_prog "" "" ; then
3746 fallocate_punch_hole=yes
3747fi
3748
Denis V. Lunevb953f072015-01-30 11:42:14 +03003749# check that fallocate supports range zeroing inside the file
3750fallocate_zero_range=no
3751cat > $TMPC << EOF
3752#include <fcntl.h>
3753#include <linux/falloc.h>
3754
3755int main(void)
3756{
3757 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3758 return 0;
3759}
3760EOF
3761if compile_prog "" "" ; then
3762 fallocate_zero_range=yes
3763fi
3764
Kevin Wolfed911432014-09-29 17:12:59 +02003765# check for posix_fallocate
3766posix_fallocate=no
3767cat > $TMPC << EOF
3768#include <fcntl.h>
3769
3770int main(void)
3771{
3772 posix_fallocate(0, 0, 0);
3773 return 0;
3774}
3775EOF
3776if compile_prog "" "" ; then
3777 posix_fallocate=yes
3778fi
3779
Peter Maydellc727f472011-01-06 11:05:10 +00003780# check for sync_file_range
3781sync_file_range=no
3782cat > $TMPC << EOF
3783#include <fcntl.h>
3784
3785int main(void)
3786{
3787 sync_file_range(0, 0, 0, 0);
3788 return 0;
3789}
3790EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003791if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00003792 sync_file_range=yes
3793fi
3794
Peter Maydelldace20d2011-01-10 13:11:24 +00003795# check for linux/fiemap.h and FS_IOC_FIEMAP
3796fiemap=no
3797cat > $TMPC << EOF
3798#include <sys/ioctl.h>
3799#include <linux/fs.h>
3800#include <linux/fiemap.h>
3801
3802int main(void)
3803{
3804 ioctl(0, FS_IOC_FIEMAP, 0);
3805 return 0;
3806}
3807EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003808if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00003809 fiemap=yes
3810fi
3811
Ulrich Hechtd0927932009-09-17 20:22:14 +03003812# check for dup3
3813dup3=no
3814cat > $TMPC << EOF
3815#include <unistd.h>
3816
3817int main(void)
3818{
3819 dup3(0, 0, 0);
3820 return 0;
3821}
3822EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01003823if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003824 dup3=yes
3825fi
3826
Alex Bligh4e0c6522013-08-21 16:02:43 +01003827# check for ppoll support
3828ppoll=no
3829cat > $TMPC << EOF
3830#include <poll.h>
3831
3832int main(void)
3833{
3834 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3835 ppoll(&pfd, 1, 0, 0);
3836 return 0;
3837}
3838EOF
3839if compile_prog "" "" ; then
3840 ppoll=yes
3841fi
3842
Alex Blighcd758dd2013-08-21 16:02:44 +01003843# check for prctl(PR_SET_TIMERSLACK , ... ) support
3844prctl_pr_set_timerslack=no
3845cat > $TMPC << EOF
3846#include <sys/prctl.h>
3847
3848int main(void)
3849{
3850 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3851 return 0;
3852}
3853EOF
3854if compile_prog "" "" ; then
3855 prctl_pr_set_timerslack=yes
3856fi
3857
Peter Maydell3b6edd12011-02-15 18:35:05 +00003858# check for epoll support
3859epoll=no
3860cat > $TMPC << EOF
3861#include <sys/epoll.h>
3862
3863int main(void)
3864{
3865 epoll_create(0);
3866 return 0;
3867}
3868EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003869if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00003870 epoll=yes
3871fi
3872
Peter Maydell227f0212016-06-06 19:58:11 +01003873# epoll_create1 is a later addition
3874# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00003875epoll_create1=no
3876cat > $TMPC << EOF
3877#include <sys/epoll.h>
3878
3879int main(void)
3880{
Peter Maydell19e83f62011-04-26 16:56:40 +01003881 /* Note that we use epoll_create1 as a value, not as
3882 * a function being called. This is necessary so that on
3883 * old SPARC glibc versions where the function was present in
3884 * the library but not declared in the header file we will
3885 * fail the configure check. (Otherwise we will get a compiler
3886 * warning but not an error, and will proceed to fail the
3887 * qemu compile where we compile with -Werror.)
3888 */
Blue Swirlc075a722012-08-09 20:21:25 +00003889 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00003890}
3891EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003892if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00003893 epoll_create1=yes
3894fi
3895
Peter Maydella8fd1ab2013-02-08 07:31:55 +00003896# check for sendfile support
3897sendfile=no
3898cat > $TMPC << EOF
3899#include <sys/sendfile.h>
3900
3901int main(void)
3902{
3903 return sendfile(0, 0, 0, 0);
3904}
3905EOF
3906if compile_prog "" "" ; then
3907 sendfile=yes
3908fi
3909
Riku Voipio51834342014-06-22 11:25:42 +01003910# check for timerfd support (glibc 2.8 and newer)
3911timerfd=no
3912cat > $TMPC << EOF
3913#include <sys/timerfd.h>
3914
3915int main(void)
3916{
3917 return(timerfd_create(CLOCK_REALTIME, 0));
3918}
3919EOF
3920if compile_prog "" "" ; then
3921 timerfd=yes
3922fi
3923
Riku Voipio9af5c902014-08-12 15:58:57 +03003924# check for setns and unshare support
3925setns=no
3926cat > $TMPC << EOF
3927#include <sched.h>
3928
3929int main(void)
3930{
3931 int ret;
3932 ret = setns(0, 0);
3933 ret = unshare(0);
3934 return ret;
3935}
3936EOF
3937if compile_prog "" "" ; then
3938 setns=yes
3939fi
3940
Aleksandar Markovic38860a02016-10-10 13:23:29 +02003941# clock_adjtime probe
3942clock_adjtime=no
3943cat > $TMPC <<EOF
3944#include <time.h>
3945
3946int main(void)
3947{
3948 return clock_adjtime(0, 0);
3949}
3950EOF
3951clock_adjtime=no
3952if compile_prog "" "" ; then
3953 clock_adjtime=yes
3954fi
3955
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02003956# syncfs probe
3957syncfs=no
3958cat > $TMPC <<EOF
3959#include <unistd.h>
3960
3961int main(void)
3962{
3963 return syncfs(0);
3964}
3965EOF
3966syncfs=no
3967if compile_prog "" "" ; then
3968 syncfs=yes
3969fi
3970
pbrookcc8ae6d2006-04-23 17:57:59 +00003971# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02003972if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01003973 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02003974 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02003975 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02003976 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003977 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02003978 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02003979 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02003980 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00003981fi
3982
Stefan Weilf514f412009-10-11 12:44:07 +02003983# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02003984byteswap_h=no
3985cat > $TMPC << EOF
3986#include <byteswap.h>
3987int main(void) { return bswap_32(0); }
3988EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003989if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02003990 byteswap_h=yes
3991fi
3992
Stefan Weil75f13592013-01-05 12:17:38 +01003993# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02003994bswap_h=no
3995cat > $TMPC << EOF
3996#include <sys/endian.h>
3997#include <sys/types.h>
3998#include <machine/bswap.h>
3999int main(void) { return bswap32(0); }
4000EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004001if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004002 bswap_h=yes
4003fi
4004
aliguorida93a1f2008-12-12 20:02:52 +00004005##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004006# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004007if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004008 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004009 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004010 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4011 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004012 else
4013 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004014 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004015 fi
4016 libiscsi="no"
4017 fi
4018fi
4019
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004020##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004021# Do we need libm
4022cat > $TMPC << EOF
4023#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004024int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004025EOF
4026if compile_prog "" "" ; then
4027 :
4028elif compile_prog "" "-lm" ; then
4029 LIBS="-lm $LIBS"
4030 libs_qga="-lm $libs_qga"
4031else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004032 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004033fi
4034
4035##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004036# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004037# uClibc provides 2 versions of clock_gettime(), one with realtime
4038# support and one without. This means that the clock_gettime() don't
4039# need -lrt. We still need it for timer_create() so we check for this
4040# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004041cat > $TMPC <<EOF
4042#include <signal.h>
4043#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004044int main(void) {
4045 timer_create(CLOCK_REALTIME, NULL, NULL);
4046 return clock_gettime(CLOCK_REALTIME, NULL);
4047}
aliguorida93a1f2008-12-12 20:02:52 +00004048EOF
4049
Juan Quintela52166aa2009-08-03 14:46:03 +02004050if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004051 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004052# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004053elif compile_prog "" "$pthread_lib -lrt" ; then
4054 LIBS="$LIBS -lrt"
4055 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004056fi
4057
Blue Swirl31ff5042009-09-12 12:33:07 +00004058if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Andreas Färber179cf402010-09-20 00:50:43 +02004059 "$aix" != "yes" -a "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004060 libs_softmmu="-lutil $libs_softmmu"
4061fi
4062
Blue Swirlde5071c2009-09-12 09:58:46 +00004063##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004064# spice probe
4065if test "$spice" != "no" ; then
4066 cat > $TMPC << EOF
4067#include <spice.h>
4068int main(void) { spice_server_new(); return 0; }
4069EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004070 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4071 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004072 if $pkg_config --atleast-version=0.12.0 spice-server && \
4073 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004074 compile_prog "$spice_cflags" "$spice_libs" ; then
4075 spice="yes"
4076 libs_softmmu="$libs_softmmu $spice_libs"
4077 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004078 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4079 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004080 else
4081 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004082 feature_not_found "spice" \
4083 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004084 fi
4085 spice="no"
4086 fi
4087fi
4088
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004089# check for smartcard support
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004090smartcard_cflags=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004091if test "$smartcard" != "no"; then
4092 if $pkg_config libcacard; then
4093 libcacard_cflags=$($pkg_config --cflags libcacard)
4094 libcacard_libs=$($pkg_config --libs libcacard)
4095 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4096 libs_softmmu="$libs_softmmu $libcacard_libs"
4097 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004098 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004099 if test "$smartcard" = "yes"; then
4100 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004101 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004102 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004103 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004104fi
4105
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004106# check for libusb
4107if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004108 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004109 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004110 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4111 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004112 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4113 libs_softmmu="$libs_softmmu $libusb_libs"
4114 else
4115 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004116 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004117 fi
4118 libusb="no"
4119 fi
4120fi
4121
Hans de Goede69354a82011-07-19 11:04:10 +02004122# check for usbredirparser for usb network redirection support
4123if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004124 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004125 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004126 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4127 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004128 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
Aurelien Jarno56ab2ad2012-09-11 20:57:58 +02004129 libs_softmmu="$libs_softmmu $usb_redir_libs"
Hans de Goede69354a82011-07-19 11:04:10 +02004130 else
4131 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004132 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004133 fi
4134 usb_redir="no"
4135 fi
4136fi
4137
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004138##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004139# check if we have VSS SDK headers for win
4140
4141if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4142 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004143 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004144 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4145 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004146 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004147 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4148 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004149 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004150 esac
4151 cat > $TMPC << EOF
4152#define __MIDL_user_allocate_free_DEFINED__
4153#include <inc/win2003/vss.h>
4154int main(void) { return VSS_CTX_BACKUP; }
4155EOF
4156 if compile_prog "$vss_win32_include" "" ; then
4157 guest_agent_with_vss="yes"
4158 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004159 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004160 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004161 else
4162 if test "$vss_win32_sdk" != "" ; then
4163 echo "ERROR: Please download and install Microsoft VSS SDK:"
4164 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4165 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4166 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4167 echo "ERROR: The headers are extracted in the directory \`inc'."
4168 feature_not_found "VSS support"
4169 fi
4170 guest_agent_with_vss="no"
4171 fi
4172fi
4173
4174##########################################
4175# lookup Windows platform SDK (if not specified)
4176# The SDK is needed only to build .tlb (type library) file of guest agent
4177# VSS provider from the source. It is usually unnecessary because the
4178# pre-compiled .tlb file is included.
4179
4180if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4181 if test -z "$win_sdk"; then
4182 programfiles="$PROGRAMFILES"
4183 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4184 if test -n "$programfiles"; then
4185 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4186 else
4187 feature_not_found "Windows SDK"
4188 fi
4189 elif test "$win_sdk" = "no"; then
4190 win_sdk=""
4191 fi
4192fi
4193
4194##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004195# check if mingw environment provides a recent ntddscsi.h
4196if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4197 cat > $TMPC << EOF
4198#include <windows.h>
4199#include <ntddscsi.h>
4200int main(void) {
4201#if !defined(IOCTL_SCSI_GET_ADDRESS)
4202#error Missing required ioctl definitions
4203#endif
4204 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4205 return addr.Lun;
4206}
4207EOF
4208 if compile_prog "" "" ; then
4209 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004210 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004211 fi
4212fi
4213
4214##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004215# virgl renderer probe
4216
4217if test "$virglrenderer" != "no" ; then
4218 cat > $TMPC << EOF
4219#include <virglrenderer.h>
4220int main(void) { virgl_renderer_poll(); return 0; }
4221EOF
4222 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4223 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4224 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4225 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4226 virglrenderer="yes"
4227 else
4228 if test "$virglrenderer" = "yes" ; then
4229 feature_not_found "virglrenderer"
4230 fi
4231 virglrenderer="no"
4232 fi
4233fi
4234
4235##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004236# check if we have fdatasync
4237
4238fdatasync=no
4239cat > $TMPC << EOF
4240#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004241int main(void) {
4242#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4243return fdatasync(0);
4244#else
Stefan Weile172fe12012-04-06 21:33:20 +02004245#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004246#endif
4247}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004248EOF
4249if compile_prog "" "" ; then
4250 fdatasync=yes
4251fi
4252
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004253##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004254# check if we have madvise
4255
4256madvise=no
4257cat > $TMPC << EOF
4258#include <sys/types.h>
4259#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004260#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004261int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4262EOF
4263if compile_prog "" "" ; then
4264 madvise=yes
4265fi
4266
4267##########################################
4268# check if we have posix_madvise
4269
4270posix_madvise=no
4271cat > $TMPC << EOF
4272#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004273#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004274int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4275EOF
4276if compile_prog "" "" ; then
4277 posix_madvise=yes
4278fi
4279
4280##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004281# check if we have posix_syslog
4282
4283posix_syslog=no
4284cat > $TMPC << EOF
4285#include <syslog.h>
4286int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4287EOF
4288if compile_prog "" "" ; then
4289 posix_syslog=yes
4290fi
4291
4292##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004293# check if trace backend exists
4294
Lluís Vilanova5b808272014-05-27 15:02:14 +02004295$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004296if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004297 error_exit "invalid trace backends" \
4298 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004299fi
4300
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004301##########################################
4302# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004303if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004304 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004305#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004306int main(void) { return 0; }
4307EOF
4308 if compile_prog "" "" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004309 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004310 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004311 else
4312 lttng_ust_libs="-llttng-ust"
4313 fi
4314 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004315 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004316 else
4317 urcu_bp_libs="-lurcu-bp"
4318 fi
4319
4320 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4321 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004322 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004323 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004324 fi
4325fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004326
4327##########################################
4328# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004329if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004330 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004331 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004332 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004333 trace_backend_stap="no"
4334 if has 'stap' ; then
4335 trace_backend_stap="yes"
4336 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004337fi
4338
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004339##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004340# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304341
Peter Maydell7c2acc72013-04-08 12:11:27 +01004342# We prefer ucontext, but it's not always possible. The fallback
4343# is sigcontext. gthread is not selectable except explicitly, because
4344# it is not functional enough to run QEMU proper. (It is occasionally
4345# useful for debugging purposes.) On Windows the only valid backend
4346# is the Windows-specific one.
4347
4348ucontext_works=no
4349if test "$darwin" != "yes"; then
4350 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304351#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004352#ifdef __stub_makecontext
4353#error Ignoring glibc stub makecontext which will always fail
4354#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004355int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304356EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004357 if compile_prog "" "" ; then
4358 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304359 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004360fi
4361
4362if test "$coroutine" = ""; then
4363 if test "$mingw32" = "yes"; then
4364 coroutine=win32
4365 elif test "$ucontext_works" = "yes"; then
4366 coroutine=ucontext
4367 else
4368 coroutine=sigaltstack
4369 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004370else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004371 case $coroutine in
4372 windows)
4373 if test "$mingw32" != "yes"; then
4374 error_exit "'windows' coroutine backend only valid for Windows"
4375 fi
4376 # Unfortunately the user visible backend name doesn't match the
4377 # coroutine-*.c filename for this case, so we have to adjust it here.
4378 coroutine=win32
4379 ;;
4380 ucontext)
4381 if test "$ucontext_works" != "yes"; then
4382 feature_not_found "ucontext"
4383 fi
4384 ;;
4385 gthread|sigaltstack)
4386 if test "$mingw32" = "yes"; then
4387 error_exit "only the 'windows' coroutine backend is valid for Windows"
4388 fi
4389 ;;
4390 *)
4391 error_exit "unknown coroutine backend $coroutine"
4392 ;;
4393 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304394fi
4395
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004396if test "$coroutine_pool" = ""; then
4397 if test "$coroutine" = "gthread"; then
4398 coroutine_pool=no
4399 else
4400 coroutine_pool=yes
4401 fi
4402fi
4403if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4404 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4405fi
4406
Peter Lieven7d992e42016-09-27 11:58:45 +02004407if test "$debug_stack_usage" = "yes"; then
4408 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4409 error_exit "stack usage debugging is not supported for $cpu"
4410 fi
4411 if test "$coroutine_pool" = "yes"; then
4412 echo "WARN: disabling coroutine pool for stack usage debugging"
4413 coroutine_pool=no
4414 fi
4415fi
4416
4417
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304418##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304419# check if we have open_by_handle_at
4420
Stefan Weil4e1797f2012-06-18 22:11:06 +02004421open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304422cat > $TMPC << EOF
4423#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004424#if !defined(AT_EMPTY_PATH)
4425# error missing definition
4426#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004427int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004428#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304429EOF
4430if compile_prog "" "" ; then
4431 open_by_handle_at=yes
4432fi
4433
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304434########################################
4435# check if we have linux/magic.h
4436
4437linux_magic_h=no
4438cat > $TMPC << EOF
4439#include <linux/magic.h>
4440int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004441 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304442}
4443EOF
4444if compile_prog "" "" ; then
4445 linux_magic_h=yes
4446fi
4447
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004448########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004449# check whether we can disable warning option with a pragma (this is needed
4450# to silence warnings in the headers of some versions of external libraries).
4451# This test has to be compiled with -Werror as otherwise an unknown pragma is
4452# only a warning.
4453#
4454# If we can't selectively disable warning in the code, disable -Werror so that
4455# the build doesn't fail anyway.
4456
Peter Maydell06d71fa2012-07-30 16:13:07 +01004457pragma_disable_unused_but_set=no
4458cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004459#pragma GCC diagnostic push
Peter Maydell06d71fa2012-07-30 16:13:07 +01004460#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
Kevin Wolfc95e3082013-02-22 21:08:51 +01004461#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004462#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004463
Peter Maydell06d71fa2012-07-30 16:13:07 +01004464int main(void) {
4465 return 0;
4466}
4467EOF
4468if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004469 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004470else
4471 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004472fi
4473
4474########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004475# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004476
4477valgrind_h=no
4478cat > $TMPC << EOF
4479#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004480int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004481 return 0;
4482}
4483EOF
4484if compile_prog "" "" ; then
4485 valgrind_h=yes
4486fi
4487
4488########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004489# check if environ is declared
4490
4491has_environ=no
4492cat > $TMPC << EOF
4493#include <unistd.h>
4494int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00004495 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004496 return 0;
4497}
4498EOF
4499if compile_prog "" "" ; then
4500 has_environ=yes
4501fi
4502
Richard Henderson76a347e2012-12-28 14:17:02 -08004503########################################
4504# check if cpuid.h is usable.
4505
4506cpuid_h=no
4507cat > $TMPC << EOF
4508#include <cpuid.h>
4509int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00004510 unsigned a, b, c, d;
4511 int max = __get_cpuid_max(0, 0);
4512
4513 if (max >= 1) {
4514 __cpuid(1, a, b, c, d);
4515 }
4516
4517 if (max >= 7) {
4518 __cpuid_count(7, 0, a, b, c, d);
4519 }
4520
4521 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08004522}
4523EOF
4524if compile_prog "" "" ; then
4525 cpuid_h=yes
4526fi
4527
Richard Hendersonf5401662013-02-16 12:46:59 -08004528########################################
4529# check if __[u]int128_t is usable.
4530
4531int128=no
4532cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01004533#if defined(__clang_major__) && defined(__clang_minor__)
4534# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4535# error __int128_t does not work in CLANG before 3.2
4536# endif
4537#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08004538__int128_t a;
4539__uint128_t b;
4540int main (void) {
4541 a = a + b;
4542 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01004543 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08004544 return 0;
4545}
4546EOF
4547if compile_prog "" "" ; then
4548 int128=yes
4549fi
Richard Henderson76a347e2012-12-28 14:17:02 -08004550
Richard Henderson7ebee432016-06-29 21:10:59 -07004551#########################################
4552# See if 128-bit atomic operations are supported.
4553
4554atomic128=no
4555if test "$int128" = "yes"; then
4556 cat > $TMPC << EOF
4557int main(void)
4558{
4559 unsigned __int128 x = 0, y = 0;
4560 y = __atomic_load_16(&x, 0);
4561 __atomic_store_16(&x, y, 0);
4562 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4563 return 0;
4564}
4565EOF
4566 if compile_prog "" "" ; then
4567 atomic128=yes
4568 fi
4569fi
4570
Richard Hendersondf79b992016-09-02 12:23:57 -07004571#########################################
4572# See if 64-bit atomic operations are supported.
4573# Note that without __atomic builtins, we can only
4574# assume atomic loads/stores max at pointer size.
4575
4576cat > $TMPC << EOF
4577#include <stdint.h>
4578int main(void)
4579{
4580 uint64_t x = 0, y = 0;
4581#ifdef __ATOMIC_RELAXED
4582 y = __atomic_load_8(&x, 0);
4583 __atomic_store_8(&x, y, 0);
4584 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4585 __atomic_exchange_8(&x, y, 0);
4586 __atomic_fetch_add_8(&x, y, 0);
4587#else
4588 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4589 __sync_lock_test_and_set(&x, y);
4590 __sync_val_compare_and_swap(&x, y, 0);
4591 __sync_fetch_and_add(&x, y);
4592#endif
4593 return 0;
4594}
4595EOF
4596if compile_prog "" "" ; then
4597 atomic64=yes
4598fi
4599
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08004600########################################
4601# check if getauxval is available.
4602
4603getauxval=no
4604cat > $TMPC << EOF
4605#include <sys/auxv.h>
4606int main(void) {
4607 return getauxval(AT_HWCAP) == 0;
4608}
4609EOF
4610if compile_prog "" "" ; then
4611 getauxval=yes
4612fi
4613
John Snowfd0e6052015-03-25 18:57:39 -04004614########################################
4615# check if ccache is interfering with
4616# semantic analysis of macros
4617
John Snow5e4dfd32015-10-28 13:56:40 -04004618unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04004619ccache_cpp2=no
4620cat > $TMPC << EOF
4621static const int Z = 1;
4622#define fn() ({ Z; })
4623#define TAUT(X) ((X) == Z)
4624#define PAREN(X, Y) (X == Y)
4625#define ID(X) (X)
4626int main(int argc, char *argv[])
4627{
4628 int x = 0, y = 0;
4629 x = ID(x);
4630 x = fn();
4631 fn();
4632 if (PAREN(x, y)) return 0;
4633 if (TAUT(Z)) return 0;
4634 return 0;
4635}
4636EOF
4637
4638if ! compile_object "-Werror"; then
4639 ccache_cpp2=yes
4640fi
4641
John Snowb553a042015-11-03 15:43:42 -05004642#################################################
4643# clang does not support glibc + FORTIFY_SOURCE.
4644
4645if test "$fortify_source" != "no"; then
4646 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4647 fortify_source="no";
John Snowcfcc7c12015-11-12 11:29:49 -05004648 elif test -n "$cxx" &&
4649 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05004650 fortify_source="no";
4651 else
4652 fortify_source="yes"
4653 fi
4654fi
4655
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304656##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04004657# check if struct fsxattr is available via linux/fs.h
4658
4659have_fsxattr=no
4660cat > $TMPC << EOF
4661#include <linux/fs.h>
4662struct fsxattr foo;
4663int main(void) {
4664 return 0;
4665}
4666EOF
4667if compile_prog "" "" ; then
4668 have_fsxattr=yes
4669fi
4670
Peter Maydellb66e10e2016-06-08 18:34:32 +01004671##########################################
4672# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02004673have_rtnetlink=no
4674cat > $TMPC << EOF
4675#include <linux/rtnetlink.h>
4676int main(void) {
4677 return IFLA_PROTO_DOWN;
4678}
4679EOF
4680if compile_prog "" "" ; then
4681 have_rtnetlink=yes
4682fi
4683
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01004684##########################################
4685# check for usable AF_VSOCK environment
4686have_af_vsock=no
4687cat > $TMPC << EOF
4688#include <errno.h>
4689#include <sys/types.h>
4690#include <sys/socket.h>
4691#if !defined(AF_VSOCK)
4692# error missing AF_VSOCK flag
4693#endif
4694#include <linux/vm_sockets.h>
4695int main(void) {
4696 int sock, ret;
4697 struct sockaddr_vm svm;
4698 socklen_t len = sizeof(svm);
4699 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4700 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4701 if ((ret == -1) && (errno == ENOTCONN)) {
4702 return 0;
4703 }
4704 return -1;
4705}
4706EOF
4707if compile_prog "" "" ; then
4708 have_af_vsock=yes
4709fi
4710
James Clarke6969ec62016-06-06 12:02:50 +01004711#################################################
4712# Sparc implicitly links with --relax, which is
4713# incompatible with -r, so --no-relax should be
4714# given. It does no harm to give it on other
4715# platforms too.
4716
4717# Note: the prototype is needed since QEMU_CFLAGS
4718# contains -Wmissing-prototypes
4719cat > $TMPC << EOF
4720extern int foo(void);
4721int foo(void) { return 0; }
4722EOF
4723if ! compile_object ""; then
4724 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4725fi
4726if do_cc -nostdlib -Wl,-r -Wl,--no-relax -o $TMPMO $TMPO; then
4727 LD_REL_FLAGS="-Wl,--no-relax"
4728fi
4729
Jan Vesely277abf12016-04-29 13:15:23 -04004730##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02004731# End of CC checks
4732# After here, no more $cc or $ld runs
4733
Blue Swirl1d728c32012-05-01 18:45:39 +00004734if test "$gcov" = "yes" ; then
4735 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4736 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05004737elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02004738 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Peter Maydellce278612015-11-09 15:14:09 +00004739elif test "$debug" = "no"; then
4740 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02004741fi
Juan Quintelaa316e372009-09-30 01:10:55 +02004742
Peter Lieven6542aa92014-02-03 10:26:13 +01004743##########################################
4744# Do we have libnfs
4745if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01004746 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01004747 libnfs="yes"
4748 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01004749 else
4750 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004751 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01004752 fi
4753 libnfs="no"
4754 fi
4755fi
Blue Swirl1d728c32012-05-01 18:45:39 +00004756
Peter Maydell6ca026c2012-07-18 15:10:18 +01004757# Now we've finished running tests it's OK to add -Werror to the compiler flags
4758if test "$werror" = "yes"; then
4759 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4760fi
4761
Juan Quintelae86ecd42009-08-03 14:45:59 +02004762if test "$solaris" = "no" ; then
4763 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02004764 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02004765 fi
4766fi
4767
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02004768# test if pod2man has --utf8 option
4769if pod2man --help | grep -q utf8; then
4770 POD2MAN="pod2man --utf8"
4771else
4772 POD2MAN="pod2man"
4773fi
4774
Blue Swirl952afb72010-09-19 08:36:34 +00004775# Use ASLR, no-SEH and DEP if available
4776if test "$mingw32" = "yes" ; then
4777 for flag in --dynamicbase --no-seh --nxcompat; do
4778 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4779 LDFLAGS="-Wl,$flag $LDFLAGS"
4780 fi
4781 done
4782fi
4783
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03004784qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08004785qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03004786qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06004787qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02004788
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01004789tools=""
4790if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02004791 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01004792 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4793 tools="qemu-nbd\$(EXESUF) $tools"
David Marchanda75eb032014-09-08 11:17:48 +02004794 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01004795 fi
4796fi
4797if test "$softmmu" = yes ; then
Meador Inge983eef52012-02-24 14:00:42 +05304798 if test "$virtfs" != no ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02004799 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4800 virtfs=yes
4801 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4802 else
4803 if test "$virtfs" = yes; then
Stefan Weil3f3b5382016-04-08 18:11:13 +02004804 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05304805 fi
Andreas Färber17500372012-05-01 01:12:03 +02004806 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02004807 fi
M. Mohan Kumar17bff522011-12-14 13:58:42 +05304808 fi
Michael Tokareve8ef31a2013-07-31 14:22:07 +04004809fi
Michael Roth9d6bc272015-08-26 10:49:13 -05004810
4811# Probe for guest agent support/options
4812
Michael Tokareve8ef31a2013-07-31 14:22:07 +04004813if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04004814 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05004815 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04004816 guest_agent=yes
4817 elif [ "$guest_agent" != yes ]; then
4818 guest_agent=no
4819 else
4820 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02004821 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02004822fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02004823
Michael Roth9d6bc272015-08-26 10:49:13 -05004824# Guest agent Window MSI package
4825
4826if test "$guest_agent" != yes; then
4827 if test "$guest_agent_msi" = yes; then
4828 error_exit "MSI guest agent package requires guest agent enabled"
4829 fi
4830 guest_agent_msi=no
4831elif test "$mingw32" != "yes"; then
4832 if test "$guest_agent_msi" = "yes"; then
4833 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4834 fi
4835 guest_agent_msi=no
4836elif ! has wixl; then
4837 if test "$guest_agent_msi" = "yes"; then
4838 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4839 fi
4840 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05004841else
4842 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4843 # disabled explicitly
4844 if test "$guest_agent_msi" != "no"; then
4845 guest_agent_msi=yes
4846 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05004847fi
4848
Michael Roth1a349042015-08-26 11:14:31 -05004849if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05004850 if test "$guest_agent_with_vss" = "yes"; then
4851 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4852 fi
4853
4854 if test "$QEMU_GA_MANUFACTURER" = ""; then
4855 QEMU_GA_MANUFACTURER=QEMU
4856 fi
4857
4858 if test "$QEMU_GA_DISTRO" = ""; then
4859 QEMU_GA_DISTRO=Linux
4860 fi
4861
4862 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02004863 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05004864 fi
4865
Stefan Weil89138852016-05-16 15:10:20 +02004866 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05004867
4868 case "$cpu" in
4869 x86_64)
4870 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4871 ;;
4872 i386)
4873 QEMU_GA_MSI_ARCH="-D Arch=32"
4874 ;;
4875 *)
4876 error_exit "CPU $cpu not supported for building installation package"
4877 ;;
4878 esac
4879fi
4880
Paolo Bonzinica35f782010-05-26 16:08:29 +02004881# Mac OS X ships with a broken assembler
4882roms=
4883if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4884 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4885 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01004886 # Different host OS linkers have different ideas about the name of the ELF
4887 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
4888 # variant; and Windows uses i386pe.
4889 for emu in elf_i386 elf_i386_fbsd i386pe; do
4890 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4891 ld_i386_emulation="$emu"
4892 roms="optionrom"
4893 break
4894 fi
4895 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02004896fi
Andreas Färberd0384d12011-05-01 18:23:56 +02004897if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11004898 roms="$roms spapr-rtas"
4899fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02004900
Christian Borntraeger9933c302013-04-23 01:23:03 +00004901if test "$cpu" = "s390x" ; then
4902 roms="$roms s390-ccw"
4903fi
4904
Richard Henderson964c6fa2013-06-21 19:10:16 -07004905# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01004906if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07004907 textseg_addr=
4908 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07004909 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4910 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07004911 textseg_addr=0x60000000
4912 ;;
4913 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07004914 # A 256M aligned address, high in the address space, with enough
4915 # room for the code_gen_buffer above it before the stack.
4916 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07004917 ;;
4918 esac
4919 if [ -n "$textseg_addr" ]; then
4920 cat > $TMPC <<EOF
4921 int main(void) { return 0; }
4922EOF
4923 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4924 if ! compile_prog "" "$textseg_ldflags"; then
4925 # In case ld does not support -Ttext-segment, edit the default linker
4926 # script via sed to set the .text start addr. This is needed on FreeBSD
4927 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01004928 if ! $ld --verbose >/dev/null 2>&1; then
4929 error_exit \
4930 "We need to link the QEMU user mode binaries at a" \
4931 "specific text address. Unfortunately your linker" \
4932 "doesn't support either the -Ttext-segment option or" \
4933 "printing the default linker script with --verbose." \
4934 "If you don't want the user mode binaries, pass the" \
4935 "--disable-user option to configure."
4936 fi
4937
Richard Henderson964c6fa2013-06-21 19:10:16 -07004938 $ld --verbose | sed \
4939 -e '1,/==================================================/d' \
4940 -e '/==================================================/,$d' \
4941 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4942 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4943 textseg_ldflags="-Wl,-T../config-host.ld"
4944 fi
4945 fi
4946fi
4947
Cole Robinson02d34f62016-05-06 14:03:09 -04004948echo_version() {
4949 if test "$1" = "yes" ; then
4950 echo "($2)"
4951 fi
4952}
4953
Jan Kiszka50e12062014-10-02 10:03:55 +02004954# prepend pixman and ftd flags after all config tests are done
4955QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4956libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01004957
bellard43ce4df2003-06-09 19:53:12 +00004958echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02004959echo "BIOS directory $(eval echo $qemu_datadir)"
4960echo "binary directory $(eval echo $bindir)"
4961echo "library directory $(eval echo $libdir)"
4962echo "module directory $(eval echo $qemu_moddir)"
4963echo "libexec directory $(eval echo $libexecdir)"
4964echo "include directory $(eval echo $includedir)"
4965echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00004966if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02004967echo "local state directory $(eval echo $local_statedir)"
4968echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00004969echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02004970else
4971echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004972echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00004973fi
bellard5a671352003-10-01 00:13:48 +00004974echo "Source path $source_path"
bellard43ce4df2003-06-09 19:53:12 +00004975echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00004976echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04004977echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01004978echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01004979echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02004980echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02004981echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02004982echo "LDFLAGS $LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00004983echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00004984echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00004985echo "python $python"
Brade2d88302011-09-02 16:53:28 -04004986if test "$slirp" = "yes" ; then
4987 echo "smbd $smbd"
4988fi
Fam Zheng17969262014-02-10 14:48:56 +08004989echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00004990echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00004991echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00004992echo "target list $target_list"
aurel32ade25b02009-04-16 09:58:41 +00004993echo "tcg debug enabled $debug_tcg"
bellard43ce4df2003-06-09 19:53:12 +00004994echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00004995echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00004996echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00004997echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00004998echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00004999if test "$darwin" = "yes" ; then
5000 echo "Cocoa support $cocoa"
5001fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02005002echo "pixman $pixman"
Stefan Weil89138852016-05-16 15:10:20 +02005003echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5004echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005005echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005006echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005007echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005008echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005009echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005010echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005011echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02005012echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005013echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005014echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005015echo "curses support $curses"
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005016echo "virgl support $virglrenderer"
Alexander Graf769ce762009-05-11 17:41:42 +02005017echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005018echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005019echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005020echo "Block whitelist (rw) $block_drv_rw_whitelist"
5021echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305022echo "VirtFS support $virtfs"
Jes Sorensen821601e2011-03-16 13:33:36 +01005023echo "VNC support $vnc"
5024if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005025 echo "VNC SASL support $vnc_sasl"
5026 echo "VNC JPEG support $vnc_jpeg"
5027 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005028fi
blueswir131422552007-04-16 18:27:06 +00005029if test -n "$sparc_cpu"; then
5030 echo "Target Sparc Arch $sparc_cpu"
5031fi
aliguorie37630c2009-04-22 15:19:10 +00005032echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005033if test "$xen" = "yes" ; then
5034 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005035 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005036fi
aurel322e4d9fb2008-04-08 06:01:02 +00005037echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005038echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005039echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005040echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005041echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005042echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005043echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005044echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005045echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005046echo "KVM support $kvm"
zhanghailiang180fb752016-10-27 14:43:08 +08005047echo "COLO support $colo"
Michael R. Hines2da776d2013-07-22 10:01:54 -04005048echo "RDMA support $rdma"
Stefan Weil9195b2c2011-10-19 07:07:18 +02005049echo "TCG interpreter $tcg_interpreter"
aurel32f652e6a2008-12-16 10:43:48 +00005050echo "fdt support $fdt"
aliguoriceb42de2009-04-07 18:43:28 +00005051echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005052echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005053echo "madvise $madvise"
5054echo "posix_madvise $posix_madvise"
Corey Bryant47e98652012-01-26 09:42:26 -05005055echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005056echo "vhost-net support $vhost_net"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005057echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005058echo "vhost-vsock support $vhost_vsock"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005059echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005060if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005061echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005062fi
Stefan Weil89138852016-05-16 15:10:20 +02005063echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005064echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005065echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005066echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005067echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005068echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005069echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005070echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005071echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01005072echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05005073echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005074echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05005075echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05005076echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03005077echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01005078echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005079echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02005080echo "debug stack usage $debug_stack_usage"
Bharata B Raoeb100392012-09-24 14:42:45 +05305081echo "GlusterFS support $glusterfs"
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03005082echo "Archipelago support $archipelago"
Blue Swirl1d728c32012-05-01 18:45:39 +00005083echo "gcov $gcov_tool"
5084echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05005085echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005086echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005087echo "TPM passthrough $tpm_passthrough"
Paolo Bonzini3556c232013-05-10 14:16:40 +02005088echo "QOM debugging $qom_cast_debug"
qiaonuohan607dacd2014-02-18 14:11:30 +08005089echo "lzo support $lzo"
5090echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01005091echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08005092echo "NUMA host support $numa"
Fam Zheng2847b462015-03-26 11:03:12 +08005093echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02005094echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08005095echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005096echo "replication support $replication"
bellard67b915a2004-03-31 23:37:16 +00005097
Stefan Weil1ba16962011-07-29 22:40:45 +02005098if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00005099echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00005100fi
bellard97a847b2003-08-10 21:36:04 +00005101
Juan Quintela98ec69a2009-07-16 18:34:18 +02005102config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00005103
Stefan Weildbd99ae2013-01-01 18:33:44 +01005104echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5105
Juan Quintela98ec69a2009-07-16 18:34:18 +02005106echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005107echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005108
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02005109echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005110echo "prefix=$prefix" >> $config_host_mak
5111echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03005112echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04005113echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02005114echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005115echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005116echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03005117echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03005118echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5119echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08005120echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005121if test "$mingw32" = "no" ; then
5122 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5123fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04005124echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +01005125echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5126echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06005127echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02005128echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005129
Juan Quintela98ec69a2009-07-16 18:34:18 +02005130echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02005131
aurel32f8393942009-04-13 18:45:38 +00005132if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005133 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00005134fi
aliguori1625af82009-04-05 17:41:02 +00005135if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07005136 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00005137fi
bellard7d132992003-03-06 23:23:54 +00005138if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02005139 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005140fi
bellard67b915a2004-03-31 23:37:16 +00005141if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005142 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02005143 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00005144 version_major=${rc_version%%.*}
5145 rc_version=${rc_version#*.}
5146 version_minor=${rc_version%%.*}
5147 rc_version=${rc_version#*.}
5148 version_subminor=${rc_version%%.*}
5149 version_micro=0
5150 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5151 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005152 if test "$guest_agent_with_vss" = "yes" ; then
5153 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05005154 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005155 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5156 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05005157 if test "$guest_agent_ntddscsi" = "yes" ; then
5158 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5159 fi
Michael Roth1a349042015-08-26 11:14:31 -05005160 if test "$guest_agent_msi" = "yes"; then
Yossi Hindin9dacf322015-05-06 14:57:40 +03005161 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5162 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5163 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5164 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5165 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5166 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5167 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5168 fi
pbrook210fa552007-02-27 21:04:49 +00005169else
Juan Quintela35f4df22009-07-27 16:13:07 +02005170 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00005171fi
blueswir1128ab2f2008-08-15 18:33:42 +00005172
Mark McLoughlindffcb712009-10-22 17:49:11 +01005173if test "$linux" = "yes" ; then
5174 echo "CONFIG_LINUX=y" >> $config_host_mak
5175fi
5176
bellard83fb7ad2004-07-05 21:25:26 +00005177if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005178 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00005179fi
malcb29fe3e2008-11-18 01:42:22 +00005180
5181if test "$aix" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005182 echo "CONFIG_AIX=y" >> $config_host_mak
malcb29fe3e2008-11-18 01:42:22 +00005183fi
5184
bellardec530c82006-04-25 22:36:06 +00005185if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005186 echo "CONFIG_SOLARIS=y" >> $config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02005187 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
ths0475a5c2007-04-01 18:54:44 +00005188 if test "$needs_libsunmath" = "yes" ; then
Juan Quintela75b5a692009-07-27 16:13:23 +02005189 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
ths0475a5c2007-04-01 18:54:44 +00005190 fi
bellardec530c82006-04-25 22:36:06 +00005191fi
Andreas Färber179cf402010-09-20 00:50:43 +02005192if test "$haiku" = "yes" ; then
5193 echo "CONFIG_HAIKU=y" >> $config_host_mak
5194fi
bellard97a847b2003-08-10 21:36:04 +00005195if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005196 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005197fi
Stefan Weil1ba16962011-07-29 22:40:45 +02005198if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005199 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00005200fi
bellardc20709a2004-04-21 23:27:19 +00005201if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005202 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04005203 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00005204fi
ths8a16d272008-07-19 09:56:24 +00005205if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005206 echo "CONFIG_VDE=y" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00005207fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01005208if test "$netmap" = "yes" ; then
5209 echo "CONFIG_NETMAP=y" >> $config_host_mak
5210fi
Gonglei015a33b2014-07-01 20:58:08 +08005211if test "$l2tpv3" = "yes" ; then
5212 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5213fi
Corey Bryant47e98652012-01-26 09:42:26 -05005214if test "$cap_ng" = "yes" ; then
5215 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5216fi
Juan Quintela2358a492009-07-27 16:13:25 +02005217echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005218for drv in $audio_drv_list; do
Stefan Weil89138852016-05-16 15:10:20 +02005219 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Juan Quintela98ec69a2009-07-16 18:34:18 +02005220 echo "$def=y" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005221done
Juan Quintela67f86e82009-08-03 14:46:59 +02005222if test "$audio_pt_int" = "yes" ; then
5223 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5224fi
malcd5631632009-10-10 01:13:41 +04005225if test "$audio_win_int" = "yes" ; then
5226 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5227fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005228echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5229echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01005230if test "$vnc" = "yes" ; then
5231 echo "CONFIG_VNC=y" >> $config_host_mak
5232fi
aliguori2f9606b2009-03-06 20:27:28 +00005233if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005234 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00005235fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005236if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005237 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005238fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005239if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02005240 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02005241fi
aliguori76655d62009-03-06 20:27:37 +00005242if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005243 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00005244fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005245if test "$xfs" = "yes" ; then
5246 echo "CONFIG_XFS=y" >> $config_host_mak
5247fi
Stefan Weil89138852016-05-16 15:10:20 +02005248qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02005249echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02005250echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005251echo "SRC_PATH=$source_path" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005252echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02005253if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005254 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00005255fi
Fam Zheng17969262014-02-10 14:48:56 +08005256if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08005257 # $shacmd can generate a hash started with digit, which the compiler doesn't
5258 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02005259 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08005260 echo "CONFIG_MODULES=y" >> $config_host_mak
5261fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02005262if test "$sdl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005263 echo "CONFIG_SDL=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005264 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02005265 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005266fi
5267if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005268 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00005269fi
5270if test "$curses" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005271 echo "CONFIG_CURSES=y" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005272fi
Riku Voipioebc996f2009-04-21 15:01:51 +03005273if test "$utimens" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005274 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
Riku Voipioebc996f2009-04-21 15:01:51 +03005275fi
Riku Voipio099d6b02009-05-05 12:10:04 +03005276if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005277 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03005278fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01005279if test "$accept4" = "yes" ; then
5280 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5281fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305282if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005283 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305284fi
Riku Voipioc2882b92009-08-12 15:08:24 +03005285if test "$eventfd" = "yes" ; then
5286 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5287fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02005288if test "$memfd" = "yes" ; then
5289 echo "CONFIG_MEMFD=y" >> $config_host_mak
5290fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005291if test "$fallocate" = "yes" ; then
5292 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5293fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01005294if test "$fallocate_punch_hole" = "yes" ; then
5295 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5296fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03005297if test "$fallocate_zero_range" = "yes" ; then
5298 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5299fi
Kevin Wolfed911432014-09-29 17:12:59 +02005300if test "$posix_fallocate" = "yes" ; then
5301 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5302fi
Peter Maydellc727f472011-01-06 11:05:10 +00005303if test "$sync_file_range" = "yes" ; then
5304 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5305fi
Peter Maydelldace20d2011-01-10 13:11:24 +00005306if test "$fiemap" = "yes" ; then
5307 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5308fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005309if test "$dup3" = "yes" ; then
5310 echo "CONFIG_DUP3=y" >> $config_host_mak
5311fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01005312if test "$ppoll" = "yes" ; then
5313 echo "CONFIG_PPOLL=y" >> $config_host_mak
5314fi
Alex Blighcd758dd2013-08-21 16:02:44 +01005315if test "$prctl_pr_set_timerslack" = "yes" ; then
5316 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5317fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00005318if test "$epoll" = "yes" ; then
5319 echo "CONFIG_EPOLL=y" >> $config_host_mak
5320fi
5321if test "$epoll_create1" = "yes" ; then
5322 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5323fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00005324if test "$sendfile" = "yes" ; then
5325 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5326fi
Riku Voipio51834342014-06-22 11:25:42 +01005327if test "$timerfd" = "yes" ; then
5328 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5329fi
Riku Voipio9af5c902014-08-12 15:58:57 +03005330if test "$setns" = "yes" ; then
5331 echo "CONFIG_SETNS=y" >> $config_host_mak
5332fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02005333if test "$clock_adjtime" = "yes" ; then
5334 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5335fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02005336if test "$syncfs" = "yes" ; then
5337 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5338fi
aurel323b3f24a2009-04-15 16:12:13 +00005339if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005340 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00005341fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00005342if test "$inotify1" = "yes" ; then
5343 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5344fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005345if test "$byteswap_h" = "yes" ; then
5346 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5347fi
5348if test "$bswap_h" = "yes" ; then
5349 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5350fi
Alexander Graf769ce762009-05-11 17:41:42 +02005351if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005352 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02005353 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005354 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02005355fi
aurel322e4d9fb2008-04-08 06:01:02 +00005356if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005357 echo "CONFIG_BRLAPI=y" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00005358fi
balrogfb599c92008-09-28 23:49:55 +00005359if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005360 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02005361 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00005362fi
Dr. David Alan Gilbertd46f7c92015-06-24 10:45:42 +01005363if test "$glib_subprocess" = "yes" ; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03005364 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5365fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005366if test "$gtk" = "yes" ; then
5367 echo "CONFIG_GTK=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005368 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005369 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005370 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005371 if test "$gtk_gl" = "yes" ; then
5372 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5373 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005374fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005375echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005376if test "$gnutls" = "yes" ; then
5377 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5378fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005379if test "$gnutls_rnd" = "yes" ; then
5380 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5381fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005382if test "$gcrypt" = "yes" ; then
5383 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005384 if test "$gcrypt_kdf" = "yes" ; then
5385 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5386 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01005387fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005388if test "$nettle" = "yes" ; then
5389 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02005390 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005391 if test "$nettle_kdf" = "yes" ; then
5392 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5393 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01005394fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005395if test "$tasn1" = "yes" ; then
5396 echo "CONFIG_TASN1=y" >> $config_host_mak
5397fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00005398if test "$have_ifaddrs_h" = "yes" ; then
5399 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5400fi
Eric Blake6b39b062016-10-11 10:46:23 -05005401if test "$have_broken_size_max" = "yes" ; then
5402 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5403fi
Jan Vesely277abf12016-04-29 13:15:23 -04005404
5405# Work around a system header bug with some kernel/XFS header
5406# versions where they both try to define 'struct fsxattr':
5407# xfs headers will not try to redefine structs from linux headers
5408# if this macro is set.
5409if test "$have_fsxattr" = "yes" ; then
5410 echo "HAVE_FSXATTR=y" >> $config_host_mak
5411fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005412if test "$vte" = "yes" ; then
5413 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005414 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5415fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005416if test "$virglrenderer" = "yes" ; then
5417 echo "CONFIG_VIRGL=y" >> $config_host_mak
5418 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5419 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5420fi
aliguorie37630c2009-04-22 15:19:10 +00005421if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02005422 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00005423 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00005424 if test "$xen_pv_domain_build" = "yes" ; then
5425 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5426 fi
aliguorie37630c2009-04-22 15:19:10 +00005427fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005428if test "$linux_aio" = "yes" ; then
5429 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5430fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005431if test "$attr" = "yes" ; then
5432 echo "CONFIG_ATTR=y" >> $config_host_mak
5433fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02005434if test "$libattr" = "yes" ; then
5435 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5436fi
Meador Inge983eef52012-02-24 14:00:42 +05305437if test "$virtfs" = "yes" ; then
5438 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005439fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005440if test "$vhost_scsi" = "yes" ; then
5441 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5442fi
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03005443if test "$vhost_net" = "yes" ; then
5444 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5445fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005446if test "$vhost_vsock" = "yes" ; then
5447 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5448fi
ths77755342008-11-27 15:45:16 +00005449if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005450 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00005451fi
aliguoribf9298b2008-12-05 20:05:26 +00005452if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005453 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00005454fi
aliguoriceb42de2009-04-07 18:43:28 +00005455if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005456 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00005457fi
aurel32f652e6a2008-12-16 10:43:48 +00005458if test "$fdt" = "yes" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02005459 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00005460fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03005461if test "$signalfd" = "yes" ; then
5462 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5463fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02005464if test "$tcg_interpreter" = "yes" ; then
5465 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5466fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005467if test "$fdatasync" = "yes" ; then
5468 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5469fi
Andreas Färbere78815a2010-09-25 11:26:05 +00005470if test "$madvise" = "yes" ; then
5471 echo "CONFIG_MADVISE=y" >> $config_host_mak
5472fi
5473if test "$posix_madvise" = "yes" ; then
5474 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5475fi
bellard97a847b2003-08-10 21:36:04 +00005476
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005477if test "$spice" = "yes" ; then
5478 echo "CONFIG_SPICE=y" >> $config_host_mak
5479fi
5480
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005481if test "$smartcard" = "yes" ; then
5482 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02005483fi
5484
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005485if test "$libusb" = "yes" ; then
5486 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5487fi
5488
Hans de Goede69354a82011-07-19 11:04:10 +02005489if test "$usb_redir" = "yes" ; then
5490 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5491fi
5492
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005493if test "$opengl" = "yes" ; then
5494 echo "CONFIG_OPENGL=y" >> $config_host_mak
Jeremy Whitef676c672015-01-09 13:08:49 -06005495 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005496 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005497 if test "$opengl_dmabuf" = "yes" ; then
5498 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5499 fi
Michael Walle20ff0752011-03-07 23:32:39 +01005500fi
5501
Liang Li99f2dbd2016-03-08 13:53:16 +08005502if test "$avx2_opt" = "yes" ; then
5503 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5504fi
5505
qiaonuohan607dacd2014-02-18 14:11:30 +08005506if test "$lzo" = "yes" ; then
5507 echo "CONFIG_LZO=y" >> $config_host_mak
5508fi
5509
5510if test "$snappy" = "yes" ; then
5511 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5512fi
5513
Peter Wu6b383c02015-01-06 18:48:14 +01005514if test "$bzip2" = "yes" ; then
5515 echo "CONFIG_BZIP2=y" >> $config_host_mak
5516 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5517fi
5518
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005519if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005520 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005521 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5522 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005523fi
5524
Peter Lieven6542aa92014-02-03 10:26:13 +01005525if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04005526 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5527 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01005528fi
5529
Eduardo Otubof7945732012-08-14 18:44:05 -03005530if test "$seccomp" = "yes"; then
5531 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5532fi
5533
bellard83fb7ad2004-07-05 21:25:26 +00005534# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00005535if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005536 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00005537fi
5538
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01005539if test "$localtime_r" = "yes" ; then
5540 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5541fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02005542if test "$qom_cast_debug" = "yes" ; then
5543 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5544fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005545if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005546 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005547 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5548 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005549fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06005550
Peter Maydell7c2acc72013-04-08 12:11:27 +01005551echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005552if test "$coroutine_pool" = "yes" ; then
5553 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5554else
5555 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5556fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305557
Peter Lieven7d992e42016-09-27 11:58:45 +02005558if test "$debug_stack_usage" = "yes" ; then
5559 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5560fi
5561
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305562if test "$open_by_handle_at" = "yes" ; then
5563 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5564fi
5565
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305566if test "$linux_magic_h" = "yes" ; then
5567 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5568fi
5569
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005570if test "$pragma_diagnostic_available" = "yes" ; then
5571 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01005572fi
5573
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005574if test "$valgrind_h" = "yes" ; then
5575 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5576fi
5577
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005578if test "$has_environ" = "yes" ; then
5579 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5580fi
5581
Richard Henderson76a347e2012-12-28 14:17:02 -08005582if test "$cpuid_h" = "yes" ; then
5583 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5584fi
5585
Richard Hendersonf5401662013-02-16 12:46:59 -08005586if test "$int128" = "yes" ; then
5587 echo "CONFIG_INT128=y" >> $config_host_mak
5588fi
5589
Richard Henderson7ebee432016-06-29 21:10:59 -07005590if test "$atomic128" = "yes" ; then
5591 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5592fi
5593
Richard Hendersondf79b992016-09-02 12:23:57 -07005594if test "$atomic64" = "yes" ; then
5595 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5596fi
5597
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005598if test "$getauxval" = "yes" ; then
5599 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5600fi
5601
Bharata B Raoeb100392012-09-24 14:42:45 +05305602if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005603 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005604 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5605 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05305606fi
5607
Jeff Codyd85fa9e2016-04-05 10:40:09 -04005608if test "$glusterfs_xlator_opt" = "yes" ; then
5609 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5610fi
5611
Bharata B Rao0c14fb42013-07-16 21:47:42 +05305612if test "$glusterfs_discard" = "yes" ; then
5613 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5614fi
5615
Bharata B Rao7c815372013-12-21 14:51:25 +05305616if test "$glusterfs_zerofill" = "yes" ; then
5617 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5618fi
5619
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03005620if test "$archipelago" = "yes" ; then
5621 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5622 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5623fi
5624
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005625if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005626 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005627 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5628 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005629fi
5630
blueswir168063642008-11-22 21:03:55 +00005631# USB host support
Gerd Hoffmannb5613fd2013-09-10 11:02:59 +02005632if test "$libusb" = "yes"; then
5633 echo "HOST_USB=libusb legacy" >> $config_host_mak
5634else
Juan Quintela98ec69a2009-07-16 18:34:18 +02005635 echo "HOST_USB=stub" >> $config_host_mak
Gerd Hoffmannb5613fd2013-09-10 11:02:59 +02005636fi
blueswir168063642008-11-22 21:03:55 +00005637
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005638# TPM passthrough support?
5639if test "$tpm" = "yes"; then
5640 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5641 if test "$tpm_passthrough" = "yes"; then
5642 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5643 fi
5644fi
5645
Lluís Vilanova5b808272014-05-27 15:02:14 +02005646echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5647if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02005648 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05305649fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005650if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02005651 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5652 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02005653 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01005654fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03005655if have_backend "log"; then
5656 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02005657fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005658if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02005659 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5660fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005661if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02005662 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5663 if test "$trace_backend_stap" = "yes" ; then
5664 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5665 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005666fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005667if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005668 if test "$linux" = "yes" ; then
5669 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005670 else
Stewart Smith21684af2014-01-24 12:39:10 +11005671 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005672 fi
5673fi
Paul Durrant0a852412016-08-04 14:44:14 +01005674if have_backend "syslog"; then
5675 if test "$posix_syslog" = "yes" ; then
5676 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5677 else
5678 feature_not_found "syslog(trace backend)" "syslog not available"
5679 fi
5680fi
Prerna Saxena9410b562010-07-13 09:26:32 +01005681echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5682
zhanghailiang180fb752016-10-27 14:43:08 +08005683if test "$colo" = "yes"; then
5684 echo "CONFIG_COLO=y" >> $config_host_mak
5685fi
5686
Michael R. Hines2da776d2013-07-22 10:01:54 -04005687if test "$rdma" = "yes" ; then
5688 echo "CONFIG_RDMA=y" >> $config_host_mak
5689fi
5690
Laurent Vivier575b22b2016-06-02 22:14:15 +02005691if test "$have_rtnetlink" = "yes" ; then
5692 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5693fi
5694
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005695if test "$replication" = "yes" ; then
5696 echo "CONFIG_REPLICATION=y" >> $config_host_mak
5697fi
5698
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005699if test "$have_af_vsock" = "yes" ; then
5700 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
5701fi
5702
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00005703# Hold two types of flag:
5704# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5705# a thread we have a handle to
5706# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5707# platform
5708if test "$pthread_setname_np" = "yes" ; then
5709 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5710 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5711fi
5712
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02005713if test "$tcg_interpreter" = "yes"; then
5714 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5715elif test "$ARCH" = "sparc64" ; then
5716 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5717elif test "$ARCH" = "s390x" ; then
5718 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07005719elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02005720 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07005721elif test "$ARCH" = "ppc64" ; then
5722 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02005723else
5724 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5725fi
5726QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5727
Juan Quintela98ec69a2009-07-16 18:34:18 +02005728echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005729echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005730echo "MAKE=$make" >> $config_host_mak
5731echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04005732echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5733echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03005734echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5735echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00005736echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005737echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03005738if $iasl -h > /dev/null 2>&1; then
5739 echo "IASL=$iasl" >> $config_host_mak
5740fi
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02005741echo "CC_I386=$cc_i386" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005742echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005743echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005744echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005745echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01005746echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07005747echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07005748echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00005749echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005750echo "OBJCOPY=$objcopy" >> $config_host_mak
5751echo "LD=$ld" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02005752echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00005753echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02005754echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05005755echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02005756echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01005757echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01005758if test "$sparse" = "yes" ; then
5759 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01005760 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02005761 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01005762 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5763 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5764fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01005765if test "$cross_prefix" != ""; then
5766 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5767else
5768 echo "AUTOCONF_HOST := " >> $config_host_mak
5769fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02005770echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05005771echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01005772echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01005773echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02005774echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02005775echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01005776echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005777echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08005778echo "DSOSUF=$DSOSUF" >> $config_host_mak
5779echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05005780echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01005781echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5782echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005783echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01005784echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00005785if test "$gcov" = "yes" ; then
5786 echo "CONFIG_GCOV=y" >> $config_host_mak
5787 echo "GCOV=$gcov_tool" >> $config_host_mak
5788fi
Juan Quintela804edf22009-07-27 16:12:49 +02005789
Peter Maydell6efd7512011-11-30 11:59:04 +00005790# use included Linux headers
5791if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00005792 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00005793 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07005794 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01005795 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00005796 ;;
5797 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01005798 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00005799 ;;
5800 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01005801 linux_arch=s390
5802 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01005803 aarch64)
5804 linux_arch=arm64
5805 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01005806 mips64)
5807 linux_arch=mips
5808 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01005809 *)
5810 # For most CPUs the kernel architecture name and QEMU CPU name match.
5811 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00005812 ;;
5813 esac
Peter Maydell08312a62012-08-03 13:51:25 +01005814 # For non-KVM architectures we will not have asm headers
5815 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5816 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5817 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00005818fi
5819
bellard1d14ffa2005-10-30 18:58:22 +00005820for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00005821target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02005822config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02005823target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00005824target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02005825
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005826case "$target_name" in
Anthony Greend15a9c22013-03-18 15:49:25 -04005827 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
Juan Quintelaea2d6a32009-07-16 18:34:10 +02005828 target_bigendian=yes
5829 ;;
5830esac
bellard97a847b2003-08-10 21:36:04 +00005831target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00005832target_user_only="no"
ths831b7822007-01-18 20:06:33 +00005833target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00005834target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00005835case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005836 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00005837 target_softmmu="yes"
5838 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005839 ${target_name}-linux-user)
Blue Swirl9c7a4202009-11-17 20:52:56 +00005840 if test "$linux" != "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005841 error_exit "Target '$target' is only available on a Linux host"
Blue Swirl9c7a4202009-11-17 20:52:56 +00005842 fi
pbrook9e407a82007-05-26 16:38:53 +00005843 target_user_only="yes"
5844 target_linux_user="yes"
5845 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005846 ${target_name}-bsd-user)
Blue Swirl9cf55762009-11-17 21:27:18 +00005847 if test "$bsd" != "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005848 error_exit "Target '$target' is only available on a BSD host"
Blue Swirl9c7a4202009-11-17 20:52:56 +00005849 fi
blueswir184778502008-10-26 20:33:16 +00005850 target_user_only="yes"
5851 target_bsd_user="yes"
5852 ;;
pbrook9e407a82007-05-26 16:38:53 +00005853 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01005854 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00005855 exit 1
5856 ;;
5857esac
ths831b7822007-01-18 20:06:33 +00005858
bellard97a847b2003-08-10 21:36:04 +00005859mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02005860echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00005861
pbrooke5fe0c52006-06-11 13:32:59 +00005862bflt="no"
Stefan Weil89138852016-05-16 15:10:20 +02005863interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00005864gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00005865
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005866TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02005867TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02005868TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02005869
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005870case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00005871 i386)
aurel322408a522008-04-20 20:19:44 +00005872 ;;
5873 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02005874 TARGET_BASE_ARCH=i386
aurel322408a522008-04-20 20:19:44 +00005875 ;;
5876 alpha)
aurel322408a522008-04-20 20:19:44 +00005877 ;;
5878 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005879 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00005880 bflt="yes"
pbrook56aebc82008-10-11 17:55:29 +00005881 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00005882 ;;
Alexander Graf6a49fa92013-09-03 20:12:22 +01005883 aarch64)
5884 TARGET_BASE_ARCH=arm
5885 bflt="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01005886 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 +01005887 ;;
aurel322408a522008-04-20 20:19:44 +00005888 cris)
aurel322408a522008-04-20 20:19:44 +00005889 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01005890 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01005891 ;;
aurel322408a522008-04-20 20:19:44 +00005892 m68k)
aurel322408a522008-04-20 20:19:44 +00005893 bflt="yes"
pbrook56aebc82008-10-11 17:55:29 +00005894 gdb_xml_files="cf-core.xml cf-fp.xml"
aurel322408a522008-04-20 20:19:44 +00005895 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01005896 microblaze|microblazeel)
5897 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02005898 bflt="yes"
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02005899 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02005900 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005901 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02005902 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00005903 ;;
5904 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08005905 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02005906 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02005907 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08005908 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00005909 ;;
5910 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005911 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02005912 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02005913 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00005914 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04005915 moxie)
5916 ;;
Jia Liue67db062012-07-20 15:50:39 +08005917 or32)
5918 TARGET_ARCH=openrisc
5919 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08005920 ;;
aurel322408a522008-04-20 20:19:44 +00005921 ppc)
aurel32c8b35322009-01-24 15:07:34 +00005922 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00005923 ;;
5924 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02005925 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02005926 TARGET_ABI_DIR=ppc
aurel32c8b35322009-01-24 15:07:34 +00005927 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00005928 ;;
5929 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02005930 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02005931 TARGET_ABI_DIR=ppc
Anton Blanchard1438eff2016-01-15 16:00:51 +01005932 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00005933 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05005934 ppc64le)
5935 TARGET_ARCH=ppc64
5936 TARGET_BASE_ARCH=ppc
5937 TARGET_ABI_DIR=ppc
Anton Blanchard1438eff2016-01-15 16:00:51 +01005938 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 -05005939 ;;
aurel322408a522008-04-20 20:19:44 +00005940 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005941 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02005942 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02005943 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02005944 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01005945 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00005946 ;;
5947 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005948 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00005949 bflt="yes"
5950 ;;
5951 sparc)
aurel322408a522008-04-20 20:19:44 +00005952 ;;
5953 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02005954 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00005955 ;;
5956 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005957 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02005958 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02005959 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02005960 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00005961 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01005962 s390x)
David Hildenbrand8a641ff2015-10-01 10:49:44 +02005963 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
Alexander Graf24e804ec2009-12-05 12:44:22 +01005964 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08005965 tilegx)
5966 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07005967 tricore)
5968 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08005969 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08005970 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04005971 xtensa|xtensaeb)
5972 TARGET_ARCH=xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04005973 ;;
aurel322408a522008-04-20 20:19:44 +00005974 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01005975 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00005976 ;;
5977esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02005978# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5979if [ "$TARGET_BASE_ARCH" = "" ]; then
5980 TARGET_BASE_ARCH=$TARGET_ARCH
5981fi
5982
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02005983symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5984
Daniel P. Berrange99afc912012-08-20 15:31:38 +01005985upper() {
5986 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5987}
5988
Stefan Weil89138852016-05-16 15:10:20 +02005989target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02005990echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005991echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02005992echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02005993if [ "$TARGET_ABI_DIR" = "" ]; then
5994 TARGET_ABI_DIR=$TARGET_ARCH
5995fi
Juan Quintela25be2102009-10-07 02:41:00 +02005996echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07005997if [ "$HOST_VARIANT_DIR" != "" ]; then
5998 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5999fi
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006000case "$target_name" in
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006001 i386|x86_64)
6002 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006003 echo "CONFIG_XEN=y" >> $config_target_mak
Anthony PERARDeb6fda02012-06-21 15:32:59 +00006004 if test "$xen_pci_passthrough" = yes; then
6005 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6006 fi
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006007 fi
Alexander Graf59d21e52011-07-17 07:30:29 +02006008 ;;
6009 *)
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006010esac
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006011case "$target_name" in
Sanjay Lal222e7d12014-06-17 23:10:36 +01006012 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
Juan Quintelac59249f2009-07-16 18:34:00 +02006013 # Make sure the target and host cpus are compatible
6014 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006015 \( "$target_name" = "$cpu" -o \
6016 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
6017 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
6018 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
6019 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
Sanjay Lal222e7d12014-06-17 23:10:36 +01006020 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006021 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
Michael Tokarev18b82632015-03-12 09:13:45 +03006022 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
6023 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
6024 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006025 echo "CONFIG_KVM=y" >> $config_target_mak
Stefan Weil1ba16962011-07-29 22:40:45 +02006026 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006027 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureau421f4442015-10-26 15:32:00 +01006028 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006029 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02006030 fi
6031esac
bellardde83cd02003-06-15 20:25:43 +00006032if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006033 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006034fi
6035if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006036 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
bellardde83cd02003-06-15 20:25:43 +00006037fi
bellard997344f2003-10-27 21:10:39 +00006038if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006039 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01006040 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00006041fi
ths831b7822007-01-18 20:06:33 +00006042if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006043 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00006044fi
pbrook56aebc82008-10-11 17:55:29 +00006045list=""
6046if test ! -z "$gdb_xml_files" ; then
6047 for x in $gdb_xml_files; do
6048 list="$list $source_path/gdb-xml/$x"
6049 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02006050 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00006051fi
bellardde83cd02003-06-15 20:25:43 +00006052
pbrooke5fe0c52006-06-11 13:32:59 +00006053if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02006054 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00006055fi
blueswir184778502008-10-26 20:33:16 +00006056if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006057 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00006058fi
bellard5b0753e2005-03-01 21:37:28 +00006059
Juan Quintela4afddb52009-08-03 14:46:45 +02006060# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02006061
Juan Quintela4afddb52009-08-03 14:46:45 +02006062cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02006063ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02006064
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006065disas_config() {
6066 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6067 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6068}
6069
Juan Quintela64656022009-08-03 14:46:53 +02006070for i in $ARCH $TARGET_BASE_ARCH ; do
6071 case "$i" in
6072 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006073 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02006074 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05006075 aarch64)
6076 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006077 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05006078 fi
6079 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006080 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006081 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006082 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006083 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006084 fi
Juan Quintela64656022009-08-03 14:46:53 +02006085 ;;
6086 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006087 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02006088 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006089 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006090 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02006091 ;;
Aurelien Jarno903ec552010-03-29 02:12:51 +02006092 ia64*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006093 disas_config "IA64"
Aurelien Jarno903ec552010-03-29 02:12:51 +02006094 ;;
Michael Walle79368f42012-03-31 19:54:20 +02006095 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006096 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02006097 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006098 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006099 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02006100 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006101 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006102 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02006103 ;;
6104 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006105 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02006106 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006107 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006108 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04006109 ;;
Jia Liue67db062012-07-20 15:50:39 +08006110 or32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006111 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08006112 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006113 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006114 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02006115 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006116 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006117 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02006118 ;;
6119 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006120 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02006121 ;;
6122 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006123 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02006124 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006125 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006126 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04006127 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006128 esac
6129done
Stefan Weil9195b2c2011-10-19 07:07:18 +02006130if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006131 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02006132fi
Juan Quintela64656022009-08-03 14:46:53 +02006133
Juan Quintela6ee71262009-08-03 14:46:47 +02006134case "$ARCH" in
6135alpha)
6136 # Ensure there's only a single GP
6137 cflags="-msmall-data $cflags"
6138;;
6139esac
6140
Juan Quintelad02c1db2009-08-03 14:46:50 +02006141if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006142 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006143 if test "$target_linux_user" = "yes" ; then
6144 cflags="-p $cflags"
6145 ldflags="-p $ldflags"
6146 fi
6147 if test "$target_softmmu" = "yes" ; then
6148 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02006149 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006150 fi
6151fi
6152
Juan Quintela9b8e1112009-08-03 14:46:46 +02006153if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006154 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02006155fi
Juan Quintelafa282482009-07-22 22:37:39 +02006156
Juan Quintela25be2102009-10-07 02:41:00 +02006157echo "LDFLAGS+=$ldflags" >> $config_target_mak
6158echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02006159
bellard97a847b2003-08-10 21:36:04 +00006160done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00006161
Gerd Hoffmannb776eca2012-11-12 12:18:38 +01006162if [ "$pixman" = "internal" ]; then
6163 echo "config-host.h: subdir-pixman" >> $config_host_mak
6164fi
6165
Peter Crosthwaitea540f152013-04-18 14:47:31 +10006166if [ "$dtc_internal" = "yes" ]; then
6167 echo "config-host.h: subdir-dtc" >> $config_host_mak
6168fi
6169
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006170if test "$numa" = "yes"; then
6171 echo "CONFIG_NUMA=y" >> $config_host_mak
6172fi
6173
John Snowfd0e6052015-03-25 18:57:39 -04006174if test "$ccache_cpp2" = "yes"; then
6175 echo "export CCACHE_CPP2=y" >> $config_host_mak
6176fi
6177
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006178# build tree in object directory in case the source is not in the current directory
Wenchao Xiaf93296e2013-09-06 11:24:32 +08006179DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
Michael Tokarev2b170ef2013-10-21 12:33:58 +04006180DIRS="$DIRS fsdev"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006181DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006182DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2dee8d52012-06-04 09:15:43 +02006183DIRS="$DIRS qapi-generated"
Anthony Liguoric09015d2012-01-10 13:10:42 -06006184FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6185FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02006186FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006187FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02006188FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006189FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006190FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01006191FILES="$FILES pc-bios/qemu-icon.bmp"
Richard Henderson753d11f2011-06-24 11:58:37 -07006192for bios_file in \
6193 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11006194 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01006195 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07006196 $source_path/pc-bios/*.rom \
6197 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00006198 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07006199 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01006200 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07006201 $source_path/pc-bios/palcode-*
6202do
Stefan Weil89138852016-05-16 15:10:20 +02006203 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006204done
Stefan Weil89138852016-05-16 15:10:20 +02006205for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006206do
Stefan Weil89138852016-05-16 15:10:20 +02006207 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006208done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006209mkdir -p $DIRS
6210for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03006211 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01006212 symlink "$source_path/$f" "$f"
6213 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006214done
Paul Brook1ad21342009-05-19 16:17:58 +01006215
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006216# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06006217for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006218 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01006219 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006220 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006221 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006222 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006223 echo "CC=$cc" >> $config_mak
6224 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006225 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006226 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006227 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006228 echo "LD=$ld" >> $config_mak
6229done
6230
Marc-André Lureaufe310172016-06-15 13:06:00 +02006231# set up tests data directory
6232if [ ! -e tests/data ]; then
6233 symlink "$source_path/tests/data" tests/data
6234fi
6235
Max Reitz76c75602014-05-24 23:24:56 +02006236# set up qemu-iotests in this build directory
6237iotests_common_env="tests/qemu-iotests/common.env"
6238iotests_check="tests/qemu-iotests/check"
6239
6240echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6241echo >> "$iotests_common_env"
6242echo "export PYTHON='$python'" >> "$iotests_common_env"
6243
6244if [ ! -e "$iotests_check" ]; then
6245 symlink "$source_path/$iotests_check" "$iotests_check"
6246fi
6247
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006248# Save the configure command line for later reuse.
6249cat <<EOD >config.status
6250#!/bin/sh
6251# Generated by configure.
6252# Run this file to recreate the current configuration.
6253# Compiler output produced by configure, useful for debugging
6254# configure, is in config.log if it exists.
6255EOD
6256printf "exec" >>config.status
6257printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00006258echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006259chmod +x config.status
6260
Peter Maydell8cd05ab2014-05-23 17:07:24 +01006261rm -r "$TMPDIR1"