blob: 17d52cdd745fb44224ef49f19b57fc70c1f00041 [file] [log] [blame]
bellard7d132992003-03-06 23:23:54 +00001#!/bin/sh
2#
bellard3ef693a2003-03-23 20:17:16 +00003# qemu configure script (c) 2003 Fabrice Bellard
bellard7d132992003-03-06 23:23:54 +00004#
Peter Maydell8cd05ab2014-05-23 17:07:24 +01005
Cornelia Huck99519e62014-05-28 12:39:17 +02006# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
John Snow5e4dfd32015-10-28 13:56:40 -040011# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
Peter Maydell8cd05ab2014-05-23 17:07:24 +010014# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
bellard7d132992003-03-06 23:23:54 +000025fi
26
Peter Maydell8cd05ab2014-05-23 17:07:24 +010027TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
Don Slutz66518bf2014-01-02 21:12:46 -050029TMPO="${TMPDIR1}/${TMPB}.o"
Peter Maydell9c83ffd2014-02-25 18:27:49 +000030TMPCXX="${TMPDIR1}/${TMPB}.cxx"
Peter Maydell8cd05ab2014-05-23 17:07:24 +010031TMPE="${TMPDIR1}/${TMPB}.exe"
James Clarke6969ec62016-06-06 12:02:50 +010032TMPMO="${TMPDIR1}/${TMPB}.mo"
bellard7d132992003-03-06 23:23:54 +000033
Gerd Hoffmannda1d85e2010-04-23 13:44:10 +020034rm -f config.log
malc9ac81bb2008-11-29 20:09:56 +000035
Peter Maydellb48e3612011-11-23 17:26:44 +000036# Print a helpful header at the top of config.log
37echo "# QEMU configure log $(date)" >> config.log
Peter Maydell979ae162012-03-07 12:16:29 +000038printf "# Configured with:" >> config.log
39printf " '%s'" "$0" "$@" >> config.log
40echo >> config.log
Peter Maydellb48e3612011-11-23 17:26:44 +000041echo "#" >> config.log
42
Peter Maydell76ad07a2013-04-08 12:11:26 +010043error_exit() {
44 echo
45 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
50 echo
51 exit 1
52}
53
Peter Maydell9c83ffd2014-02-25 18:27:49 +000054do_compiler() {
55 # Run the compiler, capturing its output to the log. First argument
56 # is compiler binary to execute.
57 local compiler="$1"
58 shift
59 echo $compiler "$@" >> config.log
60 $compiler "$@" >> config.log 2>&1 || return $?
Peter Maydell8dc38a72012-07-18 15:10:28 +010061 # Test passed. If this is an --enable-werror build, rerun
62 # the test with -Werror and bail out if it fails. This
63 # makes warning-generating-errors in configure test code
64 # obvious to developers.
65 if test "$werror" != "yes"; then
66 return 0
67 fi
68 # Don't bother rerunning the compile if we were already using -Werror
69 case "$*" in
70 *-Werror*)
71 return 0
72 ;;
73 esac
Peter Maydell9c83ffd2014-02-25 18:27:49 +000074 echo $compiler -Werror "$@" >> config.log
75 $compiler -Werror "$@" >> config.log 2>&1 && return $?
Peter Maydell76ad07a2013-04-08 12:11:26 +010076 error_exit "configure test passed without -Werror but failed with -Werror." \
77 "This is probably a bug in the configure script. The failing command" \
78 "will be at the bottom of config.log." \
79 "You can run configure with --disable-werror to bypass this check."
Peter Maydell8dc38a72012-07-18 15:10:28 +010080}
81
Peter Maydell9c83ffd2014-02-25 18:27:49 +000082do_cc() {
83 do_compiler "$cc" "$@"
84}
85
86do_cxx() {
87 do_compiler "$cxx" "$@"
88}
89
90update_cxxflags() {
91 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
92 # options which some versions of GCC's C++ compiler complain about
93 # because they only make sense for C programs.
94 QEMU_CXXFLAGS=
95 for arg in $QEMU_CFLAGS; do
96 case $arg in
97 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
98 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
99 ;;
100 *)
101 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
102 ;;
103 esac
104 done
105}
106
Juan Quintela52166aa2009-08-03 14:46:03 +0200107compile_object() {
John Snowfd0e6052015-03-25 18:57:39 -0400108 local_cflags="$1"
109 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
Juan Quintela52166aa2009-08-03 14:46:03 +0200110}
111
112compile_prog() {
113 local_cflags="$1"
114 local_ldflags="$2"
Peter Maydell8dc38a72012-07-18 15:10:28 +0100115 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Juan Quintela52166aa2009-08-03 14:46:03 +0200116}
117
Paolo Bonzini11568d62010-12-23 11:43:58 +0100118# symbolically link $1 to $2. Portable version of "ln -sf".
119symlink() {
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100120 rm -rf "$2"
Anthony Liguoriec5b06d2012-06-06 16:57:00 +0800121 mkdir -p "$(dirname "$2")"
Stefan Weil72b8b5a2012-03-19 13:20:47 +0100122 ln -s "$1" "$2"
Paolo Bonzini11568d62010-12-23 11:43:58 +0100123}
124
Loïc Minier0dba6192010-01-28 21:26:51 +0000125# check whether a command is available to this shell (may be either an
126# executable or a builtin)
127has() {
128 type "$1" >/dev/null 2>&1
129}
130
131# search for an executable in PATH
132path_of() {
133 local_command="$1"
134 local_ifs="$IFS"
135 local_dir=""
136
137 # pathname has a dir component?
138 if [ "${local_command#*/}" != "$local_command" ]; then
139 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
140 echo "$local_command"
141 return 0
142 fi
143 fi
144 if [ -z "$local_command" ]; then
145 return 1
146 fi
147
148 IFS=:
149 for local_dir in $PATH; do
150 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
151 echo "$local_dir/$local_command"
152 IFS="${local_ifs:-$(printf ' \t\n')}"
153 return 0
154 fi
155 done
156 # not found
157 IFS="${local_ifs:-$(printf ' \t\n')}"
158 return 1
159}
160
Lluís Vilanova5b808272014-05-27 15:02:14 +0200161have_backend () {
162 echo "$trace_backends" | grep "$1" >/dev/null
163}
164
bellard7d132992003-03-06 23:23:54 +0000165# default parameters
Stefan Weil89138852016-05-16 15:10:20 +0200166source_path=$(dirname "$0")
Juan Quintela2ff6b912009-08-03 14:45:55 +0200167cpu=""
Michael S. Tsirkina31a8642013-07-24 18:56:03 +0300168iasl="iasl"
bellard1e43adf2003-09-30 20:54:24 +0000169interp_prefix="/usr/gnemul/qemu-%M"
bellard43ce4df2003-06-09 19:53:12 +0000170static="no"
bellard7d132992003-03-06 23:23:54 +0000171cross_prefix=""
malc0c58ac12008-06-25 21:04:05 +0000172audio_drv_list=""
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800173block_drv_rw_whitelist=""
174block_drv_ro_whitelist=""
Peter Maydelle49d0212012-12-07 15:39:13 +0000175host_cc="cc"
Juan Quintela73da3752009-08-03 14:46:26 +0200176libs_softmmu=""
Juan Quintela3e2e0e62009-08-03 14:47:06 +0200177libs_tools=""
Juan Quintela67f86e82009-08-03 14:46:59 +0200178audio_pt_int=""
malcd5631632009-10-10 01:13:41 +0400179audio_win_int=""
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +0200180cc_i386=i386-pc-linux-gnu-gcc
Michael Roth957f1f92011-08-11 15:38:12 -0500181libs_qga=""
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100182debug_info="yes"
Steven Noonan63678e12014-03-28 17:19:02 +0100183stack_protector=""
aliguoriac0df512008-12-29 17:14:15 +0000184
Stefan Weilafb63eb2012-09-26 22:04:38 +0200185# Don't accept a target_list environment variable.
186unset target_list
Paolo Bonzini377529c2010-12-23 11:43:50 +0100187
188# Default value for a variable defining feature "foo".
189# * foo="no" feature will only be used if --enable-foo arg is given
190# * foo="" feature will be searched for, and if found, will be used
191# unless --disable-foo is given
192# * foo="yes" this value will only be set by --enable-foo flag.
193# feature will searched for,
194# if not found, configure exits with error
195#
196# Always add --enable-foo and --disable-foo command line args.
197# Distributions want to ensure that several features are compiled in, and it
198# is impossible without a --enable-foo that exits if a feature is not found.
199
200bluez=""
201brlapi=""
202curl=""
203curses=""
204docs=""
205fdt=""
Vincenzo Maffione58952132013-11-06 11:44:06 +0100206netmap="no"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +0200207pixman=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100208sdl=""
Cole Robinsonee8466d2016-05-06 14:03:07 -0400209sdlabi=""
Meador Inge983eef52012-02-24 14:00:42 +0530210virtfs=""
Jes Sorensen821601e2011-03-16 13:33:36 +0100211vnc="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100212sparse="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100213vde=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100214vnc_sasl=""
215vnc_jpeg=""
216vnc_png=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100217xen=""
Anthony PERARDd5b93dd2011-02-25 16:20:34 +0000218xen_ctrl_version=""
Ian Campbell64a7ad62016-01-15 13:23:44 +0000219xen_pv_domain_build="no"
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000220xen_pci_passthrough=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100221linux_aio=""
Corey Bryant47e98652012-01-26 09:42:26 -0500222cap_ng=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100223attr=""
Avi Kivity4f26f2b2011-11-09 14:44:52 +0200224libattr=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100225xfs=""
226
Bradd41a75a2011-07-26 23:11:26 -0400227vhost_net="no"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000228vhost_scsi="no"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100229vhost_vsock="no"
Bradd41a75a2011-07-26 23:11:26 -0400230kvm="no"
zhanghailiang180fb752016-10-27 14:43:08 +0800231colo="yes"
Michael R. Hines2da776d2013-07-22 10:01:54 -0400232rdma=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100233gprof="no"
234debug_tcg="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100235debug="no"
John Snowb553a042015-11-03 15:43:42 -0500236fortify_source=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100237strip_opt="yes"
Stefan Weil9195b2c2011-10-19 07:07:18 +0200238tcg_interpreter="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100239bigendian="no"
240mingw32="no"
Blue Swirl1d728c32012-05-01 18:45:39 +0000241gcov="no"
242gcov_tool="gcov"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100243EXESUF=""
Fam Zheng17969262014-02-10 14:48:56 +0800244DSOSUF=".so"
245LDFLAGS_SHARED="-shared"
246modules="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100247prefix="/usr/local"
248mandir="\${prefix}/share/man"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300249datadir="\${prefix}/share"
Eduardo Habkost850da182012-04-18 16:55:38 -0300250qemu_docdir="\${prefix}/share/doc/qemu"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100251bindir="\${prefix}/bin"
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300252libdir="\${prefix}/lib"
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400253libexecdir="\${prefix}/libexec"
Alon Levy0f94d6d2011-06-27 11:58:20 +0200254includedir="\${prefix}/include"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100255sysconfdir="\${prefix}/etc"
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300256local_statedir="\${prefix}/var"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100257confsuffix="/qemu"
258slirp="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100259oss_lib=""
260bsd="no"
261linux="no"
262solaris="no"
263profiler="no"
264cocoa="no"
265softmmu="yes"
266linux_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100267bsd_user="no"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100268aix="no"
269blobs="yes"
270pkgversion=""
Avi Kivity40d64442011-11-15 20:12:17 +0200271pie=""
Paolo Bonzini3556c232013-05-10 14:16:40 +0200272qom_cast_debug="yes"
Paolo Bonzinibaf86d62016-01-07 16:55:31 +0300273trace_backends="log"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100274trace_file="trace"
275spice=""
276rbd=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +0200277smartcard=""
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +0100278libusb=""
Hans de Goede69354a82011-07-19 11:04:10 +0200279usb_redir=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +0100280opengl=""
Gerd Hoffmann014cb152015-12-03 12:56:34 +0100281opengl_dmabuf="no"
Liang Li99f2dbd2016-03-08 13:53:16 +0800282avx2_opt="no"
Alon Levy1ece9902011-07-26 12:30:40 +0300283zlib="yes"
Stefan Weilb25c9df2014-04-29 08:21:16 +0200284lzo=""
285snappy=""
Peter Wu6b383c02015-01-06 18:48:14 +0100286bzip2=""
Michael Tokareve8ef31a2013-07-31 14:22:07 +0400287guest_agent=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400288guest_agent_with_vss="no"
Michael Roth50cbebb2015-07-07 18:10:09 -0500289guest_agent_ntddscsi="no"
Yossi Hindin9dacf322015-05-06 14:57:40 +0300290guest_agent_msi=""
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -0400291vss_win32_sdk=""
292win_sdk="no"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +0100293want_tools="yes"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100294libiscsi=""
Peter Lieven6542aa92014-02-03 10:26:13 +0100295libnfs=""
Alex Barcelo519175a2012-02-28 12:25:50 +0100296coroutine=""
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +0200297coroutine_pool=""
Peter Lieven7d992e42016-09-27 11:58:45 +0200298debug_stack_usage="no"
Eduardo Otubof7945732012-08-14 18:44:05 -0300299seccomp=""
Bharata B Raoeb100392012-09-24 14:42:45 +0530300glusterfs=""
Jeff Codyd85fa9e2016-04-05 10:40:09 -0400301glusterfs_xlator_opt="no"
Bharata B Rao0c14fb42013-07-16 21:47:42 +0530302glusterfs_discard="no"
Bharata B Rao7c815372013-12-21 14:51:25 +0530303glusterfs_zerofill="no"
Stefan Hajnoczi6a460ed2015-04-09 14:52:18 +0100304archipelago="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600305gtk=""
Stefan Weil9e04c682014-05-17 16:29:18 +0200306gtkabi=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200307gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100308tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100309gnutls=""
Daniel P. Berrangeb917da42015-10-31 14:39:52 +0900310gnutls_rnd=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100311nettle=""
Daniel P. Berrangefff2f982016-03-29 15:47:51 +0100312nettle_kdf="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100313gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800314gcrypt_hmac="no"
Daniel P. Berrange37788f22015-10-14 13:14:04 +0100315gcrypt_kdf="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100316vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200317virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400318tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100319libssh2=""
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800320numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800321tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200322jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800323replication="yes"
Paolo Bonzini377529c2010-12-23 11:43:50 +0100324
aliguoriac0df512008-12-29 17:14:15 +0000325# parse CC options first
326for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200327 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000328 case "$opt" in
329 --cross-prefix=*) cross_prefix="$optarg"
330 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100331 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000332 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400333 --cxx=*) CXX="$optarg"
334 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100335 --source-path=*) source_path="$optarg"
336 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200337 --cpu=*) cpu="$optarg"
338 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100339 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100340 EXTRA_CFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200341 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100342 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100343 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200344 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100345 --enable-debug-info) debug_info="yes"
346 ;;
347 --disable-debug-info) debug_info="no"
348 ;;
aliguoriac0df512008-12-29 17:14:15 +0000349 esac
350done
aliguoriac0df512008-12-29 17:14:15 +0000351# OS specific
352# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100353# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000354
Peter Maydelle49d0212012-12-07 15:39:13 +0000355# Preferred compiler:
356# ${CC} (if set)
357# ${cross_prefix}gcc (if cross-prefix specified)
358# system compiler
359if test -z "${CC}${cross_prefix}"; then
360 cc="$host_cc"
361else
362 cc="${CC-${cross_prefix}gcc}"
363fi
364
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400365if test -z "${CXX}${cross_prefix}"; then
366 cxx="c++"
367else
368 cxx="${CXX-${cross_prefix}g++}"
369fi
370
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500371ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700372as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700373ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000374cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500375objcopy="${OBJCOPY-${cross_prefix}objcopy}"
376ld="${LD-${cross_prefix}ld}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200377nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500378strip="${STRIP-${cross_prefix}strip}"
379windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300380pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
381query_pkg_config() {
382 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
383}
384pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500385sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000386sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000387
Peter Maydell45d285a2013-10-21 21:03:06 +0100388# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
389ARFLAGS="${ARFLAGS-rv}"
390
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200391# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100392# We use -fwrapv to tell the compiler that we require a C dialect where
393# left shift of signed integers is well defined and has the expected
394# 2s-complement style results. (Both clang and gcc agree that it
395# provides these semantics.)
396QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400397QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100398QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200399QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Paolo Bonzini6b4c3052012-10-24 13:12:00 +0200400QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100401if test "$debug_info" = "yes"; then
402 CFLAGS="-g $CFLAGS"
403 LDFLAGS="-g $LDFLAGS"
404fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200405
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100406# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200407source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100408
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300409# running configure in the source tree?
410# we know that's the case if configure is there.
411if test -f "./configure"; then
412 pwd_is_source_path="y"
413else
414 pwd_is_source_path="n"
415fi
416
aliguoriac0df512008-12-29 17:14:15 +0000417check_define() {
418cat > $TMPC <<EOF
419#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000420#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000421#endif
422int main(void) { return 0; }
423EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200424 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000425}
426
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200427check_include() {
428cat > $TMPC <<EOF
429#include <$1>
430int main(void) { return 0; }
431EOF
432 compile_object
433}
434
John Snow93b25862015-03-25 18:57:37 -0400435write_c_skeleton() {
436 cat > $TMPC <<EOF
437int main(void) { return 0; }
438EOF
439}
440
Peter Maydellbbea4052012-08-14 15:35:34 +0100441if check_define __linux__ ; then
442 targetos="Linux"
443elif check_define _WIN32 ; then
444 targetos='MINGW32'
445elif check_define __OpenBSD__ ; then
446 targetos='OpenBSD'
447elif check_define __sun__ ; then
448 targetos='SunOS'
449elif check_define __HAIKU__ ; then
450 targetos='Haiku'
451else
Stefan Weil89138852016-05-16 15:10:20 +0200452 targetos=$(uname -s)
Peter Maydellbbea4052012-08-14 15:35:34 +0100453fi
454
455# Some host OSes need non-standard checks for which CPU to use.
456# Note that these checks are broken for cross-compilation: if you're
457# cross-compiling to one of these OSes then you'll need to specify
458# the correct CPU with the --cpu option.
459case $targetos in
460Darwin)
461 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
462 # run 64-bit userspace code.
463 # If the user didn't specify a CPU explicitly and the kernel says this is
464 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
465 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
466 cpu="x86_64"
467 fi
468 ;;
469SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200470 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100471 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
472 cpu="x86_64"
473 fi
474esac
475
Juan Quintela2ff6b912009-08-03 14:45:55 +0200476if test ! -z "$cpu" ; then
477 # command line argument
478 :
479elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000480 cpu="i386"
481elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700482 if check_define __ILP32__ ; then
483 cpu="x32"
484 else
485 cpu="x86_64"
486 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000487elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000488 if check_define __arch64__ ; then
489 cpu="sparc64"
490 else
491 cpu="sparc"
492 fi
malcfdf7ed92009-01-14 18:39:52 +0000493elif check_define _ARCH_PPC ; then
494 if check_define _ARCH_PPC64 ; then
495 cpu="ppc64"
496 else
497 cpu="ppc"
498 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200499elif check_define __mips__ ; then
500 cpu="mips"
Aurelien Jarno477ba622010-03-29 02:12:51 +0200501elif check_define __ia64__ ; then
502 cpu="ia64"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200503elif check_define __s390__ ; then
504 if check_define __s390x__ ; then
505 cpu="s390x"
506 else
507 cpu="s390"
508 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100509elif check_define __arm__ ; then
510 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100511elif check_define __aarch64__ ; then
512 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000513else
Stefan Weil89138852016-05-16 15:10:20 +0200514 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000515fi
516
Peter Maydell359bc952011-12-24 13:07:25 +0000517ARCH=
518# Normalise host CPU name and set ARCH.
519# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000520case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700521 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
Juan Quintelaea8f20f2009-08-03 14:46:12 +0200522 cpu="$cpu"
523 ;;
bellard7d132992003-03-06 23:23:54 +0000524 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000525 cpu="i386"
bellard7d132992003-03-06 23:23:54 +0000526 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000527 x86_64|amd64)
528 cpu="x86_64"
529 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100530 armv*b|armv*l|arm)
531 cpu="arm"
bellard7d132992003-03-06 23:23:54 +0000532 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100533 aarch64)
534 cpu="aarch64"
535 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200536 mips*)
537 cpu="mips"
538 ;;
blueswir131422552007-04-16 18:27:06 +0000539 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000540 cpu="sparc"
541 ;;
bellard7d132992003-03-06 23:23:54 +0000542 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000543 # This will result in either an error or falling back to TCI later
544 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000545 ;;
546esac
Peter Maydell359bc952011-12-24 13:07:25 +0000547if test -z "$ARCH"; then
548 ARCH="$cpu"
549fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200550
bellard7d132992003-03-06 23:23:54 +0000551# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200552
Stacey Sonadfc3e92014-06-08 09:57:22 -0700553# host *BSD for user mode
554HOST_VARIANT_DIR=""
555
bellard7d132992003-03-06 23:23:54 +0000556case $targetos in
bellardc326e0a2005-04-23 18:30:28 +0000557CYGWIN*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200558 mingw32="yes"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200559 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200560 audio_possible_drivers="sdl"
561 audio_drv_list="sdl"
bellardc326e0a2005-04-23 18:30:28 +0000562;;
bellard67b915a2004-03-31 23:37:16 +0000563MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200564 mingw32="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200565 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200566 if check_include dsound.h; then
567 audio_drv_list="dsound"
568 else
569 audio_drv_list=""
570 fi
bellard67b915a2004-03-31 23:37:16 +0000571;;
ths5c40d2b2007-06-23 16:03:36 +0000572GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100573 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200574 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200575 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000576;;
bellard7d3505c2004-05-12 19:32:15 +0000577FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200578 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100579 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200580 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200581 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100582 # needed for kinfo_getvmmap(3) in libutil.h
583 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500584 # needed for kinfo_getproc
585 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100586 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700587 HOST_VARIANT_DIR="freebsd"
bellard7d3505c2004-05-12 19:32:15 +0000588;;
blueswir1c5e97232009-03-07 20:06:23 +0000589DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200590 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100591 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200592 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200593 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700594 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000595;;
bellard7d3505c2004-05-12 19:32:15 +0000596NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200597 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100598 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200599 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200600 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200601 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700602 HOST_VARIANT_DIR="netbsd"
bellard7d3505c2004-05-12 19:32:15 +0000603;;
604OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200605 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100606 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400607 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200608 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700609 HOST_VARIANT_DIR="openbsd"
bellard7d3505c2004-05-12 19:32:15 +0000610;;
bellard83fb7ad2004-07-05 21:25:26 +0000611Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200612 bsd="yes"
613 darwin="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800614 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200615 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200616 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200617 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200618 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200619 cocoa="yes"
620 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200621 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200622 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200623 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100624 # Disable attempts to use ObjectiveC features in os/object.h since they
625 # won't work when we're compiling with gcc as a C compiler.
626 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700627 HOST_VARIANT_DIR="darwin"
bellard83fb7ad2004-07-05 21:25:26 +0000628;;
bellardec530c82006-04-25 22:36:06 +0000629SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200630 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100631 make="${MAKE-gmake}"
632 install="${INSTALL-ginstall}"
Blue Swirlfa589482009-10-02 19:38:25 +0000633 ld="gld"
Brade2d88302011-09-02 16:53:28 -0400634 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200635 needs_libsunmath="no"
Stefan Weil89138852016-05-16 15:10:20 +0200636 solarisrev=$(uname -r | cut -f2 -d.)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200637 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
638 if test "$solarisrev" -le 9 ; then
639 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
640 needs_libsunmath="yes"
Juan Quintelaf14bfdf2009-08-03 14:47:11 +0200641 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
642 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
643 LIBS="-lsunmath $LIBS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200644 else
Peter Maydell76ad07a2013-04-08 12:11:26 +0100645 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
646 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
647 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
648 "Studio 11 can be downloaded from www.sun.com."
Juan Quintela0dbfc672009-08-03 14:46:13 +0200649 fi
thsef18c882007-09-16 22:12:39 +0000650 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200651 fi
652 if test -f /usr/include/sys/soundcard.h ; then
653 audio_drv_list="oss"
654 fi
655 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000656# needed for CMSG_ macros in sys/socket.h
657 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
658# needed for TIOCWIN* defines in termios.h
659 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200660 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200661 solarisnetlibs="-lsocket -lnsl -lresolv"
662 LIBS="$solarisnetlibs $LIBS"
663 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000664;;
malcb29fe3e2008-11-18 01:42:22 +0000665AIX)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200666 aix="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100667 make="${MAKE-gmake}"
malcb29fe3e2008-11-18 01:42:22 +0000668;;
Andreas Färber179cf402010-09-20 00:50:43 +0200669Haiku)
670 haiku="yes"
671 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
672 LIBS="-lposix_error_mapper -lnetwork $LIBS"
673;;
bellard1d14ffa2005-10-30 18:58:22 +0000674*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200675 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200676 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200677 linux="yes"
678 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200679 kvm="yes"
680 vhost_net="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000681 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100682 vhost_vsock="yes"
Alexey Kardashevskiya5851402013-05-29 23:30:43 +1000683 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
bellardfb065182004-11-09 23:09:44 +0000684;;
bellard7d132992003-03-06 23:23:54 +0000685esac
686
bellard7d3505c2004-05-12 19:32:15 +0000687if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000688 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200689 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000690 fi
bellard7d3505c2004-05-12 19:32:15 +0000691fi
692
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100693: ${make=${MAKE-make}}
694: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100695: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400696: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100697
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100698# Default objcc to clang if available, otherwise use CC
699if has clang; then
700 objcc=clang
701else
702 objcc="$cc"
703fi
704
Juan Quintela3457a3f2009-08-03 14:46:07 +0200705if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200706 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800707 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200708 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100709 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
710 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100711 # MinGW needs -mthreads for TLS and macro _MT.
712 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100713 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400714 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100715 if compile_prog "" "-liberty" ; then
716 LIBS="-liberty $LIBS"
717 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200718 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200719 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300720 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300721 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200722 bindir="\${prefix}"
723 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200724 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200725 confsuffix=""
Marc-André Lureau259434b2015-06-30 16:37:13 +0200726 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200727fi
728
Anthony Liguori487fefd2009-06-11 13:28:25 -0500729werror=""
bellard85aa5182007-11-11 20:17:03 +0000730
bellard7d132992003-03-06 23:23:54 +0000731for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200732 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000733 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000734 --help|-h) show_help=yes
735 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400736 --version|-V) exec cat $source_path/VERSION
737 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000738 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000739 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000740 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000741 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100742 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000743 ;;
aliguoriac0df512008-12-29 17:14:15 +0000744 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000745 ;;
aliguoriac0df512008-12-29 17:14:15 +0000746 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000747 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000748 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000749 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400750 --cxx=*)
751 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200752 --iasl=*) iasl="$optarg"
753 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100754 --objcc=*) objcc="$optarg"
755 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000756 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000757 ;;
pbrook6a882642006-04-17 13:57:12 +0000758 --install=*) install="$optarg"
759 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000760 --python=*) python="$optarg"
761 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000762 --gcov=*) gcov_tool="$optarg"
763 ;;
Brade2d88302011-09-02 16:53:28 -0400764 --smbd=*) smbd="$optarg"
765 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200766 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000767 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200768 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000769 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100770 --enable-debug-info)
771 ;;
772 --disable-debug-info)
773 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800774 --enable-modules)
775 modules="yes"
776 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000777 --disable-modules)
778 modules="no"
779 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200780 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000781 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000782 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000783 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +0200784 --enable-trace-backends=*) trace_backends="$optarg"
785 ;;
786 # XXX: backwards compatibility
787 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100788 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100789 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100790 ;;
bellard7d132992003-03-06 23:23:54 +0000791 --enable-gprof) gprof="yes"
792 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000793 --enable-gcov) gcov="yes"
794 ;;
Loïc Minier79427692010-01-31 12:23:45 +0100795 --static)
796 static="yes"
797 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300798 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +0000799 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200800 --mandir=*) mandir="$optarg"
801 ;;
802 --bindir=*) bindir="$optarg"
803 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300804 --libdir=*) libdir="$optarg"
805 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400806 --libexecdir=*) libexecdir="$optarg"
807 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +0200808 --includedir=*) includedir="$optarg"
809 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300810 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200811 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -0300812 --with-confsuffix=*) confsuffix="$optarg"
813 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -0300814 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200815 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +0100816 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -0600817 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300818 --localstatedir=*) local_statedir="$optarg"
819 ;;
820 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +0400821 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
822 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
823 # These switches are silently ignored, for compatibility with
824 # autoconf-generated configure scripts. This allows QEMU's
825 # configure to be used by RPM and similar macros that set
826 # lots of directory switches by default.
827 ;;
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +0200828 --with-system-pixman) pixman="system"
829 ;;
830 --without-system-pixman) pixman="internal"
831 ;;
Robert Schiele74880fe2012-12-04 16:58:08 +0100832 --without-pixman) pixman="none"
833 ;;
bellard97a847b2003-08-10 21:36:04 +0000834 --disable-sdl) sdl="no"
835 ;;
Juan Quintelac4198152009-08-12 18:29:53 +0200836 --enable-sdl) sdl="yes"
837 ;;
Dave Airlie47c03742013-12-10 14:05:51 +1000838 --with-sdlabi=*) sdlabi="$optarg"
839 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +0200840 --disable-qom-cast-debug) qom_cast_debug="no"
841 ;;
842 --enable-qom-cast-debug) qom_cast_debug="yes"
843 ;;
Meador Inge983eef52012-02-24 14:00:42 +0530844 --disable-virtfs) virtfs="no"
845 ;;
846 --enable-virtfs) virtfs="yes"
847 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +0100848 --disable-vnc) vnc="no"
849 ;;
850 --enable-vnc) vnc="yes"
851 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +0000852 --oss-lib=*) oss_lib="$optarg"
853 ;;
malc0c58ac12008-06-25 21:04:05 +0000854 --audio-drv-list=*) audio_drv_list="$optarg"
855 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200856 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800857 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200858 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +0100859 ;;
aurel32f8393942009-04-13 18:45:38 +0000860 --enable-debug-tcg) debug_tcg="yes"
861 ;;
862 --disable-debug-tcg) debug_tcg="no"
863 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +0100864 --enable-debug)
865 # Enable debugging options that aren't excessively noisy
866 debug_tcg="yes"
867 debug="yes"
868 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -0500869 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +0100870 ;;
aliguori03b4fe72008-10-07 19:16:17 +0000871 --enable-sparse) sparse="yes"
872 ;;
873 --disable-sparse) sparse="no"
874 ;;
aliguori1625af82009-04-05 17:41:02 +0000875 --disable-strip) strip_opt="no"
876 ;;
aliguori2f9606b2009-03-06 20:27:28 +0000877 --disable-vnc-sasl) vnc_sasl="no"
878 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +0200879 --enable-vnc-sasl) vnc_sasl="yes"
880 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +0200881 --disable-vnc-jpeg) vnc_jpeg="no"
882 ;;
883 --enable-vnc-jpeg) vnc_jpeg="yes"
884 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +0200885 --disable-vnc-png) vnc_png="no"
886 ;;
887 --enable-vnc-png) vnc_png="yes"
888 ;;
bellard443f1372004-06-04 11:13:20 +0000889 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +0000890 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +0000891 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +0000892 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +0200893 --enable-vde) vde="yes"
894 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +0100895 --disable-netmap) netmap="no"
896 ;;
897 --enable-netmap) netmap="yes"
898 ;;
aliguorie37630c2009-04-22 15:19:10 +0000899 --disable-xen) xen="no"
900 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +0200901 --enable-xen) xen="yes"
902 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000903 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
904 ;;
905 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
906 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +0000907 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
908 ;;
909 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
910 ;;
aurel322e4d9fb2008-04-08 06:01:02 +0000911 --disable-brlapi) brlapi="no"
912 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +0200913 --enable-brlapi) brlapi="yes"
914 ;;
balrogfb599c92008-09-28 23:49:55 +0000915 --disable-bluez) bluez="no"
916 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +0200917 --enable-bluez) bluez="yes"
918 ;;
aliguori7ba1e612008-11-05 16:04:33 +0000919 --disable-kvm) kvm="no"
920 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +0200921 --enable-kvm) kvm="yes"
922 ;;
zhanghailiang180fb752016-10-27 14:43:08 +0800923 --disable-colo) colo="no"
924 ;;
925 --enable-colo) colo="yes"
926 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +0200927 --disable-tcg-interpreter) tcg_interpreter="no"
928 ;;
929 --enable-tcg-interpreter) tcg_interpreter="yes"
930 ;;
Corey Bryant47e98652012-01-26 09:42:26 -0500931 --disable-cap-ng) cap_ng="no"
932 ;;
933 --enable-cap-ng) cap_ng="yes"
934 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +0100935 --disable-spice) spice="no"
936 ;;
937 --enable-spice) spice="yes"
938 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100939 --disable-libiscsi) libiscsi="no"
940 ;;
941 --enable-libiscsi) libiscsi="yes"
942 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +0100943 --disable-libnfs) libnfs="no"
944 ;;
945 --enable-libnfs) libnfs="yes"
946 ;;
bellard05c2a3e2006-02-08 22:39:17 +0000947 --enable-profiler) profiler="yes"
948 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +0400949 --disable-cocoa) cocoa="no"
950 ;;
malcc2de5c92008-06-28 19:13:06 +0000951 --enable-cocoa)
952 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +0200953 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +0000954 ;;
pbrookcad25d62006-03-19 16:31:11 +0000955 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +0000956 ;;
pbrookcad25d62006-03-19 16:31:11 +0000957 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +0000958 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -1000959 --disable-user)
960 linux_user="no" ;
961 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -1000962 ;;
963 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +0000964 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +0000965 ;;
ths831b7822007-01-18 20:06:33 +0000966 --enable-linux-user) linux_user="yes"
967 ;;
blueswir184778502008-10-26 20:33:16 +0000968 --disable-bsd-user) bsd_user="no"
969 ;;
970 --enable-bsd-user) bsd_user="yes"
971 ;;
Avi Kivity40d64442011-11-15 20:12:17 +0200972 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +0300973 ;;
Avi Kivity40d64442011-11-15 20:12:17 +0200974 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +0300975 ;;
bellard85aa5182007-11-11 20:17:03 +0000976 --enable-werror) werror="yes"
977 ;;
978 --disable-werror) werror="no"
979 ;;
Steven Noonan63678e12014-03-28 17:19:02 +0100980 --enable-stack-protector) stack_protector="yes"
981 ;;
982 --disable-stack-protector) stack_protector="no"
983 ;;
balrog4d3b6f62008-02-10 16:33:14 +0000984 --disable-curses) curses="no"
985 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +0200986 --enable-curses) curses="yes"
987 ;;
Alexander Graf769ce762009-05-11 17:41:42 +0200988 --disable-curl) curl="no"
989 ;;
Juan Quintela788c8192009-08-12 18:29:47 +0200990 --enable-curl) curl="yes"
991 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +0200992 --disable-fdt) fdt="no"
993 ;;
994 --enable-fdt) fdt="yes"
995 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +0200996 --disable-linux-aio) linux_aio="no"
997 ;;
998 --enable-linux-aio) linux_aio="yes"
999 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001000 --disable-attr) attr="no"
1001 ;;
1002 --enable-attr) attr="yes"
1003 ;;
ths77755342008-11-27 15:45:16 +00001004 --disable-blobs) blobs="no"
1005 ;;
pbrook4a19f1e2009-04-07 23:17:49 +00001006 --with-pkgversion=*) pkgversion=" ($optarg)"
1007 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001008 --with-coroutine=*) coroutine="$optarg"
1009 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001010 --disable-coroutine-pool) coroutine_pool="no"
1011 ;;
1012 --enable-coroutine-pool) coroutine_pool="yes"
1013 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001014 --enable-debug-stack-usage) debug_stack_usage="yes"
1015 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001016 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001017 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001018 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001019 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001020 --disable-vhost-net) vhost_net="no"
1021 ;;
1022 --enable-vhost-net) vhost_net="yes"
1023 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001024 --disable-vhost-scsi) vhost_scsi="no"
1025 ;;
1026 --enable-vhost-scsi) vhost_scsi="yes"
1027 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001028 --disable-vhost-vsock) vhost_vsock="no"
1029 ;;
1030 --enable-vhost-vsock) vhost_vsock="yes"
1031 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001032 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001033 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001034 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001035 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001036 --disable-rbd) rbd="no"
1037 ;;
1038 --enable-rbd) rbd="yes"
1039 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001040 --disable-xfsctl) xfs="no"
1041 ;;
1042 --enable-xfsctl) xfs="yes"
1043 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001044 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001045 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001046 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001047 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001048 --disable-libusb) libusb="no"
1049 ;;
1050 --enable-libusb) libusb="yes"
1051 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001052 --disable-usb-redir) usb_redir="no"
1053 ;;
1054 --enable-usb-redir) usb_redir="yes"
1055 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001056 --disable-zlib-test) zlib="no"
1057 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001058 --disable-lzo) lzo="no"
1059 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001060 --enable-lzo) lzo="yes"
1061 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001062 --disable-snappy) snappy="no"
1063 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001064 --enable-snappy) snappy="yes"
1065 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001066 --disable-bzip2) bzip2="no"
1067 ;;
1068 --enable-bzip2) bzip2="yes"
1069 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001070 --enable-guest-agent) guest_agent="yes"
1071 ;;
1072 --disable-guest-agent) guest_agent="no"
1073 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001074 --enable-guest-agent-msi) guest_agent_msi="yes"
1075 ;;
1076 --disable-guest-agent-msi) guest_agent_msi="no"
1077 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001078 --with-vss-sdk) vss_win32_sdk=""
1079 ;;
1080 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1081 ;;
1082 --without-vss-sdk) vss_win32_sdk="no"
1083 ;;
1084 --with-win-sdk) win_sdk=""
1085 ;;
1086 --with-win-sdk=*) win_sdk="$optarg"
1087 ;;
1088 --without-win-sdk) win_sdk="no"
1089 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001090 --enable-tools) want_tools="yes"
1091 ;;
1092 --disable-tools) want_tools="no"
1093 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001094 --enable-seccomp) seccomp="yes"
1095 ;;
1096 --disable-seccomp) seccomp="no"
1097 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301098 --disable-glusterfs) glusterfs="no"
1099 ;;
1100 --enable-glusterfs) glusterfs="yes"
1101 ;;
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03001102 --disable-archipelago) archipelago="no"
1103 ;;
1104 --enable-archipelago) archipelago="yes"
1105 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001106 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1107 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001108 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001109 --enable-vhdx|--disable-vhdx)
1110 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1111 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001112 --enable-uuid|--disable-uuid)
1113 echo "$0: $opt is obsolete, UUID support is always built" >&2
1114 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001115 --disable-gtk) gtk="no"
1116 ;;
1117 --enable-gtk) gtk="yes"
1118 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001119 --tls-priority=*) tls_priority="$optarg"
1120 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001121 --disable-gnutls) gnutls="no"
1122 ;;
1123 --enable-gnutls) gnutls="yes"
1124 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001125 --disable-nettle) nettle="no"
1126 ;;
1127 --enable-nettle) nettle="yes"
1128 ;;
1129 --disable-gcrypt) gcrypt="no"
1130 ;;
1131 --enable-gcrypt) gcrypt="yes"
1132 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001133 --enable-rdma) rdma="yes"
1134 ;;
1135 --disable-rdma) rdma="no"
1136 ;;
Daniel P. Berrange528de902013-02-25 15:20:44 +00001137 --with-gtkabi=*) gtkabi="$optarg"
1138 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001139 --disable-vte) vte="no"
1140 ;;
1141 --enable-vte) vte="yes"
1142 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001143 --disable-virglrenderer) virglrenderer="no"
1144 ;;
1145 --enable-virglrenderer) virglrenderer="yes"
1146 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001147 --disable-tpm) tpm="no"
1148 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001149 --enable-tpm) tpm="yes"
1150 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001151 --disable-libssh2) libssh2="no"
1152 ;;
1153 --enable-libssh2) libssh2="yes"
1154 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001155 --disable-numa) numa="no"
1156 ;;
1157 --enable-numa) numa="yes"
1158 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001159 --disable-tcmalloc) tcmalloc="no"
1160 ;;
1161 --enable-tcmalloc) tcmalloc="yes"
1162 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001163 --disable-jemalloc) jemalloc="no"
1164 ;;
1165 --enable-jemalloc) jemalloc="yes"
1166 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001167 --disable-replication) replication="no"
1168 ;;
1169 --enable-replication) replication="yes"
1170 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001171 *)
1172 echo "ERROR: unknown option $opt"
1173 echo "Try '$0 --help' for more information"
1174 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001175 ;;
bellard7d132992003-03-06 23:23:54 +00001176 esac
1177done
1178
Stefan Weilf6f0b7d2013-12-18 22:30:26 +01001179if ! has $python; then
1180 error_exit "Python not found. Use --python=/path/to/python"
1181fi
1182
1183# Note that if the Python conditional here evaluates True we will exit
1184# with status 1 which is a shell 'false' value.
Markus Armbrusterfec21032015-09-04 21:53:03 +02001185if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1186 error_exit "Cannot use '$python', Python 2.6 or later is required." \
Stefan Weilf6f0b7d2013-12-18 22:30:26 +01001187 "Note that Python 3 or later is not yet supported." \
1188 "Use --python=/path/to/python to specify a supported Python."
1189fi
1190
Markus Armbrusterfec21032015-09-04 21:53:03 +02001191# Suppress writing compiled files
1192python="$python -B"
Stefan Weilf6f0b7d2013-12-18 22:30:26 +01001193
bellard40293e52008-01-31 11:32:10 +00001194case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001195 ppc)
1196 CPU_CFLAGS="-m32"
1197 LDFLAGS="-m32 $LDFLAGS"
1198 ;;
1199 ppc64)
1200 CPU_CFLAGS="-m64"
1201 LDFLAGS="-m64 $LDFLAGS"
1202 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001203 sparc)
Juan Quintelaed968ff2009-08-03 14:46:11 +02001204 LDFLAGS="-m32 $LDFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001205 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
blueswir131422552007-04-16 18:27:06 +00001206 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001207 sparc64)
Juan Quintelaed968ff2009-08-03 14:46:11 +02001208 LDFLAGS="-m64 $LDFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001209 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
blueswir131422552007-04-16 18:27:06 +00001210 ;;
ths76d83bd2007-11-18 21:22:10 +00001211 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001212 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001213 LDFLAGS="-m31 $LDFLAGS"
1214 ;;
1215 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001216 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001217 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001218 ;;
bellard40293e52008-01-31 11:32:10 +00001219 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001220 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001221 LDFLAGS="-m32 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001222 cc_i386='$(CC) -m32'
bellard40293e52008-01-31 11:32:10 +00001223 ;;
1224 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001225 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1226 # If we truly care, we should simply detect this case at
1227 # runtime and generate the fallback to serial emulation.
1228 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001229 LDFLAGS="-m64 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001230 cc_i386='$(CC) -m32'
Paul Brook379f6692009-07-17 12:48:08 +01001231 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001232 x32)
1233 CPU_CFLAGS="-mx32"
1234 LDFLAGS="-mx32 $LDFLAGS"
1235 cc_i386='$(CC) -m32'
1236 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001237 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001238esac
1239
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001240QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1241EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1242
Peter Maydellaffc88c2016-06-13 11:32:24 +01001243# For user-mode emulation the host arch has to be one we explicitly
1244# support, even if we're using TCI.
1245if [ "$ARCH" = "unknown" ]; then
1246 bsd_user="no"
1247 linux_user="no"
1248fi
1249
Peter Maydell60e0df22011-05-03 14:50:13 +01001250default_target_list=""
1251
Peter Maydell6e92f822013-05-20 16:16:15 +01001252mak_wilds=""
1253
1254if [ "$softmmu" = "yes" ]; then
1255 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001256fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001257if [ "$linux_user" = "yes" ]; then
1258 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001259fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001260if [ "$bsd_user" = "yes" ]; then
1261 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001262fi
1263
Peter Maydell6e92f822013-05-20 16:16:15 +01001264for config in $mak_wilds; do
1265 default_target_list="${default_target_list} $(basename "$config" .mak)"
1266done
1267
pbrookaf5db582006-04-08 14:26:41 +00001268if test x"$show_help" = x"yes" ; then
1269cat << EOF
1270
1271Usage: configure [options]
1272Options: [defaults in brackets after descriptions]
1273
Stefan Weil08fb77e2013-12-18 22:09:39 +01001274Standard options:
1275 --help print this message
1276 --prefix=PREFIX install in PREFIX [$prefix]
1277 --interp-prefix=PREFIX where to find shared libraries, etc.
1278 use %M for cpu name [$interp_prefix]
1279 --target-list=LIST set target list (default: build everything)
1280$(echo Available targets: $default_target_list | \
1281 fold -s -w 53 | sed -e 's/^/ /')
1282
1283Advanced options (experts only):
1284 --source-path=PATH path of source code [$source_path]
1285 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1286 --cc=CC use C compiler CC [$cc]
1287 --iasl=IASL use ACPI compiler IASL [$iasl]
1288 --host-cc=CC use C compiler CC [$host_cc] for code run at
1289 build time
1290 --cxx=CXX use C++ compiler CXX [$cxx]
1291 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1292 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1293 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1294 --make=MAKE use specified make [$make]
1295 --install=INSTALL use specified install [$install]
1296 --python=PYTHON use specified python [$python]
1297 --smbd=SMBD use specified smbd [$smbd]
1298 --static enable static build [$static]
1299 --mandir=PATH install man pages in PATH
1300 --datadir=PATH install firmware in PATH$confsuffix
1301 --docdir=PATH install documentation in PATH$confsuffix
1302 --bindir=PATH install binaries in PATH
1303 --libdir=PATH install libraries in PATH
1304 --sysconfdir=PATH install config in PATH$confsuffix
1305 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Fam Zhenge26110c2014-02-10 14:48:57 +08001306 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001307 --enable-debug enable common debug build options
Stefan Weil08fb77e2013-12-18 22:09:39 +01001308 --disable-strip disable stripping binaries
1309 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001310 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001311 --audio-drv-list=LIST set audio drivers list:
1312 Available drivers: $audio_possible_drivers
1313 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1314 --block-drv-rw-whitelist=L
1315 set block driver read-write whitelist
1316 (affects only QEMU, not qemu-img)
1317 --block-drv-ro-whitelist=L
1318 set block driver read-only whitelist
1319 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001320 --enable-trace-backends=B Set trace backend
Stefan Weil08fb77e2013-12-18 22:09:39 +01001321 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1322 --with-trace-file=NAME Full PATH,NAME of file to store traces
1323 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001324 --disable-slirp disable SLIRP userspace network connectivity
1325 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1326 --oss-lib path to OSS library
1327 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001328 --with-coroutine=BACKEND coroutine backend. Supported options:
1329 gthread, ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001330 --enable-gcov enable test coverage analysis with gcov
1331 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001332 --disable-blobs disable installing provided firmware blobs
1333 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1334 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001335 --tls-priority default TLS protocol/cipher priority string
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001336
1337Optional features, enabled with --enable-FEATURE and
1338disabled with --disable-FEATURE, default is enabled if available:
1339
1340 system all system emulation targets
1341 user supported user emulation targets
1342 linux-user all linux usermode emulation targets
1343 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001344 docs build documentation
1345 guest-agent build the QEMU Guest Agent
1346 guest-agent-msi build guest agent Windows MSI installation package
1347 pie Position Independent Executables
1348 modules modules support
1349 debug-tcg TCG debugging (default is disabled)
1350 debug-info debugging information
1351 sparse sparse checker
1352
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001353 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001354 nettle nettle cryptography support
1355 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001356 sdl SDL UI
1357 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1358 gtk gtk UI
1359 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1360 vte vte support for the gtk UI
1361 curses curses UI
1362 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001363 vnc-sasl SASL encryption for VNC server
1364 vnc-jpeg JPEG lossy compression for VNC server
1365 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001366 cocoa Cocoa UI (Mac OS X only)
1367 virtfs VirtFS
1368 xen xen backend driver support
1369 xen-pci-passthrough
1370 brlapi BrlAPI (Braile)
1371 curl curl connectivity
1372 fdt fdt device tree
1373 bluez bluez stack connectivity
1374 kvm KVM acceleration support
zhanghailiang180fb752016-10-27 14:43:08 +08001375 colo COarse-grain LOck-stepping VM for Non-stop Service
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001376 rdma RDMA-based migration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001377 vde support for vde network
1378 netmap support for netmap network
1379 linux-aio Linux AIO support
1380 cap-ng libcap-ng support
1381 attr attr and xattr support
1382 vhost-net vhost-net acceleration support
1383 spice spice
1384 rbd rados block device (rbd)
1385 libiscsi iscsi support
1386 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001387 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001388 libusb libusb (for usb passthrough)
1389 usb-redir usb network redirection support
1390 lzo support of lzo compression library
1391 snappy support of snappy compression library
1392 bzip2 support of bzip2 compression library
1393 (for reading bzip2-compressed dmg images)
1394 seccomp seccomp support
1395 coroutine-pool coroutine freelist (better performance)
1396 glusterfs GlusterFS backend
1397 archipelago Archipelago backend
1398 tpm TPM support
1399 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001400 numa libnuma support
1401 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001402 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001403 replication replication support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001404
1405NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001406EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001407exit 0
pbrookaf5db582006-04-08 14:26:41 +00001408fi
1409
Peter Maydell359bc952011-12-24 13:07:25 +00001410# Now we have handled --enable-tcg-interpreter and know we're not just
1411# printing the help message, bail out if the host CPU isn't supported.
1412if test "$ARCH" = "unknown"; then
1413 if test "$tcg_interpreter" = "yes" ; then
1414 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001415 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001416 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001417 fi
1418fi
1419
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001420# Consult white-list to determine whether to enable werror
1421# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001422if test -z "$werror" ; then
1423 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001424 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001425 werror="yes"
1426 else
1427 werror="no"
1428 fi
1429fi
1430
Paolo Bonzini8d050952010-12-23 11:43:52 +01001431# check that the C compiler works.
John Snow93b25862015-03-25 18:57:37 -04001432write_c_skeleton;
Paolo Bonzini8d050952010-12-23 11:43:52 +01001433if compile_object ; then
1434 : C compiler works ok
1435else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001436 error_exit "\"$cc\" either does not exist or does not work"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001437fi
Peter Maydell0ef74c72015-11-24 14:55:46 +00001438if ! compile_prog ; then
1439 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1440fi
Paolo Bonzini8d050952010-12-23 11:43:52 +01001441
Peter Maydell98b21dc2014-02-20 15:10:16 +00001442# Check that the C++ compiler exists and works with the C compiler
1443if has $cxx; then
1444 cat > $TMPC <<EOF
1445int c_function(void);
1446int main(void) { return c_function(); }
1447EOF
1448
1449 compile_object
1450
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001451 cat > $TMPCXX <<EOF
Peter Maydell98b21dc2014-02-20 15:10:16 +00001452extern "C" {
1453 int c_function(void);
1454}
1455int c_function(void) { return 42; }
1456EOF
1457
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001458 update_cxxflags
1459
1460 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
Peter Maydell98b21dc2014-02-20 15:10:16 +00001461 # C++ compiler $cxx works ok with C compiler $cc
1462 :
1463 else
1464 echo "C++ compiler $cxx does not work with C compiler $cc"
1465 echo "Disabling C++ specific optional code"
1466 cxx=
1467 fi
1468else
1469 echo "No C++ compiler available; disabling C++ specific optional code"
1470 cxx=
1471fi
1472
Paolo Bonzini8d050952010-12-23 11:43:52 +01001473gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1474gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1475gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001476gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Peter Maydellc1556a82012-10-14 21:00:39 +01001477gcc_flags="-Wno-initializer-overrides $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001478gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001479# Note that we do not add -Werror to gcc_flags here, because that would
1480# enable it for all configure tests. If a configure test failed due
1481# to -Werror this would just silently disable some features,
1482# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001483
1484cc_has_warning_flag() {
1485 write_c_skeleton;
1486
Peter Maydella1d29d62012-10-27 22:19:07 +01001487 # Use the positive sense of the flag when testing for -Wno-wombat
1488 # support (gcc will happily accept the -Wno- form of unknown
1489 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001490 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1491 compile_prog "-Werror $optflag" ""
1492}
1493
1494for flag in $gcc_flags; do
1495 if cc_has_warning_flag $flag ; then
1496 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001497 fi
1498done
1499
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001500if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001501 cat > $TMPC << EOF
1502int main(int argc, char *argv[])
1503{
1504 char arr[64], *p = arr, *c = argv[0];
1505 while (*c) {
1506 *p++ = *c++;
1507 }
1508 return 0;
1509}
1510EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001511 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001512 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001513 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001514 # We need to check both a compile and a link, since some compiler
1515 # setups fail only on a .c->.o compile and some only at link time
1516 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1517 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001518 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001519 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001520 break
1521 fi
1522 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001523 if test "$stack_protector" = yes; then
1524 if test $sp_on = 0; then
1525 error_exit "Stack protector not supported"
1526 fi
1527 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001528fi
1529
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001530# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1531# large functions that use global variables. The bug is in all releases of
1532# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1533# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1534cat > $TMPC << EOF
1535#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1536int main(void) { return 0; }
1537#else
1538#error No bug in this compiler.
1539#endif
1540EOF
1541if compile_prog "-Werror -fno-gcse" "" ; then
1542 TRANSLATE_OPT_CFLAGS=-fno-gcse
1543fi
1544
Avi Kivity40d64442011-11-15 20:12:17 +02001545if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001546 if test "$modules" = "yes" ; then
1547 error_exit "static and modules are mutually incompatible"
1548 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001549 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001550 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001551 else
1552 pie="no"
1553 fi
1554fi
1555
Emilio G. Cota768b7852015-04-29 13:09:02 +02001556# Unconditional check for compiler __thread support
1557 cat > $TMPC << EOF
1558static __thread int tls_var;
1559int main(void) { return tls_var; }
1560EOF
1561
1562if ! compile_prog "-Werror" "" ; then
1563 error_exit "Your compiler does not support the __thread specifier for " \
1564 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1565fi
1566
Avi Kivity40d64442011-11-15 20:12:17 +02001567if test "$pie" = ""; then
1568 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001569 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001570 ;;
1571 *)
1572 pie="no"
1573 ;;
1574 esac
1575fi
1576
1577if test "$pie" != "no" ; then
1578 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001579
1580#ifdef __linux__
1581# define THREAD __thread
1582#else
1583# define THREAD
1584#endif
1585
1586static THREAD int tls_var;
1587
1588int main(void) { return tls_var; }
1589
Avi Kivity40d64442011-11-15 20:12:17 +02001590EOF
1591 if compile_prog "-fPIE -DPIE" "-pie"; then
1592 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1593 LDFLAGS="-pie $LDFLAGS"
1594 pie="yes"
1595 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1596 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1597 fi
1598 else
1599 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001600 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001601 else
1602 echo "Disabling PIE due to missing toolchain support"
1603 pie="no"
1604 fi
1605 fi
Brad46eef332013-12-10 19:49:08 -05001606
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001607 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001608 CFLAGS_NOPIE="-fno-pie"
1609 LDFLAGS_NOPIE="-nopie"
1610 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001611fi
1612
Paolo Bonzini09dada42013-04-17 16:26:47 +02001613##########################################
1614# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1615# use i686 as default anyway, but for those that don't, an explicit
1616# specification is necessary
1617
1618if test "$cpu" = "i386"; then
1619 cat > $TMPC << EOF
1620static int sfaa(int *ptr)
1621{
1622 return __sync_fetch_and_and(ptr, 0);
1623}
1624
1625int main(void)
1626{
1627 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001628 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001629 sfaa(&val);
1630 return val;
1631}
1632EOF
1633 if ! compile_prog "" "" ; then
1634 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1635 fi
1636fi
1637
1638#########################################
bellardec530c82006-04-25 22:36:06 +00001639# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001640
bellardec530c82006-04-25 22:36:06 +00001641if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001642 if has $install; then
1643 :
1644 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001645 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1646 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1647 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001648 fi
Stefan Weil89138852016-05-16 15:10:20 +02001649 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001650 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1651 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1652 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001653 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001654 if has ar; then
1655 :
1656 else
bellardec530c82006-04-25 22:36:06 +00001657 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001658 error_exit "No path includes ar" \
1659 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001660 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001661 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001662 fi
ths5fafdf22007-09-16 21:08:06 +00001663fi
bellardec530c82006-04-25 22:36:06 +00001664
Stefan Weilafb63eb2012-09-26 22:04:38 +02001665if test -z "${target_list+xxx}" ; then
Anthony Liguori121afa92012-09-14 08:17:03 -05001666 target_list="$default_target_list"
1667else
Stefan Weil89138852016-05-16 15:10:20 +02001668 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
bellard5327cf42005-01-10 23:18:50 +00001669fi
Peter Maydell25b48332013-05-20 16:16:16 +01001670
1671# Check that we recognised the target name; this allows a more
1672# friendly error message than if we let it fall through.
1673for target in $target_list; do
1674 case " $default_target_list " in
1675 *" $target "*)
1676 ;;
1677 *)
1678 error_exit "Unknown target name '$target'"
1679 ;;
1680 esac
1681done
1682
Paolo Bonzinif55fe272010-05-26 16:08:17 +02001683# see if system emulation was really requested
1684case " $target_list " in
1685 *"-softmmu "*) softmmu=yes
1686 ;;
1687 *) softmmu=no
1688 ;;
1689esac
bellard5327cf42005-01-10 23:18:50 +00001690
Juan Quintela249247c2009-08-12 18:20:25 +02001691feature_not_found() {
1692 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11001693 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02001694
Peter Maydell76ad07a2013-04-08 12:11:26 +01001695 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11001696 "configure was not able to find it." \
1697 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02001698}
1699
bellard7d132992003-03-06 23:23:54 +00001700# ---
1701# big/little endian test
1702cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04001703short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1704short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1705extern int foo(short *, short *);
1706int main(int argc, char *argv[]) {
1707 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00001708}
1709EOF
1710
Mike Frysinger61cc9192013-06-30 23:30:18 -04001711if compile_object ; then
1712 if grep -q BiGeNdIaN $TMPO ; then
1713 bigendian="yes"
1714 elif grep -q LiTtLeEnDiAn $TMPO ; then
1715 bigendian="no"
1716 else
1717 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01001718 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04001719else
1720 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00001721fi
1722
Juan Quintelab0a47e72009-08-12 18:29:49 +02001723##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01001724# cocoa implies not SDL or GTK
1725# (the cocoa UI code currently assumes it is always the active UI
1726# and doesn't interact well with other UI frontend code)
1727if test "$cocoa" = "yes"; then
1728 if test "$sdl" = "yes"; then
1729 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1730 fi
1731 if test "$gtk" = "yes"; then
1732 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1733 fi
1734 gtk=no
1735 sdl=no
1736fi
1737
Eric Blake6b39b062016-10-11 10:46:23 -05001738# Some versions of Mac OS X incorrectly define SIZE_MAX
1739cat > $TMPC << EOF
1740#include <stdint.h>
1741#include <stdio.h>
1742int main(int argc, char *argv[]) {
1743 return printf("%zu", SIZE_MAX);
1744}
1745EOF
1746have_broken_size_max=no
1747if ! compile_object -Werror ; then
1748 have_broken_size_max=yes
1749fi
1750
Peter Maydella30878e2015-08-14 16:10:52 +01001751##########################################
Gonglei015a33b2014-07-01 20:58:08 +08001752# L2TPV3 probe
1753
1754cat > $TMPC <<EOF
1755#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04001756#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08001757int main(void) { return sizeof(struct mmsghdr); }
1758EOF
1759if compile_prog "" "" ; then
1760 l2tpv3=yes
1761else
1762 l2tpv3=no
1763fi
1764
1765##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01001766# MinGW / Mingw-w64 localtime_r/gmtime_r check
1767
1768if test "$mingw32" = "yes"; then
1769 # Some versions of MinGW / Mingw-w64 lack localtime_r
1770 # and gmtime_r entirely.
1771 #
1772 # Some versions of Mingw-w64 define a macro for
1773 # localtime_r/gmtime_r.
1774 #
1775 # Some versions of Mingw-w64 will define functions
1776 # for localtime_r/gmtime_r, but only if you have
1777 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1778 # though, unistd.h and pthread.h both define
1779 # that for you.
1780 #
1781 # So this #undef localtime_r and #include <unistd.h>
1782 # are not in fact redundant.
1783cat > $TMPC << EOF
1784#include <unistd.h>
1785#include <time.h>
1786#undef localtime_r
1787int main(void) { localtime_r(NULL, NULL); return 0; }
1788EOF
1789 if compile_prog "" "" ; then
1790 localtime_r="yes"
1791 else
1792 localtime_r="no"
1793 fi
1794fi
1795
1796##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01001797# pkg-config probe
1798
1799if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001800 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01001801fi
1802
1803##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02001804# NPTL probe
1805
Peter Maydell24cb36a2013-07-16 18:45:00 +01001806if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02001807 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00001808#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00001809#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01001810int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00001811#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1812#error bork
1813#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01001814 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00001815}
1816EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01001817 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11001818 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02001819 fi
pbrookbd0c5662008-05-29 14:34:11 +00001820fi
1821
bellard11d9f692004-04-02 20:55:59 +00001822##########################################
Liang Li99f2dbd2016-03-08 13:53:16 +08001823# avx2 optimization requirement check
1824
Richard Henderson5e33a872016-08-29 11:46:15 -07001825cat > $TMPC << EOF
Dr. David Alan Gilbert4fb83202016-06-10 12:16:18 +01001826#pragma GCC push_options
1827#pragma GCC target("avx2")
1828#include <cpuid.h>
1829#include <immintrin.h>
Dr. David Alan Gilbert4fb83202016-06-10 12:16:18 +01001830static int bar(void *a) {
Richard Henderson5e33a872016-08-29 11:46:15 -07001831 __m256i x = *(__m256i *)a;
1832 return _mm256_testz_si256(x, x);
Dr. David Alan Gilbert4fb83202016-06-10 12:16:18 +01001833}
Richard Henderson5e33a872016-08-29 11:46:15 -07001834int main(int argc, char *argv[]) { return bar(argv[0]); }
Liang Li99f2dbd2016-03-08 13:53:16 +08001835EOF
Richard Henderson5e33a872016-08-29 11:46:15 -07001836if compile_object "" ; then
1837 avx2_opt="yes"
Liang Li99f2dbd2016-03-08 13:53:16 +08001838fi
1839
1840#########################################
balrogac629222008-10-11 09:56:04 +00001841# zlib check
1842
Alon Levy1ece9902011-07-26 12:30:40 +03001843if test "$zlib" != "no" ; then
1844 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00001845#include <zlib.h>
1846int main(void) { zlibVersion(); return 0; }
1847EOF
Alon Levy1ece9902011-07-26 12:30:40 +03001848 if compile_prog "" "-lz" ; then
1849 :
1850 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001851 error_exit "zlib check failed" \
1852 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03001853 fi
balrogac629222008-10-11 09:56:04 +00001854fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00001855LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00001856
1857##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08001858# lzo check
1859
1860if test "$lzo" != "no" ; then
1861 cat > $TMPC << EOF
1862#include <lzo/lzo1x.h>
1863int main(void) { lzo_version(); return 0; }
1864EOF
1865 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001866 libs_softmmu="$libs_softmmu -llzo2"
1867 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001868 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001869 if test "$lzo" = "yes"; then
1870 feature_not_found "liblzo2" "Install liblzo2 devel"
1871 fi
1872 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08001873 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08001874fi
1875
1876##########################################
1877# snappy check
1878
1879if test "$snappy" != "no" ; then
1880 cat > $TMPC << EOF
1881#include <snappy-c.h>
1882int main(void) { snappy_max_compressed_length(4096); return 0; }
1883EOF
1884 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001885 libs_softmmu="$libs_softmmu -lsnappy"
1886 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001887 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001888 if test "$snappy" = "yes"; then
1889 feature_not_found "libsnappy" "Install libsnappy devel"
1890 fi
1891 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08001892 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08001893fi
1894
1895##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01001896# bzip2 check
1897
1898if test "$bzip2" != "no" ; then
1899 cat > $TMPC << EOF
1900#include <bzlib.h>
1901int main(void) { BZ2_bzlibVersion(); return 0; }
1902EOF
1903 if compile_prog "" "-lbz2" ; then
1904 bzip2="yes"
1905 else
1906 if test "$bzip2" = "yes"; then
1907 feature_not_found "libbzip2" "Install libbzip2 devel"
1908 fi
1909 bzip2="no"
1910 fi
1911fi
1912
1913##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03001914# libseccomp check
1915
1916if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04001917 case "$cpu" in
1918 i386|x86_64)
dann frazierba060c52015-10-23 15:34:22 -06001919 libseccomp_minver="2.1.0"
Andrew Jones693e5912015-09-30 11:59:18 -04001920 ;;
James Hogan5ce43972016-04-08 14:16:34 +01001921 mips)
1922 libseccomp_minver="2.2.0"
1923 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04001924 arm|aarch64)
1925 libseccomp_minver="2.2.3"
1926 ;;
Michael Strosaker3e684452016-06-01 18:30:18 -05001927 ppc|ppc64)
1928 libseccomp_minver="2.3.0"
1929 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04001930 *)
1931 libseccomp_minver=""
1932 ;;
1933 esac
1934
1935 if test "$libseccomp_minver" != "" &&
1936 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Stefan Weil89138852016-05-16 15:10:20 +02001937 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
1938 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04001939 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03001940 else
Andrew Jones693e5912015-09-30 11:59:18 -04001941 if test "$seccomp" = "yes" ; then
1942 if test "$libseccomp_minver" != "" ; then
1943 feature_not_found "libseccomp" \
1944 "Install libseccomp devel >= $libseccomp_minver"
1945 else
1946 feature_not_found "libseccomp" \
1947 "libseccomp is not supported for host cpu $cpu"
1948 fi
1949 fi
1950 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03001951 fi
1952fi
1953##########################################
aliguorie37630c2009-04-22 15:19:10 +00001954# xen probe
1955
Juan Quintelafc321b42009-08-12 18:29:55 +02001956if test "$xen" != "no" ; then
Juan Quintelab2266be2009-07-27 16:13:16 +02001957 xen_libs="-lxenstore -lxenctrl -lxenguest"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00001958 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00001959
Stefan Weil50ced5b2011-12-17 09:27:39 +01001960 # First we test whether Xen headers and libraries are available.
1961 # If no, we are done and there is no Xen support.
1962 # If yes, more tests are run to detect the Xen version.
1963
1964 # Xen (any)
Juan Quintelab2266be2009-07-27 16:13:16 +02001965 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00001966#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01001967int main(void) {
1968 return 0;
1969}
1970EOF
1971 if ! compile_prog "" "$xen_libs" ; then
1972 # Xen not found
1973 if test "$xen" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11001974 feature_not_found "xen" "Install xen devel"
Stefan Weil50ced5b2011-12-17 09:27:39 +01001975 fi
1976 xen=no
1977
1978 # Xen unstable
Peter Maydell69deef02012-08-02 18:30:26 +01001979 elif
1980 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00001981/*
1982 * If we have stable libs the we don't want the libxc compat
1983 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02001984 *
1985 * Also, check if xengnttab_grant_copy_segment_t is defined and
1986 * grant copy operation is implemented.
1987 */
1988#undef XC_WANT_COMPAT_EVTCHN_API
1989#undef XC_WANT_COMPAT_GNTTAB_API
1990#undef XC_WANT_COMPAT_MAP_FOREIGN_API
1991#include <xenctrl.h>
1992#include <xenstore.h>
1993#include <xenevtchn.h>
1994#include <xengnttab.h>
1995#include <xenforeignmemory.h>
1996#include <stdint.h>
1997#include <xen/hvm/hvm_info_table.h>
1998#if !defined(HVM_MAX_VCPUS)
1999# error HVM_MAX_VCPUS not defined
2000#endif
2001int main(void) {
2002 xc_interface *xc = NULL;
2003 xenforeignmemory_handle *xfmem;
2004 xenevtchn_handle *xe;
2005 xengnttab_handle *xg;
2006 xen_domain_handle_t handle;
2007 xengnttab_grant_copy_segment_t* seg = NULL;
2008
2009 xs_daemon_open();
2010
2011 xc = xc_interface_open(0, 0, 0);
2012 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2013 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2014 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2015 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2016 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2017
2018 xfmem = xenforeignmemory_open(0, 0);
2019 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2020
2021 xe = xenevtchn_open(0, 0);
2022 xenevtchn_fd(xe);
2023
2024 xg = xengnttab_open(0, 0);
2025 xengnttab_grant_copy(xg, 0, seg);
2026
2027 return 0;
2028}
2029EOF
2030 compile_prog "" "$xen_libs $xen_stable_libs"
2031 then
2032 xen_ctrl_version=480
2033 xen=yes
2034 elif
2035 cat > $TMPC <<EOF &&
2036/*
2037 * If we have stable libs the we don't want the libxc compat
2038 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002039 */
2040#undef XC_WANT_COMPAT_EVTCHN_API
2041#undef XC_WANT_COMPAT_GNTTAB_API
2042#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2043#include <xenctrl.h>
2044#include <xenstore.h>
2045#include <xenevtchn.h>
2046#include <xengnttab.h>
2047#include <xenforeignmemory.h>
2048#include <stdint.h>
2049#include <xen/hvm/hvm_info_table.h>
2050#if !defined(HVM_MAX_VCPUS)
2051# error HVM_MAX_VCPUS not defined
2052#endif
2053int main(void) {
2054 xc_interface *xc = NULL;
2055 xenforeignmemory_handle *xfmem;
2056 xenevtchn_handle *xe;
2057 xengnttab_handle *xg;
2058 xen_domain_handle_t handle;
2059
2060 xs_daemon_open();
2061
2062 xc = xc_interface_open(0, 0, 0);
2063 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2064 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2065 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2066 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2067 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2068
2069 xfmem = xenforeignmemory_open(0, 0);
2070 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2071
2072 xe = xenevtchn_open(0, 0);
2073 xenevtchn_fd(xe);
2074
2075 xg = xengnttab_open(0, 0);
2076 xengnttab_map_grant_ref(xg, 0, 0, 0);
2077
2078 return 0;
2079}
2080EOF
2081 compile_prog "" "$xen_libs $xen_stable_libs"
2082 then
2083 xen_ctrl_version=471
2084 xen=yes
2085 elif
2086 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002087#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002088#include <stdint.h>
2089int main(void) {
2090 xc_interface *xc = NULL;
2091 xen_domain_handle_t handle;
2092 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2093 return 0;
2094}
2095EOF
2096 compile_prog "" "$xen_libs"
2097 then
2098 xen_ctrl_version=470
2099 xen=yes
2100
2101 # Xen 4.6
2102 elif
2103 cat > $TMPC <<EOF &&
2104#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002105#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002106#include <stdint.h>
2107#include <xen/hvm/hvm_info_table.h>
2108#if !defined(HVM_MAX_VCPUS)
2109# error HVM_MAX_VCPUS not defined
2110#endif
2111int main(void) {
2112 xc_interface *xc;
2113 xs_daemon_open();
2114 xc = xc_interface_open(0, 0, 0);
2115 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2116 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002117 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002118 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002119 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002120 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002121 return 0;
2122}
2123EOF
2124 compile_prog "" "$xen_libs"
2125 then
2126 xen_ctrl_version=460
2127 xen=yes
2128
2129 # Xen 4.5
2130 elif
2131 cat > $TMPC <<EOF &&
2132#include <xenctrl.h>
2133#include <xenstore.h>
2134#include <stdint.h>
2135#include <xen/hvm/hvm_info_table.h>
2136#if !defined(HVM_MAX_VCPUS)
2137# error HVM_MAX_VCPUS not defined
2138#endif
2139int main(void) {
2140 xc_interface *xc;
2141 xs_daemon_open();
2142 xc = xc_interface_open(0, 0, 0);
2143 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2144 xc_gnttab_open(NULL, 0);
2145 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2146 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002147 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2148 return 0;
2149}
2150EOF
2151 compile_prog "" "$xen_libs"
2152 then
2153 xen_ctrl_version=450
2154 xen=yes
2155
2156 elif
2157 cat > $TMPC <<EOF &&
2158#include <xenctrl.h>
2159#include <xenstore.h>
2160#include <stdint.h>
2161#include <xen/hvm/hvm_info_table.h>
2162#if !defined(HVM_MAX_VCPUS)
2163# error HVM_MAX_VCPUS not defined
2164#endif
2165int main(void) {
2166 xc_interface *xc;
2167 xs_daemon_open();
2168 xc = xc_interface_open(0, 0, 0);
2169 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2170 xc_gnttab_open(NULL, 0);
2171 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2172 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002173 return 0;
2174}
2175EOF
2176 compile_prog "" "$xen_libs"
Peter Maydell69deef02012-08-02 18:30:26 +01002177 then
Stefano Stabellini8688e062012-04-17 17:04:18 +00002178 xen_ctrl_version=420
2179 xen=yes
2180
Juan Quintelab2266be2009-07-27 16:13:16 +02002181 else
Juan Quintelafc321b42009-08-12 18:29:55 +02002182 if test "$xen" = "yes" ; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002183 feature_not_found "xen (unsupported version)" \
2184 "Install a supported xen (xen 4.2 or newer)"
Juan Quintelafc321b42009-08-12 18:29:55 +02002185 fi
2186 xen=no
Juan Quintelab2266be2009-07-27 16:13:16 +02002187 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002188
2189 if test "$xen" = yes; then
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002190 if test $xen_ctrl_version -ge 471 ; then
2191 libs_softmmu="$xen_stable_libs $libs_softmmu"
2192 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002193 libs_softmmu="$xen_libs $libs_softmmu"
2194 fi
aliguorie37630c2009-04-22 15:19:10 +00002195fi
2196
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002197if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002198 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002199 xen_pci_passthrough=yes
2200 else
2201 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002202 error_exit "User requested feature Xen PCI Passthrough" \
2203 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002204 fi
2205 xen_pci_passthrough=no
2206 fi
2207fi
2208
Ian Campbell64a7ad62016-01-15 13:23:44 +00002209if test "$xen_pv_domain_build" = "yes" &&
2210 test "$xen" != "yes"; then
2211 error_exit "User requested Xen PV domain builder support" \
2212 "which requires Xen support."
2213fi
2214
aliguorie37630c2009-04-22 15:19:10 +00002215##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002216# Sparse probe
2217if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002218 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002219 sparse=yes
2220 else
2221 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002222 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002223 fi
2224 sparse=no
2225 fi
2226fi
2227
2228##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002229# X11 probe
2230x11_cflags=
2231x11_libs=-lX11
2232if $pkg_config --exists "x11"; then
Stefan Weil89138852016-05-16 15:10:20 +02002233 x11_cflags=$($pkg_config --cflags x11)
2234 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002235fi
2236
2237##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002238# GTK probe
2239
Stefan Weil9e04c682014-05-17 16:29:18 +02002240if test "$gtkabi" = ""; then
2241 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2242 # Use 3.0 as a fallback if that is available.
2243 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2244 gtkabi=2.0
2245 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2246 gtkabi=3.0
2247 else
2248 gtkabi=2.0
2249 fi
2250fi
2251
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002252if test "$gtk" != "no"; then
Daniel P. Berrange528de902013-02-25 15:20:44 +00002253 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002254 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002255 if test "$gtkabi" = "3.0" ; then
2256 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002257 else
2258 gtkversion="2.18.0"
2259 fi
2260 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002261 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2262 gtk_libs=$($pkg_config --libs $gtkpackage)
2263 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002264 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Jeremy Whitef676c672015-01-09 13:08:49 -06002265 gtk_cflags="$gtk_cflags $x11_cflags"
2266 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002267 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002268 libs_softmmu="$gtk_libs $libs_softmmu"
2269 gtk="yes"
2270 elif test "$gtk" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002271 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002272 else
2273 gtk="no"
2274 fi
2275fi
2276
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002277
2278##########################################
2279# GNUTLS probe
2280
Peter Maydell37371292015-07-24 18:28:08 +01002281gnutls_works() {
2282 # Unfortunately some distros have bad pkg-config information for gnutls
2283 # such that it claims to exist but you get a compiler error if you try
2284 # to use the options returned by --libs. Specifically, Ubuntu for --static
2285 # builds doesn't work:
2286 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2287 #
2288 # So sanity check the cflags/libs before assuming gnutls can be used.
2289 if ! $pkg_config --exists "gnutls"; then
2290 return 1
2291 fi
2292
2293 write_c_skeleton
2294 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2295}
2296
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002297gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002298gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002299if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002300 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002301 gnutls_cflags=$($pkg_config --cflags gnutls)
2302 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002303 libs_softmmu="$gnutls_libs $libs_softmmu"
2304 libs_tools="$gnutls_libs $libs_tools"
2305 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2306 gnutls="yes"
2307
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002308 # gnutls_rnd requires >= 2.11.0
2309 if $pkg_config --exists "gnutls >= 2.11.0"; then
2310 gnutls_rnd="yes"
2311 else
2312 gnutls_rnd="no"
2313 fi
2314
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002315 if $pkg_config --exists 'gnutls >= 3.0'; then
2316 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002317 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002318 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002319 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002320 *gcrypt*)
2321 gnutls_gcrypt=yes
2322 gnutls_nettle=no
2323 ;;
2324 *nettle*)
2325 gnutls_gcrypt=no
2326 gnutls_nettle=yes
2327 ;;
2328 *)
2329 gnutls_gcrypt=yes
2330 gnutls_nettle=no
2331 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002332 esac
2333 else
2334 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002335 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002336 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002337 elif test "$gnutls" = "yes"; then
2338 feature_not_found "gnutls" "Install gnutls devel"
2339 else
2340 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002341 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002342 fi
2343else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002344 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002345fi
2346
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002347
2348# If user didn't give a --disable/enable-gcrypt flag,
2349# then mark as disabled if user requested nettle
2350# explicitly, or if gnutls links to nettle
2351if test -z "$gcrypt"
2352then
2353 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2354 then
2355 gcrypt="no"
2356 fi
2357fi
2358
2359# If user didn't give a --disable/enable-nettle flag,
2360# then mark as disabled if user requested gcrypt
2361# explicitly, or if gnutls links to gcrypt
2362if test -z "$nettle"
2363then
2364 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2365 then
2366 nettle="no"
2367 fi
2368fi
2369
2370has_libgcrypt_config() {
2371 if ! has "libgcrypt-config"
2372 then
2373 return 1
2374 fi
2375
2376 if test -n "$cross_prefix"
2377 then
Stefan Weil89138852016-05-16 15:10:20 +02002378 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002379 if test "$host-" != $cross_prefix
2380 then
2381 return 1
2382 fi
2383 fi
2384
2385 return 0
2386}
2387
2388if test "$gcrypt" != "no"; then
2389 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002390 gcrypt_cflags=$(libgcrypt-config --cflags)
2391 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002392 # Debian has remove -lgpg-error from libgcrypt-config
2393 # as it "spreads unnecessary dependencies" which in
2394 # turn breaks static builds...
2395 if test "$static" = "yes"
2396 then
2397 gcrypt_libs="$gcrypt_libs -lgpg-error"
2398 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002399 libs_softmmu="$gcrypt_libs $libs_softmmu"
2400 libs_tools="$gcrypt_libs $libs_tools"
2401 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002402 gcrypt="yes"
2403 if test -z "$nettle"; then
2404 nettle="no"
2405 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002406
2407 cat > $TMPC << EOF
2408#include <gcrypt.h>
2409int main(void) {
2410 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2411 GCRY_MD_SHA256,
2412 NULL, 0, 0, 0, NULL);
2413 return 0;
2414}
2415EOF
2416 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2417 gcrypt_kdf=yes
2418 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002419
2420 cat > $TMPC << EOF
2421#include <gcrypt.h>
2422int main(void) {
2423 gcry_mac_hd_t handle;
2424 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2425 GCRY_MAC_FLAG_SECURE, NULL);
2426 return 0;
2427}
2428EOF
2429 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2430 gcrypt_hmac=yes
2431 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002432 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002433 if test "$gcrypt" = "yes"; then
2434 feature_not_found "gcrypt" "Install gcrypt devel"
2435 else
2436 gcrypt="no"
2437 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002438 fi
2439fi
2440
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002441
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002442if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002443 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002444 nettle_cflags=$($pkg_config --cflags nettle)
2445 nettle_libs=$($pkg_config --libs nettle)
2446 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002447 libs_softmmu="$nettle_libs $libs_softmmu"
2448 libs_tools="$nettle_libs $libs_tools"
2449 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002450 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002451
2452 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002453#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002454#include <nettle/pbkdf2.h>
2455int main(void) {
2456 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2457 return 0;
2458}
2459EOF
2460 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2461 nettle_kdf=yes
2462 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002463 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002464 if test "$nettle" = "yes"; then
2465 feature_not_found "nettle" "Install nettle devel"
2466 else
2467 nettle="no"
2468 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002469 fi
2470fi
2471
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002472if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2473then
2474 error_exit "Only one of gcrypt & nettle can be enabled"
2475fi
2476
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002477##########################################
2478# libtasn1 - only for the TLS creds/session test suite
2479
2480tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002481tasn1_cflags=""
2482tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002483if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002484 tasn1_cflags=$($pkg_config --cflags libtasn1)
2485 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002486else
2487 tasn1=no
2488fi
2489
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002490
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002491##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002492# getifaddrs (for tests/test-io-channel-socket )
2493
2494have_ifaddrs_h=yes
2495if ! check_include "ifaddrs.h" ; then
2496 have_ifaddrs_h=no
2497fi
2498
2499##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002500# VTE probe
2501
2502if test "$vte" != "no"; then
2503 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002504 vteminversion="0.32.0"
2505 if $pkg_config --exists "vte-2.91"; then
2506 vtepackage="vte-2.91"
2507 else
2508 vtepackage="vte-2.90"
2509 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002510 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002511 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002512 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002513 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002514 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002515 vte_cflags=$($pkg_config --cflags $vtepackage)
2516 vte_libs=$($pkg_config --libs $vtepackage)
2517 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002518 libs_softmmu="$vte_libs $libs_softmmu"
2519 vte="yes"
2520 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002521 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002522 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002523 else
2524 feature_not_found "vte" "Install libvte devel"
2525 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002526 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002527 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002528 fi
2529fi
2530
2531##########################################
bellard11d9f692004-04-02 20:55:59 +00002532# SDL probe
2533
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002534# Look for sdl configuration program (pkg-config or sdl-config). Try
2535# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002536
Cole Robinsonee8466d2016-05-06 14:03:07 -04002537if test "$sdlabi" = ""; then
2538 if $pkg_config --exists "sdl"; then
2539 sdlabi=1.2
2540 elif $pkg_config --exists "sdl2"; then
2541 sdlabi=2.0
2542 else
2543 sdlabi=1.2
2544 fi
2545fi
2546
Dave Airlie47c03742013-12-10 14:05:51 +10002547if test $sdlabi = "2.0"; then
2548 sdl_config=$sdl2_config
2549 sdlname=sdl2
2550 sdlconfigname=sdl2_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002551elif test $sdlabi = "1.2"; then
Dave Airlie47c03742013-12-10 14:05:51 +10002552 sdlname=sdl
2553 sdlconfigname=sdl_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002554else
2555 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002556fi
2557
Stefan Weil89138852016-05-16 15:10:20 +02002558if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
Dave Airlie47c03742013-12-10 14:05:51 +10002559 sdl_config=$sdlconfigname
2560fi
2561
2562if $pkg_config $sdlname --exists; then
2563 sdlconfig="$pkg_config $sdlname"
Stefan Weil89138852016-05-16 15:10:20 +02002564 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002565elif has ${sdl_config}; then
2566 sdlconfig="$sdl_config"
Stefan Weil89138852016-05-16 15:10:20 +02002567 sdlversion=$($sdlconfig --version)
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002568else
2569 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002570 feature_not_found "sdl" "Install SDL devel"
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002571 fi
2572 sdl=no
Paolo Bonzini9316f802010-01-13 09:52:55 +01002573fi
Scott Wood29e5bad2011-04-08 14:15:50 -05002574if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002575 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2576fi
bellard11d9f692004-04-02 20:55:59 +00002577
Paolo Bonzini9316f802010-01-13 09:52:55 +01002578sdl_too_old=no
Juan Quintelac4198152009-08-12 18:29:53 +02002579if test "$sdl" != "no" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002580 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002581#include <SDL.h>
2582#undef main /* We don't want SDL to override our main() */
2583int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2584EOF
Stefan Weil89138852016-05-16 15:10:20 +02002585 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002586 if test "$static" = "yes" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002587 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002588 else
Stefan Weil89138852016-05-16 15:10:20 +02002589 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002590 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002591 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002592 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002593 sdl_too_old=yes
2594 else
Peter Maydella30878e2015-08-14 16:10:52 +01002595 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002596 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002597
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002598 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002599 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002600 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002601 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2602 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002603 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002604 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002605 :
2606 else
2607 sdl=no
2608 fi
2609 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002610 else # sdl not found
2611 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002612 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002613 fi
2614 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002615 fi # sdl compile test
Juan Quintelaa68551b2009-07-27 16:13:09 +02002616fi
bellard11d9f692004-04-02 20:55:59 +00002617
aliguori5368a422009-03-03 17:37:21 +00002618if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002619 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002620#include <SDL.h>
2621#if defined(SDL_VIDEO_DRIVER_X11)
2622#include <X11/XKBlib.h>
2623#else
2624#error No x11 support
2625#endif
2626int main(void) { return 0; }
2627EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002628 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2629 sdl_cflags="$sdl_cflags $x11_cflags"
2630 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02002631 fi
Juan Quintela07056672009-08-03 14:46:27 +02002632 libs_softmmu="$sdl_libs $libs_softmmu"
aliguori5368a422009-03-03 17:37:21 +00002633fi
2634
ths8f28f3f2007-01-05 21:25:54 +00002635##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04002636# RDMA needs OpenFabrics libraries
2637if test "$rdma" != "no" ; then
2638 cat > $TMPC <<EOF
2639#include <rdma/rdma_cma.h>
2640int main(void) { return 0; }
2641EOF
2642 rdma_libs="-lrdmacm -libverbs"
2643 if compile_prog "" "$rdma_libs" ; then
2644 rdma="yes"
2645 libs_softmmu="$libs_softmmu $rdma_libs"
2646 else
2647 if test "$rdma" = "yes" ; then
2648 error_exit \
2649 " OpenFabrics librdmacm/libibverbs not present." \
2650 " Your options:" \
2651 " (1) Fast: Install infiniband packages from your distro." \
2652 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2653 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2654 fi
2655 rdma="no"
2656 fi
2657fi
2658
ths8d5d2d42007-08-25 01:37:51 +00002659
2660##########################################
aliguori2f9606b2009-03-06 20:27:28 +00002661# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002662if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02002663 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00002664#include <sasl/sasl.h>
2665#include <stdio.h>
2666int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2667EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02002668 # Assuming Cyrus-SASL installed in /usr prefix
2669 vnc_sasl_cflags=""
2670 vnc_sasl_libs="-lsasl2"
2671 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2672 vnc_sasl=yes
2673 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002674 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02002675 else
2676 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002677 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00002678 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02002679 vnc_sasl=no
2680 fi
aliguori2f9606b2009-03-06 20:27:28 +00002681fi
2682
2683##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002684# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002685if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002686cat > $TMPC <<EOF
2687#include <stdio.h>
2688#include <jpeglib.h>
2689int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2690EOF
2691 vnc_jpeg_cflags=""
2692 vnc_jpeg_libs="-ljpeg"
2693 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2694 vnc_jpeg=yes
2695 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002696 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002697 else
2698 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002699 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002700 fi
2701 vnc_jpeg=no
2702 fi
2703fi
2704
2705##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02002706# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002707if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02002708cat > $TMPC <<EOF
2709//#include <stdio.h>
2710#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05002711#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02002712int main(void) {
2713 png_structp png_ptr;
2714 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01002715 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02002716}
2717EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02002718 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02002719 vnc_png_cflags=$($pkg_config libpng --cflags)
2720 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04002721 else
Corentin Charyefe556a2010-07-07 20:57:56 +02002722 vnc_png_cflags=""
2723 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04002724 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02002725 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2726 vnc_png=yes
2727 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04002728 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02002729 else
2730 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002731 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02002732 fi
2733 vnc_png=no
2734 fi
2735fi
2736
2737##########################################
aliguori76655d62009-03-06 20:27:37 +00002738# fnmatch() probe, used for ACL routines
2739fnmatch="no"
2740cat > $TMPC << EOF
2741#include <fnmatch.h>
2742int main(void)
2743{
2744 fnmatch("foo", "foo", 0);
2745 return 0;
2746}
2747EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002748if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00002749 fnmatch="yes"
2750fi
2751
2752##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06002753# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002754if test "$xfs" != "no" ; then
2755 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01002756#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002757#include <xfs/xfs.h>
2758int main(void)
2759{
2760 xfsctl(NULL, 0, 0, NULL);
2761 return 0;
2762}
2763EOF
2764 if compile_prog "" "" ; then
2765 xfs="yes"
2766 else
2767 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002768 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002769 fi
2770 xfs=no
2771 fi
2772fi
2773
2774##########################################
ths8a16d272008-07-19 09:56:24 +00002775# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02002776if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002777 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00002778 cat > $TMPC << EOF
2779#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00002780int main(void)
2781{
2782 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01002783 char s[] = "";
2784 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00002785 return 0;
2786}
ths8a16d272008-07-19 09:56:24 +00002787EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002788 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002789 vde=yes
Juan Quintela8e02e542009-08-03 14:47:07 +02002790 libs_softmmu="$vde_libs $libs_softmmu"
2791 libs_tools="$vde_libs $libs_tools"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002792 else
2793 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002794 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002795 fi
2796 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02002797 fi
ths8a16d272008-07-19 09:56:24 +00002798fi
2799
2800##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002801# netmap support probe
2802# Apart from looking for netmap headers, we make sure that the host API version
2803# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2804# a minor/major version number. Minor new features will be marked with values up
2805# to 15, and if something happens that requires a change to the backend we will
2806# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01002807if test "$netmap" != "no" ; then
2808 cat > $TMPC << EOF
2809#include <inttypes.h>
2810#include <net/if.h>
2811#include <net/netmap.h>
2812#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002813#if (NETMAP_API < 11) || (NETMAP_API > 15)
2814#error
2815#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01002816int main(void) { return 0; }
2817EOF
2818 if compile_prog "" "" ; then
2819 netmap=yes
2820 else
2821 if test "$netmap" = "yes" ; then
2822 feature_not_found "netmap"
2823 fi
2824 netmap=no
2825 fi
2826fi
2827
2828##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05002829# libcap-ng library probe
2830if test "$cap_ng" != "no" ; then
2831 cap_libs="-lcap-ng"
2832 cat > $TMPC << EOF
2833#include <cap-ng.h>
2834int main(void)
2835{
2836 capng_capability_to_name(CAPNG_EFFECTIVE);
2837 return 0;
2838}
2839EOF
2840 if compile_prog "" "$cap_libs" ; then
2841 cap_ng=yes
2842 libs_tools="$cap_libs $libs_tools"
2843 else
2844 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002845 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05002846 fi
2847 cap_ng=no
2848 fi
2849fi
2850
2851##########################################
malcc2de5c92008-06-28 19:13:06 +00002852# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00002853
malcc2de5c92008-06-28 19:13:06 +00002854audio_drv_probe()
2855{
2856 drv=$1
2857 hdr=$2
2858 lib=$3
2859 exp=$4
2860 cfl=$5
2861 cat > $TMPC << EOF
2862#include <$hdr>
2863int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00002864EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002865 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00002866 :
2867 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002868 error_exit "$drv check failed" \
2869 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00002870 fi
2871}
2872
Stefan Weil89138852016-05-16 15:10:20 +02002873audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00002874for drv in $audio_drv_list; do
2875 case $drv in
2876 alsa)
2877 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01002878 "return snd_pcm_close((snd_pcm_t *)0);"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02002879 libs_softmmu="-lasound $libs_softmmu"
malcc2de5c92008-06-28 19:13:06 +00002880 ;;
2881
malcb8e59f12008-07-02 21:03:08 +00002882 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02002883 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
2884 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Marc-André Lureaua394aed2012-04-17 14:32:42 +02002885 libs_softmmu="-lpulse $libs_softmmu"
Juan Quintela67f86e82009-08-03 14:46:59 +02002886 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00002887 ;;
2888
Juan Quintela997e6902009-08-03 14:46:29 +02002889 coreaudio)
2890 libs_softmmu="-framework CoreAudio $libs_softmmu"
2891 ;;
2892
Juan Quintelaa4bf6782009-08-03 14:46:30 +02002893 dsound)
2894 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
malcd5631632009-10-10 01:13:41 +04002895 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02002896 ;;
2897
2898 oss)
2899 libs_softmmu="$oss_lib $libs_softmmu"
2900 ;;
2901
2902 sdl|wav)
blueswir12f6a1ab2008-08-21 18:00:53 +00002903 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2904 ;;
2905
malce4c63a62008-07-19 16:15:16 +00002906 *)
malc1c9b2a52008-07-19 16:57:30 +00002907 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01002908 error_exit "Unknown driver '$drv' selected" \
2909 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00002910 }
2911 ;;
malcc2de5c92008-06-28 19:13:06 +00002912 esac
2913done
ths8f28f3f2007-01-05 21:25:54 +00002914
balrog4d3b6f62008-02-10 16:33:14 +00002915##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00002916# BrlAPI probe
2917
Juan Quintela4ffcedb2009-08-12 18:20:26 +02002918if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02002919 brlapi_libs="-lbrlapi"
2920 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00002921#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05002922#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00002923int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2924EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002925 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02002926 brlapi=yes
Juan Quintela264606b2009-08-03 14:46:39 +02002927 libs_softmmu="$brlapi_libs $libs_softmmu"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02002928 else
2929 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002930 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02002931 fi
2932 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02002933 fi
2934fi
aurel322e4d9fb2008-04-08 06:01:02 +00002935
2936##########################################
balrog4d3b6f62008-02-10 16:33:14 +00002937# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02002938if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04002939 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002940 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
2941 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04002942 else
Samuel Thibault7c703002016-11-09 11:27:52 +01002943 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002944 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04002945 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02002946 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00002947 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002948#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00002949#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002950#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01002951int main(void) {
2952 const char *s = curses_version();
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002953 wchar_t wch = L'w';
2954 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01002955 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002956 addwstr(L"wide chars\n");
2957 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01002958 add_wch(WACS_DEGREE);
Stefan Weilef9a2522011-12-17 17:46:02 +01002959 return s != 0;
2960}
balrog4d3b6f62008-02-10 16:33:14 +00002961EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04002962 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002963 for curses_inc in $curses_inc_list; do
Samuel Thibault7c703002016-11-09 11:27:52 +01002964 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02002965 for curses_lib in $curses_lib_list; do
2966 unset IFS
2967 if compile_prog "$curses_inc" "$curses_lib" ; then
2968 curses_found=yes
2969 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
2970 libs_softmmu="$curses_lib $libs_softmmu"
2971 break
2972 fi
2973 done
Samuel Thibault7c703002016-11-09 11:27:52 +01002974 if test "$curses_found" = yes ; then
2975 break
2976 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02002977 done
Vadim Evardecbe2512013-01-15 16:17:24 +04002978 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02002979 if test "$curses_found" = "yes" ; then
2980 curses=yes
2981 else
2982 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002983 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02002984 fi
2985 curses=no
2986 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02002987fi
balrog4d3b6f62008-02-10 16:33:14 +00002988
blueswir1414f0da2008-08-15 18:20:52 +00002989##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02002990# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02002991if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02002992 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04002993 curlconfig="$pkg_config libcurl"
2994 else
2995 curlconfig=curl-config
2996 fi
Alexander Graf769ce762009-05-11 17:41:42 +02002997 cat > $TMPC << EOF
2998#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01002999int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003000EOF
Stefan Weil89138852016-05-16 15:10:20 +02003001 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3002 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003003 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003004 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003005 else
3006 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003007 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003008 fi
3009 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003010 fi
3011fi # test "$curl"
3012
3013##########################################
balrogfb599c92008-09-28 23:49:55 +00003014# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003015if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003016 cat > $TMPC << EOF
3017#include <bluetooth/bluetooth.h>
3018int main(void) { return bt_error(0); }
3019EOF
Stefan Weil89138852016-05-16 15:10:20 +02003020 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3021 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003022 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003023 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003024 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003025 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003026 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003027 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003028 fi
balroge820e3f2008-09-30 02:27:44 +00003029 bluez="no"
3030 fi
balrogfb599c92008-09-28 23:49:55 +00003031fi
3032
3033##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003034# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003035
John Snowf40685c2015-05-22 14:13:42 -04003036glib_req_ver=2.22
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003037glib_modules=gthread-2.0
3038if test "$modules" = yes; then
3039 glib_modules="$glib_modules gmodule-2.0"
3040fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003041
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003042for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003043 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003044 glib_cflags=$($pkg_config --cflags $i)
3045 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003046 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003047 LIBS="$glib_libs $LIBS"
3048 libs_qga="$glib_libs $libs_qga"
3049 else
3050 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3051 fi
3052done
3053
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003054# Sanity check that the current size_t matches the
3055# size that glib thinks it should be. This catches
3056# problems on multi-arch where people try to build
3057# 32-bit QEMU while pointing at 64-bit glib headers
3058cat > $TMPC <<EOF
3059#include <glib.h>
3060#include <unistd.h>
3061
3062#define QEMU_BUILD_BUG_ON(x) \
3063 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3064
3065int main(void) {
3066 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3067 return 0;
3068}
3069EOF
3070
Stefan Weil5919e032016-04-28 23:33:41 +02003071if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003072 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3073 "You probably need to set PKG_CONFIG_LIBDIR"\
3074 "to point to the right pkg-config files for your"\
3075 "build target"
3076fi
3077
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003078# g_test_trap_subprocess added in 2.38. Used by some tests.
3079glib_subprocess=yes
Eduardo Habkost7ad93392016-06-14 13:00:23 -03003080if test "$mingw32" = "yes" || ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003081 glib_subprocess=no
3082fi
3083
John Snowbbbf2e02015-03-25 18:57:38 -04003084# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3085cat > $TMPC << EOF
3086#include <glib.h>
3087int main(void) { return 0; }
3088EOF
3089if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3090 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3091 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3092 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3093 fi
3094fi
3095
Fam Zhenge26110c2014-02-10 14:48:57 +08003096##########################################
3097# SHA command probe for modules
3098if test "$modules" = yes; then
3099 shacmd_probe="sha1sum sha1 shasum"
3100 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003101 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003102 shacmd="$c"
3103 break
3104 fi
3105 done
3106 if test "$shacmd" = ""; then
3107 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3108 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003109fi
3110
3111##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003112# pixman support probe
3113
3114if test "$pixman" = ""; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003115 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3116 pixman="none"
Hu Tao236f2822014-09-15 11:41:10 +08003117 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003118 pixman="system"
3119 else
3120 pixman="internal"
3121 fi
3122fi
Robert Schiele74880fe2012-12-04 16:58:08 +01003123if test "$pixman" = "none"; then
3124 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003125 error_exit "pixman disabled but system emulation or tools build" \
3126 "enabled. You can turn off pixman only if you also" \
3127 "disable all system emulation targets and the tools" \
3128 "build with '--disable-tools --disable-system'."
Robert Schiele74880fe2012-12-04 16:58:08 +01003129 fi
3130 pixman_cflags=
3131 pixman_libs=
3132elif test "$pixman" = "system"; then
Hu Tao236f2822014-09-15 11:41:10 +08003133 # pixman version has been checked above
Stefan Weil89138852016-05-16 15:10:20 +02003134 pixman_cflags=$($pkg_config --cflags pixman-1)
3135 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003136else
3137 if test ! -d ${source_path}/pixman/pixman; then
Hu Tao236f2822014-09-15 11:41:10 +08003138 error_exit "pixman >= 0.21.8 not present. Your options:" \
Peter Maydell76ad07a2013-04-08 12:11:26 +01003139 " (1) Preferred: Install the pixman devel package (any recent" \
3140 " distro should have packages as Xorg needs pixman too)." \
3141 " (2) Fetch the pixman submodule, using:" \
3142 " git submodule update --init pixman"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003143 fi
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01003144 mkdir -p pixman/pixman
3145 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3146 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003147fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003148
3149##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303150# libcap probe
3151
3152if test "$cap" != "no" ; then
3153 cat > $TMPC <<EOF
3154#include <stdio.h>
3155#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003156int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303157EOF
3158 if compile_prog "" "-lcap" ; then
3159 cap=yes
3160 else
3161 cap=no
3162 fi
3163fi
3164
3165##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003166# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003167PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003168
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003169pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003170cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003171#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003172static void *f(void *p) { return NULL; }
3173int main(void) {
3174 pthread_t thread;
3175 pthread_create(&thread, 0, f, 0);
3176 return 0;
3177}
blueswir1414f0da2008-08-15 18:20:52 +00003178EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003179if compile_prog "" "" ; then
3180 pthread=yes
3181else
3182 for pthread_lib in $PTHREADLIBS_LIST; do
3183 if compile_prog "" "$pthread_lib" ; then
3184 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003185 found=no
3186 for lib_entry in $LIBS; do
3187 if test "$lib_entry" = "$pthread_lib"; then
3188 found=yes
3189 break
3190 fi
3191 done
3192 if test "$found" = "no"; then
3193 LIBS="$pthread_lib $LIBS"
3194 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003195 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003196 break
3197 fi
3198 done
3199fi
blueswir1414f0da2008-08-15 18:20:52 +00003200
Anthony Liguori4617e592009-08-25 17:21:56 -05003201if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003202 error_exit "pthread check failed" \
3203 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003204fi
3205
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003206# check for pthread_setname_np
3207pthread_setname_np=no
3208cat > $TMPC << EOF
3209#include <pthread.h>
3210
3211static void *f(void *p) { return NULL; }
3212int main(void)
3213{
3214 pthread_t thread;
3215 pthread_create(&thread, 0, f, 0);
3216 pthread_setname_np(thread, "QEMU");
3217 return 0;
3218}
3219EOF
3220if compile_prog "" "$pthread_lib" ; then
3221 pthread_setname_np=yes
3222fi
3223
aliguoribf9298b2008-12-05 20:05:26 +00003224##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003225# rbd probe
3226if test "$rbd" != "no" ; then
3227 cat > $TMPC <<EOF
3228#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003229#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003230int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003231 rados_t cluster;
3232 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003233 return 0;
3234}
3235EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003236 rbd_libs="-lrbd -lrados"
3237 if compile_prog "" "$rbd_libs" ; then
3238 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003239 else
3240 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003241 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003242 fi
3243 rbd=no
3244 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003245fi
3246
3247##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003248# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003249min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003250if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003251 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003252 libssh2_cflags=$($pkg_config libssh2 --cflags)
3253 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003254 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003255 else
3256 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003257 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003258 fi
3259 libssh2=no
3260 fi
3261fi
3262
3263##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003264# libssh2_sftp_fsync probe
3265
3266if test "$libssh2" = "yes"; then
3267 cat > $TMPC <<EOF
3268#include <stdio.h>
3269#include <libssh2.h>
3270#include <libssh2_sftp.h>
3271int main(void) {
3272 LIBSSH2_SESSION *session;
3273 LIBSSH2_SFTP *sftp;
3274 LIBSSH2_SFTP_HANDLE *sftp_handle;
3275 session = libssh2_session_init ();
3276 sftp = libssh2_sftp_init (session);
3277 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3278 libssh2_sftp_fsync (sftp_handle);
3279 return 0;
3280}
3281EOF
3282 # libssh2_cflags/libssh2_libs defined in previous test.
3283 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3284 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3285 fi
3286fi
3287
3288##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003289# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003290
3291if test "$linux_aio" != "no" ; then
3292 cat > $TMPC <<EOF
3293#include <libaio.h>
3294#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003295#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003296int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3297EOF
3298 if compile_prog "" "-laio" ; then
3299 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003300 else
3301 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003302 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003303 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003304 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003305 fi
3306fi
3307
3308##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003309# TPM passthrough is only on x86 Linux
3310
3311if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3312 tpm_passthrough=$tpm
3313else
3314 tpm_passthrough=no
3315fi
3316
3317##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003318# attr probe
3319
3320if test "$attr" != "no" ; then
3321 cat > $TMPC <<EOF
3322#include <stdio.h>
3323#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003324#ifdef CONFIG_LIBATTR
3325#include <attr/xattr.h>
3326#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003327#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003328#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003329int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3330EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003331 if compile_prog "" "" ; then
3332 attr=yes
3333 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003334 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003335 attr=yes
3336 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003337 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003338 else
3339 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003340 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003341 fi
3342 attr=no
3343 fi
3344fi
3345
3346##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003347# iovec probe
3348cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003349#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003350#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003351#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003352int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003353EOF
3354iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003355if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003356 iovec=yes
3357fi
3358
aurel32f652e6a2008-12-16 10:43:48 +00003359##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003360# preadv probe
3361cat > $TMPC <<EOF
3362#include <sys/types.h>
3363#include <sys/uio.h>
3364#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003365int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003366EOF
3367preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003368if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003369 preadv=yes
3370fi
3371
3372##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003373# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003374# fdt support is mandatory for at least some target architectures,
3375# so insist on it if we're building those system emulators.
3376fdt_required=no
3377for target in $target_list; do
3378 case $target in
Alexander Graf6a49fa92013-09-03 20:12:22 +01003379 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003380 fdt_required=yes
3381 ;;
3382 esac
3383done
3384
3385if test "$fdt_required" = "yes"; then
3386 if test "$fdt" = "no"; then
3387 error_exit "fdt disabled but some requested targets require it." \
3388 "You can turn off fdt only if you also disable all the system emulation" \
3389 "targets which need it (by specifying a cut down --target-list)."
3390 fi
3391 fdt=yes
3392fi
3393
Juan Quintela2df87df2009-08-12 18:29:54 +02003394if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003395 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003396 # explicitly check for libfdt_env.h as it is missing in some stable installs
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003397 # and test for required functions to make sure we are on a version >= 1.4.0
Juan Quintelab41af4b2009-07-27 16:13:20 +02003398 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003399#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003400#include <libfdt_env.h>
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003401int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003402EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003403 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003404 # system DTC is good - use it
aurel32f652e6a2008-12-16 10:43:48 +00003405 fdt=yes
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003406 elif test -d ${source_path}/dtc/libfdt ; then
3407 # have submodule DTC - use it
3408 fdt=yes
3409 dtc_internal="yes"
3410 mkdir -p dtc
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03003411 if [ "$pwd_is_source_path" != "y" ] ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003412 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3413 symlink "$source_path/dtc/scripts" "dtc/scripts"
Juan Quintela2df87df2009-08-12 18:29:54 +02003414 fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003415 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3416 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3417 elif test "$fdt" = "yes" ; then
3418 # have neither and want - prompt for system/submodule install
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003419 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
Stewart Smith3f281822014-01-24 12:39:06 +11003420 " (1) Preferred: Install the DTC (libfdt) devel package" \
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003421 " (2) Fetch the DTC submodule, using:" \
3422 " git submodule update --init dtc"
3423 else
3424 # don't have and don't want
Michael Wallede3a3542011-04-26 00:24:07 +02003425 fdt_libs=
Juan Quintela2df87df2009-08-12 18:29:54 +02003426 fdt=no
aurel32f652e6a2008-12-16 10:43:48 +00003427 fi
3428fi
3429
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003430libs_softmmu="$libs_softmmu $fdt_libs"
3431
Michael Walle20ff0752011-03-07 23:32:39 +01003432##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003433# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003434
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003435if test "$opengl" != "no" ; then
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003436 opengl_pkgs="epoxy libdrm gbm"
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003437 if $pkg_config $opengl_pkgs x11; then
Jeremy Whitef676c672015-01-09 13:08:49 -06003438 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3439 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003440 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003441 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3442 gtk_gl="yes"
3443 fi
Michael Walle20ff0752011-03-07 23:32:39 +01003444 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003445 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003446 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003447 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003448 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003449 opengl_libs=""
3450 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003451 fi
3452fi
3453
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003454if test "$opengl" = "yes"; then
3455 cat > $TMPC << EOF
3456#include <epoxy/egl.h>
3457#ifndef EGL_MESA_image_dma_buf_export
3458# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3459#endif
3460int main(void) { return 0; }
3461EOF
3462 if compile_prog "" "" ; then
3463 opengl_dmabuf=yes
3464 fi
3465fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003466
3467##########################################
3468# archipelago probe
3469if test "$archipelago" != "no" ; then
3470 cat > $TMPC <<EOF
3471#include <stdio.h>
3472#include <xseg/xseg.h>
3473#include <xseg/protocol.h>
3474int main(void) {
3475 xseg_initialize();
3476 return 0;
3477}
3478EOF
3479 archipelago_libs=-lxseg
3480 if compile_prog "" "$archipelago_libs"; then
3481 archipelago="yes"
3482 libs_tools="$archipelago_libs $libs_tools"
3483 libs_softmmu="$archipelago_libs $libs_softmmu"
Stefan Hajnoczi6a460ed2015-04-09 14:52:18 +01003484
3485 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3486 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3487 echo "license and therefore prevent redistribution."
3488 echo
3489 echo "To disable Archipelago, use --disable-archipelago"
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003490 else
3491 if test "$archipelago" = "yes" ; then
3492 feature_not_found "Archipelago backend support" "Install libxseg devel"
3493 fi
3494 archipelago="no"
3495 fi
3496fi
3497
3498
Bharata B Raoeb100392012-09-24 14:42:45 +05303499##########################################
3500# glusterfs probe
3501if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003502 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303503 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003504 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3505 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003506 if $pkg_config --atleast-version=4 glusterfs-api; then
3507 glusterfs_xlator_opt="yes"
3508 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003509 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303510 glusterfs_discard="yes"
3511 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303512 if $pkg_config --atleast-version=6 glusterfs-api; then
3513 glusterfs_zerofill="yes"
3514 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303515 else
3516 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003517 feature_not_found "GlusterFS backend support" \
3518 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303519 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303520 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303521 fi
3522fi
3523
aurel3239386ac2009-04-15 19:48:17 +00003524# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003525# emulator. This is done because older glibc versions don't
3526# have syscall stubs for these implemented. In that case we
3527# don't provide them even if kernel supports them.
3528#
3529inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003530cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003531#include <sys/inotify.h>
3532
3533int
3534main(void)
3535{
3536 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003537 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003538}
3539EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003540if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003541 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003542fi
3543
Riku Voipioc05c7a72010-03-26 15:25:11 +00003544inotify1=no
3545cat > $TMPC << EOF
3546#include <sys/inotify.h>
3547
3548int
3549main(void)
3550{
3551 /* try to start inotify */
3552 return inotify_init1(0);
3553}
3554EOF
3555if compile_prog "" "" ; then
3556 inotify1=yes
3557fi
3558
Riku Voipioebc996f2009-04-21 15:01:51 +03003559# check if utimensat and futimens are supported
3560utimens=no
3561cat > $TMPC << EOF
3562#define _ATFILE_SOURCE
Riku Voipioebc996f2009-04-21 15:01:51 +03003563#include <stddef.h>
3564#include <fcntl.h>
Peter Maydell3014ee02012-07-18 15:10:26 +01003565#include <sys/stat.h>
Riku Voipioebc996f2009-04-21 15:01:51 +03003566
3567int main(void)
3568{
3569 utimensat(AT_FDCWD, "foo", NULL, 0);
3570 futimens(0, NULL);
3571 return 0;
3572}
3573EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003574if compile_prog "" "" ; then
Riku Voipioebc996f2009-04-21 15:01:51 +03003575 utimens=yes
3576fi
3577
Riku Voipio099d6b02009-05-05 12:10:04 +03003578# check if pipe2 is there
3579pipe2=no
3580cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003581#include <unistd.h>
3582#include <fcntl.h>
3583
3584int main(void)
3585{
3586 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003587 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003588}
3589EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003590if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003591 pipe2=yes
3592fi
3593
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003594# check if accept4 is there
3595accept4=no
3596cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003597#include <sys/socket.h>
3598#include <stddef.h>
3599
3600int main(void)
3601{
3602 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3603 return 0;
3604}
3605EOF
3606if compile_prog "" "" ; then
3607 accept4=yes
3608fi
3609
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303610# check if tee/splice is there. vmsplice was added same time.
3611splice=no
3612cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303613#include <unistd.h>
3614#include <fcntl.h>
3615#include <limits.h>
3616
3617int main(void)
3618{
Stefan Weil66ea0f22011-12-17 09:27:35 +01003619 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303620 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3621 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3622 return 0;
3623}
3624EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003625if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303626 splice=yes
3627fi
3628
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003629##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003630# libnuma probe
3631
3632if test "$numa" != "no" ; then
3633 cat > $TMPC << EOF
3634#include <numa.h>
3635int main(void) { return numa_available(); }
3636EOF
3637
3638 if compile_prog "" "-lnuma" ; then
3639 numa=yes
3640 libs_softmmu="-lnuma $libs_softmmu"
3641 else
3642 if test "$numa" = "yes" ; then
3643 feature_not_found "numa" "install numactl devel"
3644 fi
3645 numa=no
3646 fi
3647fi
3648
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003649if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3650 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3651 exit 1
3652fi
3653
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003654##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08003655# tcmalloc probe
3656
3657if test "$tcmalloc" = "yes" ; then
3658 cat > $TMPC << EOF
3659#include <stdlib.h>
3660int main(void) { malloc(1); return 0; }
3661EOF
3662
3663 if compile_prog "" "-ltcmalloc" ; then
3664 LIBS="-ltcmalloc $LIBS"
3665 else
3666 feature_not_found "tcmalloc" "install gperftools devel"
3667 fi
3668fi
3669
3670##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003671# jemalloc probe
3672
3673if test "$jemalloc" = "yes" ; then
3674 cat > $TMPC << EOF
3675#include <stdlib.h>
3676int main(void) { malloc(1); return 0; }
3677EOF
3678
3679 if compile_prog "" "-ljemalloc" ; then
3680 LIBS="-ljemalloc $LIBS"
3681 else
3682 feature_not_found "jemalloc" "install jemalloc devel"
3683 fi
3684fi
3685
3686##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003687# signalfd probe
3688signalfd="no"
3689cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003690#include <unistd.h>
3691#include <sys/syscall.h>
3692#include <signal.h>
3693int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3694EOF
3695
3696if compile_prog "" "" ; then
3697 signalfd=yes
3698fi
3699
Riku Voipioc2882b92009-08-12 15:08:24 +03003700# check if eventfd is supported
3701eventfd=no
3702cat > $TMPC << EOF
3703#include <sys/eventfd.h>
3704
3705int main(void)
3706{
Stefan Weil55cc7f32011-12-17 09:27:37 +01003707 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03003708}
3709EOF
3710if compile_prog "" "" ; then
3711 eventfd=yes
3712fi
3713
Marc-André Lureau751bcc32015-10-09 17:17:16 +02003714# check if memfd is supported
3715memfd=no
3716cat > $TMPC << EOF
3717#include <sys/memfd.h>
3718
3719int main(void)
3720{
3721 return memfd_create("foo", MFD_ALLOW_SEALING);
3722}
3723EOF
3724if compile_prog "" "" ; then
3725 memfd=yes
3726fi
3727
3728
3729
Ulrich Hechtd0927932009-09-17 20:22:14 +03003730# check for fallocate
3731fallocate=no
3732cat > $TMPC << EOF
3733#include <fcntl.h>
3734
3735int main(void)
3736{
3737 fallocate(0, 0, 0, 0);
3738 return 0;
3739}
3740EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003741if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003742 fallocate=yes
3743fi
3744
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01003745# check for fallocate hole punching
3746fallocate_punch_hole=no
3747cat > $TMPC << EOF
3748#include <fcntl.h>
3749#include <linux/falloc.h>
3750
3751int main(void)
3752{
3753 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3754 return 0;
3755}
3756EOF
3757if compile_prog "" "" ; then
3758 fallocate_punch_hole=yes
3759fi
3760
Denis V. Lunevb953f072015-01-30 11:42:14 +03003761# check that fallocate supports range zeroing inside the file
3762fallocate_zero_range=no
3763cat > $TMPC << EOF
3764#include <fcntl.h>
3765#include <linux/falloc.h>
3766
3767int main(void)
3768{
3769 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3770 return 0;
3771}
3772EOF
3773if compile_prog "" "" ; then
3774 fallocate_zero_range=yes
3775fi
3776
Kevin Wolfed911432014-09-29 17:12:59 +02003777# check for posix_fallocate
3778posix_fallocate=no
3779cat > $TMPC << EOF
3780#include <fcntl.h>
3781
3782int main(void)
3783{
3784 posix_fallocate(0, 0, 0);
3785 return 0;
3786}
3787EOF
3788if compile_prog "" "" ; then
3789 posix_fallocate=yes
3790fi
3791
Peter Maydellc727f472011-01-06 11:05:10 +00003792# check for sync_file_range
3793sync_file_range=no
3794cat > $TMPC << EOF
3795#include <fcntl.h>
3796
3797int main(void)
3798{
3799 sync_file_range(0, 0, 0, 0);
3800 return 0;
3801}
3802EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003803if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00003804 sync_file_range=yes
3805fi
3806
Peter Maydelldace20d2011-01-10 13:11:24 +00003807# check for linux/fiemap.h and FS_IOC_FIEMAP
3808fiemap=no
3809cat > $TMPC << EOF
3810#include <sys/ioctl.h>
3811#include <linux/fs.h>
3812#include <linux/fiemap.h>
3813
3814int main(void)
3815{
3816 ioctl(0, FS_IOC_FIEMAP, 0);
3817 return 0;
3818}
3819EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003820if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00003821 fiemap=yes
3822fi
3823
Ulrich Hechtd0927932009-09-17 20:22:14 +03003824# check for dup3
3825dup3=no
3826cat > $TMPC << EOF
3827#include <unistd.h>
3828
3829int main(void)
3830{
3831 dup3(0, 0, 0);
3832 return 0;
3833}
3834EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01003835if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003836 dup3=yes
3837fi
3838
Alex Bligh4e0c6522013-08-21 16:02:43 +01003839# check for ppoll support
3840ppoll=no
3841cat > $TMPC << EOF
3842#include <poll.h>
3843
3844int main(void)
3845{
3846 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3847 ppoll(&pfd, 1, 0, 0);
3848 return 0;
3849}
3850EOF
3851if compile_prog "" "" ; then
3852 ppoll=yes
3853fi
3854
Alex Blighcd758dd2013-08-21 16:02:44 +01003855# check for prctl(PR_SET_TIMERSLACK , ... ) support
3856prctl_pr_set_timerslack=no
3857cat > $TMPC << EOF
3858#include <sys/prctl.h>
3859
3860int main(void)
3861{
3862 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3863 return 0;
3864}
3865EOF
3866if compile_prog "" "" ; then
3867 prctl_pr_set_timerslack=yes
3868fi
3869
Peter Maydell3b6edd12011-02-15 18:35:05 +00003870# check for epoll support
3871epoll=no
3872cat > $TMPC << EOF
3873#include <sys/epoll.h>
3874
3875int main(void)
3876{
3877 epoll_create(0);
3878 return 0;
3879}
3880EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003881if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00003882 epoll=yes
3883fi
3884
Peter Maydell227f0212016-06-06 19:58:11 +01003885# epoll_create1 is a later addition
3886# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00003887epoll_create1=no
3888cat > $TMPC << EOF
3889#include <sys/epoll.h>
3890
3891int main(void)
3892{
Peter Maydell19e83f62011-04-26 16:56:40 +01003893 /* Note that we use epoll_create1 as a value, not as
3894 * a function being called. This is necessary so that on
3895 * old SPARC glibc versions where the function was present in
3896 * the library but not declared in the header file we will
3897 * fail the configure check. (Otherwise we will get a compiler
3898 * warning but not an error, and will proceed to fail the
3899 * qemu compile where we compile with -Werror.)
3900 */
Blue Swirlc075a722012-08-09 20:21:25 +00003901 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00003902}
3903EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003904if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00003905 epoll_create1=yes
3906fi
3907
Peter Maydella8fd1ab2013-02-08 07:31:55 +00003908# check for sendfile support
3909sendfile=no
3910cat > $TMPC << EOF
3911#include <sys/sendfile.h>
3912
3913int main(void)
3914{
3915 return sendfile(0, 0, 0, 0);
3916}
3917EOF
3918if compile_prog "" "" ; then
3919 sendfile=yes
3920fi
3921
Riku Voipio51834342014-06-22 11:25:42 +01003922# check for timerfd support (glibc 2.8 and newer)
3923timerfd=no
3924cat > $TMPC << EOF
3925#include <sys/timerfd.h>
3926
3927int main(void)
3928{
3929 return(timerfd_create(CLOCK_REALTIME, 0));
3930}
3931EOF
3932if compile_prog "" "" ; then
3933 timerfd=yes
3934fi
3935
Riku Voipio9af5c902014-08-12 15:58:57 +03003936# check for setns and unshare support
3937setns=no
3938cat > $TMPC << EOF
3939#include <sched.h>
3940
3941int main(void)
3942{
3943 int ret;
3944 ret = setns(0, 0);
3945 ret = unshare(0);
3946 return ret;
3947}
3948EOF
3949if compile_prog "" "" ; then
3950 setns=yes
3951fi
3952
Aleksandar Markovic38860a02016-10-10 13:23:29 +02003953# clock_adjtime probe
3954clock_adjtime=no
3955cat > $TMPC <<EOF
3956#include <time.h>
3957
3958int main(void)
3959{
3960 return clock_adjtime(0, 0);
3961}
3962EOF
3963clock_adjtime=no
3964if compile_prog "" "" ; then
3965 clock_adjtime=yes
3966fi
3967
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02003968# syncfs probe
3969syncfs=no
3970cat > $TMPC <<EOF
3971#include <unistd.h>
3972
3973int main(void)
3974{
3975 return syncfs(0);
3976}
3977EOF
3978syncfs=no
3979if compile_prog "" "" ; then
3980 syncfs=yes
3981fi
3982
pbrookcc8ae6d2006-04-23 17:57:59 +00003983# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02003984if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01003985 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02003986 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02003987 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02003988 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003989 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02003990 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02003991 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02003992 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00003993fi
3994
Stefan Weilf514f412009-10-11 12:44:07 +02003995# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02003996byteswap_h=no
3997cat > $TMPC << EOF
3998#include <byteswap.h>
3999int main(void) { return bswap_32(0); }
4000EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004001if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004002 byteswap_h=yes
4003fi
4004
Stefan Weil75f13592013-01-05 12:17:38 +01004005# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004006bswap_h=no
4007cat > $TMPC << EOF
4008#include <sys/endian.h>
4009#include <sys/types.h>
4010#include <machine/bswap.h>
4011int main(void) { return bswap32(0); }
4012EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004013if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004014 bswap_h=yes
4015fi
4016
aliguorida93a1f2008-12-12 20:02:52 +00004017##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004018# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004019if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004020 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004021 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004022 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4023 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004024 else
4025 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004026 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004027 fi
4028 libiscsi="no"
4029 fi
4030fi
4031
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004032##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004033# Do we need libm
4034cat > $TMPC << EOF
4035#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004036int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004037EOF
4038if compile_prog "" "" ; then
4039 :
4040elif compile_prog "" "-lm" ; then
4041 LIBS="-lm $LIBS"
4042 libs_qga="-lm $libs_qga"
4043else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004044 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004045fi
4046
4047##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004048# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004049# uClibc provides 2 versions of clock_gettime(), one with realtime
4050# support and one without. This means that the clock_gettime() don't
4051# need -lrt. We still need it for timer_create() so we check for this
4052# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004053cat > $TMPC <<EOF
4054#include <signal.h>
4055#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004056int main(void) {
4057 timer_create(CLOCK_REALTIME, NULL, NULL);
4058 return clock_gettime(CLOCK_REALTIME, NULL);
4059}
aliguorida93a1f2008-12-12 20:02:52 +00004060EOF
4061
Juan Quintela52166aa2009-08-03 14:46:03 +02004062if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004063 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004064# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004065elif compile_prog "" "$pthread_lib -lrt" ; then
4066 LIBS="$LIBS -lrt"
4067 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004068fi
4069
Blue Swirl31ff5042009-09-12 12:33:07 +00004070if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Andreas Färber179cf402010-09-20 00:50:43 +02004071 "$aix" != "yes" -a "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004072 libs_softmmu="-lutil $libs_softmmu"
4073fi
4074
Blue Swirlde5071c2009-09-12 09:58:46 +00004075##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004076# spice probe
4077if test "$spice" != "no" ; then
4078 cat > $TMPC << EOF
4079#include <spice.h>
4080int main(void) { spice_server_new(); return 0; }
4081EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004082 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4083 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004084 if $pkg_config --atleast-version=0.12.0 spice-server && \
4085 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004086 compile_prog "$spice_cflags" "$spice_libs" ; then
4087 spice="yes"
4088 libs_softmmu="$libs_softmmu $spice_libs"
4089 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004090 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4091 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004092 else
4093 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004094 feature_not_found "spice" \
4095 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004096 fi
4097 spice="no"
4098 fi
4099fi
4100
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004101# check for smartcard support
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004102smartcard_cflags=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004103if test "$smartcard" != "no"; then
4104 if $pkg_config libcacard; then
4105 libcacard_cflags=$($pkg_config --cflags libcacard)
4106 libcacard_libs=$($pkg_config --libs libcacard)
4107 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4108 libs_softmmu="$libs_softmmu $libcacard_libs"
4109 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004110 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004111 if test "$smartcard" = "yes"; then
4112 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004113 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004114 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004115 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004116fi
4117
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004118# check for libusb
4119if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004120 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004121 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004122 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4123 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004124 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4125 libs_softmmu="$libs_softmmu $libusb_libs"
4126 else
4127 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004128 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004129 fi
4130 libusb="no"
4131 fi
4132fi
4133
Hans de Goede69354a82011-07-19 11:04:10 +02004134# check for usbredirparser for usb network redirection support
4135if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004136 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004137 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004138 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4139 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004140 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
Aurelien Jarno56ab2ad2012-09-11 20:57:58 +02004141 libs_softmmu="$libs_softmmu $usb_redir_libs"
Hans de Goede69354a82011-07-19 11:04:10 +02004142 else
4143 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004144 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004145 fi
4146 usb_redir="no"
4147 fi
4148fi
4149
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004150##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004151# check if we have VSS SDK headers for win
4152
4153if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4154 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004155 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004156 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4157 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004158 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004159 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4160 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004161 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004162 esac
4163 cat > $TMPC << EOF
4164#define __MIDL_user_allocate_free_DEFINED__
4165#include <inc/win2003/vss.h>
4166int main(void) { return VSS_CTX_BACKUP; }
4167EOF
4168 if compile_prog "$vss_win32_include" "" ; then
4169 guest_agent_with_vss="yes"
4170 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004171 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004172 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004173 else
4174 if test "$vss_win32_sdk" != "" ; then
4175 echo "ERROR: Please download and install Microsoft VSS SDK:"
4176 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4177 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4178 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4179 echo "ERROR: The headers are extracted in the directory \`inc'."
4180 feature_not_found "VSS support"
4181 fi
4182 guest_agent_with_vss="no"
4183 fi
4184fi
4185
4186##########################################
4187# lookup Windows platform SDK (if not specified)
4188# The SDK is needed only to build .tlb (type library) file of guest agent
4189# VSS provider from the source. It is usually unnecessary because the
4190# pre-compiled .tlb file is included.
4191
4192if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4193 if test -z "$win_sdk"; then
4194 programfiles="$PROGRAMFILES"
4195 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4196 if test -n "$programfiles"; then
4197 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4198 else
4199 feature_not_found "Windows SDK"
4200 fi
4201 elif test "$win_sdk" = "no"; then
4202 win_sdk=""
4203 fi
4204fi
4205
4206##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004207# check if mingw environment provides a recent ntddscsi.h
4208if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4209 cat > $TMPC << EOF
4210#include <windows.h>
4211#include <ntddscsi.h>
4212int main(void) {
4213#if !defined(IOCTL_SCSI_GET_ADDRESS)
4214#error Missing required ioctl definitions
4215#endif
4216 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4217 return addr.Lun;
4218}
4219EOF
4220 if compile_prog "" "" ; then
4221 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004222 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004223 fi
4224fi
4225
4226##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004227# virgl renderer probe
4228
4229if test "$virglrenderer" != "no" ; then
4230 cat > $TMPC << EOF
4231#include <virglrenderer.h>
4232int main(void) { virgl_renderer_poll(); return 0; }
4233EOF
4234 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4235 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4236 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4237 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4238 virglrenderer="yes"
4239 else
4240 if test "$virglrenderer" = "yes" ; then
4241 feature_not_found "virglrenderer"
4242 fi
4243 virglrenderer="no"
4244 fi
4245fi
4246
4247##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004248# check if we have fdatasync
4249
4250fdatasync=no
4251cat > $TMPC << EOF
4252#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004253int main(void) {
4254#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4255return fdatasync(0);
4256#else
Stefan Weile172fe12012-04-06 21:33:20 +02004257#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004258#endif
4259}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004260EOF
4261if compile_prog "" "" ; then
4262 fdatasync=yes
4263fi
4264
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004265##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004266# check if we have madvise
4267
4268madvise=no
4269cat > $TMPC << EOF
4270#include <sys/types.h>
4271#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004272#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004273int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4274EOF
4275if compile_prog "" "" ; then
4276 madvise=yes
4277fi
4278
4279##########################################
4280# check if we have posix_madvise
4281
4282posix_madvise=no
4283cat > $TMPC << EOF
4284#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004285#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004286int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4287EOF
4288if compile_prog "" "" ; then
4289 posix_madvise=yes
4290fi
4291
4292##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004293# check if we have posix_syslog
4294
4295posix_syslog=no
4296cat > $TMPC << EOF
4297#include <syslog.h>
4298int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4299EOF
4300if compile_prog "" "" ; then
4301 posix_syslog=yes
4302fi
4303
4304##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004305# check if trace backend exists
4306
Lluís Vilanova5b808272014-05-27 15:02:14 +02004307$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004308if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004309 error_exit "invalid trace backends" \
4310 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004311fi
4312
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004313##########################################
4314# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004315if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004316 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004317#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004318int main(void) { return 0; }
4319EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004320 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004321 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004322 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004323 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004324 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004325 fi
4326 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004327 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004328 else
4329 urcu_bp_libs="-lurcu-bp"
4330 fi
4331
4332 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4333 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004334 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004335 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004336 fi
4337fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004338
4339##########################################
4340# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004341if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004342 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004343 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004344 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004345 trace_backend_stap="no"
4346 if has 'stap' ; then
4347 trace_backend_stap="yes"
4348 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004349fi
4350
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004351##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004352# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304353
Peter Maydell7c2acc72013-04-08 12:11:27 +01004354# We prefer ucontext, but it's not always possible. The fallback
4355# is sigcontext. gthread is not selectable except explicitly, because
4356# it is not functional enough to run QEMU proper. (It is occasionally
4357# useful for debugging purposes.) On Windows the only valid backend
4358# is the Windows-specific one.
4359
4360ucontext_works=no
4361if test "$darwin" != "yes"; then
4362 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304363#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004364#ifdef __stub_makecontext
4365#error Ignoring glibc stub makecontext which will always fail
4366#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004367int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304368EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004369 if compile_prog "" "" ; then
4370 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304371 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004372fi
4373
4374if test "$coroutine" = ""; then
4375 if test "$mingw32" = "yes"; then
4376 coroutine=win32
4377 elif test "$ucontext_works" = "yes"; then
4378 coroutine=ucontext
4379 else
4380 coroutine=sigaltstack
4381 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004382else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004383 case $coroutine in
4384 windows)
4385 if test "$mingw32" != "yes"; then
4386 error_exit "'windows' coroutine backend only valid for Windows"
4387 fi
4388 # Unfortunately the user visible backend name doesn't match the
4389 # coroutine-*.c filename for this case, so we have to adjust it here.
4390 coroutine=win32
4391 ;;
4392 ucontext)
4393 if test "$ucontext_works" != "yes"; then
4394 feature_not_found "ucontext"
4395 fi
4396 ;;
4397 gthread|sigaltstack)
4398 if test "$mingw32" = "yes"; then
4399 error_exit "only the 'windows' coroutine backend is valid for Windows"
4400 fi
4401 ;;
4402 *)
4403 error_exit "unknown coroutine backend $coroutine"
4404 ;;
4405 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304406fi
4407
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004408if test "$coroutine_pool" = ""; then
4409 if test "$coroutine" = "gthread"; then
4410 coroutine_pool=no
4411 else
4412 coroutine_pool=yes
4413 fi
4414fi
4415if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4416 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4417fi
4418
Peter Lieven7d992e42016-09-27 11:58:45 +02004419if test "$debug_stack_usage" = "yes"; then
4420 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4421 error_exit "stack usage debugging is not supported for $cpu"
4422 fi
4423 if test "$coroutine_pool" = "yes"; then
4424 echo "WARN: disabling coroutine pool for stack usage debugging"
4425 coroutine_pool=no
4426 fi
4427fi
4428
4429
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304430##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304431# check if we have open_by_handle_at
4432
Stefan Weil4e1797f2012-06-18 22:11:06 +02004433open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304434cat > $TMPC << EOF
4435#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004436#if !defined(AT_EMPTY_PATH)
4437# error missing definition
4438#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004439int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004440#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304441EOF
4442if compile_prog "" "" ; then
4443 open_by_handle_at=yes
4444fi
4445
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304446########################################
4447# check if we have linux/magic.h
4448
4449linux_magic_h=no
4450cat > $TMPC << EOF
4451#include <linux/magic.h>
4452int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004453 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304454}
4455EOF
4456if compile_prog "" "" ; then
4457 linux_magic_h=yes
4458fi
4459
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004460########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004461# check whether we can disable warning option with a pragma (this is needed
4462# to silence warnings in the headers of some versions of external libraries).
4463# This test has to be compiled with -Werror as otherwise an unknown pragma is
4464# only a warning.
4465#
4466# If we can't selectively disable warning in the code, disable -Werror so that
4467# the build doesn't fail anyway.
4468
Peter Maydell06d71fa2012-07-30 16:13:07 +01004469pragma_disable_unused_but_set=no
4470cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004471#pragma GCC diagnostic push
Peter Maydell06d71fa2012-07-30 16:13:07 +01004472#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
Kevin Wolfc95e3082013-02-22 21:08:51 +01004473#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004474#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004475
Peter Maydell06d71fa2012-07-30 16:13:07 +01004476int main(void) {
4477 return 0;
4478}
4479EOF
4480if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004481 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004482else
4483 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004484fi
4485
4486########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004487# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004488
4489valgrind_h=no
4490cat > $TMPC << EOF
4491#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004492int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004493 return 0;
4494}
4495EOF
4496if compile_prog "" "" ; then
4497 valgrind_h=yes
4498fi
4499
4500########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004501# check if environ is declared
4502
4503has_environ=no
4504cat > $TMPC << EOF
4505#include <unistd.h>
4506int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00004507 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004508 return 0;
4509}
4510EOF
4511if compile_prog "" "" ; then
4512 has_environ=yes
4513fi
4514
Richard Henderson76a347e2012-12-28 14:17:02 -08004515########################################
4516# check if cpuid.h is usable.
4517
4518cpuid_h=no
4519cat > $TMPC << EOF
4520#include <cpuid.h>
4521int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00004522 unsigned a, b, c, d;
4523 int max = __get_cpuid_max(0, 0);
4524
4525 if (max >= 1) {
4526 __cpuid(1, a, b, c, d);
4527 }
4528
4529 if (max >= 7) {
4530 __cpuid_count(7, 0, a, b, c, d);
4531 }
4532
4533 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08004534}
4535EOF
4536if compile_prog "" "" ; then
4537 cpuid_h=yes
4538fi
4539
Richard Hendersonf5401662013-02-16 12:46:59 -08004540########################################
4541# check if __[u]int128_t is usable.
4542
4543int128=no
4544cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01004545#if defined(__clang_major__) && defined(__clang_minor__)
4546# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4547# error __int128_t does not work in CLANG before 3.2
4548# endif
4549#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08004550__int128_t a;
4551__uint128_t b;
4552int main (void) {
4553 a = a + b;
4554 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01004555 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08004556 return 0;
4557}
4558EOF
4559if compile_prog "" "" ; then
4560 int128=yes
4561fi
Richard Henderson76a347e2012-12-28 14:17:02 -08004562
Richard Henderson7ebee432016-06-29 21:10:59 -07004563#########################################
4564# See if 128-bit atomic operations are supported.
4565
4566atomic128=no
4567if test "$int128" = "yes"; then
4568 cat > $TMPC << EOF
4569int main(void)
4570{
4571 unsigned __int128 x = 0, y = 0;
4572 y = __atomic_load_16(&x, 0);
4573 __atomic_store_16(&x, y, 0);
4574 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4575 return 0;
4576}
4577EOF
4578 if compile_prog "" "" ; then
4579 atomic128=yes
4580 fi
4581fi
4582
Richard Hendersondf79b992016-09-02 12:23:57 -07004583#########################################
4584# See if 64-bit atomic operations are supported.
4585# Note that without __atomic builtins, we can only
4586# assume atomic loads/stores max at pointer size.
4587
4588cat > $TMPC << EOF
4589#include <stdint.h>
4590int main(void)
4591{
4592 uint64_t x = 0, y = 0;
4593#ifdef __ATOMIC_RELAXED
4594 y = __atomic_load_8(&x, 0);
4595 __atomic_store_8(&x, y, 0);
4596 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4597 __atomic_exchange_8(&x, y, 0);
4598 __atomic_fetch_add_8(&x, y, 0);
4599#else
4600 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4601 __sync_lock_test_and_set(&x, y);
4602 __sync_val_compare_and_swap(&x, y, 0);
4603 __sync_fetch_and_add(&x, y);
4604#endif
4605 return 0;
4606}
4607EOF
4608if compile_prog "" "" ; then
4609 atomic64=yes
4610fi
4611
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08004612########################################
4613# check if getauxval is available.
4614
4615getauxval=no
4616cat > $TMPC << EOF
4617#include <sys/auxv.h>
4618int main(void) {
4619 return getauxval(AT_HWCAP) == 0;
4620}
4621EOF
4622if compile_prog "" "" ; then
4623 getauxval=yes
4624fi
4625
John Snowfd0e6052015-03-25 18:57:39 -04004626########################################
4627# check if ccache is interfering with
4628# semantic analysis of macros
4629
John Snow5e4dfd32015-10-28 13:56:40 -04004630unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04004631ccache_cpp2=no
4632cat > $TMPC << EOF
4633static const int Z = 1;
4634#define fn() ({ Z; })
4635#define TAUT(X) ((X) == Z)
4636#define PAREN(X, Y) (X == Y)
4637#define ID(X) (X)
4638int main(int argc, char *argv[])
4639{
4640 int x = 0, y = 0;
4641 x = ID(x);
4642 x = fn();
4643 fn();
4644 if (PAREN(x, y)) return 0;
4645 if (TAUT(Z)) return 0;
4646 return 0;
4647}
4648EOF
4649
4650if ! compile_object "-Werror"; then
4651 ccache_cpp2=yes
4652fi
4653
John Snowb553a042015-11-03 15:43:42 -05004654#################################################
4655# clang does not support glibc + FORTIFY_SOURCE.
4656
4657if test "$fortify_source" != "no"; then
4658 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4659 fortify_source="no";
John Snowcfcc7c12015-11-12 11:29:49 -05004660 elif test -n "$cxx" &&
4661 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05004662 fortify_source="no";
4663 else
4664 fortify_source="yes"
4665 fi
4666fi
4667
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304668##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04004669# check if struct fsxattr is available via linux/fs.h
4670
4671have_fsxattr=no
4672cat > $TMPC << EOF
4673#include <linux/fs.h>
4674struct fsxattr foo;
4675int main(void) {
4676 return 0;
4677}
4678EOF
4679if compile_prog "" "" ; then
4680 have_fsxattr=yes
4681fi
4682
Peter Maydellb66e10e2016-06-08 18:34:32 +01004683##########################################
4684# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02004685have_rtnetlink=no
4686cat > $TMPC << EOF
4687#include <linux/rtnetlink.h>
4688int main(void) {
4689 return IFLA_PROTO_DOWN;
4690}
4691EOF
4692if compile_prog "" "" ; then
4693 have_rtnetlink=yes
4694fi
4695
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01004696##########################################
4697# check for usable AF_VSOCK environment
4698have_af_vsock=no
4699cat > $TMPC << EOF
4700#include <errno.h>
4701#include <sys/types.h>
4702#include <sys/socket.h>
4703#if !defined(AF_VSOCK)
4704# error missing AF_VSOCK flag
4705#endif
4706#include <linux/vm_sockets.h>
4707int main(void) {
4708 int sock, ret;
4709 struct sockaddr_vm svm;
4710 socklen_t len = sizeof(svm);
4711 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4712 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4713 if ((ret == -1) && (errno == ENOTCONN)) {
4714 return 0;
4715 }
4716 return -1;
4717}
4718EOF
4719if compile_prog "" "" ; then
4720 have_af_vsock=yes
4721fi
4722
James Clarke6969ec62016-06-06 12:02:50 +01004723#################################################
4724# Sparc implicitly links with --relax, which is
4725# incompatible with -r, so --no-relax should be
4726# given. It does no harm to give it on other
4727# platforms too.
4728
4729# Note: the prototype is needed since QEMU_CFLAGS
4730# contains -Wmissing-prototypes
4731cat > $TMPC << EOF
4732extern int foo(void);
4733int foo(void) { return 0; }
4734EOF
4735if ! compile_object ""; then
4736 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4737fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01004738for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4739 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4740 LD_REL_FLAGS=$i
4741 break
4742 fi
4743done
4744if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4745 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01004746fi
4747
Jan Vesely277abf12016-04-29 13:15:23 -04004748##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02004749# End of CC checks
4750# After here, no more $cc or $ld runs
4751
Blue Swirl1d728c32012-05-01 18:45:39 +00004752if test "$gcov" = "yes" ; then
4753 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4754 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05004755elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02004756 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Peter Maydellce278612015-11-09 15:14:09 +00004757elif test "$debug" = "no"; then
4758 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02004759fi
Juan Quintelaa316e372009-09-30 01:10:55 +02004760
Peter Lieven6542aa92014-02-03 10:26:13 +01004761##########################################
4762# Do we have libnfs
4763if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01004764 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01004765 libnfs="yes"
4766 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01004767 else
4768 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004769 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01004770 fi
4771 libnfs="no"
4772 fi
4773fi
Blue Swirl1d728c32012-05-01 18:45:39 +00004774
Peter Maydell6ca026c2012-07-18 15:10:18 +01004775# Now we've finished running tests it's OK to add -Werror to the compiler flags
4776if test "$werror" = "yes"; then
4777 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4778fi
4779
Juan Quintelae86ecd42009-08-03 14:45:59 +02004780if test "$solaris" = "no" ; then
4781 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02004782 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02004783 fi
4784fi
4785
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02004786# test if pod2man has --utf8 option
4787if pod2man --help | grep -q utf8; then
4788 POD2MAN="pod2man --utf8"
4789else
4790 POD2MAN="pod2man"
4791fi
4792
Blue Swirl952afb72010-09-19 08:36:34 +00004793# Use ASLR, no-SEH and DEP if available
4794if test "$mingw32" = "yes" ; then
4795 for flag in --dynamicbase --no-seh --nxcompat; do
4796 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4797 LDFLAGS="-Wl,$flag $LDFLAGS"
4798 fi
4799 done
4800fi
4801
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03004802qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08004803qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03004804qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06004805qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02004806
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01004807tools=""
4808if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02004809 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01004810 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4811 tools="qemu-nbd\$(EXESUF) $tools"
David Marchanda75eb032014-09-08 11:17:48 +02004812 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01004813 fi
4814fi
4815if test "$softmmu" = yes ; then
Meador Inge983eef52012-02-24 14:00:42 +05304816 if test "$virtfs" != no ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02004817 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4818 virtfs=yes
4819 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4820 else
4821 if test "$virtfs" = yes; then
Stefan Weil3f3b5382016-04-08 18:11:13 +02004822 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05304823 fi
Andreas Färber17500372012-05-01 01:12:03 +02004824 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02004825 fi
M. Mohan Kumar17bff522011-12-14 13:58:42 +05304826 fi
Michael Tokareve8ef31a2013-07-31 14:22:07 +04004827fi
Michael Roth9d6bc272015-08-26 10:49:13 -05004828
4829# Probe for guest agent support/options
4830
Michael Tokareve8ef31a2013-07-31 14:22:07 +04004831if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04004832 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05004833 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04004834 guest_agent=yes
4835 elif [ "$guest_agent" != yes ]; then
4836 guest_agent=no
4837 else
4838 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02004839 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02004840fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02004841
Michael Roth9d6bc272015-08-26 10:49:13 -05004842# Guest agent Window MSI package
4843
4844if test "$guest_agent" != yes; then
4845 if test "$guest_agent_msi" = yes; then
4846 error_exit "MSI guest agent package requires guest agent enabled"
4847 fi
4848 guest_agent_msi=no
4849elif test "$mingw32" != "yes"; then
4850 if test "$guest_agent_msi" = "yes"; then
4851 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4852 fi
4853 guest_agent_msi=no
4854elif ! has wixl; then
4855 if test "$guest_agent_msi" = "yes"; then
4856 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4857 fi
4858 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05004859else
4860 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4861 # disabled explicitly
4862 if test "$guest_agent_msi" != "no"; then
4863 guest_agent_msi=yes
4864 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05004865fi
4866
Michael Roth1a349042015-08-26 11:14:31 -05004867if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05004868 if test "$guest_agent_with_vss" = "yes"; then
4869 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4870 fi
4871
4872 if test "$QEMU_GA_MANUFACTURER" = ""; then
4873 QEMU_GA_MANUFACTURER=QEMU
4874 fi
4875
4876 if test "$QEMU_GA_DISTRO" = ""; then
4877 QEMU_GA_DISTRO=Linux
4878 fi
4879
4880 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02004881 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05004882 fi
4883
Stefan Weil89138852016-05-16 15:10:20 +02004884 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05004885
4886 case "$cpu" in
4887 x86_64)
4888 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4889 ;;
4890 i386)
4891 QEMU_GA_MSI_ARCH="-D Arch=32"
4892 ;;
4893 *)
4894 error_exit "CPU $cpu not supported for building installation package"
4895 ;;
4896 esac
4897fi
4898
Paolo Bonzinica35f782010-05-26 16:08:29 +02004899# Mac OS X ships with a broken assembler
4900roms=
4901if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4902 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4903 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01004904 # Different host OS linkers have different ideas about the name of the ELF
4905 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
4906 # variant; and Windows uses i386pe.
4907 for emu in elf_i386 elf_i386_fbsd i386pe; do
4908 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4909 ld_i386_emulation="$emu"
4910 roms="optionrom"
4911 break
4912 fi
4913 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02004914fi
Andreas Färberd0384d12011-05-01 18:23:56 +02004915if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11004916 roms="$roms spapr-rtas"
4917fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02004918
Christian Borntraeger9933c302013-04-23 01:23:03 +00004919if test "$cpu" = "s390x" ; then
4920 roms="$roms s390-ccw"
4921fi
4922
Richard Henderson964c6fa2013-06-21 19:10:16 -07004923# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01004924if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07004925 textseg_addr=
4926 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07004927 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4928 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07004929 textseg_addr=0x60000000
4930 ;;
4931 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07004932 # A 256M aligned address, high in the address space, with enough
4933 # room for the code_gen_buffer above it before the stack.
4934 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07004935 ;;
4936 esac
4937 if [ -n "$textseg_addr" ]; then
4938 cat > $TMPC <<EOF
4939 int main(void) { return 0; }
4940EOF
4941 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4942 if ! compile_prog "" "$textseg_ldflags"; then
4943 # In case ld does not support -Ttext-segment, edit the default linker
4944 # script via sed to set the .text start addr. This is needed on FreeBSD
4945 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01004946 if ! $ld --verbose >/dev/null 2>&1; then
4947 error_exit \
4948 "We need to link the QEMU user mode binaries at a" \
4949 "specific text address. Unfortunately your linker" \
4950 "doesn't support either the -Ttext-segment option or" \
4951 "printing the default linker script with --verbose." \
4952 "If you don't want the user mode binaries, pass the" \
4953 "--disable-user option to configure."
4954 fi
4955
Richard Henderson964c6fa2013-06-21 19:10:16 -07004956 $ld --verbose | sed \
4957 -e '1,/==================================================/d' \
4958 -e '/==================================================/,$d' \
4959 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4960 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4961 textseg_ldflags="-Wl,-T../config-host.ld"
4962 fi
4963 fi
4964fi
4965
Cole Robinson02d34f62016-05-06 14:03:09 -04004966echo_version() {
4967 if test "$1" = "yes" ; then
4968 echo "($2)"
4969 fi
4970}
4971
Jan Kiszka50e12062014-10-02 10:03:55 +02004972# prepend pixman and ftd flags after all config tests are done
4973QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4974libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01004975
bellard43ce4df2003-06-09 19:53:12 +00004976echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02004977echo "BIOS directory $(eval echo $qemu_datadir)"
4978echo "binary directory $(eval echo $bindir)"
4979echo "library directory $(eval echo $libdir)"
4980echo "module directory $(eval echo $qemu_moddir)"
4981echo "libexec directory $(eval echo $libexecdir)"
4982echo "include directory $(eval echo $includedir)"
4983echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00004984if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02004985echo "local state directory $(eval echo $local_statedir)"
4986echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00004987echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02004988else
4989echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004990echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00004991fi
bellard5a671352003-10-01 00:13:48 +00004992echo "Source path $source_path"
bellard43ce4df2003-06-09 19:53:12 +00004993echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00004994echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04004995echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01004996echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01004997echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02004998echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02004999echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005000echo "LDFLAGS $LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005001echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005002echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005003echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005004if test "$slirp" = "yes" ; then
5005 echo "smbd $smbd"
5006fi
Fam Zheng17969262014-02-10 14:48:56 +08005007echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005008echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005009echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005010echo "target list $target_list"
aurel32ade25b02009-04-16 09:58:41 +00005011echo "tcg debug enabled $debug_tcg"
bellard43ce4df2003-06-09 19:53:12 +00005012echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005013echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005014echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005015echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005016echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005017if test "$darwin" = "yes" ; then
5018 echo "Cocoa support $cocoa"
5019fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02005020echo "pixman $pixman"
Stefan Weil89138852016-05-16 15:10:20 +02005021echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5022echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005023echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005024echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005025echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005026echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005027echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005028echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005029echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02005030echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005031echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005032echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005033echo "curses support $curses"
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005034echo "virgl support $virglrenderer"
Alexander Graf769ce762009-05-11 17:41:42 +02005035echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005036echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005037echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005038echo "Block whitelist (rw) $block_drv_rw_whitelist"
5039echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305040echo "VirtFS support $virtfs"
Jes Sorensen821601e2011-03-16 13:33:36 +01005041echo "VNC support $vnc"
5042if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005043 echo "VNC SASL support $vnc_sasl"
5044 echo "VNC JPEG support $vnc_jpeg"
5045 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005046fi
blueswir131422552007-04-16 18:27:06 +00005047if test -n "$sparc_cpu"; then
5048 echo "Target Sparc Arch $sparc_cpu"
5049fi
aliguorie37630c2009-04-22 15:19:10 +00005050echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005051if test "$xen" = "yes" ; then
5052 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005053 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005054fi
aurel322e4d9fb2008-04-08 06:01:02 +00005055echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005056echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005057echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005058echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005059echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005060echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005061echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005062echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005063echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005064echo "KVM support $kvm"
zhanghailiang180fb752016-10-27 14:43:08 +08005065echo "COLO support $colo"
Michael R. Hines2da776d2013-07-22 10:01:54 -04005066echo "RDMA support $rdma"
Stefan Weil9195b2c2011-10-19 07:07:18 +02005067echo "TCG interpreter $tcg_interpreter"
aurel32f652e6a2008-12-16 10:43:48 +00005068echo "fdt support $fdt"
aliguoriceb42de2009-04-07 18:43:28 +00005069echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005070echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005071echo "madvise $madvise"
5072echo "posix_madvise $posix_madvise"
Corey Bryant47e98652012-01-26 09:42:26 -05005073echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005074echo "vhost-net support $vhost_net"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005075echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005076echo "vhost-vsock support $vhost_vsock"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005077echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005078if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005079echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005080fi
Stefan Weil89138852016-05-16 15:10:20 +02005081echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005082echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005083echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005084echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005085echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005086echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005087echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005088echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005089echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01005090echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05005091echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005092echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05005093echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05005094echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03005095echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01005096echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005097echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02005098echo "debug stack usage $debug_stack_usage"
Bharata B Raoeb100392012-09-24 14:42:45 +05305099echo "GlusterFS support $glusterfs"
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03005100echo "Archipelago support $archipelago"
Blue Swirl1d728c32012-05-01 18:45:39 +00005101echo "gcov $gcov_tool"
5102echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05005103echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005104echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005105echo "TPM passthrough $tpm_passthrough"
Paolo Bonzini3556c232013-05-10 14:16:40 +02005106echo "QOM debugging $qom_cast_debug"
qiaonuohan607dacd2014-02-18 14:11:30 +08005107echo "lzo support $lzo"
5108echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01005109echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08005110echo "NUMA host support $numa"
Fam Zheng2847b462015-03-26 11:03:12 +08005111echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02005112echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08005113echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005114echo "replication support $replication"
bellard67b915a2004-03-31 23:37:16 +00005115
Stefan Weil1ba16962011-07-29 22:40:45 +02005116if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00005117echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00005118fi
bellard97a847b2003-08-10 21:36:04 +00005119
Juan Quintela98ec69a2009-07-16 18:34:18 +02005120config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00005121
Stefan Weildbd99ae2013-01-01 18:33:44 +01005122echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5123
Juan Quintela98ec69a2009-07-16 18:34:18 +02005124echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005125echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005126
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02005127echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005128echo "prefix=$prefix" >> $config_host_mak
5129echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03005130echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04005131echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02005132echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005133echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005134echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03005135echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03005136echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5137echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08005138echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005139if test "$mingw32" = "no" ; then
5140 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5141fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04005142echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +01005143echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5144echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06005145echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02005146echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005147
Juan Quintela98ec69a2009-07-16 18:34:18 +02005148echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02005149
aurel32f8393942009-04-13 18:45:38 +00005150if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005151 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00005152fi
aliguori1625af82009-04-05 17:41:02 +00005153if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07005154 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00005155fi
bellard7d132992003-03-06 23:23:54 +00005156if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02005157 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005158fi
bellard67b915a2004-03-31 23:37:16 +00005159if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005160 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02005161 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00005162 version_major=${rc_version%%.*}
5163 rc_version=${rc_version#*.}
5164 version_minor=${rc_version%%.*}
5165 rc_version=${rc_version#*.}
5166 version_subminor=${rc_version%%.*}
5167 version_micro=0
5168 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5169 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005170 if test "$guest_agent_with_vss" = "yes" ; then
5171 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05005172 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005173 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5174 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05005175 if test "$guest_agent_ntddscsi" = "yes" ; then
5176 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5177 fi
Michael Roth1a349042015-08-26 11:14:31 -05005178 if test "$guest_agent_msi" = "yes"; then
Yossi Hindin9dacf322015-05-06 14:57:40 +03005179 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5180 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5181 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5182 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5183 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5184 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5185 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5186 fi
pbrook210fa552007-02-27 21:04:49 +00005187else
Juan Quintela35f4df22009-07-27 16:13:07 +02005188 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00005189fi
blueswir1128ab2f2008-08-15 18:33:42 +00005190
Mark McLoughlindffcb712009-10-22 17:49:11 +01005191if test "$linux" = "yes" ; then
5192 echo "CONFIG_LINUX=y" >> $config_host_mak
5193fi
5194
bellard83fb7ad2004-07-05 21:25:26 +00005195if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005196 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00005197fi
malcb29fe3e2008-11-18 01:42:22 +00005198
5199if test "$aix" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005200 echo "CONFIG_AIX=y" >> $config_host_mak
malcb29fe3e2008-11-18 01:42:22 +00005201fi
5202
bellardec530c82006-04-25 22:36:06 +00005203if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005204 echo "CONFIG_SOLARIS=y" >> $config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02005205 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
ths0475a5c2007-04-01 18:54:44 +00005206 if test "$needs_libsunmath" = "yes" ; then
Juan Quintela75b5a692009-07-27 16:13:23 +02005207 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
ths0475a5c2007-04-01 18:54:44 +00005208 fi
bellardec530c82006-04-25 22:36:06 +00005209fi
Andreas Färber179cf402010-09-20 00:50:43 +02005210if test "$haiku" = "yes" ; then
5211 echo "CONFIG_HAIKU=y" >> $config_host_mak
5212fi
bellard97a847b2003-08-10 21:36:04 +00005213if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005214 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005215fi
Stefan Weil1ba16962011-07-29 22:40:45 +02005216if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005217 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00005218fi
bellardc20709a2004-04-21 23:27:19 +00005219if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005220 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04005221 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00005222fi
ths8a16d272008-07-19 09:56:24 +00005223if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005224 echo "CONFIG_VDE=y" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00005225fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01005226if test "$netmap" = "yes" ; then
5227 echo "CONFIG_NETMAP=y" >> $config_host_mak
5228fi
Gonglei015a33b2014-07-01 20:58:08 +08005229if test "$l2tpv3" = "yes" ; then
5230 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5231fi
Corey Bryant47e98652012-01-26 09:42:26 -05005232if test "$cap_ng" = "yes" ; then
5233 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5234fi
Juan Quintela2358a492009-07-27 16:13:25 +02005235echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005236for drv in $audio_drv_list; do
Stefan Weil89138852016-05-16 15:10:20 +02005237 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Juan Quintela98ec69a2009-07-16 18:34:18 +02005238 echo "$def=y" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005239done
Juan Quintela67f86e82009-08-03 14:46:59 +02005240if test "$audio_pt_int" = "yes" ; then
5241 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5242fi
malcd5631632009-10-10 01:13:41 +04005243if test "$audio_win_int" = "yes" ; then
5244 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5245fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005246echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5247echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01005248if test "$vnc" = "yes" ; then
5249 echo "CONFIG_VNC=y" >> $config_host_mak
5250fi
aliguori2f9606b2009-03-06 20:27:28 +00005251if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005252 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00005253fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005254if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005255 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005256fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005257if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02005258 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02005259fi
aliguori76655d62009-03-06 20:27:37 +00005260if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005261 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00005262fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005263if test "$xfs" = "yes" ; then
5264 echo "CONFIG_XFS=y" >> $config_host_mak
5265fi
Stefan Weil89138852016-05-16 15:10:20 +02005266qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02005267echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02005268echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005269echo "SRC_PATH=$source_path" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005270echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02005271if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005272 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00005273fi
Fam Zheng17969262014-02-10 14:48:56 +08005274if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08005275 # $shacmd can generate a hash started with digit, which the compiler doesn't
5276 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02005277 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08005278 echo "CONFIG_MODULES=y" >> $config_host_mak
5279fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02005280if test "$sdl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005281 echo "CONFIG_SDL=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005282 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02005283 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005284fi
5285if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005286 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00005287fi
5288if test "$curses" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005289 echo "CONFIG_CURSES=y" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005290fi
Riku Voipioebc996f2009-04-21 15:01:51 +03005291if test "$utimens" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005292 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
Riku Voipioebc996f2009-04-21 15:01:51 +03005293fi
Riku Voipio099d6b02009-05-05 12:10:04 +03005294if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005295 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03005296fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01005297if test "$accept4" = "yes" ; then
5298 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5299fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305300if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005301 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305302fi
Riku Voipioc2882b92009-08-12 15:08:24 +03005303if test "$eventfd" = "yes" ; then
5304 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5305fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02005306if test "$memfd" = "yes" ; then
5307 echo "CONFIG_MEMFD=y" >> $config_host_mak
5308fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005309if test "$fallocate" = "yes" ; then
5310 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5311fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01005312if test "$fallocate_punch_hole" = "yes" ; then
5313 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5314fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03005315if test "$fallocate_zero_range" = "yes" ; then
5316 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5317fi
Kevin Wolfed911432014-09-29 17:12:59 +02005318if test "$posix_fallocate" = "yes" ; then
5319 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5320fi
Peter Maydellc727f472011-01-06 11:05:10 +00005321if test "$sync_file_range" = "yes" ; then
5322 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5323fi
Peter Maydelldace20d2011-01-10 13:11:24 +00005324if test "$fiemap" = "yes" ; then
5325 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5326fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005327if test "$dup3" = "yes" ; then
5328 echo "CONFIG_DUP3=y" >> $config_host_mak
5329fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01005330if test "$ppoll" = "yes" ; then
5331 echo "CONFIG_PPOLL=y" >> $config_host_mak
5332fi
Alex Blighcd758dd2013-08-21 16:02:44 +01005333if test "$prctl_pr_set_timerslack" = "yes" ; then
5334 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5335fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00005336if test "$epoll" = "yes" ; then
5337 echo "CONFIG_EPOLL=y" >> $config_host_mak
5338fi
5339if test "$epoll_create1" = "yes" ; then
5340 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5341fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00005342if test "$sendfile" = "yes" ; then
5343 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5344fi
Riku Voipio51834342014-06-22 11:25:42 +01005345if test "$timerfd" = "yes" ; then
5346 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5347fi
Riku Voipio9af5c902014-08-12 15:58:57 +03005348if test "$setns" = "yes" ; then
5349 echo "CONFIG_SETNS=y" >> $config_host_mak
5350fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02005351if test "$clock_adjtime" = "yes" ; then
5352 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5353fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02005354if test "$syncfs" = "yes" ; then
5355 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5356fi
aurel323b3f24a2009-04-15 16:12:13 +00005357if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005358 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00005359fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00005360if test "$inotify1" = "yes" ; then
5361 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5362fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005363if test "$byteswap_h" = "yes" ; then
5364 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5365fi
5366if test "$bswap_h" = "yes" ; then
5367 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5368fi
Alexander Graf769ce762009-05-11 17:41:42 +02005369if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005370 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02005371 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005372 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02005373fi
aurel322e4d9fb2008-04-08 06:01:02 +00005374if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005375 echo "CONFIG_BRLAPI=y" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00005376fi
balrogfb599c92008-09-28 23:49:55 +00005377if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005378 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02005379 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00005380fi
Dr. David Alan Gilbertd46f7c92015-06-24 10:45:42 +01005381if test "$glib_subprocess" = "yes" ; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03005382 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5383fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005384if test "$gtk" = "yes" ; then
5385 echo "CONFIG_GTK=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005386 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005387 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005388 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005389 if test "$gtk_gl" = "yes" ; then
5390 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5391 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005392fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005393echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005394if test "$gnutls" = "yes" ; then
5395 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5396fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005397if test "$gnutls_rnd" = "yes" ; then
5398 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5399fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005400if test "$gcrypt" = "yes" ; then
5401 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08005402 if test "$gcrypt_hmac" = "yes" ; then
5403 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5404 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005405 if test "$gcrypt_kdf" = "yes" ; then
5406 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5407 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01005408fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005409if test "$nettle" = "yes" ; then
5410 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02005411 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005412 if test "$nettle_kdf" = "yes" ; then
5413 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5414 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01005415fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005416if test "$tasn1" = "yes" ; then
5417 echo "CONFIG_TASN1=y" >> $config_host_mak
5418fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00005419if test "$have_ifaddrs_h" = "yes" ; then
5420 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5421fi
Eric Blake6b39b062016-10-11 10:46:23 -05005422if test "$have_broken_size_max" = "yes" ; then
5423 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5424fi
Jan Vesely277abf12016-04-29 13:15:23 -04005425
5426# Work around a system header bug with some kernel/XFS header
5427# versions where they both try to define 'struct fsxattr':
5428# xfs headers will not try to redefine structs from linux headers
5429# if this macro is set.
5430if test "$have_fsxattr" = "yes" ; then
5431 echo "HAVE_FSXATTR=y" >> $config_host_mak
5432fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005433if test "$vte" = "yes" ; then
5434 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005435 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5436fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005437if test "$virglrenderer" = "yes" ; then
5438 echo "CONFIG_VIRGL=y" >> $config_host_mak
5439 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5440 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5441fi
aliguorie37630c2009-04-22 15:19:10 +00005442if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02005443 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00005444 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00005445 if test "$xen_pv_domain_build" = "yes" ; then
5446 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5447 fi
aliguorie37630c2009-04-22 15:19:10 +00005448fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005449if test "$linux_aio" = "yes" ; then
5450 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5451fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005452if test "$attr" = "yes" ; then
5453 echo "CONFIG_ATTR=y" >> $config_host_mak
5454fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02005455if test "$libattr" = "yes" ; then
5456 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5457fi
Meador Inge983eef52012-02-24 14:00:42 +05305458if test "$virtfs" = "yes" ; then
5459 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005460fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005461if test "$vhost_scsi" = "yes" ; then
5462 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5463fi
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03005464if test "$vhost_net" = "yes" ; then
5465 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5466fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005467if test "$vhost_vsock" = "yes" ; then
5468 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5469fi
ths77755342008-11-27 15:45:16 +00005470if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005471 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00005472fi
aliguoribf9298b2008-12-05 20:05:26 +00005473if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005474 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00005475fi
aliguoriceb42de2009-04-07 18:43:28 +00005476if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005477 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00005478fi
aurel32f652e6a2008-12-16 10:43:48 +00005479if test "$fdt" = "yes" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02005480 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00005481fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03005482if test "$signalfd" = "yes" ; then
5483 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5484fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02005485if test "$tcg_interpreter" = "yes" ; then
5486 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5487fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005488if test "$fdatasync" = "yes" ; then
5489 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5490fi
Andreas Färbere78815a2010-09-25 11:26:05 +00005491if test "$madvise" = "yes" ; then
5492 echo "CONFIG_MADVISE=y" >> $config_host_mak
5493fi
5494if test "$posix_madvise" = "yes" ; then
5495 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5496fi
bellard97a847b2003-08-10 21:36:04 +00005497
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005498if test "$spice" = "yes" ; then
5499 echo "CONFIG_SPICE=y" >> $config_host_mak
5500fi
5501
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005502if test "$smartcard" = "yes" ; then
5503 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02005504fi
5505
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005506if test "$libusb" = "yes" ; then
5507 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5508fi
5509
Hans de Goede69354a82011-07-19 11:04:10 +02005510if test "$usb_redir" = "yes" ; then
5511 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5512fi
5513
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005514if test "$opengl" = "yes" ; then
5515 echo "CONFIG_OPENGL=y" >> $config_host_mak
Jeremy Whitef676c672015-01-09 13:08:49 -06005516 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005517 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005518 if test "$opengl_dmabuf" = "yes" ; then
5519 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5520 fi
Michael Walle20ff0752011-03-07 23:32:39 +01005521fi
5522
Liang Li99f2dbd2016-03-08 13:53:16 +08005523if test "$avx2_opt" = "yes" ; then
5524 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5525fi
5526
qiaonuohan607dacd2014-02-18 14:11:30 +08005527if test "$lzo" = "yes" ; then
5528 echo "CONFIG_LZO=y" >> $config_host_mak
5529fi
5530
5531if test "$snappy" = "yes" ; then
5532 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5533fi
5534
Peter Wu6b383c02015-01-06 18:48:14 +01005535if test "$bzip2" = "yes" ; then
5536 echo "CONFIG_BZIP2=y" >> $config_host_mak
5537 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5538fi
5539
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005540if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005541 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005542 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5543 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005544fi
5545
Peter Lieven6542aa92014-02-03 10:26:13 +01005546if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04005547 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5548 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01005549fi
5550
Eduardo Otubof7945732012-08-14 18:44:05 -03005551if test "$seccomp" = "yes"; then
5552 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5553fi
5554
bellard83fb7ad2004-07-05 21:25:26 +00005555# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00005556if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005557 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00005558fi
5559
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01005560if test "$localtime_r" = "yes" ; then
5561 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5562fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02005563if test "$qom_cast_debug" = "yes" ; then
5564 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5565fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005566if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005567 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005568 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5569 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005570fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06005571
Peter Maydell7c2acc72013-04-08 12:11:27 +01005572echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005573if test "$coroutine_pool" = "yes" ; then
5574 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5575else
5576 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5577fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305578
Peter Lieven7d992e42016-09-27 11:58:45 +02005579if test "$debug_stack_usage" = "yes" ; then
5580 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5581fi
5582
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305583if test "$open_by_handle_at" = "yes" ; then
5584 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5585fi
5586
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305587if test "$linux_magic_h" = "yes" ; then
5588 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5589fi
5590
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005591if test "$pragma_diagnostic_available" = "yes" ; then
5592 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01005593fi
5594
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005595if test "$valgrind_h" = "yes" ; then
5596 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5597fi
5598
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005599if test "$has_environ" = "yes" ; then
5600 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5601fi
5602
Richard Henderson76a347e2012-12-28 14:17:02 -08005603if test "$cpuid_h" = "yes" ; then
5604 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5605fi
5606
Richard Hendersonf5401662013-02-16 12:46:59 -08005607if test "$int128" = "yes" ; then
5608 echo "CONFIG_INT128=y" >> $config_host_mak
5609fi
5610
Richard Henderson7ebee432016-06-29 21:10:59 -07005611if test "$atomic128" = "yes" ; then
5612 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5613fi
5614
Richard Hendersondf79b992016-09-02 12:23:57 -07005615if test "$atomic64" = "yes" ; then
5616 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5617fi
5618
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005619if test "$getauxval" = "yes" ; then
5620 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5621fi
5622
Bharata B Raoeb100392012-09-24 14:42:45 +05305623if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005624 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005625 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5626 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05305627fi
5628
Jeff Codyd85fa9e2016-04-05 10:40:09 -04005629if test "$glusterfs_xlator_opt" = "yes" ; then
5630 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5631fi
5632
Bharata B Rao0c14fb42013-07-16 21:47:42 +05305633if test "$glusterfs_discard" = "yes" ; then
5634 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5635fi
5636
Bharata B Rao7c815372013-12-21 14:51:25 +05305637if test "$glusterfs_zerofill" = "yes" ; then
5638 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5639fi
5640
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03005641if test "$archipelago" = "yes" ; then
5642 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5643 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5644fi
5645
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005646if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005647 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005648 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5649 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005650fi
5651
blueswir168063642008-11-22 21:03:55 +00005652# USB host support
Gerd Hoffmannb5613fd2013-09-10 11:02:59 +02005653if test "$libusb" = "yes"; then
5654 echo "HOST_USB=libusb legacy" >> $config_host_mak
5655else
Juan Quintela98ec69a2009-07-16 18:34:18 +02005656 echo "HOST_USB=stub" >> $config_host_mak
Gerd Hoffmannb5613fd2013-09-10 11:02:59 +02005657fi
blueswir168063642008-11-22 21:03:55 +00005658
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005659# TPM passthrough support?
5660if test "$tpm" = "yes"; then
5661 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5662 if test "$tpm_passthrough" = "yes"; then
5663 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5664 fi
5665fi
5666
Lluís Vilanova5b808272014-05-27 15:02:14 +02005667echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5668if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02005669 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05305670fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005671if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02005672 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5673 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02005674 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01005675fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03005676if have_backend "log"; then
5677 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02005678fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005679if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02005680 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5681fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005682if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02005683 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5684 if test "$trace_backend_stap" = "yes" ; then
5685 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5686 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005687fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005688if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005689 if test "$linux" = "yes" ; then
5690 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005691 else
Stewart Smith21684af2014-01-24 12:39:10 +11005692 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005693 fi
5694fi
Paul Durrant0a852412016-08-04 14:44:14 +01005695if have_backend "syslog"; then
5696 if test "$posix_syslog" = "yes" ; then
5697 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5698 else
5699 feature_not_found "syslog(trace backend)" "syslog not available"
5700 fi
5701fi
Prerna Saxena9410b562010-07-13 09:26:32 +01005702echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5703
zhanghailiang180fb752016-10-27 14:43:08 +08005704if test "$colo" = "yes"; then
5705 echo "CONFIG_COLO=y" >> $config_host_mak
5706fi
5707
Michael R. Hines2da776d2013-07-22 10:01:54 -04005708if test "$rdma" = "yes" ; then
5709 echo "CONFIG_RDMA=y" >> $config_host_mak
5710fi
5711
Laurent Vivier575b22b2016-06-02 22:14:15 +02005712if test "$have_rtnetlink" = "yes" ; then
5713 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5714fi
5715
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005716if test "$replication" = "yes" ; then
5717 echo "CONFIG_REPLICATION=y" >> $config_host_mak
5718fi
5719
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005720if test "$have_af_vsock" = "yes" ; then
5721 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
5722fi
5723
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00005724# Hold two types of flag:
5725# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5726# a thread we have a handle to
5727# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5728# platform
5729if test "$pthread_setname_np" = "yes" ; then
5730 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5731 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5732fi
5733
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02005734if test "$tcg_interpreter" = "yes"; then
5735 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5736elif test "$ARCH" = "sparc64" ; then
5737 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5738elif test "$ARCH" = "s390x" ; then
5739 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07005740elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02005741 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07005742elif test "$ARCH" = "ppc64" ; then
5743 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02005744else
5745 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5746fi
5747QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5748
Juan Quintela98ec69a2009-07-16 18:34:18 +02005749echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005750echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005751echo "MAKE=$make" >> $config_host_mak
5752echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04005753echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5754echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03005755echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5756echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00005757echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005758echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03005759if $iasl -h > /dev/null 2>&1; then
5760 echo "IASL=$iasl" >> $config_host_mak
5761fi
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02005762echo "CC_I386=$cc_i386" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005763echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005764echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005765echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005766echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01005767echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07005768echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07005769echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00005770echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005771echo "OBJCOPY=$objcopy" >> $config_host_mak
5772echo "LD=$ld" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02005773echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00005774echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02005775echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05005776echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02005777echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01005778echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01005779if test "$sparse" = "yes" ; then
5780 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01005781 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02005782 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01005783 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5784 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5785fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01005786if test "$cross_prefix" != ""; then
5787 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5788else
5789 echo "AUTOCONF_HOST := " >> $config_host_mak
5790fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02005791echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05005792echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01005793echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01005794echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02005795echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02005796echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01005797echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005798echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08005799echo "DSOSUF=$DSOSUF" >> $config_host_mak
5800echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05005801echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01005802echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5803echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005804echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01005805echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00005806if test "$gcov" = "yes" ; then
5807 echo "CONFIG_GCOV=y" >> $config_host_mak
5808 echo "GCOV=$gcov_tool" >> $config_host_mak
5809fi
Juan Quintela804edf22009-07-27 16:12:49 +02005810
Peter Maydell6efd7512011-11-30 11:59:04 +00005811# use included Linux headers
5812if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00005813 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00005814 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07005815 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01005816 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00005817 ;;
5818 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01005819 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00005820 ;;
5821 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01005822 linux_arch=s390
5823 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01005824 aarch64)
5825 linux_arch=arm64
5826 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01005827 mips64)
5828 linux_arch=mips
5829 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01005830 *)
5831 # For most CPUs the kernel architecture name and QEMU CPU name match.
5832 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00005833 ;;
5834 esac
Peter Maydell08312a62012-08-03 13:51:25 +01005835 # For non-KVM architectures we will not have asm headers
5836 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5837 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5838 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00005839fi
5840
bellard1d14ffa2005-10-30 18:58:22 +00005841for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00005842target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02005843config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02005844target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00005845target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02005846
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005847case "$target_name" in
Anthony Greend15a9c22013-03-18 15:49:25 -04005848 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 +02005849 target_bigendian=yes
5850 ;;
5851esac
bellard97a847b2003-08-10 21:36:04 +00005852target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00005853target_user_only="no"
ths831b7822007-01-18 20:06:33 +00005854target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00005855target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00005856case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005857 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00005858 target_softmmu="yes"
5859 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005860 ${target_name}-linux-user)
Blue Swirl9c7a4202009-11-17 20:52:56 +00005861 if test "$linux" != "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005862 error_exit "Target '$target' is only available on a Linux host"
Blue Swirl9c7a4202009-11-17 20:52:56 +00005863 fi
pbrook9e407a82007-05-26 16:38:53 +00005864 target_user_only="yes"
5865 target_linux_user="yes"
5866 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005867 ${target_name}-bsd-user)
Blue Swirl9cf55762009-11-17 21:27:18 +00005868 if test "$bsd" != "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01005869 error_exit "Target '$target' is only available on a BSD host"
Blue Swirl9c7a4202009-11-17 20:52:56 +00005870 fi
blueswir184778502008-10-26 20:33:16 +00005871 target_user_only="yes"
5872 target_bsd_user="yes"
5873 ;;
pbrook9e407a82007-05-26 16:38:53 +00005874 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01005875 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00005876 exit 1
5877 ;;
5878esac
ths831b7822007-01-18 20:06:33 +00005879
bellard97a847b2003-08-10 21:36:04 +00005880mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02005881echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00005882
pbrooke5fe0c52006-06-11 13:32:59 +00005883bflt="no"
Stefan Weil89138852016-05-16 15:10:20 +02005884interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00005885gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00005886
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005887TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02005888TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02005889TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02005890
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005891case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00005892 i386)
aurel322408a522008-04-20 20:19:44 +00005893 ;;
5894 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02005895 TARGET_BASE_ARCH=i386
aurel322408a522008-04-20 20:19:44 +00005896 ;;
5897 alpha)
aurel322408a522008-04-20 20:19:44 +00005898 ;;
5899 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005900 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00005901 bflt="yes"
pbrook56aebc82008-10-11 17:55:29 +00005902 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00005903 ;;
Alexander Graf6a49fa92013-09-03 20:12:22 +01005904 aarch64)
5905 TARGET_BASE_ARCH=arm
5906 bflt="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01005907 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 +01005908 ;;
aurel322408a522008-04-20 20:19:44 +00005909 cris)
aurel322408a522008-04-20 20:19:44 +00005910 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01005911 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01005912 ;;
aurel322408a522008-04-20 20:19:44 +00005913 m68k)
aurel322408a522008-04-20 20:19:44 +00005914 bflt="yes"
pbrook56aebc82008-10-11 17:55:29 +00005915 gdb_xml_files="cf-core.xml cf-fp.xml"
aurel322408a522008-04-20 20:19:44 +00005916 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01005917 microblaze|microblazeel)
5918 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02005919 bflt="yes"
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02005920 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02005921 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005922 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02005923 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00005924 ;;
5925 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08005926 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02005927 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02005928 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08005929 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00005930 ;;
5931 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005932 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02005933 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02005934 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00005935 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04005936 moxie)
5937 ;;
Jia Liue67db062012-07-20 15:50:39 +08005938 or32)
5939 TARGET_ARCH=openrisc
5940 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08005941 ;;
aurel322408a522008-04-20 20:19:44 +00005942 ppc)
aurel32c8b35322009-01-24 15:07:34 +00005943 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00005944 ;;
5945 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02005946 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02005947 TARGET_ABI_DIR=ppc
aurel32c8b35322009-01-24 15:07:34 +00005948 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00005949 ;;
5950 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02005951 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02005952 TARGET_ABI_DIR=ppc
Anton Blanchard1438eff2016-01-15 16:00:51 +01005953 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00005954 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05005955 ppc64le)
5956 TARGET_ARCH=ppc64
5957 TARGET_BASE_ARCH=ppc
5958 TARGET_ABI_DIR=ppc
Anton Blanchard1438eff2016-01-15 16:00:51 +01005959 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 -05005960 ;;
aurel322408a522008-04-20 20:19:44 +00005961 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005962 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02005963 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02005964 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02005965 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01005966 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00005967 ;;
5968 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005969 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00005970 bflt="yes"
5971 ;;
5972 sparc)
aurel322408a522008-04-20 20:19:44 +00005973 ;;
5974 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02005975 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00005976 ;;
5977 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02005978 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02005979 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02005980 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02005981 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00005982 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01005983 s390x)
David Hildenbrand8a641ff2015-10-01 10:49:44 +02005984 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 +01005985 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08005986 tilegx)
5987 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07005988 tricore)
5989 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08005990 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08005991 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04005992 xtensa|xtensaeb)
5993 TARGET_ARCH=xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04005994 ;;
aurel322408a522008-04-20 20:19:44 +00005995 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01005996 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00005997 ;;
5998esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02005999# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6000if [ "$TARGET_BASE_ARCH" = "" ]; then
6001 TARGET_BASE_ARCH=$TARGET_ARCH
6002fi
6003
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006004symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6005
Daniel P. Berrange99afc912012-08-20 15:31:38 +01006006upper() {
6007 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6008}
6009
Stefan Weil89138852016-05-16 15:10:20 +02006010target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02006011echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006012echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02006013echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02006014if [ "$TARGET_ABI_DIR" = "" ]; then
6015 TARGET_ABI_DIR=$TARGET_ARCH
6016fi
Juan Quintela25be2102009-10-07 02:41:00 +02006017echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07006018if [ "$HOST_VARIANT_DIR" != "" ]; then
6019 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6020fi
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006021case "$target_name" in
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006022 i386|x86_64)
6023 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006024 echo "CONFIG_XEN=y" >> $config_target_mak
Anthony PERARDeb6fda02012-06-21 15:32:59 +00006025 if test "$xen_pci_passthrough" = yes; then
6026 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6027 fi
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006028 fi
Alexander Graf59d21e52011-07-17 07:30:29 +02006029 ;;
6030 *)
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006031esac
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006032case "$target_name" in
Sanjay Lal222e7d12014-06-17 23:10:36 +01006033 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
Juan Quintelac59249f2009-07-16 18:34:00 +02006034 # Make sure the target and host cpus are compatible
6035 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006036 \( "$target_name" = "$cpu" -o \
6037 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
6038 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
6039 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
6040 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
Sanjay Lal222e7d12014-06-17 23:10:36 +01006041 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006042 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
Michael Tokarev18b82632015-03-12 09:13:45 +03006043 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
6044 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
6045 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006046 echo "CONFIG_KVM=y" >> $config_target_mak
Stefan Weil1ba16962011-07-29 22:40:45 +02006047 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006048 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureau421f4442015-10-26 15:32:00 +01006049 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006050 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02006051 fi
6052esac
bellardde83cd02003-06-15 20:25:43 +00006053if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006054 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006055fi
6056if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006057 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
bellardde83cd02003-06-15 20:25:43 +00006058fi
bellard997344f2003-10-27 21:10:39 +00006059if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006060 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01006061 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00006062fi
ths831b7822007-01-18 20:06:33 +00006063if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006064 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00006065fi
pbrook56aebc82008-10-11 17:55:29 +00006066list=""
6067if test ! -z "$gdb_xml_files" ; then
6068 for x in $gdb_xml_files; do
6069 list="$list $source_path/gdb-xml/$x"
6070 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02006071 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00006072fi
bellardde83cd02003-06-15 20:25:43 +00006073
pbrooke5fe0c52006-06-11 13:32:59 +00006074if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02006075 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00006076fi
blueswir184778502008-10-26 20:33:16 +00006077if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006078 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00006079fi
bellard5b0753e2005-03-01 21:37:28 +00006080
Juan Quintela4afddb52009-08-03 14:46:45 +02006081# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02006082
Juan Quintela4afddb52009-08-03 14:46:45 +02006083cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02006084ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02006085
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006086disas_config() {
6087 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6088 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6089}
6090
Juan Quintela64656022009-08-03 14:46:53 +02006091for i in $ARCH $TARGET_BASE_ARCH ; do
6092 case "$i" in
6093 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006094 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02006095 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05006096 aarch64)
6097 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006098 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05006099 fi
6100 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006101 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006102 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006103 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006104 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006105 fi
Juan Quintela64656022009-08-03 14:46:53 +02006106 ;;
6107 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006108 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02006109 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006110 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006111 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02006112 ;;
Aurelien Jarno903ec552010-03-29 02:12:51 +02006113 ia64*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006114 disas_config "IA64"
Aurelien Jarno903ec552010-03-29 02:12:51 +02006115 ;;
Michael Walle79368f42012-03-31 19:54:20 +02006116 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006117 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02006118 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006119 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006120 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02006121 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006122 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006123 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02006124 ;;
6125 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006126 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02006127 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006128 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006129 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04006130 ;;
Jia Liue67db062012-07-20 15:50:39 +08006131 or32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006132 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08006133 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006134 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006135 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02006136 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006137 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006138 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02006139 ;;
6140 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006141 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02006142 ;;
6143 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006144 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02006145 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006146 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006147 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04006148 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006149 esac
6150done
Stefan Weil9195b2c2011-10-19 07:07:18 +02006151if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006152 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02006153fi
Juan Quintela64656022009-08-03 14:46:53 +02006154
Juan Quintela6ee71262009-08-03 14:46:47 +02006155case "$ARCH" in
6156alpha)
6157 # Ensure there's only a single GP
6158 cflags="-msmall-data $cflags"
6159;;
6160esac
6161
Juan Quintelad02c1db2009-08-03 14:46:50 +02006162if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006163 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006164 if test "$target_linux_user" = "yes" ; then
6165 cflags="-p $cflags"
6166 ldflags="-p $ldflags"
6167 fi
6168 if test "$target_softmmu" = "yes" ; then
6169 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02006170 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006171 fi
6172fi
6173
Juan Quintela9b8e1112009-08-03 14:46:46 +02006174if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006175 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02006176fi
Juan Quintelafa282482009-07-22 22:37:39 +02006177
Juan Quintela25be2102009-10-07 02:41:00 +02006178echo "LDFLAGS+=$ldflags" >> $config_target_mak
6179echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02006180
bellard97a847b2003-08-10 21:36:04 +00006181done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00006182
Gerd Hoffmannb776eca2012-11-12 12:18:38 +01006183if [ "$pixman" = "internal" ]; then
6184 echo "config-host.h: subdir-pixman" >> $config_host_mak
6185fi
6186
Peter Crosthwaitea540f152013-04-18 14:47:31 +10006187if [ "$dtc_internal" = "yes" ]; then
6188 echo "config-host.h: subdir-dtc" >> $config_host_mak
6189fi
6190
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006191if test "$numa" = "yes"; then
6192 echo "CONFIG_NUMA=y" >> $config_host_mak
6193fi
6194
John Snowfd0e6052015-03-25 18:57:39 -04006195if test "$ccache_cpp2" = "yes"; then
6196 echo "export CCACHE_CPP2=y" >> $config_host_mak
6197fi
6198
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006199# build tree in object directory in case the source is not in the current directory
Wenchao Xiaf93296e2013-09-06 11:24:32 +08006200DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
Marc-André Lureau56e8bdd2017-01-13 15:41:35 +01006201DIRS="$DIRS docs fsdev"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006202DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006203DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2dee8d52012-06-04 09:15:43 +02006204DIRS="$DIRS qapi-generated"
Anthony Liguoric09015d2012-01-10 13:10:42 -06006205FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6206FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02006207FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006208FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02006209FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006210FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006211FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01006212FILES="$FILES pc-bios/qemu-icon.bmp"
Richard Henderson753d11f2011-06-24 11:58:37 -07006213for bios_file in \
6214 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11006215 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01006216 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07006217 $source_path/pc-bios/*.rom \
6218 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00006219 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07006220 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01006221 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07006222 $source_path/pc-bios/palcode-*
6223do
Stefan Weil89138852016-05-16 15:10:20 +02006224 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006225done
Stefan Weil89138852016-05-16 15:10:20 +02006226for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006227do
Stefan Weil89138852016-05-16 15:10:20 +02006228 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006229done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006230mkdir -p $DIRS
6231for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03006232 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01006233 symlink "$source_path/$f" "$f"
6234 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006235done
Paul Brook1ad21342009-05-19 16:17:58 +01006236
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006237# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06006238for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006239 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01006240 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006241 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006242 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006243 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006244 echo "CC=$cc" >> $config_mak
6245 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006246 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006247 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006248 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006249 echo "LD=$ld" >> $config_mak
6250done
6251
Marc-André Lureaufe310172016-06-15 13:06:00 +02006252# set up tests data directory
6253if [ ! -e tests/data ]; then
6254 symlink "$source_path/tests/data" tests/data
6255fi
6256
Max Reitz76c75602014-05-24 23:24:56 +02006257# set up qemu-iotests in this build directory
6258iotests_common_env="tests/qemu-iotests/common.env"
6259iotests_check="tests/qemu-iotests/check"
6260
6261echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6262echo >> "$iotests_common_env"
6263echo "export PYTHON='$python'" >> "$iotests_common_env"
6264
6265if [ ! -e "$iotests_check" ]; then
6266 symlink "$source_path/$iotests_check" "$iotests_check"
6267fi
6268
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006269# Save the configure command line for later reuse.
6270cat <<EOD >config.status
6271#!/bin/sh
6272# Generated by configure.
6273# Run this file to recreate the current configuration.
6274# Compiler output produced by configure, useful for debugging
6275# configure, is in config.log if it exists.
6276EOD
6277printf "exec" >>config.status
6278printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00006279echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006280chmod +x config.status
6281
Peter Maydell8cd05ab2014-05-23 17:07:24 +01006282rm -r "$TMPDIR1"