blob: 139638e922e00fb0df971dc505cfa997944aac1c [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"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100231hax="no"
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"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -0600304gtk=""
Stefan Weil9e04c682014-05-17 16:29:18 +0200305gtkabi=""
Gerd Hoffmann925a0402015-05-26 12:26:21 +0200306gtk_gl="no"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +0100307tls_priority="NORMAL"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +0100308gnutls=""
Daniel P. Berrangeb917da42015-10-31 14:39:52 +0900309gnutls_rnd=""
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100310nettle=""
Daniel P. Berrangefff2f982016-03-29 15:47:51 +0100311nettle_kdf="no"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +0100312gcrypt=""
Longpeng(Mike)1f923c72016-12-13 18:42:55 +0800313gcrypt_hmac="no"
Daniel P. Berrange37788f22015-10-14 13:14:04 +0100314gcrypt_kdf="no"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +0100315vte=""
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +0200316virglrenderer=""
Cole Robinsone91c7932014-06-16 15:32:47 -0400317tpm="yes"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +0100318libssh2=""
Wanlong Gaoa99d57b2014-05-14 17:43:28 +0800319numa=""
Fam Zheng2847b462015-03-26 11:03:12 +0800320tcmalloc="no"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +0200321jemalloc="no"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +0800322replication="yes"
Ashish Mittalda92c3f2017-04-03 20:48:08 -0700323vxhs=""
Paolo Bonzini377529c2010-12-23 11:43:50 +0100324
Peter Maydell898be3e2017-03-21 14:31:57 +0000325supported_cpu="no"
326supported_os="no"
Peter Maydellfb59dab2017-03-28 14:01:52 +0100327bogus_os="no"
Peter Maydell898be3e2017-03-21 14:31:57 +0000328
aliguoriac0df512008-12-29 17:14:15 +0000329# parse CC options first
330for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200331 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
aliguoriac0df512008-12-29 17:14:15 +0000332 case "$opt" in
333 --cross-prefix=*) cross_prefix="$optarg"
334 ;;
Paolo Bonzini3d8df642010-12-23 11:43:48 +0100335 --cc=*) CC="$optarg"
aliguoriac0df512008-12-29 17:14:15 +0000336 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400337 --cxx=*) CXX="$optarg"
338 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100339 --source-path=*) source_path="$optarg"
340 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200341 --cpu=*) cpu="$optarg"
342 ;;
Alex Bennéede385282015-06-03 09:56:37 +0100343 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100344 EXTRA_CFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200345 ;;
Alex Bennéea4969e92015-06-03 14:22:41 +0100346 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +0100347 EXTRA_LDFLAGS="$optarg"
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200348 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100349 --enable-debug-info) debug_info="yes"
350 ;;
351 --disable-debug-info) debug_info="no"
352 ;;
aliguoriac0df512008-12-29 17:14:15 +0000353 esac
354done
aliguoriac0df512008-12-29 17:14:15 +0000355# OS specific
356# Using uname is really, really broken. Once we have the right set of checks
Stefan Weil93148aa2012-02-26 18:46:12 +0100357# we can eliminate its usage altogether.
aliguoriac0df512008-12-29 17:14:15 +0000358
Peter Maydelle49d0212012-12-07 15:39:13 +0000359# Preferred compiler:
360# ${CC} (if set)
361# ${cross_prefix}gcc (if cross-prefix specified)
362# system compiler
363if test -z "${CC}${cross_prefix}"; then
364 cc="$host_cc"
365else
366 cc="${CC-${cross_prefix}gcc}"
367fi
368
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400369if test -z "${CXX}${cross_prefix}"; then
370 cxx="c++"
371else
372 cxx="${CXX-${cross_prefix}g++}"
373fi
374
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500375ar="${AR-${cross_prefix}ar}"
Richard Hendersoncdbd7272016-07-07 21:49:36 -0700376as="${AS-${cross_prefix}as}"
Richard Henderson5f6f0e22016-06-23 10:39:18 -0700377ccas="${CCAS-$cc}"
Blue Swirl3dd46c72013-01-05 10:10:27 +0000378cpp="${CPP-$cc -E}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500379objcopy="${OBJCOPY-${cross_prefix}objcopy}"
380ld="${LD-${cross_prefix}ld}"
Stefan Weil4852ee92014-09-18 21:55:08 +0200381nm="${NM-${cross_prefix}nm}"
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500382strip="${STRIP-${cross_prefix}strip}"
383windres="${WINDRES-${cross_prefix}windres}"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300384pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
385query_pkg_config() {
386 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
387}
388pkg_config=query_pkg_config
Stuart Yoderb3198cc2011-08-04 17:10:08 -0500389sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
Dave Airlie47c03742013-12-10 14:05:51 +1000390sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
aliguoriac0df512008-12-29 17:14:15 +0000391
Peter Maydell45d285a2013-10-21 21:03:06 +0100392# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
393ARFLAGS="${ARFLAGS-rv}"
394
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200395# default flags for all hosts
Peter Maydell2d315152016-09-12 14:10:08 +0100396# We use -fwrapv to tell the compiler that we require a C dialect where
397# left shift of signed integers is well defined and has the expected
398# 2s-complement style results. (Both clang and gcc agree that it
399# provides these semantics.)
400QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
Mike Frysingerf9188222011-05-17 17:08:43 -0400401QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
Kevin Wolfc95e3082013-02-22 21:08:51 +0100402QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200403QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
Paolo Bonzini6b4c3052012-10-24 13:12:00 +0200404QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100405if test "$debug_info" = "yes"; then
406 CFLAGS="-g $CFLAGS"
407 LDFLAGS="-g $LDFLAGS"
408fi
Michael S. Tsirkinbe17dc92009-11-11 13:50:09 +0200409
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100410# make source path absolute
Stefan Weil89138852016-05-16 15:10:20 +0200411source_path=$(cd "$source_path"; pwd)
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100412
Michael S. Tsirkincab00a52014-04-28 15:09:01 +0300413# running configure in the source tree?
414# we know that's the case if configure is there.
415if test -f "./configure"; then
416 pwd_is_source_path="y"
417else
418 pwd_is_source_path="n"
419fi
420
aliguoriac0df512008-12-29 17:14:15 +0000421check_define() {
422cat > $TMPC <<EOF
423#if !defined($1)
Peter Maydellfd786e12011-11-23 17:26:43 +0000424#error $1 not defined
aliguoriac0df512008-12-29 17:14:15 +0000425#endif
426int main(void) { return 0; }
427EOF
Juan Quintela52166aa2009-08-03 14:46:03 +0200428 compile_object
aliguoriac0df512008-12-29 17:14:15 +0000429}
430
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200431check_include() {
432cat > $TMPC <<EOF
433#include <$1>
434int main(void) { return 0; }
435EOF
436 compile_object
437}
438
John Snow93b25862015-03-25 18:57:37 -0400439write_c_skeleton() {
440 cat > $TMPC <<EOF
441int main(void) { return 0; }
442EOF
443}
444
Peter Maydellbbea4052012-08-14 15:35:34 +0100445if check_define __linux__ ; then
446 targetos="Linux"
447elif check_define _WIN32 ; then
448 targetos='MINGW32'
449elif check_define __OpenBSD__ ; then
450 targetos='OpenBSD'
451elif check_define __sun__ ; then
452 targetos='SunOS'
453elif check_define __HAIKU__ ; then
454 targetos='Haiku'
455else
Stefan Weil89138852016-05-16 15:10:20 +0200456 targetos=$(uname -s)
Peter Maydellbbea4052012-08-14 15:35:34 +0100457fi
458
459# Some host OSes need non-standard checks for which CPU to use.
460# Note that these checks are broken for cross-compilation: if you're
461# cross-compiling to one of these OSes then you'll need to specify
462# the correct CPU with the --cpu option.
463case $targetos in
464Darwin)
465 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
466 # run 64-bit userspace code.
467 # If the user didn't specify a CPU explicitly and the kernel says this is
468 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
469 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
470 cpu="x86_64"
471 fi
472 ;;
473SunOS)
Stefan Weil89138852016-05-16 15:10:20 +0200474 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
Peter Maydellbbea4052012-08-14 15:35:34 +0100475 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
476 cpu="x86_64"
477 fi
478esac
479
Juan Quintela2ff6b912009-08-03 14:45:55 +0200480if test ! -z "$cpu" ; then
481 # command line argument
482 :
483elif check_define __i386__ ; then
aliguoriac0df512008-12-29 17:14:15 +0000484 cpu="i386"
485elif check_define __x86_64__ ; then
Richard Hendersonc72b26e2013-08-20 12:20:05 -0700486 if check_define __ILP32__ ; then
487 cpu="x32"
488 else
489 cpu="x86_64"
490 fi
blueswir13aa9bd62008-12-31 16:55:26 +0000491elif check_define __sparc__ ; then
blueswir13aa9bd62008-12-31 16:55:26 +0000492 if check_define __arch64__ ; then
493 cpu="sparc64"
494 else
495 cpu="sparc"
496 fi
malcfdf7ed92009-01-14 18:39:52 +0000497elif check_define _ARCH_PPC ; then
498 if check_define _ARCH_PPC64 ; then
499 cpu="ppc64"
500 else
501 cpu="ppc"
502 fi
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200503elif check_define __mips__ ; then
504 cpu="mips"
Aurelien Jarno477ba622010-03-29 02:12:51 +0200505elif check_define __ia64__ ; then
506 cpu="ia64"
Aurelien Jarnod66ed0e2010-06-13 12:28:21 +0200507elif check_define __s390__ ; then
508 if check_define __s390x__ ; then
509 cpu="s390x"
510 else
511 cpu="s390"
512 fi
Peter Maydell21d89f82011-11-30 10:57:48 +0100513elif check_define __arm__ ; then
514 cpu="arm"
Claudio Fontana1f080312013-06-12 16:20:23 +0100515elif check_define __aarch64__ ; then
516 cpu="aarch64"
aliguoriac0df512008-12-29 17:14:15 +0000517else
Stefan Weil89138852016-05-16 15:10:20 +0200518 cpu=$(uname -m)
aliguoriac0df512008-12-29 17:14:15 +0000519fi
520
Peter Maydell359bc952011-12-24 13:07:25 +0000521ARCH=
522# Normalise host CPU name and set ARCH.
523# Note that this case should only have supported host CPUs, not guests.
bellard7d132992003-03-06 23:23:54 +0000524case "$cpu" in
Peter Maydell6499fd12017-03-28 11:58:38 +0100525 ppc|ppc64|s390|s390x|sparc64|x32)
Peter Maydell898be3e2017-03-21 14:31:57 +0000526 cpu="$cpu"
527 supported_cpu="yes"
528 ;;
Peter Maydell6499fd12017-03-28 11:58:38 +0100529 ia64)
Juan Quintelaea8f20f2009-08-03 14:46:12 +0200530 cpu="$cpu"
531 ;;
bellard7d132992003-03-06 23:23:54 +0000532 i386|i486|i586|i686|i86pc|BePC)
bellard97a847b2003-08-10 21:36:04 +0000533 cpu="i386"
Peter Maydell898be3e2017-03-21 14:31:57 +0000534 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000535 ;;
aurel32aaa5fa12008-04-11 22:04:22 +0000536 x86_64|amd64)
537 cpu="x86_64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000538 supported_cpu="yes"
aurel32aaa5fa12008-04-11 22:04:22 +0000539 ;;
Peter Maydell21d89f82011-11-30 10:57:48 +0100540 armv*b|armv*l|arm)
541 cpu="arm"
Peter Maydell898be3e2017-03-21 14:31:57 +0000542 supported_cpu="yes"
bellard7d132992003-03-06 23:23:54 +0000543 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +0100544 aarch64)
545 cpu="aarch64"
Peter Maydell898be3e2017-03-21 14:31:57 +0000546 supported_cpu="yes"
Claudio Fontana1f080312013-06-12 16:20:23 +0100547 ;;
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200548 mips*)
549 cpu="mips"
Peter Maydell898be3e2017-03-21 14:31:57 +0000550 supported_cpu="yes"
Aurelien Jarnoafa05232009-10-17 14:17:47 +0200551 ;;
blueswir131422552007-04-16 18:27:06 +0000552 sparc|sun4[cdmuv])
bellardae228532003-05-13 18:59:59 +0000553 cpu="sparc"
Peter Maydell6499fd12017-03-28 11:58:38 +0100554 supported_cpu="yes"
bellardae228532003-05-13 18:59:59 +0000555 ;;
bellard7d132992003-03-06 23:23:54 +0000556 *)
Peter Maydell359bc952011-12-24 13:07:25 +0000557 # This will result in either an error or falling back to TCI later
558 ARCH=unknown
bellard7d132992003-03-06 23:23:54 +0000559 ;;
560esac
Peter Maydell359bc952011-12-24 13:07:25 +0000561if test -z "$ARCH"; then
562 ARCH="$cpu"
563fi
Juan Quintelae2d52ad2009-08-12 18:20:24 +0200564
bellard7d132992003-03-06 23:23:54 +0000565# OS specific
Juan Quintela0dbfc672009-08-03 14:46:13 +0200566
Stacey Sonadfc3e92014-06-08 09:57:22 -0700567# host *BSD for user mode
568HOST_VARIANT_DIR=""
569
bellard7d132992003-03-06 23:23:54 +0000570case $targetos in
bellard67b915a2004-03-31 23:37:16 +0000571MINGW32*)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200572 mingw32="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100573 hax="yes"
Kővágó, Zoltán3cec7cc2015-06-03 23:03:46 +0200574 audio_possible_drivers="dsound sdl"
Gerd Hoffmann307119e2015-06-10 09:07:35 +0200575 if check_include dsound.h; then
576 audio_drv_list="dsound"
577 else
578 audio_drv_list=""
579 fi
Peter Maydell898be3e2017-03-21 14:31:57 +0000580 supported_os="yes"
bellard67b915a2004-03-31 23:37:16 +0000581;;
ths5c40d2b2007-06-23 16:03:36 +0000582GNU/kFreeBSD)
Aurelien Jarnoa167ba52009-11-29 18:00:41 +0100583 bsd="yes"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200584 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200585 audio_possible_drivers="oss sdl pa"
ths5c40d2b2007-06-23 16:03:36 +0000586;;
bellard7d3505c2004-05-12 19:32:15 +0000587FreeBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200588 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100589 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200590 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200591 audio_possible_drivers="oss sdl pa"
Juergen Lockf01576f2010-03-25 22:32:16 +0100592 # needed for kinfo_getvmmap(3) in libutil.h
593 LIBS="-lutil $LIBS"
Ed Mastea7764f12016-11-21 20:32:45 -0500594 # needed for kinfo_getproc
595 libs_qga="-lutil $libs_qga"
Vincenzo Maffione58952132013-11-06 11:44:06 +0100596 netmap="" # enable netmap autodetect
Stacey Sonadfc3e92014-06-08 09:57:22 -0700597 HOST_VARIANT_DIR="freebsd"
Peter Maydell898be3e2017-03-21 14:31:57 +0000598 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000599;;
blueswir1c5e97232009-03-07 20:06:23 +0000600DragonFly)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200601 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100602 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200603 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200604 audio_possible_drivers="oss sdl pa"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700605 HOST_VARIANT_DIR="dragonfly"
blueswir1c5e97232009-03-07 20:06:23 +0000606;;
bellard7d3505c2004-05-12 19:32:15 +0000607NetBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200608 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100609 make="${MAKE-gmake}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200610 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200611 audio_possible_drivers="oss sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200612 oss_lib="-lossaudio"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700613 HOST_VARIANT_DIR="netbsd"
Kamil Rytarowski3c2bdbc2017-05-13 04:21:43 +0200614 supported_os="yes"
bellard7d3505c2004-05-12 19:32:15 +0000615;;
616OpenBSD)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200617 bsd="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100618 make="${MAKE-gmake}"
Brad Smith4f6ab392013-05-24 19:01:07 -0400619 audio_drv_list="sdl"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200620 audio_possible_drivers="sdl"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700621 HOST_VARIANT_DIR="openbsd"
bellard7d3505c2004-05-12 19:32:15 +0000622;;
bellard83fb7ad2004-07-05 21:25:26 +0000623Darwin)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200624 bsd="yes"
625 darwin="yes"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100626 hax="yes"
Fam Zheng17969262014-02-10 14:48:56 +0800627 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200628 if [ "$cpu" = "x86_64" ] ; then
Juan Quintelaa558ee12009-08-03 14:46:21 +0200629 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +0200630 LDFLAGS="-arch x86_64 $LDFLAGS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200631 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200632 cocoa="yes"
633 audio_drv_list="coreaudio"
Kővágó, Zoltán14382602015-06-03 23:03:45 +0200634 audio_possible_drivers="coreaudio sdl"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200635 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
Juan Quintela7973f212009-08-03 14:47:09 +0200636 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
Peter Maydella0b7cf62012-08-11 22:34:39 +0100637 # Disable attempts to use ObjectiveC features in os/object.h since they
638 # won't work when we're compiling with gcc as a C compiler.
639 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
Stacey Sonadfc3e92014-06-08 09:57:22 -0700640 HOST_VARIANT_DIR="darwin"
Peter Maydell898be3e2017-03-21 14:31:57 +0000641 supported_os="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000642;;
bellardec530c82006-04-25 22:36:06 +0000643SunOS)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200644 solaris="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100645 make="${MAKE-gmake}"
646 install="${INSTALL-ginstall}"
Blue Swirlfa589482009-10-02 19:38:25 +0000647 ld="gld"
Brade2d88302011-09-02 16:53:28 -0400648 smbd="${SMBD-/usr/sfw/sbin/smbd}"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200649 needs_libsunmath="no"
Stefan Weil89138852016-05-16 15:10:20 +0200650 solarisrev=$(uname -r | cut -f2 -d.)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200651 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
652 if test "$solarisrev" -le 9 ; then
653 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
654 needs_libsunmath="yes"
Juan Quintelaf14bfdf2009-08-03 14:47:11 +0200655 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
656 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
657 LIBS="-lsunmath $LIBS"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200658 else
Peter Maydell76ad07a2013-04-08 12:11:26 +0100659 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
660 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
661 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
662 "Studio 11 can be downloaded from www.sun.com."
Juan Quintela0dbfc672009-08-03 14:46:13 +0200663 fi
thsef18c882007-09-16 22:12:39 +0000664 fi
Juan Quintela0dbfc672009-08-03 14:46:13 +0200665 fi
666 if test -f /usr/include/sys/soundcard.h ; then
667 audio_drv_list="oss"
668 fi
669 audio_possible_drivers="oss sdl"
Blue Swirld7414292009-09-12 12:36:04 +0000670# needed for CMSG_ macros in sys/socket.h
671 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
672# needed for TIOCWIN* defines in termios.h
673 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200674 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
Andreas Färber560d3752012-04-30 18:00:55 +0200675 solarisnetlibs="-lsocket -lnsl -lresolv"
676 LIBS="$solarisnetlibs $LIBS"
677 libs_qga="$solarisnetlibs $libs_qga"
ths86b2bd92007-02-11 00:31:33 +0000678;;
malcb29fe3e2008-11-18 01:42:22 +0000679AIX)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200680 aix="yes"
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100681 make="${MAKE-gmake}"
malcb29fe3e2008-11-18 01:42:22 +0000682;;
Andreas Färber179cf402010-09-20 00:50:43 +0200683Haiku)
684 haiku="yes"
685 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
686 LIBS="-lposix_error_mapper -lnetwork $LIBS"
687;;
Peter Maydell898be3e2017-03-21 14:31:57 +0000688Linux)
Juan Quintela0dbfc672009-08-03 14:46:13 +0200689 audio_drv_list="oss"
Kővágó, Zoltán0bac1112015-06-03 23:03:44 +0200690 audio_possible_drivers="oss alsa sdl pa"
Juan Quintela0dbfc672009-08-03 14:46:13 +0200691 linux="yes"
692 linux_user="yes"
Jan Kiszkaaf2be202011-06-23 10:05:12 +0200693 kvm="yes"
694 vhost_net="yes"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +0000695 vhost_scsi="yes"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +0100696 vhost_vsock="yes"
Alexey Kardashevskiya5851402013-05-29 23:30:43 +1000697 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
Peter Maydell898be3e2017-03-21 14:31:57 +0000698 supported_os="yes"
699;;
700*)
Peter Maydellfb59dab2017-03-28 14:01:52 +0100701 # This is a fatal error, but don't report it yet, because we
702 # might be going to just print the --help text, or it might
703 # be the result of a missing compiler.
704 bogus_os="yes"
bellardfb065182004-11-09 23:09:44 +0000705;;
bellard7d132992003-03-06 23:23:54 +0000706esac
707
bellard7d3505c2004-05-12 19:32:15 +0000708if [ "$bsd" = "yes" ] ; then
pbrookb1a550a2006-04-16 13:28:56 +0000709 if [ "$darwin" != "yes" ] ; then
Andreas Färber08de3942012-04-26 11:57:39 +0200710 bsd_user="yes"
bellard83fb7ad2004-07-05 21:25:26 +0000711 fi
bellard7d3505c2004-05-12 19:32:15 +0000712fi
713
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100714: ${make=${MAKE-make}}
715: ${install=${INSTALL-install}}
Stefan Weil52510f82013-11-14 19:07:03 +0100716: ${python=${PYTHON-python}}
Brade2d88302011-09-02 16:53:28 -0400717: ${smbd=${SMBD-/usr/sbin/smbd}}
Paolo Bonzini0db4a062010-12-23 11:43:49 +0100718
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100719# Default objcc to clang if available, otherwise use CC
720if has clang; then
721 objcc=clang
722else
723 objcc="$cc"
724fi
725
Juan Quintela3457a3f2009-08-03 14:46:07 +0200726if test "$mingw32" = "yes" ; then
Juan Quintela3457a3f2009-08-03 14:46:07 +0200727 EXESUF=".exe"
Fam Zheng17969262014-02-10 14:48:56 +0800728 DSOSUF=".dll"
Juan Quintelaa558ee12009-08-03 14:46:21 +0200729 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
Stefan Weile94a7932010-02-12 11:02:08 +0100730 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
731 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
Stefan Weil78e9d4a2015-11-26 12:13:12 +0100732 # MinGW needs -mthreads for TLS and macro _MT.
733 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100734 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
John Snow93b25862015-03-25 18:57:37 -0400735 write_c_skeleton;
Stefan Weilf7cf5d52012-03-10 11:14:32 +0100736 if compile_prog "" "-liberty" ; then
737 LIBS="-liberty $LIBS"
738 fi
Stefan Weilc5ec15e2012-04-07 09:23:38 +0200739 prefix="c:/Program Files/QEMU"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200740 mandir="\${prefix}"
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300741 datadir="\${prefix}"
Eduardo Habkost850da182012-04-18 16:55:38 -0300742 qemu_docdir="\${prefix}"
Paolo Bonzini683035d2010-05-26 16:08:28 +0200743 bindir="\${prefix}"
744 sysconfdir="\${prefix}"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +0200745 local_statedir=
Paolo Bonzini683035d2010-05-26 16:08:28 +0200746 confsuffix=""
Vinzenz Feenstra161a56a2017-04-19 11:26:15 +0200747 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32 $libs_qga"
Juan Quintela3457a3f2009-08-03 14:46:07 +0200748fi
749
Anthony Liguori487fefd2009-06-11 13:28:25 -0500750werror=""
bellard85aa5182007-11-11 20:17:03 +0000751
bellard7d132992003-03-06 23:23:54 +0000752for opt do
Stefan Weil89138852016-05-16 15:10:20 +0200753 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
bellard7d132992003-03-06 23:23:54 +0000754 case "$opt" in
bellard2efc3262005-12-18 19:14:49 +0000755 --help|-h) show_help=yes
756 ;;
Mike Frysinger99123e12011-04-07 01:12:28 -0400757 --version|-V) exec cat $source_path/VERSION
758 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000759 --prefix=*) prefix="$optarg"
bellard7d132992003-03-06 23:23:54 +0000760 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000761 --interp-prefix=*) interp_prefix="$optarg"
bellard32ce6332003-04-11 00:16:16 +0000762 ;;
Paolo Bonzinica4deeb2010-12-23 11:44:00 +0100763 --source-path=*)
bellard7d132992003-03-06 23:23:54 +0000764 ;;
aliguoriac0df512008-12-29 17:14:15 +0000765 --cross-prefix=*)
bellard7d132992003-03-06 23:23:54 +0000766 ;;
aliguoriac0df512008-12-29 17:14:15 +0000767 --cc=*)
bellard7d132992003-03-06 23:23:54 +0000768 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000769 --host-cc=*) host_cc="$optarg"
bellard83469012005-07-23 14:27:54 +0000770 ;;
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -0400771 --cxx=*)
772 ;;
Michael S. Tsirkine007dbe2013-11-24 11:38:05 +0200773 --iasl=*) iasl="$optarg"
774 ;;
Peter Maydell3c4a4d02012-08-11 22:34:40 +0100775 --objcc=*) objcc="$optarg"
776 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000777 --make=*) make="$optarg"
bellard7d132992003-03-06 23:23:54 +0000778 ;;
pbrook6a882642006-04-17 13:57:12 +0000779 --install=*) install="$optarg"
780 ;;
Blue Swirlc886edf2011-07-22 21:08:09 +0000781 --python=*) python="$optarg"
782 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000783 --gcov=*) gcov_tool="$optarg"
784 ;;
Brade2d88302011-09-02 16:53:28 -0400785 --smbd=*) smbd="$optarg"
786 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200787 --extra-cflags=*)
bellard7d132992003-03-06 23:23:54 +0000788 ;;
Juan Quintelae2a2ed02009-08-03 14:46:02 +0200789 --extra-ldflags=*)
bellard7d132992003-03-06 23:23:54 +0000790 ;;
Gerd Hoffmann5bc62e02012-02-08 13:54:13 +0100791 --enable-debug-info)
792 ;;
793 --disable-debug-info)
794 ;;
Fam Zheng17969262014-02-10 14:48:56 +0800795 --enable-modules)
796 modules="yes"
797 ;;
Stefan Hajnoczi3aa88b32015-11-02 14:06:23 +0000798 --disable-modules)
799 modules="no"
800 ;;
Juan Quintela2ff6b912009-08-03 14:45:55 +0200801 --cpu=*)
bellard7d132992003-03-06 23:23:54 +0000802 ;;
pbrookb1a550a2006-04-16 13:28:56 +0000803 --target-list=*) target_list="$optarg"
bellardde83cd02003-06-15 20:25:43 +0000804 ;;
Lluís Vilanova5b808272014-05-27 15:02:14 +0200805 --enable-trace-backends=*) trace_backends="$optarg"
806 ;;
807 # XXX: backwards compatibility
808 --enable-trace-backend=*) trace_backends="$optarg"
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +0100809 ;;
Paolo Bonzini74242e02010-12-23 11:44:02 +0100810 --with-trace-file=*) trace_file="$optarg"
Prerna Saxena9410b562010-07-13 09:26:32 +0100811 ;;
bellard7d132992003-03-06 23:23:54 +0000812 --enable-gprof) gprof="yes"
813 ;;
Blue Swirl1d728c32012-05-01 18:45:39 +0000814 --enable-gcov) gcov="yes"
815 ;;
Loïc Minier79427692010-01-31 12:23:45 +0100816 --static)
817 static="yes"
818 LDFLAGS="-static $LDFLAGS"
Sergei Trofimovich17884d72012-01-31 22:03:45 +0300819 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
bellard43ce4df2003-06-09 19:53:12 +0000820 ;;
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200821 --mandir=*) mandir="$optarg"
822 ;;
823 --bindir=*) bindir="$optarg"
824 ;;
Alon Levy3aa5d2b2011-05-15 12:08:59 +0300825 --libdir=*) libdir="$optarg"
826 ;;
Michael Tokarev8bf188a2012-06-07 01:11:00 +0400827 --libexecdir=*) libexecdir="$optarg"
828 ;;
Alon Levy0f94d6d2011-06-27 11:58:20 +0200829 --includedir=*) includedir="$optarg"
830 ;;
Eduardo Habkost528ae5b2012-04-18 16:55:49 -0300831 --datadir=*) datadir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200832 ;;
Eduardo Habkost023d3d62012-04-18 16:55:50 -0300833 --with-confsuffix=*) confsuffix="$optarg"
834 ;;
Eduardo Habkost850da182012-04-18 16:55:38 -0300835 --docdir=*) qemu_docdir="$optarg"
Paolo Bonzini0b24e752010-05-26 16:08:26 +0200836 ;;
Andre Przywaraca2fb932010-03-08 14:09:48 +0100837 --sysconfdir=*) sysconfdir="$optarg"
Anthony Liguori07381cc2010-01-21 10:30:29 -0600838 ;;
Luiz Capitulino785c23a2012-10-03 18:35:57 -0300839 --localstatedir=*) local_statedir="$optarg"
840 ;;
841 --sbindir=*|--sharedstatedir=*|\
Max Filippov023ddd72011-11-24 16:11:31 +0400842 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
843 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
844 # These switches are silently ignored, for compatibility with
845 # autoconf-generated configure scripts. This allows QEMU's
846 # configure to be used by RPM and similar macros that set
847 # lots of directory switches by default.
848 ;;
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +0200849 --with-system-pixman) pixman="system"
850 ;;
851 --without-system-pixman) pixman="internal"
852 ;;
Robert Schiele74880fe2012-12-04 16:58:08 +0100853 --without-pixman) pixman="none"
854 ;;
bellard97a847b2003-08-10 21:36:04 +0000855 --disable-sdl) sdl="no"
856 ;;
Juan Quintelac4198152009-08-12 18:29:53 +0200857 --enable-sdl) sdl="yes"
858 ;;
Dave Airlie47c03742013-12-10 14:05:51 +1000859 --with-sdlabi=*) sdlabi="$optarg"
860 ;;
Paolo Bonzini3556c232013-05-10 14:16:40 +0200861 --disable-qom-cast-debug) qom_cast_debug="no"
862 ;;
863 --enable-qom-cast-debug) qom_cast_debug="yes"
864 ;;
Meador Inge983eef52012-02-24 14:00:42 +0530865 --disable-virtfs) virtfs="no"
866 ;;
867 --enable-virtfs) virtfs="yes"
868 ;;
Jes Sorensen821601e2011-03-16 13:33:36 +0100869 --disable-vnc) vnc="no"
870 ;;
871 --enable-vnc) vnc="yes"
872 ;;
blueswir12f6a1ab2008-08-21 18:00:53 +0000873 --oss-lib=*) oss_lib="$optarg"
874 ;;
malc0c58ac12008-06-25 21:04:05 +0000875 --audio-drv-list=*) audio_drv_list="$optarg"
876 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200877 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800878 ;;
Stefan Weil89138852016-05-16 15:10:20 +0200879 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
Markus Armbrustereb852012009-10-27 18:41:44 +0100880 ;;
aurel32f8393942009-04-13 18:45:38 +0000881 --enable-debug-tcg) debug_tcg="yes"
882 ;;
883 --disable-debug-tcg) debug_tcg="no"
884 ;;
Paul Brookf3d08ee2009-06-04 11:39:04 +0100885 --enable-debug)
886 # Enable debugging options that aren't excessively noisy
887 debug_tcg="yes"
888 debug="yes"
889 strip_opt="no"
John Snowb553a042015-11-03 15:43:42 -0500890 fortify_source="no"
Paul Brookf3d08ee2009-06-04 11:39:04 +0100891 ;;
aliguori03b4fe72008-10-07 19:16:17 +0000892 --enable-sparse) sparse="yes"
893 ;;
894 --disable-sparse) sparse="no"
895 ;;
aliguori1625af82009-04-05 17:41:02 +0000896 --disable-strip) strip_opt="no"
897 ;;
aliguori2f9606b2009-03-06 20:27:28 +0000898 --disable-vnc-sasl) vnc_sasl="no"
899 ;;
Juan Quintelaea784e32009-08-12 18:20:29 +0200900 --enable-vnc-sasl) vnc_sasl="yes"
901 ;;
Corentin Chary2f6f5c72010-07-07 20:57:49 +0200902 --disable-vnc-jpeg) vnc_jpeg="no"
903 ;;
904 --enable-vnc-jpeg) vnc_jpeg="yes"
905 ;;
Corentin Charyefe556a2010-07-07 20:57:56 +0200906 --disable-vnc-png) vnc_png="no"
907 ;;
908 --enable-vnc-png) vnc_png="yes"
909 ;;
bellard443f1372004-06-04 11:13:20 +0000910 --disable-slirp) slirp="no"
bellard1d14ffa2005-10-30 18:58:22 +0000911 ;;
aliguorie0e6c8c02008-07-23 18:14:33 +0000912 --disable-vde) vde="no"
ths8a16d272008-07-19 09:56:24 +0000913 ;;
Juan Quinteladfb278b2009-08-12 18:20:27 +0200914 --enable-vde) vde="yes"
915 ;;
Vincenzo Maffione58952132013-11-06 11:44:06 +0100916 --disable-netmap) netmap="no"
917 ;;
918 --enable-netmap) netmap="yes"
919 ;;
aliguorie37630c2009-04-22 15:19:10 +0000920 --disable-xen) xen="no"
921 ;;
Juan Quintelafc321b42009-08-12 18:29:55 +0200922 --enable-xen) xen="yes"
923 ;;
Anthony PERARDeb6fda02012-06-21 15:32:59 +0000924 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
925 ;;
926 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
927 ;;
Ian Campbell64a7ad62016-01-15 13:23:44 +0000928 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
929 ;;
930 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
931 ;;
aurel322e4d9fb2008-04-08 06:01:02 +0000932 --disable-brlapi) brlapi="no"
933 ;;
Juan Quintela4ffcedb2009-08-12 18:20:26 +0200934 --enable-brlapi) brlapi="yes"
935 ;;
balrogfb599c92008-09-28 23:49:55 +0000936 --disable-bluez) bluez="no"
937 ;;
Juan Quintelaa20a6f42009-08-12 18:29:50 +0200938 --enable-bluez) bluez="yes"
939 ;;
aliguori7ba1e612008-11-05 16:04:33 +0000940 --disable-kvm) kvm="no"
941 ;;
Juan Quintelab31a0272009-08-12 18:29:56 +0200942 --enable-kvm) kvm="yes"
943 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100944 --disable-hax) hax="no"
zhanghailiang180fb752016-10-27 14:43:08 +0800945 ;;
Vincent Palatinb0cb0a62017-01-10 11:59:57 +0100946 --enable-hax) hax="yes"
zhanghailiang180fb752016-10-27 14:43:08 +0800947 ;;
Stefan Weil9195b2c2011-10-19 07:07:18 +0200948 --disable-tcg-interpreter) tcg_interpreter="no"
949 ;;
950 --enable-tcg-interpreter) tcg_interpreter="yes"
951 ;;
Corey Bryant47e98652012-01-26 09:42:26 -0500952 --disable-cap-ng) cap_ng="no"
953 ;;
954 --enable-cap-ng) cap_ng="yes"
955 ;;
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +0100956 --disable-spice) spice="no"
957 ;;
958 --enable-spice) spice="yes"
959 ;;
Ronnie Sahlbergc589b242011-10-25 19:24:24 +1100960 --disable-libiscsi) libiscsi="no"
961 ;;
962 --enable-libiscsi) libiscsi="yes"
963 ;;
Peter Lieven6542aa92014-02-03 10:26:13 +0100964 --disable-libnfs) libnfs="no"
965 ;;
966 --enable-libnfs) libnfs="yes"
967 ;;
bellard05c2a3e2006-02-08 22:39:17 +0000968 --enable-profiler) profiler="yes"
969 ;;
Pavel Borzenkov14821032011-11-10 22:40:07 +0400970 --disable-cocoa) cocoa="no"
971 ;;
malcc2de5c92008-06-28 19:13:06 +0000972 --enable-cocoa)
973 cocoa="yes" ;
Stefan Weil89138852016-05-16 15:10:20 +0200974 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
bellard1d14ffa2005-10-30 18:58:22 +0000975 ;;
pbrookcad25d62006-03-19 16:31:11 +0000976 --disable-system) softmmu="no"
pbrook0a8e90f2006-03-19 14:54:16 +0000977 ;;
pbrookcad25d62006-03-19 16:31:11 +0000978 --enable-system) softmmu="yes"
pbrook0a8e90f2006-03-19 14:54:16 +0000979 ;;
Zachary Amsden0953a802009-07-30 00:14:59 -1000980 --disable-user)
981 linux_user="no" ;
982 bsd_user="no" ;
Zachary Amsden0953a802009-07-30 00:14:59 -1000983 ;;
984 --enable-user) ;;
ths831b7822007-01-18 20:06:33 +0000985 --disable-linux-user) linux_user="no"
pbrook0a8e90f2006-03-19 14:54:16 +0000986 ;;
ths831b7822007-01-18 20:06:33 +0000987 --enable-linux-user) linux_user="yes"
988 ;;
blueswir184778502008-10-26 20:33:16 +0000989 --disable-bsd-user) bsd_user="no"
990 ;;
991 --enable-bsd-user) bsd_user="yes"
992 ;;
Avi Kivity40d64442011-11-15 20:12:17 +0200993 --enable-pie) pie="yes"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +0300994 ;;
Avi Kivity40d64442011-11-15 20:12:17 +0200995 --disable-pie) pie="no"
Kirill A. Shutemov34005a02009-09-12 02:17:55 +0300996 ;;
bellard85aa5182007-11-11 20:17:03 +0000997 --enable-werror) werror="yes"
998 ;;
999 --disable-werror) werror="no"
1000 ;;
Steven Noonan63678e12014-03-28 17:19:02 +01001001 --enable-stack-protector) stack_protector="yes"
1002 ;;
1003 --disable-stack-protector) stack_protector="no"
1004 ;;
balrog4d3b6f62008-02-10 16:33:14 +00001005 --disable-curses) curses="no"
1006 ;;
Juan Quintelac584a6d2009-08-12 18:20:30 +02001007 --enable-curses) curses="yes"
1008 ;;
Alexander Graf769ce762009-05-11 17:41:42 +02001009 --disable-curl) curl="no"
1010 ;;
Juan Quintela788c8192009-08-12 18:29:47 +02001011 --enable-curl) curl="yes"
1012 ;;
Juan Quintela2df87df2009-08-12 18:29:54 +02001013 --disable-fdt) fdt="no"
1014 ;;
1015 --enable-fdt) fdt="yes"
1016 ;;
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02001017 --disable-linux-aio) linux_aio="no"
1018 ;;
1019 --enable-linux-aio) linux_aio="yes"
1020 ;;
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07001021 --disable-attr) attr="no"
1022 ;;
1023 --enable-attr) attr="yes"
1024 ;;
ths77755342008-11-27 15:45:16 +00001025 --disable-blobs) blobs="no"
1026 ;;
pbrook4a19f1e2009-04-07 23:17:49 +00001027 --with-pkgversion=*) pkgversion=" ($optarg)"
1028 ;;
Alex Barcelo519175a2012-02-28 12:25:50 +01001029 --with-coroutine=*) coroutine="$optarg"
1030 ;;
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02001031 --disable-coroutine-pool) coroutine_pool="no"
1032 ;;
1033 --enable-coroutine-pool) coroutine_pool="yes"
1034 ;;
Peter Lieven7d992e42016-09-27 11:58:45 +02001035 --enable-debug-stack-usage) debug_stack_usage="yes"
1036 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001037 --disable-docs) docs="no"
Anthony Liguori70ec5dc2009-05-14 08:25:04 -05001038 ;;
Juan Quintelaa25dba12009-08-12 18:29:52 +02001039 --enable-docs) docs="yes"
Juan Quintela83a3ab82009-08-12 18:29:51 +02001040 ;;
Michael S. Tsirkind5970052010-03-17 13:08:17 +02001041 --disable-vhost-net) vhost_net="no"
1042 ;;
1043 --enable-vhost-net) vhost_net="yes"
1044 ;;
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00001045 --disable-vhost-scsi) vhost_scsi="no"
1046 ;;
1047 --enable-vhost-scsi) vhost_scsi="yes"
1048 ;;
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01001049 --disable-vhost-vsock) vhost_vsock="no"
1050 ;;
1051 --enable-vhost-vsock) vhost_vsock="yes"
1052 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001053 --disable-opengl) opengl="no"
Michael Walle20ff0752011-03-07 23:32:39 +01001054 ;;
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01001055 --enable-opengl) opengl="yes"
Michael Walle20ff0752011-03-07 23:32:39 +01001056 ;;
Christian Brunnerf27aaf42010-12-06 20:53:01 +01001057 --disable-rbd) rbd="no"
1058 ;;
1059 --enable-rbd) rbd="yes"
1060 ;;
Sergei Trofimovich8c84cf12012-01-24 20:42:40 +03001061 --disable-xfsctl) xfs="no"
1062 ;;
1063 --enable-xfsctl) xfs="yes"
1064 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001065 --disable-smartcard) smartcard="no"
Robert Relyea111a38b2010-11-28 16:36:38 +02001066 ;;
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001067 --enable-smartcard) smartcard="yes"
Robert Relyea111a38b2010-11-28 16:36:38 +02001068 ;;
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01001069 --disable-libusb) libusb="no"
1070 ;;
1071 --enable-libusb) libusb="yes"
1072 ;;
Hans de Goede69354a82011-07-19 11:04:10 +02001073 --disable-usb-redir) usb_redir="no"
1074 ;;
1075 --enable-usb-redir) usb_redir="yes"
1076 ;;
Alon Levy1ece9902011-07-26 12:30:40 +03001077 --disable-zlib-test) zlib="no"
1078 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001079 --disable-lzo) lzo="no"
1080 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001081 --enable-lzo) lzo="yes"
1082 ;;
Stefan Weilb25c9df2014-04-29 08:21:16 +02001083 --disable-snappy) snappy="no"
1084 ;;
qiaonuohan607dacd2014-02-18 14:11:30 +08001085 --enable-snappy) snappy="yes"
1086 ;;
Peter Wu6b383c02015-01-06 18:48:14 +01001087 --disable-bzip2) bzip2="no"
1088 ;;
1089 --enable-bzip2) bzip2="yes"
1090 ;;
Michael Rothd138cee2011-08-01 14:52:57 -05001091 --enable-guest-agent) guest_agent="yes"
1092 ;;
1093 --disable-guest-agent) guest_agent="no"
1094 ;;
Yossi Hindin9dacf322015-05-06 14:57:40 +03001095 --enable-guest-agent-msi) guest_agent_msi="yes"
1096 ;;
1097 --disable-guest-agent-msi) guest_agent_msi="no"
1098 ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04001099 --with-vss-sdk) vss_win32_sdk=""
1100 ;;
1101 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1102 ;;
1103 --without-vss-sdk) vss_win32_sdk="no"
1104 ;;
1105 --with-win-sdk) win_sdk=""
1106 ;;
1107 --with-win-sdk=*) win_sdk="$optarg"
1108 ;;
1109 --without-win-sdk) win_sdk="no"
1110 ;;
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01001111 --enable-tools) want_tools="yes"
1112 ;;
1113 --disable-tools) want_tools="no"
1114 ;;
Eduardo Otubof7945732012-08-14 18:44:05 -03001115 --enable-seccomp) seccomp="yes"
1116 ;;
1117 --disable-seccomp) seccomp="no"
1118 ;;
Bharata B Raoeb100392012-09-24 14:42:45 +05301119 --disable-glusterfs) glusterfs="no"
1120 ;;
1121 --enable-glusterfs) glusterfs="yes"
1122 ;;
Fam Zheng52b53c02014-09-10 14:17:51 +08001123 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1124 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
Stefan Hajnoczi583f6e72012-11-14 15:04:15 +01001125 ;;
Fam Zhengcb6414d2016-09-21 12:27:16 +08001126 --enable-vhdx|--disable-vhdx)
1127 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1128 ;;
Fam Zheng315d3182016-09-21 12:27:21 +08001129 --enable-uuid|--disable-uuid)
1130 echo "$0: $opt is obsolete, UUID support is always built" >&2
1131 ;;
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06001132 --disable-gtk) gtk="no"
1133 ;;
1134 --enable-gtk) gtk="yes"
1135 ;;
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001136 --tls-priority=*) tls_priority="$optarg"
1137 ;;
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001138 --disable-gnutls) gnutls="no"
1139 ;;
1140 --enable-gnutls) gnutls="yes"
1141 ;;
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001142 --disable-nettle) nettle="no"
1143 ;;
1144 --enable-nettle) nettle="yes"
1145 ;;
1146 --disable-gcrypt) gcrypt="no"
1147 ;;
1148 --enable-gcrypt) gcrypt="yes"
1149 ;;
Michael R. Hines2da776d2013-07-22 10:01:54 -04001150 --enable-rdma) rdma="yes"
1151 ;;
1152 --disable-rdma) rdma="no"
1153 ;;
Daniel P. Berrange528de902013-02-25 15:20:44 +00001154 --with-gtkabi=*) gtkabi="$optarg"
1155 ;;
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01001156 --disable-vte) vte="no"
1157 ;;
1158 --enable-vte) vte="yes"
1159 ;;
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02001160 --disable-virglrenderer) virglrenderer="no"
1161 ;;
1162 --enable-virglrenderer) virglrenderer="yes"
1163 ;;
Cole Robinsone91c7932014-06-16 15:32:47 -04001164 --disable-tpm) tpm="no"
1165 ;;
Stefan Bergerab214c22013-02-27 12:47:52 -05001166 --enable-tpm) tpm="yes"
1167 ;;
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01001168 --disable-libssh2) libssh2="no"
1169 ;;
1170 --enable-libssh2) libssh2="yes"
1171 ;;
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08001172 --disable-numa) numa="no"
1173 ;;
1174 --enable-numa) numa="yes"
1175 ;;
Fam Zheng2847b462015-03-26 11:03:12 +08001176 --disable-tcmalloc) tcmalloc="no"
1177 ;;
1178 --enable-tcmalloc) tcmalloc="yes"
1179 ;;
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001180 --disable-jemalloc) jemalloc="no"
1181 ;;
1182 --enable-jemalloc) jemalloc="yes"
1183 ;;
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001184 --disable-replication) replication="no"
1185 ;;
1186 --enable-replication) replication="yes"
1187 ;;
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001188 --disable-vxhs) vxhs="no"
1189 ;;
1190 --enable-vxhs) vxhs="yes"
1191 ;;
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001192 *)
1193 echo "ERROR: unknown option $opt"
1194 echo "Try '$0 --help' for more information"
1195 exit 1
balrog7f1559c2007-11-17 10:24:32 +00001196 ;;
bellard7d132992003-03-06 23:23:54 +00001197 esac
1198done
1199
bellard40293e52008-01-31 11:32:10 +00001200case "$cpu" in
Richard Hendersone3608d62013-08-28 15:48:21 -07001201 ppc)
1202 CPU_CFLAGS="-m32"
1203 LDFLAGS="-m32 $LDFLAGS"
1204 ;;
1205 ppc64)
1206 CPU_CFLAGS="-m64"
1207 LDFLAGS="-m64 $LDFLAGS"
1208 ;;
Richard Henderson9b9c37c2012-09-21 10:34:21 -07001209 sparc)
Juan Quintelaed968ff2009-08-03 14:46:11 +02001210 LDFLAGS="-m32 $LDFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001211 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
blueswir131422552007-04-16 18:27:06 +00001212 ;;
Juan Quintelaed968ff2009-08-03 14:46:11 +02001213 sparc64)
Juan Quintelaed968ff2009-08-03 14:46:11 +02001214 LDFLAGS="-m64 $LDFLAGS"
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001215 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
blueswir131422552007-04-16 18:27:06 +00001216 ;;
ths76d83bd2007-11-18 21:22:10 +00001217 s390)
Richard Henderson061cdd82014-03-31 13:40:49 -04001218 CPU_CFLAGS="-m31"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001219 LDFLAGS="-m31 $LDFLAGS"
1220 ;;
1221 s390x)
Richard Henderson061cdd82014-03-31 13:40:49 -04001222 CPU_CFLAGS="-m64"
Richard Henderson28d7cc42010-06-04 12:14:09 -07001223 LDFLAGS="-m64 $LDFLAGS"
ths76d83bd2007-11-18 21:22:10 +00001224 ;;
bellard40293e52008-01-31 11:32:10 +00001225 i386)
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001226 CPU_CFLAGS="-m32"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001227 LDFLAGS="-m32 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001228 cc_i386='$(CC) -m32'
bellard40293e52008-01-31 11:32:10 +00001229 ;;
1230 x86_64)
Richard Henderson7ebee432016-06-29 21:10:59 -07001231 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1232 # If we truly care, we should simply detect this case at
1233 # runtime and generate the fallback to serial emulation.
1234 CPU_CFLAGS="-m64 -mcx16"
Juan Quintela0c439cb2009-08-03 14:46:01 +02001235 LDFLAGS="-m64 $LDFLAGS"
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02001236 cc_i386='$(CC) -m32'
Paul Brook379f6692009-07-17 12:48:08 +01001237 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001238 x32)
1239 CPU_CFLAGS="-mx32"
1240 LDFLAGS="-mx32 $LDFLAGS"
1241 cc_i386='$(CC) -m32'
1242 ;;
Peter Maydell30163d82012-10-09 03:16:49 +00001243 # No special flags required for other host CPUs
blueswir131422552007-04-16 18:27:06 +00001244esac
1245
Peter Crosthwaite79f3b122013-04-18 14:46:14 +10001246QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1247EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1248
Peter Maydellaffc88c2016-06-13 11:32:24 +01001249# For user-mode emulation the host arch has to be one we explicitly
1250# support, even if we're using TCI.
1251if [ "$ARCH" = "unknown" ]; then
1252 bsd_user="no"
1253 linux_user="no"
1254fi
1255
Peter Maydell60e0df22011-05-03 14:50:13 +01001256default_target_list=""
1257
Peter Maydell6e92f822013-05-20 16:16:15 +01001258mak_wilds=""
1259
1260if [ "$softmmu" = "yes" ]; then
1261 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001262fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001263if [ "$linux_user" = "yes" ]; then
1264 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001265fi
Peter Maydell6e92f822013-05-20 16:16:15 +01001266if [ "$bsd_user" = "yes" ]; then
1267 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
Peter Maydell60e0df22011-05-03 14:50:13 +01001268fi
1269
Peter Maydell6e92f822013-05-20 16:16:15 +01001270for config in $mak_wilds; do
1271 default_target_list="${default_target_list} $(basename "$config" .mak)"
1272done
1273
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001274# Enumerate public trace backends for --help output
Greg Kurz64a60472017-04-26 15:36:07 +02001275trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001276
pbrookaf5db582006-04-08 14:26:41 +00001277if test x"$show_help" = x"yes" ; then
1278cat << EOF
1279
1280Usage: configure [options]
1281Options: [defaults in brackets after descriptions]
1282
Stefan Weil08fb77e2013-12-18 22:09:39 +01001283Standard options:
1284 --help print this message
1285 --prefix=PREFIX install in PREFIX [$prefix]
1286 --interp-prefix=PREFIX where to find shared libraries, etc.
1287 use %M for cpu name [$interp_prefix]
1288 --target-list=LIST set target list (default: build everything)
1289$(echo Available targets: $default_target_list | \
1290 fold -s -w 53 | sed -e 's/^/ /')
1291
1292Advanced options (experts only):
1293 --source-path=PATH path of source code [$source_path]
1294 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1295 --cc=CC use C compiler CC [$cc]
1296 --iasl=IASL use ACPI compiler IASL [$iasl]
1297 --host-cc=CC use C compiler CC [$host_cc] for code run at
1298 build time
1299 --cxx=CXX use C++ compiler CXX [$cxx]
1300 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1301 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1302 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1303 --make=MAKE use specified make [$make]
1304 --install=INSTALL use specified install [$install]
1305 --python=PYTHON use specified python [$python]
1306 --smbd=SMBD use specified smbd [$smbd]
1307 --static enable static build [$static]
1308 --mandir=PATH install man pages in PATH
1309 --datadir=PATH install firmware in PATH$confsuffix
1310 --docdir=PATH install documentation in PATH$confsuffix
1311 --bindir=PATH install binaries in PATH
1312 --libdir=PATH install libraries in PATH
1313 --sysconfdir=PATH install config in PATH$confsuffix
1314 --localstatedir=PATH install local state in PATH (set at runtime on win32)
Fam Zhenge26110c2014-02-10 14:48:57 +08001315 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001316 --enable-debug enable common debug build options
Stefan Weil08fb77e2013-12-18 22:09:39 +01001317 --disable-strip disable stripping binaries
1318 --disable-werror disable compilation abort on warning
Steven Noonan63678e12014-03-28 17:19:02 +01001319 --disable-stack-protector disable compiler-provided stack protection
Stefan Weil08fb77e2013-12-18 22:09:39 +01001320 --audio-drv-list=LIST set audio drivers list:
1321 Available drivers: $audio_possible_drivers
1322 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1323 --block-drv-rw-whitelist=L
1324 set block driver read-write whitelist
1325 (affects only QEMU, not qemu-img)
1326 --block-drv-ro-whitelist=L
1327 set block driver read-only whitelist
1328 (affects only QEMU, not qemu-img)
Lluís Vilanova5b808272014-05-27 15:02:14 +02001329 --enable-trace-backends=B Set trace backend
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001330 Available backends: $trace_backend_list
Stefan Weil08fb77e2013-12-18 22:09:39 +01001331 --with-trace-file=NAME Full PATH,NAME of file to store traces
1332 Default:trace-<pid>
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001333 --disable-slirp disable SLIRP userspace network connectivity
1334 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1335 --oss-lib path to OSS library
1336 --cpu=CPU Build for host CPU [$cpu]
Stefan Weil08fb77e2013-12-18 22:09:39 +01001337 --with-coroutine=BACKEND coroutine backend. Supported options:
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01001338 ucontext, sigaltstack, windows
Stefan Weil08fb77e2013-12-18 22:09:39 +01001339 --enable-gcov enable test coverage analysis with gcov
1340 --gcov=GCOV use specified gcov [$gcov_tool]
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001341 --disable-blobs disable installing provided firmware blobs
1342 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1343 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01001344 --tls-priority default TLS protocol/cipher priority string
Lin Mac12d66a2017-03-10 18:14:05 +08001345 --enable-gprof QEMU profiling with gprof
1346 --enable-profiler profiler support
1347 --enable-xen-pv-domain-build
1348 xen pv domain builder
1349 --enable-debug-stack-usage
1350 track the maximum stack usage of stacks created by qemu_alloc_stack
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001351
1352Optional features, enabled with --enable-FEATURE and
1353disabled with --disable-FEATURE, default is enabled if available:
1354
1355 system all system emulation targets
1356 user supported user emulation targets
1357 linux-user all linux usermode emulation targets
1358 bsd-user all BSD usermode emulation targets
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001359 docs build documentation
1360 guest-agent build the QEMU Guest Agent
1361 guest-agent-msi build guest agent Windows MSI installation package
1362 pie Position Independent Executables
1363 modules modules support
1364 debug-tcg TCG debugging (default is disabled)
1365 debug-info debugging information
1366 sparse sparse checker
1367
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01001368 gnutls GNUTLS cryptography support
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01001369 nettle nettle cryptography support
1370 gcrypt libgcrypt cryptography support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001371 sdl SDL UI
1372 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1373 gtk gtk UI
1374 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1375 vte vte support for the gtk UI
1376 curses curses UI
1377 vnc VNC UI support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001378 vnc-sasl SASL encryption for VNC server
1379 vnc-jpeg JPEG lossy compression for VNC server
1380 vnc-png PNG compression for VNC server
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001381 cocoa Cocoa UI (Mac OS X only)
1382 virtfs VirtFS
1383 xen xen backend driver support
1384 xen-pci-passthrough
1385 brlapi BrlAPI (Braile)
1386 curl curl connectivity
1387 fdt fdt device tree
1388 bluez bluez stack connectivity
1389 kvm KVM acceleration support
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01001390 hax HAX acceleration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001391 rdma RDMA-based migration support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001392 vde support for vde network
1393 netmap support for netmap network
1394 linux-aio Linux AIO support
1395 cap-ng libcap-ng support
1396 attr attr and xattr support
1397 vhost-net vhost-net acceleration support
1398 spice spice
1399 rbd rados block device (rbd)
1400 libiscsi iscsi support
1401 libnfs nfs support
Marc-André Lureau7b02f542015-08-30 11:48:40 +02001402 smartcard smartcard support (libcacard)
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001403 libusb libusb (for usb passthrough)
1404 usb-redir usb network redirection support
1405 lzo support of lzo compression library
1406 snappy support of snappy compression library
1407 bzip2 support of bzip2 compression library
1408 (for reading bzip2-compressed dmg images)
1409 seccomp seccomp support
1410 coroutine-pool coroutine freelist (better performance)
1411 glusterfs GlusterFS backend
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001412 tpm TPM support
1413 libssh2 ssh block device support
Michael Tokarevc23f23b2015-06-17 22:19:26 +03001414 numa libnuma support
1415 tcmalloc tcmalloc support
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02001416 jemalloc jemalloc support
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08001417 replication replication support
Lin Mac12d66a2017-03-10 18:14:05 +08001418 vhost-vsock virtio sockets device support
1419 opengl opengl support
1420 virglrenderer virgl rendering support
1421 xfsctl xfsctl support
1422 qom-cast-debug cast debugging support
1423 tools build qemu-io, qemu-nbd and qemu-image tools
Ashish Mittalda92c3f2017-04-03 20:48:08 -07001424 vxhs Veritas HyperScale vDisk backend support
Stefan Weil08fb77e2013-12-18 22:09:39 +01001425
1426NOTE: The object files are built at the place where configure is launched
pbrookaf5db582006-04-08 14:26:41 +00001427EOF
Fam Zheng2d2ad6d2014-04-18 14:55:36 +08001428exit 0
pbrookaf5db582006-04-08 14:26:41 +00001429fi
1430
Stefan Hajnoczic53eeaf2017-03-28 14:44:18 +01001431if ! has $python; then
1432 error_exit "Python not found. Use --python=/path/to/python"
1433fi
1434
1435# Note that if the Python conditional here evaluates True we will exit
1436# with status 1 which is a shell 'false' value.
1437if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1438 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1439 "Note that Python 3 or later is not yet supported." \
1440 "Use --python=/path/to/python to specify a supported Python."
1441fi
1442
1443# Suppress writing compiled files
1444python="$python -B"
1445
Peter Maydell359bc952011-12-24 13:07:25 +00001446# Now we have handled --enable-tcg-interpreter and know we're not just
1447# printing the help message, bail out if the host CPU isn't supported.
1448if test "$ARCH" = "unknown"; then
1449 if test "$tcg_interpreter" = "yes" ; then
1450 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
Peter Maydell359bc952011-12-24 13:07:25 +00001451 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001452 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
Peter Maydell359bc952011-12-24 13:07:25 +00001453 fi
1454fi
1455
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001456# Consult white-list to determine whether to enable werror
1457# by default. Only enable by default for git builds
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001458if test -z "$werror" ; then
1459 if test -d "$source_path/.git" -a \
Thomas Huthe4650c82016-06-08 10:13:26 +02001460 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001461 werror="yes"
1462 else
1463 werror="no"
1464 fi
1465fi
1466
Paolo Bonzini8d050952010-12-23 11:43:52 +01001467# check that the C compiler works.
John Snow93b25862015-03-25 18:57:37 -04001468write_c_skeleton;
Paolo Bonzini8d050952010-12-23 11:43:52 +01001469if compile_object ; then
1470 : C compiler works ok
1471else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001472 error_exit "\"$cc\" either does not exist or does not work"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001473fi
Peter Maydell0ef74c72015-11-24 14:55:46 +00001474if ! compile_prog ; then
1475 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1476fi
Paolo Bonzini8d050952010-12-23 11:43:52 +01001477
Peter Maydellfb59dab2017-03-28 14:01:52 +01001478if test "$bogus_os" = "yes"; then
1479 # Now that we know that we're not printing the help and that
1480 # the compiler works (so the results of the check_defines we used
1481 # to identify the OS are reliable), if we didn't recognize the
1482 # host OS we should stop now.
1483 error_exit "Unrecognized host OS $targetos"
1484fi
1485
Peter Maydell98b21dc2014-02-20 15:10:16 +00001486# Check that the C++ compiler exists and works with the C compiler
1487if has $cxx; then
1488 cat > $TMPC <<EOF
1489int c_function(void);
1490int main(void) { return c_function(); }
1491EOF
1492
1493 compile_object
1494
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001495 cat > $TMPCXX <<EOF
Peter Maydell98b21dc2014-02-20 15:10:16 +00001496extern "C" {
1497 int c_function(void);
1498}
1499int c_function(void) { return 42; }
1500EOF
1501
Peter Maydell9c83ffd2014-02-25 18:27:49 +00001502 update_cxxflags
1503
1504 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
Peter Maydell98b21dc2014-02-20 15:10:16 +00001505 # C++ compiler $cxx works ok with C compiler $cc
1506 :
1507 else
1508 echo "C++ compiler $cxx does not work with C compiler $cc"
1509 echo "Disabling C++ specific optional code"
1510 cxx=
1511 fi
1512else
1513 echo "No C++ compiler available; disabling C++ specific optional code"
1514 cxx=
1515fi
1516
Paolo Bonzini8d050952010-12-23 11:43:52 +01001517gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1518gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
Daniel P. Berrangeac7568b2017-02-06 11:29:53 +00001519gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
Pranith Kumar435405a2016-08-09 15:02:26 -04001520gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
Peter Maydellc1556a82012-10-14 21:00:39 +01001521gcc_flags="-Wno-initializer-overrides $gcc_flags"
Peter Maydell71429092013-08-05 20:16:40 +01001522gcc_flags="-Wno-string-plus-int $gcc_flags"
Peter Maydell6ca026c2012-07-18 15:10:18 +01001523# Note that we do not add -Werror to gcc_flags here, because that would
1524# enable it for all configure tests. If a configure test failed due
1525# to -Werror this would just silently disable some features,
1526# so it's too error prone.
John Snow93b25862015-03-25 18:57:37 -04001527
1528cc_has_warning_flag() {
1529 write_c_skeleton;
1530
Peter Maydella1d29d62012-10-27 22:19:07 +01001531 # Use the positive sense of the flag when testing for -Wno-wombat
1532 # support (gcc will happily accept the -Wno- form of unknown
1533 # warning options).
John Snow93b25862015-03-25 18:57:37 -04001534 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1535 compile_prog "-Werror $optflag" ""
1536}
1537
1538for flag in $gcc_flags; do
1539 if cc_has_warning_flag $flag ; then
1540 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Paolo Bonzini8d050952010-12-23 11:43:52 +01001541 fi
1542done
1543
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001544if test "$stack_protector" != "no"; then
Rodrigo Rebellofccd35a2015-11-12 12:04:28 -02001545 cat > $TMPC << EOF
1546int main(int argc, char *argv[])
1547{
1548 char arr[64], *p = arr, *c = argv[0];
1549 while (*c) {
1550 *p++ = *c++;
1551 }
1552 return 0;
1553}
1554EOF
Steven Noonan63678e12014-03-28 17:19:02 +01001555 gcc_flags="-fstack-protector-strong -fstack-protector-all"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001556 sp_on=0
Steven Noonan63678e12014-03-28 17:19:02 +01001557 for flag in $gcc_flags; do
Peter Maydell590e5dd2014-04-11 17:13:52 +01001558 # We need to check both a compile and a link, since some compiler
1559 # setups fail only on a .c->.o compile and some only at link time
1560 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1561 compile_prog "-Werror $flag" ""; then
Steven Noonan63678e12014-03-28 17:19:02 +01001562 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001563 sp_on=1
Steven Noonan63678e12014-03-28 17:19:02 +01001564 break
1565 fi
1566 done
Miroslav Rezanina3b463a32014-07-02 10:05:24 +02001567 if test "$stack_protector" = yes; then
1568 if test $sp_on = 0; then
1569 error_exit "Stack protector not supported"
1570 fi
1571 fi
Marc-André Lureau37746c52013-02-25 23:31:12 +01001572fi
1573
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01001574# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1575# large functions that use global variables. The bug is in all releases of
1576# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1577# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1578cat > $TMPC << EOF
1579#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1580int main(void) { return 0; }
1581#else
1582#error No bug in this compiler.
1583#endif
1584EOF
1585if compile_prog "-Werror -fno-gcse" "" ; then
1586 TRANSLATE_OPT_CFLAGS=-fno-gcse
1587fi
1588
Avi Kivity40d64442011-11-15 20:12:17 +02001589if test "$static" = "yes" ; then
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01001590 if test "$modules" = "yes" ; then
1591 error_exit "static and modules are mutually incompatible"
1592 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001593 if test "$pie" = "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001594 error_exit "static and pie are mutually incompatible"
Avi Kivity40d64442011-11-15 20:12:17 +02001595 else
1596 pie="no"
1597 fi
1598fi
1599
Emilio G. Cota768b7852015-04-29 13:09:02 +02001600# Unconditional check for compiler __thread support
1601 cat > $TMPC << EOF
1602static __thread int tls_var;
1603int main(void) { return tls_var; }
1604EOF
1605
1606if ! compile_prog "-Werror" "" ; then
1607 error_exit "Your compiler does not support the __thread specifier for " \
1608 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1609fi
1610
Avi Kivity40d64442011-11-15 20:12:17 +02001611if test "$pie" = ""; then
1612 case "$cpu-$targetos" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07001613 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
Avi Kivity40d64442011-11-15 20:12:17 +02001614 ;;
1615 *)
1616 pie="no"
1617 ;;
1618 esac
1619fi
1620
1621if test "$pie" != "no" ; then
1622 cat > $TMPC << EOF
Avi Kivity21d4a792011-11-23 11:24:25 +02001623
1624#ifdef __linux__
1625# define THREAD __thread
1626#else
1627# define THREAD
1628#endif
1629
1630static THREAD int tls_var;
1631
1632int main(void) { return tls_var; }
1633
Avi Kivity40d64442011-11-15 20:12:17 +02001634EOF
1635 if compile_prog "-fPIE -DPIE" "-pie"; then
1636 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1637 LDFLAGS="-pie $LDFLAGS"
1638 pie="yes"
1639 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1640 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1641 fi
1642 else
1643 if test "$pie" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001644 error_exit "PIE not available due to missing toolchain support"
Avi Kivity40d64442011-11-15 20:12:17 +02001645 else
1646 echo "Disabling PIE due to missing toolchain support"
1647 pie="no"
1648 fi
1649 fi
Brad46eef332013-12-10 19:49:08 -05001650
Stefan Hajnoczie4a7b342015-03-25 18:57:36 -04001651 if compile_prog "-Werror -fno-pie" "-nopie"; then
Brad46eef332013-12-10 19:49:08 -05001652 CFLAGS_NOPIE="-fno-pie"
1653 LDFLAGS_NOPIE="-nopie"
1654 fi
Avi Kivity40d64442011-11-15 20:12:17 +02001655fi
1656
Paolo Bonzini09dada42013-04-17 16:26:47 +02001657##########################################
1658# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1659# use i686 as default anyway, but for those that don't, an explicit
1660# specification is necessary
1661
1662if test "$cpu" = "i386"; then
1663 cat > $TMPC << EOF
1664static int sfaa(int *ptr)
1665{
1666 return __sync_fetch_and_and(ptr, 0);
1667}
1668
1669int main(void)
1670{
1671 int val = 42;
Stefan Weil1405b622013-05-11 21:46:58 +02001672 val = __sync_val_compare_and_swap(&val, 0, 1);
Paolo Bonzini09dada42013-04-17 16:26:47 +02001673 sfaa(&val);
1674 return val;
1675}
1676EOF
1677 if ! compile_prog "" "" ; then
1678 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1679 fi
1680fi
1681
1682#########################################
bellardec530c82006-04-25 22:36:06 +00001683# Solaris specific configure tool chain decisions
Paolo Bonzini09dada42013-04-17 16:26:47 +02001684
bellardec530c82006-04-25 22:36:06 +00001685if test "$solaris" = "yes" ; then
Loïc Minier6792aa12010-01-20 11:35:54 +01001686 if has $install; then
1687 :
1688 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001689 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1690 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1691 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
bellardec530c82006-04-25 22:36:06 +00001692 fi
Stefan Weil89138852016-05-16 15:10:20 +02001693 if test "$(path_of $install)" = "/usr/sbin/install" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001694 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1695 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1696 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
bellardec530c82006-04-25 22:36:06 +00001697 fi
Loïc Minier6792aa12010-01-20 11:35:54 +01001698 if has ar; then
1699 :
1700 else
bellardec530c82006-04-25 22:36:06 +00001701 if test -f /usr/ccs/bin/ar ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001702 error_exit "No path includes ar" \
1703 "Add /usr/ccs/bin to your path and rerun configure"
bellardec530c82006-04-25 22:36:06 +00001704 fi
Peter Maydell76ad07a2013-04-08 12:11:26 +01001705 error_exit "No path includes ar"
bellardec530c82006-04-25 22:36:06 +00001706 fi
ths5fafdf22007-09-16 21:08:06 +00001707fi
bellardec530c82006-04-25 22:36:06 +00001708
Stefan Weilafb63eb2012-09-26 22:04:38 +02001709if test -z "${target_list+xxx}" ; then
Anthony Liguori121afa92012-09-14 08:17:03 -05001710 target_list="$default_target_list"
1711else
Stefan Weil89138852016-05-16 15:10:20 +02001712 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
bellard5327cf42005-01-10 23:18:50 +00001713fi
Peter Maydell25b48332013-05-20 16:16:16 +01001714
1715# Check that we recognised the target name; this allows a more
1716# friendly error message than if we let it fall through.
1717for target in $target_list; do
1718 case " $default_target_list " in
1719 *" $target "*)
1720 ;;
1721 *)
1722 error_exit "Unknown target name '$target'"
1723 ;;
1724 esac
1725done
1726
Paolo Bonzinif55fe272010-05-26 16:08:17 +02001727# see if system emulation was really requested
1728case " $target_list " in
1729 *"-softmmu "*) softmmu=yes
1730 ;;
1731 *) softmmu=no
1732 ;;
1733esac
bellard5327cf42005-01-10 23:18:50 +00001734
Juan Quintela249247c2009-08-12 18:20:25 +02001735feature_not_found() {
1736 feature=$1
Stewart Smith21684af2014-01-24 12:39:10 +11001737 remedy=$2
Juan Quintela249247c2009-08-12 18:20:25 +02001738
Peter Maydell76ad07a2013-04-08 12:11:26 +01001739 error_exit "User requested feature $feature" \
Stewart Smith21684af2014-01-24 12:39:10 +11001740 "configure was not able to find it." \
1741 "$remedy"
Juan Quintela249247c2009-08-12 18:20:25 +02001742}
1743
bellard7d132992003-03-06 23:23:54 +00001744# ---
1745# big/little endian test
1746cat > $TMPC << EOF
Mike Frysinger61cc9192013-06-30 23:30:18 -04001747short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1748short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1749extern int foo(short *, short *);
1750int main(int argc, char *argv[]) {
1751 return foo(big_endian, little_endian);
bellard7d132992003-03-06 23:23:54 +00001752}
1753EOF
1754
Mike Frysinger61cc9192013-06-30 23:30:18 -04001755if compile_object ; then
1756 if grep -q BiGeNdIaN $TMPO ; then
1757 bigendian="yes"
1758 elif grep -q LiTtLeEnDiAn $TMPO ; then
1759 bigendian="no"
1760 else
1761 echo big/little test failed
Peter Maydell21d89f82011-11-30 10:57:48 +01001762 fi
Mike Frysinger61cc9192013-06-30 23:30:18 -04001763else
1764 echo big/little test failed
bellard7d132992003-03-06 23:23:54 +00001765fi
1766
Juan Quintelab0a47e72009-08-12 18:29:49 +02001767##########################################
Peter Maydella30878e2015-08-14 16:10:52 +01001768# cocoa implies not SDL or GTK
1769# (the cocoa UI code currently assumes it is always the active UI
1770# and doesn't interact well with other UI frontend code)
1771if test "$cocoa" = "yes"; then
1772 if test "$sdl" = "yes"; then
1773 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1774 fi
1775 if test "$gtk" = "yes"; then
1776 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1777 fi
1778 gtk=no
1779 sdl=no
1780fi
1781
Eric Blake6b39b062016-10-11 10:46:23 -05001782# Some versions of Mac OS X incorrectly define SIZE_MAX
1783cat > $TMPC << EOF
1784#include <stdint.h>
1785#include <stdio.h>
1786int main(int argc, char *argv[]) {
1787 return printf("%zu", SIZE_MAX);
1788}
1789EOF
1790have_broken_size_max=no
1791if ! compile_object -Werror ; then
1792 have_broken_size_max=yes
1793fi
1794
Peter Maydella30878e2015-08-14 16:10:52 +01001795##########################################
Gonglei015a33b2014-07-01 20:58:08 +08001796# L2TPV3 probe
1797
1798cat > $TMPC <<EOF
1799#include <sys/socket.h>
Michael Tokarevbff6cb72014-08-01 23:20:24 +04001800#include <linux/ip.h>
Gonglei015a33b2014-07-01 20:58:08 +08001801int main(void) { return sizeof(struct mmsghdr); }
1802EOF
1803if compile_prog "" "" ; then
1804 l2tpv3=yes
1805else
1806 l2tpv3=no
1807fi
1808
1809##########################################
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01001810# MinGW / Mingw-w64 localtime_r/gmtime_r check
1811
1812if test "$mingw32" = "yes"; then
1813 # Some versions of MinGW / Mingw-w64 lack localtime_r
1814 # and gmtime_r entirely.
1815 #
1816 # Some versions of Mingw-w64 define a macro for
1817 # localtime_r/gmtime_r.
1818 #
1819 # Some versions of Mingw-w64 will define functions
1820 # for localtime_r/gmtime_r, but only if you have
1821 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1822 # though, unistd.h and pthread.h both define
1823 # that for you.
1824 #
1825 # So this #undef localtime_r and #include <unistd.h>
1826 # are not in fact redundant.
1827cat > $TMPC << EOF
1828#include <unistd.h>
1829#include <time.h>
1830#undef localtime_r
1831int main(void) { localtime_r(NULL, NULL); return 0; }
1832EOF
1833 if compile_prog "" "" ; then
1834 localtime_r="yes"
1835 else
1836 localtime_r="no"
1837 fi
1838fi
1839
1840##########################################
Stefan Weil779ab5e2012-12-16 11:29:45 +01001841# pkg-config probe
1842
1843if ! has "$pkg_config_exe"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01001844 error_exit "pkg-config binary '$pkg_config_exe' not found"
Stefan Weil779ab5e2012-12-16 11:29:45 +01001845fi
1846
1847##########################################
Juan Quintelab0a47e72009-08-12 18:29:49 +02001848# NPTL probe
1849
Peter Maydell24cb36a2013-07-16 18:45:00 +01001850if test "$linux_user" = "yes"; then
Juan Quintelab0a47e72009-08-12 18:29:49 +02001851 cat > $TMPC <<EOF
pbrookbd0c5662008-05-29 14:34:11 +00001852#include <sched.h>
pbrook30813ce2008-06-02 15:45:44 +00001853#include <linux/futex.h>
Stefan Weil182eacc2011-12-17 09:27:30 +01001854int main(void) {
pbrookbd0c5662008-05-29 14:34:11 +00001855#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1856#error bork
1857#endif
Stefan Weil182eacc2011-12-17 09:27:30 +01001858 return 0;
pbrookbd0c5662008-05-29 14:34:11 +00001859}
1860EOF
Peter Maydell24cb36a2013-07-16 18:45:00 +01001861 if ! compile_object ; then
Stewart Smith21684af2014-01-24 12:39:10 +11001862 feature_not_found "nptl" "Install glibc and linux kernel headers."
Juan Quintelab0a47e72009-08-12 18:29:49 +02001863 fi
pbrookbd0c5662008-05-29 14:34:11 +00001864fi
1865
bellard11d9f692004-04-02 20:55:59 +00001866##########################################
Liang Li99f2dbd2016-03-08 13:53:16 +08001867# avx2 optimization requirement check
1868
Richard Henderson5e33a872016-08-29 11:46:15 -07001869cat > $TMPC << EOF
Dr. David Alan Gilbert4fb83202016-06-10 12:16:18 +01001870#pragma GCC push_options
1871#pragma GCC target("avx2")
1872#include <cpuid.h>
1873#include <immintrin.h>
Dr. David Alan Gilbert4fb83202016-06-10 12:16:18 +01001874static int bar(void *a) {
Richard Henderson5e33a872016-08-29 11:46:15 -07001875 __m256i x = *(__m256i *)a;
1876 return _mm256_testz_si256(x, x);
Dr. David Alan Gilbert4fb83202016-06-10 12:16:18 +01001877}
Richard Henderson5e33a872016-08-29 11:46:15 -07001878int main(int argc, char *argv[]) { return bar(argv[0]); }
Liang Li99f2dbd2016-03-08 13:53:16 +08001879EOF
Richard Henderson5e33a872016-08-29 11:46:15 -07001880if compile_object "" ; then
1881 avx2_opt="yes"
Liang Li99f2dbd2016-03-08 13:53:16 +08001882fi
1883
1884#########################################
balrogac629222008-10-11 09:56:04 +00001885# zlib check
1886
Alon Levy1ece9902011-07-26 12:30:40 +03001887if test "$zlib" != "no" ; then
1888 cat > $TMPC << EOF
balrogac629222008-10-11 09:56:04 +00001889#include <zlib.h>
1890int main(void) { zlibVersion(); return 0; }
1891EOF
Alon Levy1ece9902011-07-26 12:30:40 +03001892 if compile_prog "" "-lz" ; then
1893 :
1894 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01001895 error_exit "zlib check failed" \
1896 "Make sure to have the zlib libs and headers installed."
Alon Levy1ece9902011-07-26 12:30:40 +03001897 fi
balrogac629222008-10-11 09:56:04 +00001898fi
Will Newtoneb0ecd52014-02-26 17:20:07 +00001899LIBS="$LIBS -lz"
balrogac629222008-10-11 09:56:04 +00001900
1901##########################################
qiaonuohan607dacd2014-02-18 14:11:30 +08001902# lzo check
1903
1904if test "$lzo" != "no" ; then
1905 cat > $TMPC << EOF
1906#include <lzo/lzo1x.h>
1907int main(void) { lzo_version(); return 0; }
1908EOF
1909 if compile_prog "" "-llzo2" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001910 libs_softmmu="$libs_softmmu -llzo2"
1911 lzo="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001912 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001913 if test "$lzo" = "yes"; then
1914 feature_not_found "liblzo2" "Install liblzo2 devel"
1915 fi
1916 lzo="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08001917 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08001918fi
1919
1920##########################################
1921# snappy check
1922
1923if test "$snappy" != "no" ; then
1924 cat > $TMPC << EOF
1925#include <snappy-c.h>
1926int main(void) { snappy_max_compressed_length(4096); return 0; }
1927EOF
1928 if compile_prog "" "-lsnappy" ; then
Stefan Weilb25c9df2014-04-29 08:21:16 +02001929 libs_softmmu="$libs_softmmu -lsnappy"
1930 snappy="yes"
qiaonuohan607dacd2014-02-18 14:11:30 +08001931 else
Stefan Weilb25c9df2014-04-29 08:21:16 +02001932 if test "$snappy" = "yes"; then
1933 feature_not_found "libsnappy" "Install libsnappy devel"
1934 fi
1935 snappy="no"
qiaonuohan607dacd2014-02-18 14:11:30 +08001936 fi
qiaonuohan607dacd2014-02-18 14:11:30 +08001937fi
1938
1939##########################################
Peter Wu6b383c02015-01-06 18:48:14 +01001940# bzip2 check
1941
1942if test "$bzip2" != "no" ; then
1943 cat > $TMPC << EOF
1944#include <bzlib.h>
1945int main(void) { BZ2_bzlibVersion(); return 0; }
1946EOF
1947 if compile_prog "" "-lbz2" ; then
1948 bzip2="yes"
1949 else
1950 if test "$bzip2" = "yes"; then
1951 feature_not_found "libbzip2" "Install libbzip2 devel"
1952 fi
1953 bzip2="no"
1954 fi
1955fi
1956
1957##########################################
Eduardo Otubof7945732012-08-14 18:44:05 -03001958# libseccomp check
1959
1960if test "$seccomp" != "no" ; then
Andrew Jones693e5912015-09-30 11:59:18 -04001961 case "$cpu" in
1962 i386|x86_64)
dann frazierba060c52015-10-23 15:34:22 -06001963 libseccomp_minver="2.1.0"
Andrew Jones693e5912015-09-30 11:59:18 -04001964 ;;
James Hogan5ce43972016-04-08 14:16:34 +01001965 mips)
1966 libseccomp_minver="2.2.0"
1967 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04001968 arm|aarch64)
1969 libseccomp_minver="2.2.3"
1970 ;;
Michael Strosaker3e684452016-06-01 18:30:18 -05001971 ppc|ppc64)
1972 libseccomp_minver="2.3.0"
1973 ;;
Andrew Jones693e5912015-09-30 11:59:18 -04001974 *)
1975 libseccomp_minver=""
1976 ;;
1977 esac
1978
1979 if test "$libseccomp_minver" != "" &&
1980 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
Stefan Weil89138852016-05-16 15:10:20 +02001981 libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
1982 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
Andrew Jones693e5912015-09-30 11:59:18 -04001983 seccomp="yes"
Eduardo Otubof7945732012-08-14 18:44:05 -03001984 else
Andrew Jones693e5912015-09-30 11:59:18 -04001985 if test "$seccomp" = "yes" ; then
1986 if test "$libseccomp_minver" != "" ; then
1987 feature_not_found "libseccomp" \
1988 "Install libseccomp devel >= $libseccomp_minver"
1989 else
1990 feature_not_found "libseccomp" \
1991 "libseccomp is not supported for host cpu $cpu"
1992 fi
1993 fi
1994 seccomp="no"
Eduardo Otubof7945732012-08-14 18:44:05 -03001995 fi
1996fi
1997##########################################
aliguorie37630c2009-04-22 15:19:10 +00001998# xen probe
1999
Juan Quintelafc321b42009-08-12 18:29:55 +02002000if test "$xen" != "no" ; then
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002001 # Check whether Xen library path is specified via --extra-ldflags to avoid
2002 # overriding this setting with pkg-config output. If not, try pkg-config
2003 # to obtain all needed flags.
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002004
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002005 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2006 $pkg_config --exists xencontrol ; then
2007 xen_ctrl_version="$(printf '%d%02d%02d' \
2008 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2009 xen=yes
2010 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2011 xen_pc="$xen_pc xenevtchn xendevicemodel"
2012 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2013 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2014 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2015 else
Stefan Weil50ced5b2011-12-17 09:27:39 +01002016
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002017 xen_libs="-lxenstore -lxenctrl -lxenguest"
Anthony PERARDd9506ca2017-05-11 12:35:42 +01002018 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002019
2020 # First we test whether Xen headers and libraries are available.
2021 # If no, we are done and there is no Xen support.
2022 # If yes, more tests are run to detect the Xen version.
2023
2024 # Xen (any)
2025 cat > $TMPC <<EOF
aliguorie37630c2009-04-22 15:19:10 +00002026#include <xenctrl.h>
Stefan Weil50ced5b2011-12-17 09:27:39 +01002027int main(void) {
2028 return 0;
2029}
2030EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002031 if ! compile_prog "" "$xen_libs" ; then
2032 # Xen not found
2033 if test "$xen" = "yes" ; then
2034 feature_not_found "xen" "Install xen devel"
2035 fi
2036 xen=no
Stefan Weil50ced5b2011-12-17 09:27:39 +01002037
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002038 # Xen unstable
2039 elif
2040 cat > $TMPC <<EOF &&
Paul Durrantda8090c2017-03-07 10:55:33 +00002041#undef XC_WANT_COMPAT_DEVICEMODEL_API
2042#define __XEN_TOOLS__
2043#include <xendevicemodel.h>
2044int main(void) {
2045 xendevicemodel_handle *xd;
2046
2047 xd = xendevicemodel_open(0, 0);
2048 xendevicemodel_close(xd);
2049
2050 return 0;
2051}
2052EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002053 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2054 then
2055 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2056 xen_ctrl_version=40900
2057 xen=yes
2058 elif
2059 cat > $TMPC <<EOF &&
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002060/*
2061 * If we have stable libs the we don't want the libxc compat
2062 * layers, regardless of what CFLAGS we may have been given.
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002063 *
2064 * Also, check if xengnttab_grant_copy_segment_t is defined and
2065 * grant copy operation is implemented.
2066 */
2067#undef XC_WANT_COMPAT_EVTCHN_API
2068#undef XC_WANT_COMPAT_GNTTAB_API
2069#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2070#include <xenctrl.h>
2071#include <xenstore.h>
2072#include <xenevtchn.h>
2073#include <xengnttab.h>
2074#include <xenforeignmemory.h>
2075#include <stdint.h>
2076#include <xen/hvm/hvm_info_table.h>
2077#if !defined(HVM_MAX_VCPUS)
2078# error HVM_MAX_VCPUS not defined
2079#endif
2080int main(void) {
2081 xc_interface *xc = NULL;
2082 xenforeignmemory_handle *xfmem;
2083 xenevtchn_handle *xe;
2084 xengnttab_handle *xg;
2085 xen_domain_handle_t handle;
2086 xengnttab_grant_copy_segment_t* seg = NULL;
2087
2088 xs_daemon_open();
2089
2090 xc = xc_interface_open(0, 0, 0);
2091 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2092 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2093 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2094 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2095 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2096
2097 xfmem = xenforeignmemory_open(0, 0);
2098 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2099
2100 xe = xenevtchn_open(0, 0);
2101 xenevtchn_fd(xe);
2102
2103 xg = xengnttab_open(0, 0);
2104 xengnttab_grant_copy(xg, 0, seg);
2105
2106 return 0;
2107}
2108EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002109 compile_prog "" "$xen_libs $xen_stable_libs"
2110 then
2111 xen_ctrl_version=40800
2112 xen=yes
2113 elif
2114 cat > $TMPC <<EOF &&
Paulina Szubarczykb6eb9b42016-09-14 21:10:03 +02002115/*
2116 * If we have stable libs the we don't want the libxc compat
2117 * layers, regardless of what CFLAGS we may have been given.
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002118 */
2119#undef XC_WANT_COMPAT_EVTCHN_API
2120#undef XC_WANT_COMPAT_GNTTAB_API
2121#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2122#include <xenctrl.h>
2123#include <xenstore.h>
2124#include <xenevtchn.h>
2125#include <xengnttab.h>
2126#include <xenforeignmemory.h>
2127#include <stdint.h>
2128#include <xen/hvm/hvm_info_table.h>
2129#if !defined(HVM_MAX_VCPUS)
2130# error HVM_MAX_VCPUS not defined
2131#endif
2132int main(void) {
2133 xc_interface *xc = NULL;
2134 xenforeignmemory_handle *xfmem;
2135 xenevtchn_handle *xe;
2136 xengnttab_handle *xg;
2137 xen_domain_handle_t handle;
2138
2139 xs_daemon_open();
2140
2141 xc = xc_interface_open(0, 0, 0);
2142 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2143 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2144 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2145 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2146 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2147
2148 xfmem = xenforeignmemory_open(0, 0);
2149 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2150
2151 xe = xenevtchn_open(0, 0);
2152 xenevtchn_fd(xe);
2153
2154 xg = xengnttab_open(0, 0);
2155 xengnttab_map_grant_ref(xg, 0, 0, 0);
2156
2157 return 0;
2158}
2159EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002160 compile_prog "" "$xen_libs $xen_stable_libs"
2161 then
2162 xen_ctrl_version=40701
2163 xen=yes
2164 elif
2165 cat > $TMPC <<EOF &&
Stefan Weil50ced5b2011-12-17 09:27:39 +01002166#include <xenctrl.h>
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002167#include <stdint.h>
2168int main(void) {
2169 xc_interface *xc = NULL;
2170 xen_domain_handle_t handle;
2171 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2172 return 0;
2173}
2174EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002175 compile_prog "" "$xen_libs"
2176 then
2177 xen_ctrl_version=40700
2178 xen=yes
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002179
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002180 # Xen 4.6
2181 elif
2182 cat > $TMPC <<EOF &&
Roger Pau Monnecdadde32015-11-13 17:38:06 +00002183#include <xenctrl.h>
Anthony PERARDe108a3c2012-06-21 11:44:35 +00002184#include <xenstore.h>
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002185#include <stdint.h>
2186#include <xen/hvm/hvm_info_table.h>
2187#if !defined(HVM_MAX_VCPUS)
2188# error HVM_MAX_VCPUS not defined
2189#endif
2190int main(void) {
2191 xc_interface *xc;
2192 xs_daemon_open();
2193 xc = xc_interface_open(0, 0, 0);
2194 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2195 xc_gnttab_open(NULL, 0);
Anthony PERARDb87de242011-05-24 14:34:20 +01002196 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002197 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002198 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
Konrad Rzeszutek Wilk20a544c2015-06-29 12:51:05 -04002199 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
Jan Beulichd8b441a2015-07-24 03:38:28 -06002200 return 0;
2201}
2202EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002203 compile_prog "" "$xen_libs"
2204 then
2205 xen_ctrl_version=40600
2206 xen=yes
Jan Beulichd8b441a2015-07-24 03:38:28 -06002207
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002208 # Xen 4.5
2209 elif
2210 cat > $TMPC <<EOF &&
Jan Beulichd8b441a2015-07-24 03:38:28 -06002211#include <xenctrl.h>
2212#include <xenstore.h>
2213#include <stdint.h>
2214#include <xen/hvm/hvm_info_table.h>
2215#if !defined(HVM_MAX_VCPUS)
2216# error HVM_MAX_VCPUS not defined
2217#endif
2218int main(void) {
2219 xc_interface *xc;
2220 xs_daemon_open();
2221 xc = xc_interface_open(0, 0, 0);
2222 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2223 xc_gnttab_open(NULL, 0);
2224 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2225 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Paul Durrant3996e852015-01-20 11:06:19 +00002226 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2227 return 0;
2228}
2229EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002230 compile_prog "" "$xen_libs"
2231 then
2232 xen_ctrl_version=40500
2233 xen=yes
Paul Durrant3996e852015-01-20 11:06:19 +00002234
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002235 elif
2236 cat > $TMPC <<EOF &&
Paul Durrant3996e852015-01-20 11:06:19 +00002237#include <xenctrl.h>
2238#include <xenstore.h>
2239#include <stdint.h>
2240#include <xen/hvm/hvm_info_table.h>
2241#if !defined(HVM_MAX_VCPUS)
2242# error HVM_MAX_VCPUS not defined
2243#endif
2244int main(void) {
2245 xc_interface *xc;
2246 xs_daemon_open();
2247 xc = xc_interface_open(0, 0, 0);
2248 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2249 xc_gnttab_open(NULL, 0);
2250 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2251 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
Stefano Stabellini8688e062012-04-17 17:04:18 +00002252 return 0;
2253}
2254EOF
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002255 compile_prog "" "$xen_libs"
2256 then
2257 xen_ctrl_version=40200
2258 xen=yes
Stefano Stabellini8688e062012-04-17 17:04:18 +00002259
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002260 else
2261 if test "$xen" = "yes" ; then
2262 feature_not_found "xen (unsupported version)" \
2263 "Install a supported xen (xen 4.2 or newer)"
2264 fi
2265 xen=no
Juan Quintelafc321b42009-08-12 18:29:55 +02002266 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002267
Juergen Grossc1cdd9d2017-03-27 09:42:45 +02002268 if test "$xen" = yes; then
2269 if test $xen_ctrl_version -ge 40701 ; then
2270 libs_softmmu="$xen_stable_libs $libs_softmmu"
2271 fi
2272 libs_softmmu="$xen_libs $libs_softmmu"
Ian Campbell5eeb39c2016-01-15 13:23:42 +00002273 fi
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00002274 fi
aliguorie37630c2009-04-22 15:19:10 +00002275fi
2276
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002277if test "$xen_pci_passthrough" != "no"; then
Ian Campbelledfb07e2016-02-10 11:07:01 +00002278 if test "$xen" = "yes" && test "$linux" = "yes"; then
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002279 xen_pci_passthrough=yes
2280 else
2281 if test "$xen_pci_passthrough" = "yes"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01002282 error_exit "User requested feature Xen PCI Passthrough" \
2283 " but this feature requires /sys from Linux"
Anthony PERARDeb6fda02012-06-21 15:32:59 +00002284 fi
2285 xen_pci_passthrough=no
2286 fi
2287fi
2288
Ian Campbell64a7ad62016-01-15 13:23:44 +00002289if test "$xen_pv_domain_build" = "yes" &&
2290 test "$xen" != "yes"; then
2291 error_exit "User requested Xen PV domain builder support" \
2292 "which requires Xen support."
2293fi
2294
aliguorie37630c2009-04-22 15:19:10 +00002295##########################################
Juan Quinteladfffc652009-08-12 18:29:57 +02002296# Sparse probe
2297if test "$sparse" != "no" ; then
Loïc Minier0dba6192010-01-28 21:26:51 +00002298 if has cgcc; then
Juan Quinteladfffc652009-08-12 18:29:57 +02002299 sparse=yes
2300 else
2301 if test "$sparse" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002302 feature_not_found "sparse" "Install sparse binary"
Juan Quinteladfffc652009-08-12 18:29:57 +02002303 fi
2304 sparse=no
2305 fi
2306fi
2307
2308##########################################
Jeremy Whitef676c672015-01-09 13:08:49 -06002309# X11 probe
2310x11_cflags=
2311x11_libs=-lX11
2312if $pkg_config --exists "x11"; then
Stefan Weil89138852016-05-16 15:10:20 +02002313 x11_cflags=$($pkg_config --cflags x11)
2314 x11_libs=$($pkg_config --libs x11)
Jeremy Whitef676c672015-01-09 13:08:49 -06002315fi
2316
2317##########################################
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002318# GTK probe
2319
Stefan Weil9e04c682014-05-17 16:29:18 +02002320if test "$gtkabi" = ""; then
2321 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2322 # Use 3.0 as a fallback if that is available.
2323 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2324 gtkabi=2.0
2325 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2326 gtkabi=3.0
2327 else
2328 gtkabi=2.0
2329 fi
2330fi
2331
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002332if test "$gtk" != "no"; then
Daniel P. Berrange528de902013-02-25 15:20:44 +00002333 gtkpackage="gtk+-$gtkabi"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002334 gtkx11package="gtk+-x11-$gtkabi"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002335 if test "$gtkabi" = "3.0" ; then
2336 gtkversion="3.0.0"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002337 else
2338 gtkversion="2.18.0"
2339 fi
2340 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002341 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2342 gtk_libs=$($pkg_config --libs $gtkpackage)
2343 gtk_version=$($pkg_config --modversion $gtkpackage)
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002344 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
Jeremy Whitef676c672015-01-09 13:08:49 -06002345 gtk_cflags="$gtk_cflags $x11_cflags"
2346 gtk_libs="$gtk_libs $x11_libs"
Gerd Hoffmann0a337ed2014-05-28 22:33:06 +02002347 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002348 libs_softmmu="$gtk_libs $libs_softmmu"
2349 gtk="yes"
2350 elif test "$gtk" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002351 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002352 else
2353 gtk="no"
2354 fi
2355fi
2356
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002357
2358##########################################
2359# GNUTLS probe
2360
Peter Maydell37371292015-07-24 18:28:08 +01002361gnutls_works() {
2362 # Unfortunately some distros have bad pkg-config information for gnutls
2363 # such that it claims to exist but you get a compiler error if you try
2364 # to use the options returned by --libs. Specifically, Ubuntu for --static
2365 # builds doesn't work:
2366 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2367 #
2368 # So sanity check the cflags/libs before assuming gnutls can be used.
2369 if ! $pkg_config --exists "gnutls"; then
2370 return 1
2371 fi
2372
2373 write_c_skeleton
2374 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2375}
2376
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002377gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002378gnutls_nettle=no
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002379if test "$gnutls" != "no"; then
Peter Maydell37371292015-07-24 18:28:08 +01002380 if gnutls_works; then
Stefan Weil89138852016-05-16 15:10:20 +02002381 gnutls_cflags=$($pkg_config --cflags gnutls)
2382 gnutls_libs=$($pkg_config --libs gnutls)
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002383 libs_softmmu="$gnutls_libs $libs_softmmu"
2384 libs_tools="$gnutls_libs $libs_tools"
2385 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2386 gnutls="yes"
2387
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002388 # gnutls_rnd requires >= 2.11.0
2389 if $pkg_config --exists "gnutls >= 2.11.0"; then
2390 gnutls_rnd="yes"
2391 else
2392 gnutls_rnd="no"
2393 fi
2394
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002395 if $pkg_config --exists 'gnutls >= 3.0'; then
2396 gnutls_gcrypt=no
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002397 gnutls_nettle=yes
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002398 elif $pkg_config --exists 'gnutls >= 2.12'; then
Stefan Weil89138852016-05-16 15:10:20 +02002399 case $($pkg_config --libs --static gnutls) in
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002400 *gcrypt*)
2401 gnutls_gcrypt=yes
2402 gnutls_nettle=no
2403 ;;
2404 *nettle*)
2405 gnutls_gcrypt=no
2406 gnutls_nettle=yes
2407 ;;
2408 *)
2409 gnutls_gcrypt=yes
2410 gnutls_nettle=no
2411 ;;
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002412 esac
2413 else
2414 gnutls_gcrypt=yes
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002415 gnutls_nettle=no
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002416 fi
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002417 elif test "$gnutls" = "yes"; then
2418 feature_not_found "gnutls" "Install gnutls devel"
2419 else
2420 gnutls="no"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002421 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002422 fi
2423else
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09002424 gnutls_rnd="no"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002425fi
2426
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002427
2428# If user didn't give a --disable/enable-gcrypt flag,
2429# then mark as disabled if user requested nettle
2430# explicitly, or if gnutls links to nettle
2431if test -z "$gcrypt"
2432then
2433 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2434 then
2435 gcrypt="no"
2436 fi
2437fi
2438
2439# If user didn't give a --disable/enable-nettle flag,
2440# then mark as disabled if user requested gcrypt
2441# explicitly, or if gnutls links to gcrypt
2442if test -z "$nettle"
2443then
2444 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2445 then
2446 nettle="no"
2447 fi
2448fi
2449
2450has_libgcrypt_config() {
2451 if ! has "libgcrypt-config"
2452 then
2453 return 1
2454 fi
2455
2456 if test -n "$cross_prefix"
2457 then
Stefan Weil89138852016-05-16 15:10:20 +02002458 host=$(libgcrypt-config --host)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002459 if test "$host-" != $cross_prefix
2460 then
2461 return 1
2462 fi
2463 fi
2464
2465 return 0
2466}
2467
2468if test "$gcrypt" != "no"; then
2469 if has_libgcrypt_config; then
Stefan Weil89138852016-05-16 15:10:20 +02002470 gcrypt_cflags=$(libgcrypt-config --cflags)
2471 gcrypt_libs=$(libgcrypt-config --libs)
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002472 # Debian has remove -lgpg-error from libgcrypt-config
2473 # as it "spreads unnecessary dependencies" which in
2474 # turn breaks static builds...
2475 if test "$static" = "yes"
2476 then
2477 gcrypt_libs="$gcrypt_libs -lgpg-error"
2478 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002479 libs_softmmu="$gcrypt_libs $libs_softmmu"
2480 libs_tools="$gcrypt_libs $libs_tools"
2481 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002482 gcrypt="yes"
2483 if test -z "$nettle"; then
2484 nettle="no"
2485 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01002486
2487 cat > $TMPC << EOF
2488#include <gcrypt.h>
2489int main(void) {
2490 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2491 GCRY_MD_SHA256,
2492 NULL, 0, 0, 0, NULL);
2493 return 0;
2494}
2495EOF
2496 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2497 gcrypt_kdf=yes
2498 fi
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08002499
2500 cat > $TMPC << EOF
2501#include <gcrypt.h>
2502int main(void) {
2503 gcry_mac_hd_t handle;
2504 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2505 GCRY_MAC_FLAG_SECURE, NULL);
2506 return 0;
2507}
2508EOF
2509 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2510 gcrypt_hmac=yes
2511 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002512 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002513 if test "$gcrypt" = "yes"; then
2514 feature_not_found "gcrypt" "Install gcrypt devel"
2515 else
2516 gcrypt="no"
2517 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01002518 fi
2519fi
2520
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01002521
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002522if test "$nettle" != "no"; then
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002523 if $pkg_config --exists "nettle"; then
Stefan Weil89138852016-05-16 15:10:20 +02002524 nettle_cflags=$($pkg_config --cflags nettle)
2525 nettle_libs=$($pkg_config --libs nettle)
2526 nettle_version=$($pkg_config --modversion nettle)
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002527 libs_softmmu="$nettle_libs $libs_softmmu"
2528 libs_tools="$nettle_libs $libs_tools"
2529 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002530 nettle="yes"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002531
2532 cat > $TMPC << EOF
Steven Luo9e87a692016-05-26 21:53:13 -07002533#include <stddef.h>
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01002534#include <nettle/pbkdf2.h>
2535int main(void) {
2536 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2537 return 0;
2538}
2539EOF
2540 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2541 nettle_kdf=yes
2542 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002543 else
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002544 if test "$nettle" = "yes"; then
2545 feature_not_found "nettle" "Install nettle devel"
2546 else
2547 nettle="no"
2548 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002549 fi
2550fi
2551
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01002552if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2553then
2554 error_exit "Only one of gcrypt & nettle can be enabled"
2555fi
2556
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002557##########################################
2558# libtasn1 - only for the TLS creds/session test suite
2559
2560tasn1=yes
Daniel P. Berrange90246032015-09-21 17:25:34 +01002561tasn1_cflags=""
2562tasn1_libs=""
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002563if $pkg_config --exists "libtasn1"; then
Stefan Weil89138852016-05-16 15:10:20 +02002564 tasn1_cflags=$($pkg_config --cflags libtasn1)
2565 tasn1_libs=$($pkg_config --libs libtasn1)
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01002566else
2567 tasn1=no
2568fi
2569
Daniel P. Berrangeed754742015-07-01 18:10:34 +01002570
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002571##########################################
Daniel P. Berrange559607e2015-02-27 16:19:33 +00002572# getifaddrs (for tests/test-io-channel-socket )
2573
2574have_ifaddrs_h=yes
2575if ! check_include "ifaddrs.h" ; then
2576 have_ifaddrs_h=no
2577fi
2578
2579##########################################
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002580# VTE probe
2581
2582if test "$vte" != "no"; then
2583 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002584 vteminversion="0.32.0"
2585 if $pkg_config --exists "vte-2.91"; then
2586 vtepackage="vte-2.91"
2587 else
2588 vtepackage="vte-2.90"
2589 fi
Daniel P. Berrange528de902013-02-25 15:20:44 +00002590 else
Daniel P. Berrange528de902013-02-25 15:20:44 +00002591 vtepackage="vte"
Cole Robinsonc6feff92016-05-06 14:03:12 -04002592 vteminversion="0.24.0"
Daniel P. Berrange528de902013-02-25 15:20:44 +00002593 fi
Cole Robinsonc6feff92016-05-06 14:03:12 -04002594 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
Stefan Weil89138852016-05-16 15:10:20 +02002595 vte_cflags=$($pkg_config --cflags $vtepackage)
2596 vte_libs=$($pkg_config --libs $vtepackage)
2597 vteversion=$($pkg_config --modversion $vtepackage)
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002598 libs_softmmu="$vte_libs $libs_softmmu"
2599 vte="yes"
2600 elif test "$vte" = "yes"; then
Stefan Weil9e04c682014-05-17 16:29:18 +02002601 if test "$gtkabi" = "3.0"; then
Cole Robinsonc6feff92016-05-06 14:03:12 -04002602 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
Stefan Weil9e04c682014-05-17 16:29:18 +02002603 else
2604 feature_not_found "vte" "Install libvte devel"
2605 fi
Peter Maydell0d185e62013-07-18 16:42:01 +01002606 else
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01002607 vte="no"
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06002608 fi
2609fi
2610
2611##########################################
bellard11d9f692004-04-02 20:55:59 +00002612# SDL probe
2613
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002614# Look for sdl configuration program (pkg-config or sdl-config). Try
2615# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
Dave Airlie47c03742013-12-10 14:05:51 +10002616
Cole Robinsonee8466d2016-05-06 14:03:07 -04002617if test "$sdlabi" = ""; then
2618 if $pkg_config --exists "sdl"; then
2619 sdlabi=1.2
2620 elif $pkg_config --exists "sdl2"; then
2621 sdlabi=2.0
2622 else
2623 sdlabi=1.2
2624 fi
2625fi
2626
Dave Airlie47c03742013-12-10 14:05:51 +10002627if test $sdlabi = "2.0"; then
2628 sdl_config=$sdl2_config
2629 sdlname=sdl2
2630 sdlconfigname=sdl2_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002631elif test $sdlabi = "1.2"; then
Dave Airlie47c03742013-12-10 14:05:51 +10002632 sdlname=sdl
2633 sdlconfigname=sdl_config
Cole Robinsone07047c2016-05-06 14:03:08 -04002634else
2635 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002636fi
2637
Stefan Weil89138852016-05-16 15:10:20 +02002638if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
Dave Airlie47c03742013-12-10 14:05:51 +10002639 sdl_config=$sdlconfigname
2640fi
2641
2642if $pkg_config $sdlname --exists; then
2643 sdlconfig="$pkg_config $sdlname"
Stefan Weil89138852016-05-16 15:10:20 +02002644 sdlversion=$($sdlconfig --modversion 2>/dev/null)
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002645elif has ${sdl_config}; then
2646 sdlconfig="$sdl_config"
Stefan Weil89138852016-05-16 15:10:20 +02002647 sdlversion=$($sdlconfig --version)
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002648else
2649 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002650 feature_not_found "sdl" "Install SDL devel"
Loïc Miniera0dfd8a2010-01-28 21:15:18 +00002651 fi
2652 sdl=no
Paolo Bonzini9316f802010-01-13 09:52:55 +01002653fi
Scott Wood29e5bad2011-04-08 14:15:50 -05002654if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
Paolo Bonzini3ec87ff2010-12-23 11:43:57 +01002655 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2656fi
bellard11d9f692004-04-02 20:55:59 +00002657
Paolo Bonzini9316f802010-01-13 09:52:55 +01002658sdl_too_old=no
Juan Quintelac4198152009-08-12 18:29:53 +02002659if test "$sdl" != "no" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002660 cat > $TMPC << EOF
bellard11d9f692004-04-02 20:55:59 +00002661#include <SDL.h>
2662#undef main /* We don't want SDL to override our main() */
2663int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2664EOF
Stefan Weil89138852016-05-16 15:10:20 +02002665 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002666 if test "$static" = "yes" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002667 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002668 else
Stefan Weil89138852016-05-16 15:10:20 +02002669 sdl_libs=$($sdlconfig --libs 2>/dev/null)
TeLeMan74f42e12010-02-08 13:56:44 +08002670 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002671 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Stefan Weil89138852016-05-16 15:10:20 +02002672 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002673 sdl_too_old=yes
2674 else
Peter Maydella30878e2015-08-14 16:10:52 +01002675 sdl=yes
Juan Quintelaac119f92009-07-27 16:13:15 +02002676 fi
aliguoricd01b4a2008-08-21 19:25:45 +00002677
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002678 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
Juan Quintelaac119f92009-07-27 16:13:15 +02002679 if test "$sdl" = "yes" -a "$static" = "yes" ; then
Paolo Bonzini67c274d2010-01-13 09:52:54 +01002680 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
Stefan Weil89138852016-05-16 15:10:20 +02002681 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2682 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
Juan Quintelaac119f92009-07-27 16:13:15 +02002683 fi
Juan Quintela52166aa2009-08-03 14:46:03 +02002684 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002685 :
2686 else
2687 sdl=no
2688 fi
2689 fi # static link
Juan Quintelac4198152009-08-12 18:29:53 +02002690 else # sdl not found
2691 if test "$sdl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002692 feature_not_found "sdl" "Install SDL devel"
Juan Quintelac4198152009-08-12 18:29:53 +02002693 fi
2694 sdl=no
Juan Quintelaac119f92009-07-27 16:13:15 +02002695 fi # sdl compile test
Juan Quintelaa68551b2009-07-27 16:13:09 +02002696fi
bellard11d9f692004-04-02 20:55:59 +00002697
aliguori5368a422009-03-03 17:37:21 +00002698if test "$sdl" = "yes" ; then
Juan Quintelaac119f92009-07-27 16:13:15 +02002699 cat > $TMPC <<EOF
aliguori5368a422009-03-03 17:37:21 +00002700#include <SDL.h>
2701#if defined(SDL_VIDEO_DRIVER_X11)
2702#include <X11/XKBlib.h>
2703#else
2704#error No x11 support
2705#endif
2706int main(void) { return 0; }
2707EOF
Jeremy Whitef676c672015-01-09 13:08:49 -06002708 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2709 sdl_cflags="$sdl_cflags $x11_cflags"
2710 sdl_libs="$sdl_libs $x11_libs"
Juan Quintelaac119f92009-07-27 16:13:15 +02002711 fi
Juan Quintela07056672009-08-03 14:46:27 +02002712 libs_softmmu="$sdl_libs $libs_softmmu"
aliguori5368a422009-03-03 17:37:21 +00002713fi
2714
ths8f28f3f2007-01-05 21:25:54 +00002715##########################################
Michael R. Hines2da776d2013-07-22 10:01:54 -04002716# RDMA needs OpenFabrics libraries
2717if test "$rdma" != "no" ; then
2718 cat > $TMPC <<EOF
2719#include <rdma/rdma_cma.h>
2720int main(void) { return 0; }
2721EOF
2722 rdma_libs="-lrdmacm -libverbs"
2723 if compile_prog "" "$rdma_libs" ; then
2724 rdma="yes"
2725 libs_softmmu="$libs_softmmu $rdma_libs"
2726 else
2727 if test "$rdma" = "yes" ; then
2728 error_exit \
2729 " OpenFabrics librdmacm/libibverbs not present." \
2730 " Your options:" \
2731 " (1) Fast: Install infiniband packages from your distro." \
2732 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2733 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2734 fi
2735 rdma="no"
2736 fi
2737fi
2738
ths8d5d2d42007-08-25 01:37:51 +00002739
2740##########################################
aliguori2f9606b2009-03-06 20:27:28 +00002741# VNC SASL detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002742if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
Juan Quintelaea784e32009-08-12 18:20:29 +02002743 cat > $TMPC <<EOF
aliguori2f9606b2009-03-06 20:27:28 +00002744#include <sasl/sasl.h>
2745#include <stdio.h>
2746int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2747EOF
Juan Quintelaea784e32009-08-12 18:20:29 +02002748 # Assuming Cyrus-SASL installed in /usr prefix
2749 vnc_sasl_cflags=""
2750 vnc_sasl_libs="-lsasl2"
2751 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2752 vnc_sasl=yes
2753 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002754 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
Juan Quintelaea784e32009-08-12 18:20:29 +02002755 else
2756 if test "$vnc_sasl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002757 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
aliguori2f9606b2009-03-06 20:27:28 +00002758 fi
Juan Quintelaea784e32009-08-12 18:20:29 +02002759 vnc_sasl=no
2760 fi
aliguori2f9606b2009-03-06 20:27:28 +00002761fi
2762
2763##########################################
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002764# VNC JPEG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002765if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002766cat > $TMPC <<EOF
2767#include <stdio.h>
2768#include <jpeglib.h>
2769int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2770EOF
2771 vnc_jpeg_cflags=""
2772 vnc_jpeg_libs="-ljpeg"
2773 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2774 vnc_jpeg=yes
2775 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
Paolo Bonzinica273d52012-12-20 12:29:19 +01002776 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002777 else
2778 if test "$vnc_jpeg" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002779 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
Corentin Chary2f6f5c72010-07-07 20:57:49 +02002780 fi
2781 vnc_jpeg=no
2782 fi
2783fi
2784
2785##########################################
Corentin Charyefe556a2010-07-07 20:57:56 +02002786# VNC PNG detection
Jes Sorensen821601e2011-03-16 13:33:36 +01002787if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02002788cat > $TMPC <<EOF
2789//#include <stdio.h>
2790#include <png.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05002791#include <stddef.h>
Corentin Charyefe556a2010-07-07 20:57:56 +02002792int main(void) {
2793 png_structp png_ptr;
2794 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
Peter Maydell7edc3fe2012-07-18 15:10:24 +01002795 return png_ptr != 0;
Corentin Charyefe556a2010-07-07 20:57:56 +02002796}
2797EOF
Stefan Weil65d5d3f2013-08-27 21:09:13 +02002798 if $pkg_config libpng --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02002799 vnc_png_cflags=$($pkg_config libpng --cflags)
2800 vnc_png_libs=$($pkg_config libpng --libs)
Brad9af80252011-07-30 01:45:55 -04002801 else
Corentin Charyefe556a2010-07-07 20:57:56 +02002802 vnc_png_cflags=""
2803 vnc_png_libs="-lpng"
Brad9af80252011-07-30 01:45:55 -04002804 fi
Corentin Charyefe556a2010-07-07 20:57:56 +02002805 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2806 vnc_png=yes
2807 libs_softmmu="$vnc_png_libs $libs_softmmu"
Brad9af80252011-07-30 01:45:55 -04002808 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
Corentin Charyefe556a2010-07-07 20:57:56 +02002809 else
2810 if test "$vnc_png" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002811 feature_not_found "vnc-png" "Install libpng devel"
Corentin Charyefe556a2010-07-07 20:57:56 +02002812 fi
2813 vnc_png=no
2814 fi
2815fi
2816
2817##########################################
aliguori76655d62009-03-06 20:27:37 +00002818# fnmatch() probe, used for ACL routines
2819fnmatch="no"
2820cat > $TMPC << EOF
2821#include <fnmatch.h>
2822int main(void)
2823{
2824 fnmatch("foo", "foo", 0);
2825 return 0;
2826}
2827EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002828if compile_prog "" "" ; then
aliguori76655d62009-03-06 20:27:37 +00002829 fnmatch="yes"
2830fi
2831
2832##########################################
Eric Blakec1bb86c2016-12-02 13:48:54 -06002833# xfsctl() probe, used for file-posix.c
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002834if test "$xfs" != "no" ; then
2835 cat > $TMPC << EOF
Stefan Weilffc41d12011-12-17 09:27:36 +01002836#include <stddef.h> /* NULL */
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002837#include <xfs/xfs.h>
2838int main(void)
2839{
2840 xfsctl(NULL, 0, 0, NULL);
2841 return 0;
2842}
2843EOF
2844 if compile_prog "" "" ; then
2845 xfs="yes"
2846 else
2847 if test "$xfs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002848 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01002849 fi
2850 xfs=no
2851 fi
2852fi
2853
2854##########################################
ths8a16d272008-07-19 09:56:24 +00002855# vde libraries probe
Juan Quinteladfb278b2009-08-12 18:20:27 +02002856if test "$vde" != "no" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002857 vde_libs="-lvdeplug"
ths8a16d272008-07-19 09:56:24 +00002858 cat > $TMPC << EOF
2859#include <libvdeplug.h>
pbrook4a7f0e02008-09-07 16:42:53 +00002860int main(void)
2861{
2862 struct vde_open_args a = {0, 0, 0};
Peter Maydellfea08e02012-07-18 15:10:25 +01002863 char s[] = "";
2864 vde_open(s, s, &a);
pbrook4a7f0e02008-09-07 16:42:53 +00002865 return 0;
2866}
ths8a16d272008-07-19 09:56:24 +00002867EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002868 if compile_prog "" "$vde_libs" ; then
Juan Quintela4baae0a2009-07-27 16:13:19 +02002869 vde=yes
Juan Quintela8e02e542009-08-03 14:47:07 +02002870 libs_softmmu="$vde_libs $libs_softmmu"
2871 libs_tools="$vde_libs $libs_tools"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002872 else
2873 if test "$vde" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002874 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
Juan Quinteladfb278b2009-08-12 18:20:27 +02002875 fi
2876 vde=no
Juan Quintela4baae0a2009-07-27 16:13:19 +02002877 fi
ths8a16d272008-07-19 09:56:24 +00002878fi
2879
2880##########################################
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002881# netmap support probe
2882# Apart from looking for netmap headers, we make sure that the host API version
2883# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2884# a minor/major version number. Minor new features will be marked with values up
2885# to 15, and if something happens that requires a change to the backend we will
2886# move above 15, submit the backend fixes and modify this two bounds.
Vincenzo Maffione58952132013-11-06 11:44:06 +01002887if test "$netmap" != "no" ; then
2888 cat > $TMPC << EOF
2889#include <inttypes.h>
2890#include <net/if.h>
2891#include <net/netmap.h>
2892#include <net/netmap_user.h>
Vincenzo Maffione0a985b32014-02-20 15:40:43 +01002893#if (NETMAP_API < 11) || (NETMAP_API > 15)
2894#error
2895#endif
Vincenzo Maffione58952132013-11-06 11:44:06 +01002896int main(void) { return 0; }
2897EOF
2898 if compile_prog "" "" ; then
2899 netmap=yes
2900 else
2901 if test "$netmap" = "yes" ; then
2902 feature_not_found "netmap"
2903 fi
2904 netmap=no
2905 fi
2906fi
2907
2908##########################################
Corey Bryant47e98652012-01-26 09:42:26 -05002909# libcap-ng library probe
2910if test "$cap_ng" != "no" ; then
2911 cap_libs="-lcap-ng"
2912 cat > $TMPC << EOF
2913#include <cap-ng.h>
2914int main(void)
2915{
2916 capng_capability_to_name(CAPNG_EFFECTIVE);
2917 return 0;
2918}
2919EOF
2920 if compile_prog "" "$cap_libs" ; then
2921 cap_ng=yes
2922 libs_tools="$cap_libs $libs_tools"
2923 else
2924 if test "$cap_ng" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11002925 feature_not_found "cap_ng" "Install libcap-ng devel"
Corey Bryant47e98652012-01-26 09:42:26 -05002926 fi
2927 cap_ng=no
2928 fi
2929fi
2930
2931##########################################
malcc2de5c92008-06-28 19:13:06 +00002932# Sound support libraries probe
ths8f28f3f2007-01-05 21:25:54 +00002933
malcc2de5c92008-06-28 19:13:06 +00002934audio_drv_probe()
2935{
2936 drv=$1
2937 hdr=$2
2938 lib=$3
2939 exp=$4
2940 cfl=$5
2941 cat > $TMPC << EOF
2942#include <$hdr>
2943int main(void) { $exp }
ths8f28f3f2007-01-05 21:25:54 +00002944EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02002945 if compile_prog "$cfl" "$lib" ; then
malcc2de5c92008-06-28 19:13:06 +00002946 :
2947 else
Peter Maydell76ad07a2013-04-08 12:11:26 +01002948 error_exit "$drv check failed" \
2949 "Make sure to have the $drv libs and headers installed."
malcc2de5c92008-06-28 19:13:06 +00002950 fi
2951}
2952
Stefan Weil89138852016-05-16 15:10:20 +02002953audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
malcc2de5c92008-06-28 19:13:06 +00002954for drv in $audio_drv_list; do
2955 case $drv in
2956 alsa)
2957 audio_drv_probe $drv alsa/asoundlib.h -lasound \
Stefan Weile35bcb02012-07-18 15:10:19 +01002958 "return snd_pcm_close((snd_pcm_t *)0);"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02002959 libs_softmmu="-lasound $libs_softmmu"
malcc2de5c92008-06-28 19:13:06 +00002960 ;;
2961
malcb8e59f12008-07-02 21:03:08 +00002962 pa)
Peter Krempae58ff622016-05-11 12:31:04 +02002963 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
2964 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
Marc-André Lureaua394aed2012-04-17 14:32:42 +02002965 libs_softmmu="-lpulse $libs_softmmu"
Juan Quintela67f86e82009-08-03 14:46:59 +02002966 audio_pt_int="yes"
malcb8e59f12008-07-02 21:03:08 +00002967 ;;
2968
Gerd Hoffmann373967b2017-03-20 10:05:43 +01002969 sdl)
2970 if test "$sdl" = "no"; then
2971 error_exit "sdl not found or disabled, can not use sdl audio driver"
2972 fi
2973 ;;
2974
Juan Quintela997e6902009-08-03 14:46:29 +02002975 coreaudio)
2976 libs_softmmu="-framework CoreAudio $libs_softmmu"
2977 ;;
2978
Juan Quintelaa4bf6782009-08-03 14:46:30 +02002979 dsound)
2980 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
malcd5631632009-10-10 01:13:41 +04002981 audio_win_int="yes"
Juan Quintelaa4bf6782009-08-03 14:46:30 +02002982 ;;
2983
2984 oss)
2985 libs_softmmu="$oss_lib $libs_softmmu"
2986 ;;
2987
Gerd Hoffmann373967b2017-03-20 10:05:43 +01002988 wav)
2989 # XXX: Probes for CoreAudio, DirectSound
blueswir12f6a1ab2008-08-21 18:00:53 +00002990 ;;
2991
malce4c63a62008-07-19 16:15:16 +00002992 *)
malc1c9b2a52008-07-19 16:57:30 +00002993 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
Peter Maydell76ad07a2013-04-08 12:11:26 +01002994 error_exit "Unknown driver '$drv' selected" \
2995 "Possible drivers are: $audio_possible_drivers"
malce4c63a62008-07-19 16:15:16 +00002996 }
2997 ;;
malcc2de5c92008-06-28 19:13:06 +00002998 esac
2999done
ths8f28f3f2007-01-05 21:25:54 +00003000
balrog4d3b6f62008-02-10 16:33:14 +00003001##########################################
aurel322e4d9fb2008-04-08 06:01:02 +00003002# BrlAPI probe
3003
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003004if test "$brlapi" != "no" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003005 brlapi_libs="-lbrlapi"
3006 cat > $TMPC << EOF
aurel322e4d9fb2008-04-08 06:01:02 +00003007#include <brlapi.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003008#include <stddef.h>
aurel322e4d9fb2008-04-08 06:01:02 +00003009int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3010EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003011 if compile_prog "" "$brlapi_libs" ; then
Juan Quintelaeb822842009-07-27 16:13:18 +02003012 brlapi=yes
Juan Quintela264606b2009-08-03 14:46:39 +02003013 libs_softmmu="$brlapi_libs $libs_softmmu"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003014 else
3015 if test "$brlapi" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003016 feature_not_found "brlapi" "Install brlapi devel"
Juan Quintela4ffcedb2009-08-12 18:20:26 +02003017 fi
3018 brlapi=no
Juan Quintelaeb822842009-07-27 16:13:18 +02003019 fi
3020fi
aurel322e4d9fb2008-04-08 06:01:02 +00003021
3022##########################################
balrog4d3b6f62008-02-10 16:33:14 +00003023# curses probe
Juan Quintelac584a6d2009-08-12 18:20:30 +02003024if test "$curses" != "no" ; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003025 if test "$mingw32" = "yes" ; then
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003026 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3027 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003028 else
Samuel Thibault7c703002016-11-09 11:27:52 +01003029 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003030 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
Michael Tokareva3605bf2013-05-25 13:17:21 +04003031 fi
Juan Quintelac584a6d2009-08-12 18:20:30 +02003032 curses_found=no
balrog4d3b6f62008-02-10 16:33:14 +00003033 cat > $TMPC << EOF
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003034#include <locale.h>
balrog4d3b6f62008-02-10 16:33:14 +00003035#include <curses.h>
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003036#include <wchar.h>
Stefan Weilef9a2522011-12-17 17:46:02 +01003037int main(void) {
3038 const char *s = curses_version();
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003039 wchar_t wch = L'w';
3040 setlocale(LC_ALL, "");
Stefan Weilef9a2522011-12-17 17:46:02 +01003041 resize_term(0, 0);
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003042 addwstr(L"wide chars\n");
3043 addnwstr(&wch, 1);
Samuel Thibault7c703002016-11-09 11:27:52 +01003044 add_wch(WACS_DEGREE);
Stefan Weilef9a2522011-12-17 17:46:02 +01003045 return s != 0;
3046}
balrog4d3b6f62008-02-10 16:33:14 +00003047EOF
Vadim Evardecbe2512013-01-15 16:17:24 +04003048 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003049 for curses_inc in $curses_inc_list; do
Samuel Thibault7c703002016-11-09 11:27:52 +01003050 IFS=:
Samuel Thibault8ddc5bf2016-10-15 21:53:05 +02003051 for curses_lib in $curses_lib_list; do
3052 unset IFS
3053 if compile_prog "$curses_inc" "$curses_lib" ; then
3054 curses_found=yes
3055 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3056 libs_softmmu="$curses_lib $libs_softmmu"
3057 break
3058 fi
3059 done
Samuel Thibault7c703002016-11-09 11:27:52 +01003060 if test "$curses_found" = yes ; then
3061 break
3062 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003063 done
Vadim Evardecbe2512013-01-15 16:17:24 +04003064 unset IFS
Juan Quintelac584a6d2009-08-12 18:20:30 +02003065 if test "$curses_found" = "yes" ; then
3066 curses=yes
3067 else
3068 if test "$curses" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003069 feature_not_found "curses" "Install ncurses devel"
Juan Quintelac584a6d2009-08-12 18:20:30 +02003070 fi
3071 curses=no
3072 fi
Juan Quintela4f78ef92009-08-12 18:20:23 +02003073fi
balrog4d3b6f62008-02-10 16:33:14 +00003074
blueswir1414f0da2008-08-15 18:20:52 +00003075##########################################
Alexander Graf769ce762009-05-11 17:41:42 +02003076# curl probe
Juan Quintela788c8192009-08-12 18:29:47 +02003077if test "$curl" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003078 if $pkg_config libcurl --exists; then
Michael Tokareva3605bf2013-05-25 13:17:21 +04003079 curlconfig="$pkg_config libcurl"
3080 else
3081 curlconfig=curl-config
3082 fi
Alexander Graf769ce762009-05-11 17:41:42 +02003083 cat > $TMPC << EOF
3084#include <curl/curl.h>
Peter Maydell0b862ce2011-06-09 22:54:29 +01003085int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
Alexander Graf769ce762009-05-11 17:41:42 +02003086EOF
Stefan Weil89138852016-05-16 15:10:20 +02003087 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3088 curl_libs=$($curlconfig --libs 2>/dev/null)
Juan Quintelab1d5a272009-08-03 14:46:05 +02003089 if compile_prog "$curl_cflags" "$curl_libs" ; then
Alexander Graf769ce762009-05-11 17:41:42 +02003090 curl=yes
Juan Quintela788c8192009-08-12 18:29:47 +02003091 else
3092 if test "$curl" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003093 feature_not_found "curl" "Install libcurl devel"
Juan Quintela788c8192009-08-12 18:29:47 +02003094 fi
3095 curl=no
Alexander Graf769ce762009-05-11 17:41:42 +02003096 fi
3097fi # test "$curl"
3098
3099##########################################
balrogfb599c92008-09-28 23:49:55 +00003100# bluez support probe
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003101if test "$bluez" != "no" ; then
balroge820e3f2008-09-30 02:27:44 +00003102 cat > $TMPC << EOF
3103#include <bluetooth/bluetooth.h>
3104int main(void) { return bt_error(0); }
3105EOF
Stefan Weil89138852016-05-16 15:10:20 +02003106 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3107 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
Juan Quintela52166aa2009-08-03 14:46:03 +02003108 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003109 bluez=yes
Juan Quintelae482d562009-08-03 14:46:37 +02003110 libs_softmmu="$bluez_libs $libs_softmmu"
balroge820e3f2008-09-30 02:27:44 +00003111 else
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003112 if test "$bluez" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003113 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02003114 fi
balroge820e3f2008-09-30 02:27:44 +00003115 bluez="no"
3116 fi
balrogfb599c92008-09-28 23:49:55 +00003117fi
3118
3119##########################################
Anthony Liguorie18df142011-07-19 14:50:29 -05003120# glib support probe
Paolo Bonzinia52d28a2012-04-05 13:01:54 +02003121
Peter Maydellad04d8c2017-04-03 14:04:15 +01003122if test "$mingw32" = yes; then
3123 glib_req_ver=2.30
3124else
3125 glib_req_ver=2.22
3126fi
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003127glib_modules=gthread-2.0
3128if test "$modules" = yes; then
3129 glib_modules="$glib_modules gmodule-2.0"
3130fi
Fam Zhenge26110c2014-02-10 14:48:57 +08003131
Sameeh Jubran4eaf7202017-03-26 12:56:22 +03003132# This workaround is required due to a bug in pkg-config file for glib as it
3133# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3134
3135if test "$static" = yes -a "$mingw32" = yes; then
3136 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3137fi
3138
Paolo Bonziniaa0d1f42014-02-25 17:36:55 +01003139for i in $glib_modules; do
Fam Zhenge26110c2014-02-10 14:48:57 +08003140 if $pkg_config --atleast-version=$glib_req_ver $i; then
Stefan Weil89138852016-05-16 15:10:20 +02003141 glib_cflags=$($pkg_config --cflags $i)
3142 glib_libs=$($pkg_config --libs $i)
Marc-André Lureau4a058892016-09-26 00:57:48 +04003143 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
Fam Zhenge26110c2014-02-10 14:48:57 +08003144 LIBS="$glib_libs $LIBS"
3145 libs_qga="$glib_libs $libs_qga"
3146 else
3147 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3148 fi
3149done
3150
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003151# Sanity check that the current size_t matches the
3152# size that glib thinks it should be. This catches
3153# problems on multi-arch where people try to build
3154# 32-bit QEMU while pointing at 64-bit glib headers
3155cat > $TMPC <<EOF
3156#include <glib.h>
3157#include <unistd.h>
3158
3159#define QEMU_BUILD_BUG_ON(x) \
3160 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3161
3162int main(void) {
3163 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3164 return 0;
3165}
3166EOF
3167
Stefan Weil5919e032016-04-28 23:33:41 +02003168if ! compile_prog "$CFLAGS" "$LIBS" ; then
Daniel P. Berrange977a82a2016-01-27 09:00:45 +00003169 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3170 "You probably need to set PKG_CONFIG_LIBDIR"\
3171 "to point to the right pkg-config files for your"\
3172 "build target"
3173fi
3174
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003175# g_test_trap_subprocess added in 2.38. Used by some tests.
3176glib_subprocess=yes
Marc-André Lureaua0492232017-01-04 21:57:22 +01003177if ! $pkg_config --atleast-version=2.38 glib-2.0; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03003178 glib_subprocess=no
3179fi
3180
John Snowbbbf2e02015-03-25 18:57:38 -04003181# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3182cat > $TMPC << EOF
3183#include <glib.h>
3184int main(void) { return 0; }
3185EOF
3186if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3187 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3188 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3189 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3190 fi
3191fi
3192
Fam Zhenge26110c2014-02-10 14:48:57 +08003193##########################################
3194# SHA command probe for modules
3195if test "$modules" = yes; then
3196 shacmd_probe="sha1sum sha1 shasum"
3197 for c in $shacmd_probe; do
Fam Zheng8ccefb92014-12-04 14:18:16 +08003198 if has $c; then
Fam Zhenge26110c2014-02-10 14:48:57 +08003199 shacmd="$c"
3200 break
3201 fi
3202 done
3203 if test "$shacmd" = ""; then
3204 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3205 fi
Anthony Liguorie18df142011-07-19 14:50:29 -05003206fi
3207
3208##########################################
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003209# pixman support probe
3210
3211if test "$pixman" = ""; then
Robert Schiele74880fe2012-12-04 16:58:08 +01003212 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3213 pixman="none"
Hu Tao236f2822014-09-15 11:41:10 +08003214 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003215 pixman="system"
3216 else
3217 pixman="internal"
3218 fi
3219fi
Robert Schiele74880fe2012-12-04 16:58:08 +01003220if test "$pixman" = "none"; then
3221 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003222 error_exit "pixman disabled but system emulation or tools build" \
3223 "enabled. You can turn off pixman only if you also" \
3224 "disable all system emulation targets and the tools" \
3225 "build with '--disable-tools --disable-system'."
Robert Schiele74880fe2012-12-04 16:58:08 +01003226 fi
3227 pixman_cflags=
3228 pixman_libs=
3229elif test "$pixman" = "system"; then
Hu Tao236f2822014-09-15 11:41:10 +08003230 # pixman version has been checked above
Stefan Weil89138852016-05-16 15:10:20 +02003231 pixman_cflags=$($pkg_config --cflags pixman-1)
3232 pixman_libs=$($pkg_config --libs pixman-1)
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003233else
3234 if test ! -d ${source_path}/pixman/pixman; then
Hu Tao236f2822014-09-15 11:41:10 +08003235 error_exit "pixman >= 0.21.8 not present. Your options:" \
Peter Maydell76ad07a2013-04-08 12:11:26 +01003236 " (1) Preferred: Install the pixman devel package (any recent" \
3237 " distro should have packages as Xorg needs pixman too)." \
3238 " (2) Fetch the pixman submodule, using:" \
3239 " git submodule update --init pixman"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003240 fi
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01003241 mkdir -p pixman/pixman
3242 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3243 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003244fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02003245
3246##########################################
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303247# libcap probe
3248
3249if test "$cap" != "no" ; then
3250 cat > $TMPC <<EOF
3251#include <stdio.h>
3252#include <sys/capability.h>
Stefan Weilcc939742012-07-18 15:10:20 +01003253int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
M. Mohan Kumar17bff522011-12-14 13:58:42 +05303254EOF
3255 if compile_prog "" "-lcap" ; then
3256 cap=yes
3257 else
3258 cap=no
3259 fi
3260fi
3261
3262##########################################
aliguorie5d355d2009-04-24 18:03:15 +00003263# pthread probe
Brad4b29ec42011-08-07 20:02:11 -04003264PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
aliguori3c529d92008-12-12 16:41:40 +00003265
Christoph Hellwig4dd75c72009-08-10 23:39:39 +02003266pthread=no
aliguorie5d355d2009-04-24 18:03:15 +00003267cat > $TMPC << EOF
aliguori3c529d92008-12-12 16:41:40 +00003268#include <pthread.h>
Stefan Weil7a42bbe2011-12-17 09:27:32 +01003269static void *f(void *p) { return NULL; }
3270int main(void) {
3271 pthread_t thread;
3272 pthread_create(&thread, 0, f, 0);
3273 return 0;
3274}
blueswir1414f0da2008-08-15 18:20:52 +00003275EOF
Andreas Färberbd00d532010-09-20 00:50:44 +02003276if compile_prog "" "" ; then
3277 pthread=yes
3278else
3279 for pthread_lib in $PTHREADLIBS_LIST; do
3280 if compile_prog "" "$pthread_lib" ; then
3281 pthread=yes
Peter Portantee3c56762012-04-20 10:36:12 -04003282 found=no
3283 for lib_entry in $LIBS; do
3284 if test "$lib_entry" = "$pthread_lib"; then
3285 found=yes
3286 break
3287 fi
3288 done
3289 if test "$found" = "no"; then
3290 LIBS="$pthread_lib $LIBS"
3291 fi
Daniel P. Berrange409437e2016-07-20 14:23:13 +01003292 PTHREAD_LIB="$pthread_lib"
Andreas Färberbd00d532010-09-20 00:50:44 +02003293 break
3294 fi
3295 done
3296fi
blueswir1414f0da2008-08-15 18:20:52 +00003297
Anthony Liguori4617e592009-08-25 17:21:56 -05003298if test "$mingw32" != yes -a "$pthread" = no; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01003299 error_exit "pthread check failed" \
3300 "Make sure to have the pthread libs and headers installed."
aliguorie5d355d2009-04-24 18:03:15 +00003301fi
3302
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00003303# check for pthread_setname_np
3304pthread_setname_np=no
3305cat > $TMPC << EOF
3306#include <pthread.h>
3307
3308static void *f(void *p) { return NULL; }
3309int main(void)
3310{
3311 pthread_t thread;
3312 pthread_create(&thread, 0, f, 0);
3313 pthread_setname_np(thread, "QEMU");
3314 return 0;
3315}
3316EOF
3317if compile_prog "" "$pthread_lib" ; then
3318 pthread_setname_np=yes
3319fi
3320
aliguoribf9298b2008-12-05 20:05:26 +00003321##########################################
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003322# rbd probe
3323if test "$rbd" != "no" ; then
3324 cat > $TMPC <<EOF
3325#include <stdio.h>
Josh Durginad32e9c2011-05-26 16:07:31 -07003326#include <rbd/librbd.h>
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003327int main(void) {
Josh Durginad32e9c2011-05-26 16:07:31 -07003328 rados_t cluster;
3329 rados_create(&cluster, NULL);
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003330 return 0;
3331}
3332EOF
Josh Durginad32e9c2011-05-26 16:07:31 -07003333 rbd_libs="-lrbd -lrados"
3334 if compile_prog "" "$rbd_libs" ; then
3335 rbd=yes
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003336 else
3337 if test "$rbd" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003338 feature_not_found "rados block device" "Install librbd/ceph devel"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003339 fi
3340 rbd=no
3341 fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01003342fi
3343
3344##########################################
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003345# libssh2 probe
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003346min_libssh2_version=1.2.8
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003347if test "$libssh2" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003348 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
Stefan Weil89138852016-05-16 15:10:20 +02003349 libssh2_cflags=$($pkg_config libssh2 --cflags)
3350 libssh2_libs=$($pkg_config libssh2 --libs)
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003351 libssh2=yes
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003352 else
3353 if test "$libssh2" = "yes" ; then
Richard W.M. Jones4fc16832013-04-19 09:16:39 +01003354 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01003355 fi
3356 libssh2=no
3357 fi
3358fi
3359
3360##########################################
Richard W.M. Jones9a2d4622013-04-09 15:30:54 +01003361# libssh2_sftp_fsync probe
3362
3363if test "$libssh2" = "yes"; then
3364 cat > $TMPC <<EOF
3365#include <stdio.h>
3366#include <libssh2.h>
3367#include <libssh2_sftp.h>
3368int main(void) {
3369 LIBSSH2_SESSION *session;
3370 LIBSSH2_SFTP *sftp;
3371 LIBSSH2_SFTP_HANDLE *sftp_handle;
3372 session = libssh2_session_init ();
3373 sftp = libssh2_sftp_init (session);
3374 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3375 libssh2_sftp_fsync (sftp_handle);
3376 return 0;
3377}
3378EOF
3379 # libssh2_cflags/libssh2_libs defined in previous test.
3380 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3381 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3382 fi
3383fi
3384
3385##########################################
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003386# linux-aio probe
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003387
3388if test "$linux_aio" != "no" ; then
3389 cat > $TMPC <<EOF
3390#include <libaio.h>
3391#include <sys/eventfd.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05003392#include <stddef.h>
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003393int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3394EOF
3395 if compile_prog "" "-laio" ; then
3396 linux_aio=yes
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003397 else
3398 if test "$linux_aio" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003399 feature_not_found "linux AIO" "Install libaio devel"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003400 fi
Luiz Capitulino3cfcae32009-08-31 13:18:12 -03003401 linux_aio=no
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02003402 fi
3403fi
3404
3405##########################################
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01003406# TPM passthrough is only on x86 Linux
3407
3408if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3409 tpm_passthrough=$tpm
3410else
3411 tpm_passthrough=no
3412fi
3413
3414##########################################
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003415# attr probe
3416
3417if test "$attr" != "no" ; then
3418 cat > $TMPC <<EOF
3419#include <stdio.h>
3420#include <sys/types.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003421#ifdef CONFIG_LIBATTR
3422#include <attr/xattr.h>
3423#else
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003424#include <sys/xattr.h>
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003425#endif
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003426int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3427EOF
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003428 if compile_prog "" "" ; then
3429 attr=yes
3430 # Older distros have <attr/xattr.h>, and need -lattr:
Pavel Borzenkovf2338fb2011-11-11 00:26:59 +04003431 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003432 attr=yes
3433 LIBS="-lattr $LIBS"
Avi Kivity4f26f2b2011-11-09 14:44:52 +02003434 libattr=yes
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003435 else
3436 if test "$attr" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11003437 feature_not_found "ATTR" "Install libc6 or libattr devel"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07003438 fi
3439 attr=no
3440 fi
3441fi
3442
3443##########################################
aliguoribf9298b2008-12-05 20:05:26 +00003444# iovec probe
3445cat > $TMPC <<EOF
blueswir1db34f0b2009-01-14 18:03:53 +00003446#include <sys/types.h>
aliguoribf9298b2008-12-05 20:05:26 +00003447#include <sys/uio.h>
blueswir1db34f0b2009-01-14 18:03:53 +00003448#include <unistd.h>
Stefan Weilf91f9be2011-12-17 09:27:33 +01003449int main(void) { return sizeof(struct iovec); }
aliguoribf9298b2008-12-05 20:05:26 +00003450EOF
3451iovec=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003452if compile_prog "" "" ; then
aliguoribf9298b2008-12-05 20:05:26 +00003453 iovec=yes
3454fi
3455
aurel32f652e6a2008-12-16 10:43:48 +00003456##########################################
aliguoriceb42de2009-04-07 18:43:28 +00003457# preadv probe
3458cat > $TMPC <<EOF
3459#include <sys/types.h>
3460#include <sys/uio.h>
3461#include <unistd.h>
Blue Swirlc075a722012-08-09 20:21:25 +00003462int main(void) { return preadv(0, 0, 0, 0); }
aliguoriceb42de2009-04-07 18:43:28 +00003463EOF
3464preadv=no
Juan Quintela52166aa2009-08-03 14:46:03 +02003465if compile_prog "" "" ; then
aliguoriceb42de2009-04-07 18:43:28 +00003466 preadv=yes
3467fi
3468
3469##########################################
aurel32f652e6a2008-12-16 10:43:48 +00003470# fdt probe
Peter Maydelle169e1e2013-05-24 16:26:54 +01003471# fdt support is mandatory for at least some target architectures,
3472# so insist on it if we're building those system emulators.
3473fdt_required=no
3474for target in $target_list; do
3475 case $target in
Paul Burtondf1d8a12016-09-08 15:51:58 +01003476 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
Peter Maydelle169e1e2013-05-24 16:26:54 +01003477 fdt_required=yes
3478 ;;
3479 esac
3480done
3481
3482if test "$fdt_required" = "yes"; then
3483 if test "$fdt" = "no"; then
3484 error_exit "fdt disabled but some requested targets require it." \
3485 "You can turn off fdt only if you also disable all the system emulation" \
3486 "targets which need it (by specifying a cut down --target-list)."
3487 fi
3488 fdt=yes
3489fi
3490
Juan Quintela2df87df2009-08-12 18:29:54 +02003491if test "$fdt" != "no" ; then
Juan Quintelab41af4b2009-07-27 16:13:20 +02003492 fdt_libs="-lfdt"
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003493 # explicitly check for libfdt_env.h as it is missing in some stable installs
Paul Burton6e85fce2016-09-08 15:51:55 +01003494 # and test for required functions to make sure we are on a version >= 1.4.2
Juan Quintelab41af4b2009-07-27 16:13:20 +02003495 cat > $TMPC << EOF
Thomas Huth31ce0ad2015-05-18 12:59:49 +02003496#include <libfdt.h>
Peter Crosthwaite96ce6542013-05-27 14:20:57 +10003497#include <libfdt_env.h>
Paul Burton6e85fce2016-09-08 15:51:55 +01003498int main(void) { fdt_first_subnode(0, 0); return 0; }
aurel32f652e6a2008-12-16 10:43:48 +00003499EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003500 if compile_prog "" "$fdt_libs" ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003501 # system DTC is good - use it
aurel32f652e6a2008-12-16 10:43:48 +00003502 fdt=yes
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003503 elif test -d ${source_path}/dtc/libfdt ; then
3504 # have submodule DTC - use it
3505 fdt=yes
3506 dtc_internal="yes"
3507 mkdir -p dtc
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03003508 if [ "$pwd_is_source_path" != "y" ] ; then
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003509 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3510 symlink "$source_path/dtc/scripts" "dtc/scripts"
Juan Quintela2df87df2009-08-12 18:29:54 +02003511 fi
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003512 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3513 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3514 elif test "$fdt" = "yes" ; then
3515 # have neither and want - prompt for system/submodule install
Paul Burton6e85fce2016-09-08 15:51:55 +01003516 error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \
Stewart Smith3f281822014-01-24 12:39:06 +11003517 " (1) Preferred: Install the DTC (libfdt) devel package" \
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003518 " (2) Fetch the DTC submodule, using:" \
3519 " git submodule update --init dtc"
3520 else
3521 # don't have and don't want
Michael Wallede3a3542011-04-26 00:24:07 +02003522 fdt_libs=
Juan Quintela2df87df2009-08-12 18:29:54 +02003523 fdt=no
aurel32f652e6a2008-12-16 10:43:48 +00003524 fi
3525fi
3526
Peter Crosthwaitea540f152013-04-18 14:47:31 +10003527libs_softmmu="$libs_softmmu $fdt_libs"
3528
Michael Walle20ff0752011-03-07 23:32:39 +01003529##########################################
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003530# opengl probe (for sdl2, gtk, milkymist-tmu2)
Gerd Hoffmannb1546f32015-03-16 10:03:53 +01003531
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003532if test "$opengl" != "no" ; then
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003533 opengl_pkgs="epoxy libdrm gbm"
OGAWA Hirofumifb719562015-10-27 02:45:48 +09003534 if $pkg_config $opengl_pkgs x11; then
Jeremy Whitef676c672015-01-09 13:08:49 -06003535 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3536 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003537 opengl=yes
Gerd Hoffmann925a0402015-05-26 12:26:21 +02003538 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3539 gtk_gl="yes"
3540 fi
Gerd Hoffmanncc720a52017-03-21 08:04:48 +01003541 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
Michael Walle20ff0752011-03-07 23:32:39 +01003542 else
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003543 if test "$opengl" = "yes" ; then
Gerd Hoffmanndcf30022015-05-11 12:24:43 +02003544 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
Michael Walle20ff0752011-03-07 23:32:39 +01003545 fi
Jeremy Whitef676c672015-01-09 13:08:49 -06003546 opengl_cflags=""
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01003547 opengl_libs=""
3548 opengl=no
Michael Walle20ff0752011-03-07 23:32:39 +01003549 fi
3550fi
3551
Gerd Hoffmann014cb152015-12-03 12:56:34 +01003552if test "$opengl" = "yes"; then
3553 cat > $TMPC << EOF
3554#include <epoxy/egl.h>
3555#ifndef EGL_MESA_image_dma_buf_export
3556# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3557#endif
3558int main(void) { return 0; }
3559EOF
3560 if compile_prog "" "" ; then
3561 opengl_dmabuf=yes
3562 fi
3563fi
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003564
Chrysostomos Nanakosc9a12e72014-08-04 17:35:32 +03003565
Bharata B Raoeb100392012-09-24 14:42:45 +05303566##########################################
3567# glusterfs probe
3568if test "$glusterfs" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003569 if $pkg_config --atleast-version=3 glusterfs-api; then
Bharata B Raoe01bee02013-07-16 21:47:41 +05303570 glusterfs="yes"
Stefan Weil89138852016-05-16 15:10:20 +02003571 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3572 glusterfs_libs=$($pkg_config --libs glusterfs-api)
Jeff Codyd85fa9e2016-04-05 10:40:09 -04003573 if $pkg_config --atleast-version=4 glusterfs-api; then
3574 glusterfs_xlator_opt="yes"
3575 fi
Stefan Weil65d5d3f2013-08-27 21:09:13 +02003576 if $pkg_config --atleast-version=5 glusterfs-api; then
Bharata B Rao0c14fb42013-07-16 21:47:42 +05303577 glusterfs_discard="yes"
3578 fi
Bharata B Rao7c815372013-12-21 14:51:25 +05303579 if $pkg_config --atleast-version=6 glusterfs-api; then
3580 glusterfs_zerofill="yes"
3581 fi
Bharata B Raoeb100392012-09-24 14:42:45 +05303582 else
3583 if test "$glusterfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08003584 feature_not_found "GlusterFS backend support" \
3585 "Install glusterfs-api devel >= 3"
Bharata B Raoeb100392012-09-24 14:42:45 +05303586 fi
Bharata B Raoe01bee02013-07-16 21:47:41 +05303587 glusterfs="no"
Bharata B Raoeb100392012-09-24 14:42:45 +05303588 fi
3589fi
3590
aurel3239386ac2009-04-15 19:48:17 +00003591# Check for inotify functions when we are building linux-user
aurel323b3f24a2009-04-15 16:12:13 +00003592# emulator. This is done because older glibc versions don't
3593# have syscall stubs for these implemented. In that case we
3594# don't provide them even if kernel supports them.
3595#
3596inotify=no
Riku Voipio67ba57f2009-06-29 17:26:11 +03003597cat > $TMPC << EOF
aurel323b3f24a2009-04-15 16:12:13 +00003598#include <sys/inotify.h>
3599
3600int
3601main(void)
3602{
3603 /* try to start inotify */
aurel328690e422009-04-17 13:50:32 +00003604 return inotify_init();
aurel323b3f24a2009-04-15 16:12:13 +00003605}
3606EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003607if compile_prog "" "" ; then
Riku Voipio67ba57f2009-06-29 17:26:11 +03003608 inotify=yes
aurel323b3f24a2009-04-15 16:12:13 +00003609fi
3610
Riku Voipioc05c7a72010-03-26 15:25:11 +00003611inotify1=no
3612cat > $TMPC << EOF
3613#include <sys/inotify.h>
3614
3615int
3616main(void)
3617{
3618 /* try to start inotify */
3619 return inotify_init1(0);
3620}
3621EOF
3622if compile_prog "" "" ; then
3623 inotify1=yes
3624fi
3625
Riku Voipioebc996f2009-04-21 15:01:51 +03003626# check if utimensat and futimens are supported
3627utimens=no
3628cat > $TMPC << EOF
3629#define _ATFILE_SOURCE
Riku Voipioebc996f2009-04-21 15:01:51 +03003630#include <stddef.h>
3631#include <fcntl.h>
Peter Maydell3014ee02012-07-18 15:10:26 +01003632#include <sys/stat.h>
Riku Voipioebc996f2009-04-21 15:01:51 +03003633
3634int main(void)
3635{
3636 utimensat(AT_FDCWD, "foo", NULL, 0);
3637 futimens(0, NULL);
3638 return 0;
3639}
3640EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003641if compile_prog "" "" ; then
Riku Voipioebc996f2009-04-21 15:01:51 +03003642 utimens=yes
3643fi
3644
Riku Voipio099d6b02009-05-05 12:10:04 +03003645# check if pipe2 is there
3646pipe2=no
3647cat > $TMPC << EOF
Riku Voipio099d6b02009-05-05 12:10:04 +03003648#include <unistd.h>
3649#include <fcntl.h>
3650
3651int main(void)
3652{
3653 int pipefd[2];
Bruce Rogers9bca8162012-08-20 12:45:08 -06003654 return pipe2(pipefd, O_CLOEXEC);
Riku Voipio099d6b02009-05-05 12:10:04 +03003655}
3656EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003657if compile_prog "" "" ; then
Riku Voipio099d6b02009-05-05 12:10:04 +03003658 pipe2=yes
3659fi
3660
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003661# check if accept4 is there
3662accept4=no
3663cat > $TMPC << EOF
Kevin Wolf40ff6d72009-12-02 12:24:42 +01003664#include <sys/socket.h>
3665#include <stddef.h>
3666
3667int main(void)
3668{
3669 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3670 return 0;
3671}
3672EOF
3673if compile_prog "" "" ; then
3674 accept4=yes
3675fi
3676
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303677# check if tee/splice is there. vmsplice was added same time.
3678splice=no
3679cat > $TMPC << EOF
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303680#include <unistd.h>
3681#include <fcntl.h>
3682#include <limits.h>
3683
3684int main(void)
3685{
Stefan Weil66ea0f22011-12-17 09:27:35 +01003686 int len, fd = 0;
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303687 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3688 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3689 return 0;
3690}
3691EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02003692if compile_prog "" "" ; then
vibisreenivasan3ce34df2009-05-16 18:32:41 +05303693 splice=yes
3694fi
3695
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003696##########################################
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003697# libnuma probe
3698
3699if test "$numa" != "no" ; then
3700 cat > $TMPC << EOF
3701#include <numa.h>
3702int main(void) { return numa_available(); }
3703EOF
3704
3705 if compile_prog "" "-lnuma" ; then
3706 numa=yes
3707 libs_softmmu="-lnuma $libs_softmmu"
3708 else
3709 if test "$numa" = "yes" ; then
3710 feature_not_found "numa" "install numactl devel"
3711 fi
3712 numa=no
3713 fi
3714fi
3715
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003716if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3717 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3718 exit 1
3719fi
3720
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08003721##########################################
Fam Zheng2847b462015-03-26 11:03:12 +08003722# tcmalloc probe
3723
3724if test "$tcmalloc" = "yes" ; then
3725 cat > $TMPC << EOF
3726#include <stdlib.h>
3727int main(void) { malloc(1); return 0; }
3728EOF
3729
3730 if compile_prog "" "-ltcmalloc" ; then
3731 LIBS="-ltcmalloc $LIBS"
3732 else
3733 feature_not_found "tcmalloc" "install gperftools devel"
3734 fi
3735fi
3736
3737##########################################
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02003738# jemalloc probe
3739
3740if test "$jemalloc" = "yes" ; then
3741 cat > $TMPC << EOF
3742#include <stdlib.h>
3743int main(void) { malloc(1); return 0; }
3744EOF
3745
3746 if compile_prog "" "-ljemalloc" ; then
3747 LIBS="-ljemalloc $LIBS"
3748 else
3749 feature_not_found "jemalloc" "install jemalloc devel"
3750 fi
3751fi
3752
3753##########################################
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003754# signalfd probe
3755signalfd="no"
3756cat > $TMPC << EOF
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03003757#include <unistd.h>
3758#include <sys/syscall.h>
3759#include <signal.h>
3760int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3761EOF
3762
3763if compile_prog "" "" ; then
3764 signalfd=yes
3765fi
3766
Riku Voipioc2882b92009-08-12 15:08:24 +03003767# check if eventfd is supported
3768eventfd=no
3769cat > $TMPC << EOF
3770#include <sys/eventfd.h>
3771
3772int main(void)
3773{
Stefan Weil55cc7f32011-12-17 09:27:37 +01003774 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
Riku Voipioc2882b92009-08-12 15:08:24 +03003775}
3776EOF
3777if compile_prog "" "" ; then
3778 eventfd=yes
3779fi
3780
Marc-André Lureau751bcc32015-10-09 17:17:16 +02003781# check if memfd is supported
3782memfd=no
3783cat > $TMPC << EOF
3784#include <sys/memfd.h>
3785
3786int main(void)
3787{
3788 return memfd_create("foo", MFD_ALLOW_SEALING);
3789}
3790EOF
3791if compile_prog "" "" ; then
3792 memfd=yes
3793fi
3794
3795
3796
Ulrich Hechtd0927932009-09-17 20:22:14 +03003797# check for fallocate
3798fallocate=no
3799cat > $TMPC << EOF
3800#include <fcntl.h>
3801
3802int main(void)
3803{
3804 fallocate(0, 0, 0, 0);
3805 return 0;
3806}
3807EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003808if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003809 fallocate=yes
3810fi
3811
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01003812# check for fallocate hole punching
3813fallocate_punch_hole=no
3814cat > $TMPC << EOF
3815#include <fcntl.h>
3816#include <linux/falloc.h>
3817
3818int main(void)
3819{
3820 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3821 return 0;
3822}
3823EOF
3824if compile_prog "" "" ; then
3825 fallocate_punch_hole=yes
3826fi
3827
Denis V. Lunevb953f072015-01-30 11:42:14 +03003828# check that fallocate supports range zeroing inside the file
3829fallocate_zero_range=no
3830cat > $TMPC << EOF
3831#include <fcntl.h>
3832#include <linux/falloc.h>
3833
3834int main(void)
3835{
3836 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3837 return 0;
3838}
3839EOF
3840if compile_prog "" "" ; then
3841 fallocate_zero_range=yes
3842fi
3843
Kevin Wolfed911432014-09-29 17:12:59 +02003844# check for posix_fallocate
3845posix_fallocate=no
3846cat > $TMPC << EOF
3847#include <fcntl.h>
3848
3849int main(void)
3850{
3851 posix_fallocate(0, 0, 0);
3852 return 0;
3853}
3854EOF
3855if compile_prog "" "" ; then
3856 posix_fallocate=yes
3857fi
3858
Peter Maydellc727f472011-01-06 11:05:10 +00003859# check for sync_file_range
3860sync_file_range=no
3861cat > $TMPC << EOF
3862#include <fcntl.h>
3863
3864int main(void)
3865{
3866 sync_file_range(0, 0, 0, 0);
3867 return 0;
3868}
3869EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003870if compile_prog "" "" ; then
Peter Maydellc727f472011-01-06 11:05:10 +00003871 sync_file_range=yes
3872fi
3873
Peter Maydelldace20d2011-01-10 13:11:24 +00003874# check for linux/fiemap.h and FS_IOC_FIEMAP
3875fiemap=no
3876cat > $TMPC << EOF
3877#include <sys/ioctl.h>
3878#include <linux/fs.h>
3879#include <linux/fiemap.h>
3880
3881int main(void)
3882{
3883 ioctl(0, FS_IOC_FIEMAP, 0);
3884 return 0;
3885}
3886EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003887if compile_prog "" "" ; then
Peter Maydelldace20d2011-01-10 13:11:24 +00003888 fiemap=yes
3889fi
3890
Ulrich Hechtd0927932009-09-17 20:22:14 +03003891# check for dup3
3892dup3=no
3893cat > $TMPC << EOF
3894#include <unistd.h>
3895
3896int main(void)
3897{
3898 dup3(0, 0, 0);
3899 return 0;
3900}
3901EOF
Jan Kiszka78f5d722009-11-03 10:54:44 +01003902if compile_prog "" "" ; then
Ulrich Hechtd0927932009-09-17 20:22:14 +03003903 dup3=yes
3904fi
3905
Alex Bligh4e0c6522013-08-21 16:02:43 +01003906# check for ppoll support
3907ppoll=no
3908cat > $TMPC << EOF
3909#include <poll.h>
3910
3911int main(void)
3912{
3913 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3914 ppoll(&pfd, 1, 0, 0);
3915 return 0;
3916}
3917EOF
3918if compile_prog "" "" ; then
3919 ppoll=yes
3920fi
3921
Alex Blighcd758dd2013-08-21 16:02:44 +01003922# check for prctl(PR_SET_TIMERSLACK , ... ) support
3923prctl_pr_set_timerslack=no
3924cat > $TMPC << EOF
3925#include <sys/prctl.h>
3926
3927int main(void)
3928{
3929 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3930 return 0;
3931}
3932EOF
3933if compile_prog "" "" ; then
3934 prctl_pr_set_timerslack=yes
3935fi
3936
Peter Maydell3b6edd12011-02-15 18:35:05 +00003937# check for epoll support
3938epoll=no
3939cat > $TMPC << EOF
3940#include <sys/epoll.h>
3941
3942int main(void)
3943{
3944 epoll_create(0);
3945 return 0;
3946}
3947EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003948if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00003949 epoll=yes
3950fi
3951
Peter Maydell227f0212016-06-06 19:58:11 +01003952# epoll_create1 is a later addition
3953# so we must check separately for its presence
Peter Maydell3b6edd12011-02-15 18:35:05 +00003954epoll_create1=no
3955cat > $TMPC << EOF
3956#include <sys/epoll.h>
3957
3958int main(void)
3959{
Peter Maydell19e83f62011-04-26 16:56:40 +01003960 /* Note that we use epoll_create1 as a value, not as
3961 * a function being called. This is necessary so that on
3962 * old SPARC glibc versions where the function was present in
3963 * the library but not declared in the header file we will
3964 * fail the configure check. (Otherwise we will get a compiler
3965 * warning but not an error, and will proceed to fail the
3966 * qemu compile where we compile with -Werror.)
3967 */
Blue Swirlc075a722012-08-09 20:21:25 +00003968 return (int)(uintptr_t)&epoll_create1;
Peter Maydell3b6edd12011-02-15 18:35:05 +00003969}
3970EOF
Peter Maydell8fb03152012-04-04 17:03:15 +01003971if compile_prog "" "" ; then
Peter Maydell3b6edd12011-02-15 18:35:05 +00003972 epoll_create1=yes
3973fi
3974
Peter Maydella8fd1ab2013-02-08 07:31:55 +00003975# check for sendfile support
3976sendfile=no
3977cat > $TMPC << EOF
3978#include <sys/sendfile.h>
3979
3980int main(void)
3981{
3982 return sendfile(0, 0, 0, 0);
3983}
3984EOF
3985if compile_prog "" "" ; then
3986 sendfile=yes
3987fi
3988
Riku Voipio51834342014-06-22 11:25:42 +01003989# check for timerfd support (glibc 2.8 and newer)
3990timerfd=no
3991cat > $TMPC << EOF
3992#include <sys/timerfd.h>
3993
3994int main(void)
3995{
3996 return(timerfd_create(CLOCK_REALTIME, 0));
3997}
3998EOF
3999if compile_prog "" "" ; then
4000 timerfd=yes
4001fi
4002
Riku Voipio9af5c902014-08-12 15:58:57 +03004003# check for setns and unshare support
4004setns=no
4005cat > $TMPC << EOF
4006#include <sched.h>
4007
4008int main(void)
4009{
4010 int ret;
4011 ret = setns(0, 0);
4012 ret = unshare(0);
4013 return ret;
4014}
4015EOF
4016if compile_prog "" "" ; then
4017 setns=yes
4018fi
4019
Aleksandar Markovic38860a02016-10-10 13:23:29 +02004020# clock_adjtime probe
4021clock_adjtime=no
4022cat > $TMPC <<EOF
4023#include <time.h>
4024
4025int main(void)
4026{
4027 return clock_adjtime(0, 0);
4028}
4029EOF
4030clock_adjtime=no
4031if compile_prog "" "" ; then
4032 clock_adjtime=yes
4033fi
4034
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02004035# syncfs probe
4036syncfs=no
4037cat > $TMPC <<EOF
4038#include <unistd.h>
4039
4040int main(void)
4041{
4042 return syncfs(0);
4043}
4044EOF
4045syncfs=no
4046if compile_prog "" "" ; then
4047 syncfs=yes
4048fi
4049
pbrookcc8ae6d2006-04-23 17:57:59 +00004050# Check if tools are available to build documentation.
Juan Quintelaa25dba12009-08-12 18:29:52 +02004051if test "$docs" != "no" ; then
Stefan Weil01668d92010-03-04 22:21:02 +01004052 if has makeinfo && has pod2man; then
Juan Quintelaa25dba12009-08-12 18:29:52 +02004053 docs=yes
Juan Quintela83a3ab82009-08-12 18:29:51 +02004054 else
Juan Quintelaa25dba12009-08-12 18:29:52 +02004055 if test "$docs" = "yes" ; then
Stewart Smith21684af2014-01-24 12:39:10 +11004056 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
Juan Quintela83a3ab82009-08-12 18:29:51 +02004057 fi
Juan Quintelaa25dba12009-08-12 18:29:52 +02004058 docs=no
Juan Quintela83a3ab82009-08-12 18:29:51 +02004059 fi
pbrookcc8ae6d2006-04-23 17:57:59 +00004060fi
4061
Stefan Weilf514f412009-10-11 12:44:07 +02004062# Search for bswap_32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004063byteswap_h=no
4064cat > $TMPC << EOF
4065#include <byteswap.h>
4066int main(void) { return bswap_32(0); }
4067EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004068if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004069 byteswap_h=yes
4070fi
4071
Stefan Weil75f13592013-01-05 12:17:38 +01004072# Search for bswap32 function
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004073bswap_h=no
4074cat > $TMPC << EOF
4075#include <sys/endian.h>
4076#include <sys/types.h>
4077#include <machine/bswap.h>
4078int main(void) { return bswap32(0); }
4079EOF
Juan Quintela52166aa2009-08-03 14:46:03 +02004080if compile_prog "" "" ; then
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02004081 bswap_h=yes
4082fi
4083
aliguorida93a1f2008-12-12 20:02:52 +00004084##########################################
Peter Lievene49ab192014-06-04 14:33:26 +02004085# Do we have libiscsi >= 1.9.0
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004086if test "$libiscsi" != "no" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004087 if $pkg_config --atleast-version=1.9.0 libiscsi; then
Paolo Bonzini3c33ea92013-02-22 18:14:28 +01004088 libiscsi="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004089 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4090 libiscsi_libs=$($pkg_config --libs libiscsi)
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004091 else
4092 if test "$libiscsi" = "yes" ; then
Peter Lievene49ab192014-06-04 14:33:26 +02004093 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004094 fi
4095 libiscsi="no"
4096 fi
4097fi
4098
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11004099##########################################
Natanael Copa8bacde82012-09-12 09:06:51 +00004100# Do we need libm
4101cat > $TMPC << EOF
4102#include <math.h>
Alexey Kardashevskiyf80ea982014-07-01 17:30:27 +10004103int main(int argc, char **argv) { return isnan(sin((double)argc)); }
Natanael Copa8bacde82012-09-12 09:06:51 +00004104EOF
4105if compile_prog "" "" ; then
4106 :
4107elif compile_prog "" "-lm" ; then
4108 LIBS="-lm $LIBS"
4109 libs_qga="-lm $libs_qga"
4110else
Peter Maydell76ad07a2013-04-08 12:11:26 +01004111 error_exit "libm check failed"
Natanael Copa8bacde82012-09-12 09:06:51 +00004112fi
4113
4114##########################################
aliguorida93a1f2008-12-12 20:02:52 +00004115# Do we need librt
Natanael Copa8bacde82012-09-12 09:06:51 +00004116# uClibc provides 2 versions of clock_gettime(), one with realtime
4117# support and one without. This means that the clock_gettime() don't
4118# need -lrt. We still need it for timer_create() so we check for this
4119# function in addition.
aliguorida93a1f2008-12-12 20:02:52 +00004120cat > $TMPC <<EOF
4121#include <signal.h>
4122#include <time.h>
Natanael Copa8bacde82012-09-12 09:06:51 +00004123int main(void) {
4124 timer_create(CLOCK_REALTIME, NULL, NULL);
4125 return clock_gettime(CLOCK_REALTIME, NULL);
4126}
aliguorida93a1f2008-12-12 20:02:52 +00004127EOF
4128
Juan Quintela52166aa2009-08-03 14:46:03 +02004129if compile_prog "" "" ; then
Juan Quintela07ffa4b2009-08-03 14:46:17 +02004130 :
Natanael Copa8bacde82012-09-12 09:06:51 +00004131# we need pthread for static linking. use previous pthread test result
Rick Liu18e588b2014-05-30 14:10:20 -07004132elif compile_prog "" "$pthread_lib -lrt" ; then
4133 LIBS="$LIBS -lrt"
4134 libs_qga="$libs_qga -lrt"
aliguorida93a1f2008-12-12 20:02:52 +00004135fi
4136
Blue Swirl31ff5042009-09-12 12:33:07 +00004137if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
Andreas Färber179cf402010-09-20 00:50:43 +02004138 "$aix" != "yes" -a "$haiku" != "yes" ; then
Juan Quintela6362a532009-08-03 14:46:32 +02004139 libs_softmmu="-lutil $libs_softmmu"
4140fi
4141
Blue Swirlde5071c2009-09-12 09:58:46 +00004142##########################################
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004143# spice probe
4144if test "$spice" != "no" ; then
4145 cat > $TMPC << EOF
4146#include <spice.h>
4147int main(void) { spice_server_new(); return 0; }
4148EOF
Jiri Denemark710fc4f2011-01-24 13:20:29 +01004149 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4150 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004151 if $pkg_config --atleast-version=0.12.0 spice-server && \
4152 $pkg_config --atleast-version=0.12.3 spice-protocol && \
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004153 compile_prog "$spice_cflags" "$spice_libs" ; then
4154 spice="yes"
4155 libs_softmmu="$libs_softmmu $spice_libs"
4156 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
Alon Levy2e0e3c32012-08-22 11:16:26 +03004157 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4158 spice_server_version=$($pkg_config --modversion spice-server)
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004159 else
4160 if test "$spice" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004161 feature_not_found "spice" \
4162 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004163 fi
4164 spice="no"
4165 fi
4166fi
4167
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004168# check for smartcard support
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004169smartcard_cflags=""
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004170if test "$smartcard" != "no"; then
4171 if $pkg_config libcacard; then
4172 libcacard_cflags=$($pkg_config --cflags libcacard)
4173 libcacard_libs=$($pkg_config --libs libcacard)
4174 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4175 libs_softmmu="$libs_softmmu $libcacard_libs"
4176 smartcard="yes"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004177 else
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004178 if test "$smartcard" = "yes"; then
4179 feature_not_found "smartcard" "Install libcacard devel"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004180 fi
Marc-André Lureau7b02f542015-08-30 11:48:40 +02004181 smartcard="no"
Paolo Bonziniafd347a2012-12-20 20:39:36 +01004182 fi
Robert Relyea111a38b2010-11-28 16:36:38 +02004183fi
4184
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004185# check for libusb
4186if test "$libusb" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004187 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004188 libusb="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004189 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4190 libusb_libs=$($pkg_config --libs libusb-1.0)
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004191 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4192 libs_softmmu="$libs_softmmu $libusb_libs"
4193 else
4194 if test "$libusb" = "yes"; then
Hu Tao8efc9362014-06-26 17:34:50 +08004195 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01004196 fi
4197 libusb="no"
4198 fi
4199fi
4200
Hans de Goede69354a82011-07-19 11:04:10 +02004201# check for usbredirparser for usb network redirection support
4202if test "$usb_redir" != "no" ; then
Stefan Weil65d5d3f2013-08-27 21:09:13 +02004203 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
Hans de Goede69354a82011-07-19 11:04:10 +02004204 usb_redir="yes"
Stefan Weilca871ec2013-08-27 21:09:12 +02004205 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4206 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
Hans de Goede69354a82011-07-19 11:04:10 +02004207 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
Aurelien Jarno56ab2ad2012-09-11 20:57:58 +02004208 libs_softmmu="$libs_softmmu $usb_redir_libs"
Hans de Goede69354a82011-07-19 11:04:10 +02004209 else
4210 if test "$usb_redir" = "yes"; then
Stewart Smith21684af2014-01-24 12:39:10 +11004211 feature_not_found "usb-redir" "Install usbredir devel"
Hans de Goede69354a82011-07-19 11:04:10 +02004212 fi
4213 usb_redir="no"
4214 fi
4215fi
4216
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01004217##########################################
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004218# check if we have VSS SDK headers for win
4219
4220if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4221 case "$vss_win32_sdk" in
Michael Roth690604f2016-06-28 17:31:49 -05004222 "") vss_win32_include="-isystem $source_path" ;;
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004223 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4224 # handle path with spaces. So we symlink the headers into ".sdk/vss".
Michael Roth690604f2016-06-28 17:31:49 -05004225 vss_win32_include="-isystem $source_path/.sdk/vss"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004226 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4227 ;;
Michael Roth690604f2016-06-28 17:31:49 -05004228 *) vss_win32_include="-isystem $vss_win32_sdk"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004229 esac
4230 cat > $TMPC << EOF
4231#define __MIDL_user_allocate_free_DEFINED__
4232#include <inc/win2003/vss.h>
4233int main(void) { return VSS_CTX_BACKUP; }
4234EOF
4235 if compile_prog "$vss_win32_include" "" ; then
4236 guest_agent_with_vss="yes"
4237 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
Fam Zheng315d3182016-09-21 12:27:21 +08004238 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
Michael Rothf33ca812015-08-26 16:19:41 -05004239 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04004240 else
4241 if test "$vss_win32_sdk" != "" ; then
4242 echo "ERROR: Please download and install Microsoft VSS SDK:"
4243 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4244 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4245 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4246 echo "ERROR: The headers are extracted in the directory \`inc'."
4247 feature_not_found "VSS support"
4248 fi
4249 guest_agent_with_vss="no"
4250 fi
4251fi
4252
4253##########################################
4254# lookup Windows platform SDK (if not specified)
4255# The SDK is needed only to build .tlb (type library) file of guest agent
4256# VSS provider from the source. It is usually unnecessary because the
4257# pre-compiled .tlb file is included.
4258
4259if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4260 if test -z "$win_sdk"; then
4261 programfiles="$PROGRAMFILES"
4262 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4263 if test -n "$programfiles"; then
4264 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4265 else
4266 feature_not_found "Windows SDK"
4267 fi
4268 elif test "$win_sdk" = "no"; then
4269 win_sdk=""
4270 fi
4271fi
4272
4273##########################################
Michael Roth50cbebb2015-07-07 18:10:09 -05004274# check if mingw environment provides a recent ntddscsi.h
4275if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4276 cat > $TMPC << EOF
4277#include <windows.h>
4278#include <ntddscsi.h>
4279int main(void) {
4280#if !defined(IOCTL_SCSI_GET_ADDRESS)
4281#error Missing required ioctl definitions
4282#endif
4283 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4284 return addr.Lun;
4285}
4286EOF
4287 if compile_prog "" "" ; then
4288 guest_agent_ntddscsi=yes
Michael Rothc54e1eb2015-07-07 19:12:18 -05004289 libs_qga="-lsetupapi $libs_qga"
Michael Roth50cbebb2015-07-07 18:10:09 -05004290 fi
4291fi
4292
4293##########################################
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02004294# virgl renderer probe
4295
4296if test "$virglrenderer" != "no" ; then
4297 cat > $TMPC << EOF
4298#include <virglrenderer.h>
4299int main(void) { virgl_renderer_poll(); return 0; }
4300EOF
4301 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4302 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4303 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4304 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4305 virglrenderer="yes"
4306 else
4307 if test "$virglrenderer" = "yes" ; then
4308 feature_not_found "virglrenderer"
4309 fi
4310 virglrenderer="no"
4311 fi
4312fi
4313
4314##########################################
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004315# check if we have fdatasync
4316
4317fdatasync=no
4318cat > $TMPC << EOF
4319#include <unistd.h>
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004320int main(void) {
4321#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4322return fdatasync(0);
4323#else
Stefan Weile172fe12012-04-06 21:33:20 +02004324#error Not supported
Alexandre Raymondd1722a22011-05-29 18:22:48 -04004325#endif
4326}
Blue Swirl5f6b9e82009-09-20 06:56:26 +00004327EOF
4328if compile_prog "" "" ; then
4329 fdatasync=yes
4330fi
4331
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004332##########################################
Andreas Färbere78815a2010-09-25 11:26:05 +00004333# check if we have madvise
4334
4335madvise=no
4336cat > $TMPC << EOF
4337#include <sys/types.h>
4338#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004339#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004340int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4341EOF
4342if compile_prog "" "" ; then
4343 madvise=yes
4344fi
4345
4346##########################################
4347# check if we have posix_madvise
4348
4349posix_madvise=no
4350cat > $TMPC << EOF
4351#include <sys/mman.h>
Scott Wood832ce9c2010-10-05 14:28:17 -05004352#include <stddef.h>
Andreas Färbere78815a2010-09-25 11:26:05 +00004353int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4354EOF
4355if compile_prog "" "" ; then
4356 posix_madvise=yes
4357fi
4358
4359##########################################
Paul Durrant0a852412016-08-04 14:44:14 +01004360# check if we have posix_syslog
4361
4362posix_syslog=no
4363cat > $TMPC << EOF
4364#include <syslog.h>
4365int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4366EOF
4367if compile_prog "" "" ; then
4368 posix_syslog=yes
4369fi
4370
4371##########################################
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004372# check if trace backend exists
4373
Lluís Vilanova5b808272014-05-27 15:02:14 +02004374$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004375if test "$?" -ne 0 ; then
Lluís Vilanova5b808272014-05-27 15:02:14 +02004376 error_exit "invalid trace backends" \
4377 "Please choose supported trace backends."
Stefan Hajnoczi94a420b2010-05-22 17:52:39 +01004378fi
4379
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004380##########################################
4381# For 'ust' backend, test if ust headers are present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004382if have_backend "ust"; then
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004383 cat > $TMPC << EOF
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004384#include <lttng/tracepoint.h>
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004385int main(void) { return 0; }
4386EOF
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004387 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004388 if $pkg_config lttng-ust --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004389 lttng_ust_libs=$($pkg_config --libs lttng-ust)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004390 else
Francis Deslauriersc79ed232016-11-28 10:52:17 -05004391 lttng_ust_libs="-llttng-ust -ldl"
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004392 fi
4393 if $pkg_config liburcu-bp --exists; then
Stefan Weil89138852016-05-16 15:10:20 +02004394 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004395 else
4396 urcu_bp_libs="-lurcu-bp"
4397 fi
4398
4399 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4400 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004401 else
Mohamad Gebaibf15f632014-01-29 22:47:54 -05004402 error_exit "Trace backend 'ust' missing lttng-ust header files"
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004403 fi
4404fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004405
4406##########################################
4407# For 'dtrace' backend, test if 'dtrace' command is present
Lluís Vilanova5b808272014-05-27 15:02:14 +02004408if have_backend "dtrace"; then
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004409 if ! has 'dtrace' ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01004410 error_exit "dtrace command is not found in PATH $PATH"
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004411 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00004412 trace_backend_stap="no"
4413 if has 'stap' ; then
4414 trace_backend_stap="yes"
4415 fi
Daniel P. Berrangeb3d08c02010-11-12 13:20:24 +00004416fi
4417
Stefan Hajnoczi7e24e922010-05-22 21:11:33 +01004418##########################################
Alex Barcelo519175a2012-02-28 12:25:50 +01004419# check and set a backend for coroutine
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304420
Peter Maydell7c2acc72013-04-08 12:11:27 +01004421# We prefer ucontext, but it's not always possible. The fallback
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004422# is sigcontext. On Windows the only valid backend is the Windows
4423# specific one.
Peter Maydell7c2acc72013-04-08 12:11:27 +01004424
4425ucontext_works=no
4426if test "$darwin" != "yes"; then
4427 cat > $TMPC << EOF
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304428#include <ucontext.h>
Peter Maydellcdf84802012-02-23 16:20:05 +00004429#ifdef __stub_makecontext
4430#error Ignoring glibc stub makecontext which will always fail
4431#endif
Stefan Weil75cafad2011-12-17 09:27:29 +01004432int main(void) { makecontext(0, 0, 0); return 0; }
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304433EOF
Peter Maydell7c2acc72013-04-08 12:11:27 +01004434 if compile_prog "" "" ; then
4435 ucontext_works=yes
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304436 fi
Peter Maydell7c2acc72013-04-08 12:11:27 +01004437fi
4438
4439if test "$coroutine" = ""; then
4440 if test "$mingw32" = "yes"; then
4441 coroutine=win32
4442 elif test "$ucontext_works" = "yes"; then
4443 coroutine=ucontext
4444 else
4445 coroutine=sigaltstack
4446 fi
Alex Barcelo519175a2012-02-28 12:25:50 +01004447else
Peter Maydell7c2acc72013-04-08 12:11:27 +01004448 case $coroutine in
4449 windows)
4450 if test "$mingw32" != "yes"; then
4451 error_exit "'windows' coroutine backend only valid for Windows"
4452 fi
4453 # Unfortunately the user visible backend name doesn't match the
4454 # coroutine-*.c filename for this case, so we have to adjust it here.
4455 coroutine=win32
4456 ;;
4457 ucontext)
4458 if test "$ucontext_works" != "yes"; then
4459 feature_not_found "ucontext"
4460 fi
4461 ;;
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004462 sigaltstack)
Peter Maydell7c2acc72013-04-08 12:11:27 +01004463 if test "$mingw32" = "yes"; then
4464 error_exit "only the 'windows' coroutine backend is valid for Windows"
4465 fi
4466 ;;
4467 *)
4468 error_exit "unknown coroutine backend $coroutine"
4469 ;;
4470 esac
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304471fi
4472
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004473if test "$coroutine_pool" = ""; then
Daniel P. Berrange33c53c52017-04-28 13:24:44 +01004474 coroutine_pool=yes
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02004475fi
4476
Peter Lieven7d992e42016-09-27 11:58:45 +02004477if test "$debug_stack_usage" = "yes"; then
4478 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4479 error_exit "stack usage debugging is not supported for $cpu"
4480 fi
4481 if test "$coroutine_pool" = "yes"; then
4482 echo "WARN: disabling coroutine pool for stack usage debugging"
4483 coroutine_pool=no
4484 fi
4485fi
4486
4487
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05304488##########################################
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304489# check if we have open_by_handle_at
4490
Stefan Weil4e1797f2012-06-18 22:11:06 +02004491open_by_handle_at=no
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304492cat > $TMPC << EOF
4493#include <fcntl.h>
Stefan Weilacc55ba2012-06-06 19:35:57 +00004494#if !defined(AT_EMPTY_PATH)
4495# error missing definition
4496#else
Stefan Weil75cafad2011-12-17 09:27:29 +01004497int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
Stefan Weilacc55ba2012-06-06 19:35:57 +00004498#endif
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304499EOF
4500if compile_prog "" "" ; then
4501 open_by_handle_at=yes
4502fi
4503
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304504########################################
4505# check if we have linux/magic.h
4506
4507linux_magic_h=no
4508cat > $TMPC << EOF
4509#include <linux/magic.h>
4510int main(void) {
Stefan Weil75cafad2011-12-17 09:27:29 +01004511 return 0;
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05304512}
4513EOF
4514if compile_prog "" "" ; then
4515 linux_magic_h=yes
4516fi
4517
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004518########################################
Kevin Wolfc95e3082013-02-22 21:08:51 +01004519# check whether we can disable warning option with a pragma (this is needed
4520# to silence warnings in the headers of some versions of external libraries).
4521# This test has to be compiled with -Werror as otherwise an unknown pragma is
4522# only a warning.
4523#
4524# If we can't selectively disable warning in the code, disable -Werror so that
4525# the build doesn't fail anyway.
4526
Peter Maydell06d71fa2012-07-30 16:13:07 +01004527pragma_disable_unused_but_set=no
4528cat > $TMPC << EOF
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004529#pragma GCC diagnostic push
Peter Maydell06d71fa2012-07-30 16:13:07 +01004530#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
Kevin Wolfc95e3082013-02-22 21:08:51 +01004531#pragma GCC diagnostic ignored "-Wstrict-prototypes"
Markus Armbrustere6f53fd2013-04-16 13:51:06 +02004532#pragma GCC diagnostic pop
Kevin Wolfc95e3082013-02-22 21:08:51 +01004533
Peter Maydell06d71fa2012-07-30 16:13:07 +01004534int main(void) {
4535 return 0;
4536}
4537EOF
4538if compile_prog "-Werror" "" ; then
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01004539 pragma_diagnostic_available=yes
Kevin Wolfc95e3082013-02-22 21:08:51 +01004540else
4541 werror=no
Peter Maydell06d71fa2012-07-30 16:13:07 +01004542fi
4543
4544########################################
Christian Borntraeger541be922014-09-25 21:07:54 +02004545# check if we have valgrind/valgrind.h
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004546
4547valgrind_h=no
4548cat > $TMPC << EOF
4549#include <valgrind/valgrind.h>
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004550int main(void) {
Kevin Wolf3f4349d2012-06-29 13:40:27 +02004551 return 0;
4552}
4553EOF
4554if compile_prog "" "" ; then
4555 valgrind_h=yes
4556fi
4557
4558########################################
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004559# check if environ is declared
4560
4561has_environ=no
4562cat > $TMPC << EOF
4563#include <unistd.h>
4564int main(void) {
Blue Swirlc075a722012-08-09 20:21:25 +00004565 environ = 0;
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03004566 return 0;
4567}
4568EOF
4569if compile_prog "" "" ; then
4570 has_environ=yes
4571fi
4572
Richard Henderson76a347e2012-12-28 14:17:02 -08004573########################################
4574# check if cpuid.h is usable.
4575
4576cpuid_h=no
4577cat > $TMPC << EOF
4578#include <cpuid.h>
4579int main(void) {
Peter Maydell774d5662014-02-20 19:42:53 +00004580 unsigned a, b, c, d;
4581 int max = __get_cpuid_max(0, 0);
4582
4583 if (max >= 1) {
4584 __cpuid(1, a, b, c, d);
4585 }
4586
4587 if (max >= 7) {
4588 __cpuid_count(7, 0, a, b, c, d);
4589 }
4590
4591 return 0;
Richard Henderson76a347e2012-12-28 14:17:02 -08004592}
4593EOF
4594if compile_prog "" "" ; then
4595 cpuid_h=yes
4596fi
4597
Richard Hendersonf5401662013-02-16 12:46:59 -08004598########################################
4599# check if __[u]int128_t is usable.
4600
4601int128=no
4602cat > $TMPC << EOF
Stefan Weila00f66a2014-03-07 10:43:38 +01004603#if defined(__clang_major__) && defined(__clang_minor__)
4604# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4605# error __int128_t does not work in CLANG before 3.2
4606# endif
4607#endif
Richard Hendersonf5401662013-02-16 12:46:59 -08004608__int128_t a;
4609__uint128_t b;
4610int main (void) {
4611 a = a + b;
4612 b = a * b;
Peter Maydell464e3672013-06-21 14:01:31 +01004613 a = a * a;
Richard Hendersonf5401662013-02-16 12:46:59 -08004614 return 0;
4615}
4616EOF
4617if compile_prog "" "" ; then
4618 int128=yes
4619fi
Richard Henderson76a347e2012-12-28 14:17:02 -08004620
Richard Henderson7ebee432016-06-29 21:10:59 -07004621#########################################
4622# See if 128-bit atomic operations are supported.
4623
4624atomic128=no
4625if test "$int128" = "yes"; then
4626 cat > $TMPC << EOF
4627int main(void)
4628{
4629 unsigned __int128 x = 0, y = 0;
4630 y = __atomic_load_16(&x, 0);
4631 __atomic_store_16(&x, y, 0);
4632 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4633 return 0;
4634}
4635EOF
4636 if compile_prog "" "" ; then
4637 atomic128=yes
4638 fi
4639fi
4640
Richard Hendersondf79b992016-09-02 12:23:57 -07004641#########################################
4642# See if 64-bit atomic operations are supported.
4643# Note that without __atomic builtins, we can only
4644# assume atomic loads/stores max at pointer size.
4645
4646cat > $TMPC << EOF
4647#include <stdint.h>
4648int main(void)
4649{
4650 uint64_t x = 0, y = 0;
4651#ifdef __ATOMIC_RELAXED
4652 y = __atomic_load_8(&x, 0);
4653 __atomic_store_8(&x, y, 0);
4654 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4655 __atomic_exchange_8(&x, y, 0);
4656 __atomic_fetch_add_8(&x, y, 0);
4657#else
4658 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4659 __sync_lock_test_and_set(&x, y);
4660 __sync_val_compare_and_swap(&x, y, 0);
4661 __sync_fetch_and_add(&x, y);
4662#endif
4663 return 0;
4664}
4665EOF
4666if compile_prog "" "" ; then
4667 atomic64=yes
4668fi
4669
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08004670########################################
4671# check if getauxval is available.
4672
4673getauxval=no
4674cat > $TMPC << EOF
4675#include <sys/auxv.h>
4676int main(void) {
4677 return getauxval(AT_HWCAP) == 0;
4678}
4679EOF
4680if compile_prog "" "" ; then
4681 getauxval=yes
4682fi
4683
John Snowfd0e6052015-03-25 18:57:39 -04004684########################################
4685# check if ccache is interfering with
4686# semantic analysis of macros
4687
John Snow5e4dfd32015-10-28 13:56:40 -04004688unset CCACHE_CPP2
John Snowfd0e6052015-03-25 18:57:39 -04004689ccache_cpp2=no
4690cat > $TMPC << EOF
4691static const int Z = 1;
4692#define fn() ({ Z; })
4693#define TAUT(X) ((X) == Z)
4694#define PAREN(X, Y) (X == Y)
4695#define ID(X) (X)
4696int main(int argc, char *argv[])
4697{
4698 int x = 0, y = 0;
4699 x = ID(x);
4700 x = fn();
4701 fn();
4702 if (PAREN(x, y)) return 0;
4703 if (TAUT(Z)) return 0;
4704 return 0;
4705}
4706EOF
4707
4708if ! compile_object "-Werror"; then
4709 ccache_cpp2=yes
4710fi
4711
John Snowb553a042015-11-03 15:43:42 -05004712#################################################
4713# clang does not support glibc + FORTIFY_SOURCE.
4714
4715if test "$fortify_source" != "no"; then
4716 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4717 fortify_source="no";
John Snowcfcc7c12015-11-12 11:29:49 -05004718 elif test -n "$cxx" &&
4719 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
John Snowb553a042015-11-03 15:43:42 -05004720 fortify_source="no";
4721 else
4722 fortify_source="yes"
4723 fi
4724fi
4725
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05304726##########################################
Jan Vesely277abf12016-04-29 13:15:23 -04004727# check if struct fsxattr is available via linux/fs.h
4728
4729have_fsxattr=no
4730cat > $TMPC << EOF
4731#include <linux/fs.h>
4732struct fsxattr foo;
4733int main(void) {
4734 return 0;
4735}
4736EOF
4737if compile_prog "" "" ; then
4738 have_fsxattr=yes
4739fi
4740
Peter Maydellb66e10e2016-06-08 18:34:32 +01004741##########################################
4742# check if rtnetlink.h exists and is useful
Laurent Vivier575b22b2016-06-02 22:14:15 +02004743have_rtnetlink=no
4744cat > $TMPC << EOF
4745#include <linux/rtnetlink.h>
4746int main(void) {
4747 return IFLA_PROTO_DOWN;
4748}
4749EOF
4750if compile_prog "" "" ; then
4751 have_rtnetlink=yes
4752fi
4753
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01004754##########################################
4755# check for usable AF_VSOCK environment
4756have_af_vsock=no
4757cat > $TMPC << EOF
4758#include <errno.h>
4759#include <sys/types.h>
4760#include <sys/socket.h>
4761#if !defined(AF_VSOCK)
4762# error missing AF_VSOCK flag
4763#endif
4764#include <linux/vm_sockets.h>
4765int main(void) {
4766 int sock, ret;
4767 struct sockaddr_vm svm;
4768 socklen_t len = sizeof(svm);
4769 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4770 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4771 if ((ret == -1) && (errno == ENOTCONN)) {
4772 return 0;
4773 }
4774 return -1;
4775}
4776EOF
4777if compile_prog "" "" ; then
4778 have_af_vsock=yes
4779fi
4780
James Clarke6969ec62016-06-06 12:02:50 +01004781#################################################
4782# Sparc implicitly links with --relax, which is
4783# incompatible with -r, so --no-relax should be
4784# given. It does no harm to give it on other
4785# platforms too.
4786
4787# Note: the prototype is needed since QEMU_CFLAGS
4788# contains -Wmissing-prototypes
4789cat > $TMPC << EOF
4790extern int foo(void);
4791int foo(void) { return 0; }
4792EOF
4793if ! compile_object ""; then
4794 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4795fi
Paolo Bonzini7ecf44a2016-11-29 16:37:20 +01004796for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4797 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4798 LD_REL_FLAGS=$i
4799 break
4800 fi
4801done
4802if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4803 feature_not_found "modules" "Cannot find how to build relocatable objects"
James Clarke6969ec62016-06-06 12:02:50 +01004804fi
4805
Jan Vesely277abf12016-04-29 13:15:23 -04004806##########################################
Christopher Covington4d043512016-12-28 15:04:33 -05004807# check for sysmacros.h
4808
4809have_sysmacros=no
4810cat > $TMPC << EOF
4811#include <sys/sysmacros.h>
4812int main(void) {
4813 return makedev(0, 0);
4814}
4815EOF
4816if compile_prog "" "" ; then
4817 have_sysmacros=yes
4818fi
4819
4820##########################################
Ashish Mittalda92c3f2017-04-03 20:48:08 -07004821# Veritas HyperScale block driver VxHS
4822# Check if libvxhs is installed
4823
4824if test "$vxhs" != "no" ; then
4825 cat > $TMPC <<EOF
4826#include <stdint.h>
4827#include <qnio/qnio_api.h>
4828
4829void *vxhs_callback;
4830
4831int main(void) {
4832 iio_init(QNIO_VERSION, vxhs_callback);
4833 return 0;
4834}
4835EOF
4836 vxhs_libs="-lvxhs -lssl"
4837 if compile_prog "" "$vxhs_libs" ; then
4838 vxhs=yes
4839 else
4840 if test "$vxhs" = "yes" ; then
4841 feature_not_found "vxhs block device" "Install libvxhs See github"
4842 fi
4843 vxhs=no
4844 fi
4845fi
4846
4847##########################################
Andreas Grapentin49e00a12017-03-14 17:59:53 +01004848# check for _Static_assert()
4849
4850have_static_assert=no
4851cat > $TMPC << EOF
4852_Static_assert(1, "success");
4853int main(void) {
4854 return 0;
4855}
4856EOF
4857if compile_prog "" "" ; then
4858 have_static_assert=yes
4859fi
4860
4861##########################################
Juan Quintelae86ecd42009-08-03 14:45:59 +02004862# End of CC checks
4863# After here, no more $cc or $ld runs
4864
Blue Swirl1d728c32012-05-01 18:45:39 +00004865if test "$gcov" = "yes" ; then
4866 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4867 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
John Snowb553a042015-11-03 15:43:42 -05004868elif test "$fortify_source" = "yes" ; then
Michal Privoznike600cdf2013-09-05 12:54:49 +02004869 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
Peter Maydellce278612015-11-09 15:14:09 +00004870elif test "$debug" = "no"; then
4871 CFLAGS="-O2 $CFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02004872fi
Juan Quintelaa316e372009-09-30 01:10:55 +02004873
Peter Lieven6542aa92014-02-03 10:26:13 +01004874##########################################
4875# Do we have libnfs
4876if test "$libnfs" != "no" ; then
Peter Lievenb7d769c2014-03-17 09:37:33 +01004877 if $pkg_config --atleast-version=1.9.3 libnfs; then
Peter Lieven6542aa92014-02-03 10:26:13 +01004878 libnfs="yes"
4879 libnfs_libs=$($pkg_config --libs libnfs)
Peter Lieven6542aa92014-02-03 10:26:13 +01004880 else
4881 if test "$libnfs" = "yes" ; then
Hu Tao8efc9362014-06-26 17:34:50 +08004882 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
Peter Lieven6542aa92014-02-03 10:26:13 +01004883 fi
4884 libnfs="no"
4885 fi
4886fi
Blue Swirl1d728c32012-05-01 18:45:39 +00004887
Peter Maydell6ca026c2012-07-18 15:10:18 +01004888# Now we've finished running tests it's OK to add -Werror to the compiler flags
4889if test "$werror" = "yes"; then
4890 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4891fi
4892
Juan Quintelae86ecd42009-08-03 14:45:59 +02004893if test "$solaris" = "no" ; then
4894 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
Juan Quintela1156c662009-08-03 14:46:00 +02004895 LDFLAGS="-Wl,--warn-common $LDFLAGS"
Juan Quintelae86ecd42009-08-03 14:45:59 +02004896 fi
4897fi
4898
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02004899# test if pod2man has --utf8 option
4900if pod2man --help | grep -q utf8; then
4901 POD2MAN="pod2man --utf8"
4902else
4903 POD2MAN="pod2man"
4904fi
4905
Blue Swirl952afb72010-09-19 08:36:34 +00004906# Use ASLR, no-SEH and DEP if available
4907if test "$mingw32" = "yes" ; then
4908 for flag in --dynamicbase --no-seh --nxcompat; do
4909 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4910 LDFLAGS="-Wl,$flag $LDFLAGS"
4911 fi
4912 done
4913fi
4914
Eduardo Habkost10ea68b2012-04-18 16:55:39 -03004915qemu_confdir=$sysconfdir$confsuffix
Fam Zhenge26110c2014-02-10 14:48:57 +08004916qemu_moddir=$libdir$confsuffix
Eduardo Habkost528ae5b2012-04-18 16:55:49 -03004917qemu_datadir=$datadir$confsuffix
Anthony Liguori834574e2013-02-20 07:43:24 -06004918qemu_localedir="$datadir/locale"
Paolo Bonzinie7b45cc2010-05-26 16:08:20 +02004919
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01004920tools=""
4921if test "$want_tools" = "yes" ; then
Paolo Bonzinica35f782010-05-26 16:08:29 +02004922 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01004923 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4924 tools="qemu-nbd\$(EXESUF) $tools"
David Marchanda75eb032014-09-08 11:17:48 +02004925 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
Daniel P. Berrange4b1c11f2012-09-10 12:26:29 +01004926 fi
4927fi
4928if test "$softmmu" = yes ; then
Meador Inge983eef52012-02-24 14:00:42 +05304929 if test "$virtfs" != no ; then
Andreas Färberaabfd882012-05-01 01:12:02 +02004930 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4931 virtfs=yes
4932 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4933 else
4934 if test "$virtfs" = yes; then
Stefan Weil3f3b5382016-04-08 18:11:13 +02004935 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
Meador Inge983eef52012-02-24 14:00:42 +05304936 fi
Andreas Färber17500372012-05-01 01:12:03 +02004937 virtfs=no
Andreas Färberaabfd882012-05-01 01:12:02 +02004938 fi
M. Mohan Kumar17bff522011-12-14 13:58:42 +05304939 fi
Michael Tokareve8ef31a2013-07-31 14:22:07 +04004940fi
Michael Roth9d6bc272015-08-26 10:49:13 -05004941
4942# Probe for guest agent support/options
4943
Michael Tokareve8ef31a2013-07-31 14:22:07 +04004944if [ "$guest_agent" != "no" ]; then
Tomoki Sekiyamab39297a2013-08-07 11:40:18 -04004945 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
Michael Rothfafcaf12015-09-07 18:47:05 -05004946 tools="qemu-ga $tools"
Michael Tokareve8ef31a2013-07-31 14:22:07 +04004947 guest_agent=yes
4948 elif [ "$guest_agent" != yes ]; then
4949 guest_agent=no
4950 else
4951 error_exit "Guest agent is not supported on this platform"
Paolo Bonzinica35f782010-05-26 16:08:29 +02004952 fi
Paolo Bonzini00c705f2012-05-29 11:40:24 +02004953fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02004954
Michael Roth9d6bc272015-08-26 10:49:13 -05004955# Guest agent Window MSI package
4956
4957if test "$guest_agent" != yes; then
4958 if test "$guest_agent_msi" = yes; then
4959 error_exit "MSI guest agent package requires guest agent enabled"
4960 fi
4961 guest_agent_msi=no
4962elif test "$mingw32" != "yes"; then
4963 if test "$guest_agent_msi" = "yes"; then
4964 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4965 fi
4966 guest_agent_msi=no
4967elif ! has wixl; then
4968 if test "$guest_agent_msi" = "yes"; then
4969 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4970 fi
4971 guest_agent_msi=no
Michael Roth1a349042015-08-26 11:14:31 -05004972else
4973 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4974 # disabled explicitly
4975 if test "$guest_agent_msi" != "no"; then
4976 guest_agent_msi=yes
4977 fi
Michael Roth9d6bc272015-08-26 10:49:13 -05004978fi
4979
Michael Roth1a349042015-08-26 11:14:31 -05004980if test "$guest_agent_msi" = "yes"; then
Michael Roth9d6bc272015-08-26 10:49:13 -05004981 if test "$guest_agent_with_vss" = "yes"; then
4982 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4983 fi
4984
4985 if test "$QEMU_GA_MANUFACTURER" = ""; then
4986 QEMU_GA_MANUFACTURER=QEMU
4987 fi
4988
4989 if test "$QEMU_GA_DISTRO" = ""; then
4990 QEMU_GA_DISTRO=Linux
4991 fi
4992
4993 if test "$QEMU_GA_VERSION" = ""; then
Stefan Weil89138852016-05-16 15:10:20 +02004994 QEMU_GA_VERSION=$(cat $source_path/VERSION)
Michael Roth9d6bc272015-08-26 10:49:13 -05004995 fi
4996
Stefan Weil89138852016-05-16 15:10:20 +02004997 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
Michael Roth9d6bc272015-08-26 10:49:13 -05004998
4999 case "$cpu" in
5000 x86_64)
5001 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5002 ;;
5003 i386)
5004 QEMU_GA_MSI_ARCH="-D Arch=32"
5005 ;;
5006 *)
5007 error_exit "CPU $cpu not supported for building installation package"
5008 ;;
5009 esac
5010fi
5011
Paolo Bonzinica35f782010-05-26 16:08:29 +02005012# Mac OS X ships with a broken assembler
5013roms=
5014if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5015 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5016 "$softmmu" = yes ; then
Peter Maydelle57218b2016-08-08 17:11:28 +01005017 # Different host OS linkers have different ideas about the name of the ELF
5018 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
5019 # variant; and Windows uses i386pe.
5020 for emu in elf_i386 elf_i386_fbsd i386pe; do
5021 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5022 ld_i386_emulation="$emu"
5023 roms="optionrom"
5024 break
5025 fi
5026 done
Paolo Bonzinica35f782010-05-26 16:08:29 +02005027fi
Andreas Färberd0384d12011-05-01 18:23:56 +02005028if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
David Gibson39ac8452011-04-01 15:15:23 +11005029 roms="$roms spapr-rtas"
5030fi
Paolo Bonzinica35f782010-05-26 16:08:29 +02005031
Christian Borntraeger9933c302013-04-23 01:23:03 +00005032if test "$cpu" = "s390x" ; then
5033 roms="$roms s390-ccw"
5034fi
5035
Richard Henderson964c6fa2013-06-21 19:10:16 -07005036# Probe for the need for relocating the user-only binary.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005037if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07005038 textseg_addr=
5039 case "$cpu" in
Richard Henderson479eb122014-04-24 08:25:03 -07005040 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5041 # ??? Rationale for choosing this address
Richard Henderson964c6fa2013-06-21 19:10:16 -07005042 textseg_addr=0x60000000
5043 ;;
5044 mips)
Richard Henderson479eb122014-04-24 08:25:03 -07005045 # A 256M aligned address, high in the address space, with enough
5046 # room for the code_gen_buffer above it before the stack.
5047 textseg_addr=0x60000000
Richard Henderson964c6fa2013-06-21 19:10:16 -07005048 ;;
5049 esac
5050 if [ -n "$textseg_addr" ]; then
5051 cat > $TMPC <<EOF
5052 int main(void) { return 0; }
5053EOF
5054 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5055 if ! compile_prog "" "$textseg_ldflags"; then
5056 # In case ld does not support -Ttext-segment, edit the default linker
5057 # script via sed to set the .text start addr. This is needed on FreeBSD
5058 # at least.
Peter Maydell92fe2ba2016-06-18 23:05:01 +01005059 if ! $ld --verbose >/dev/null 2>&1; then
5060 error_exit \
5061 "We need to link the QEMU user mode binaries at a" \
5062 "specific text address. Unfortunately your linker" \
5063 "doesn't support either the -Ttext-segment option or" \
5064 "printing the default linker script with --verbose." \
5065 "If you don't want the user mode binaries, pass the" \
5066 "--disable-user option to configure."
5067 fi
5068
Richard Henderson964c6fa2013-06-21 19:10:16 -07005069 $ld --verbose | sed \
5070 -e '1,/==================================================/d' \
5071 -e '/==================================================/,$d' \
5072 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5073 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5074 textseg_ldflags="-Wl,-T../config-host.ld"
5075 fi
5076 fi
5077fi
5078
Cole Robinson02d34f62016-05-06 14:03:09 -04005079echo_version() {
5080 if test "$1" = "yes" ; then
5081 echo "($2)"
5082 fi
5083}
5084
Jan Kiszka50e12062014-10-02 10:03:55 +02005085# prepend pixman and ftd flags after all config tests are done
5086QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5087libs_softmmu="$pixman_libs $libs_softmmu"
Gerd Hoffmann5ca93882012-11-07 11:06:23 +01005088
bellard43ce4df2003-06-09 19:53:12 +00005089echo "Install prefix $prefix"
Stefan Weil89138852016-05-16 15:10:20 +02005090echo "BIOS directory $(eval echo $qemu_datadir)"
5091echo "binary directory $(eval echo $bindir)"
5092echo "library directory $(eval echo $libdir)"
5093echo "module directory $(eval echo $qemu_moddir)"
5094echo "libexec directory $(eval echo $libexecdir)"
5095echo "include directory $(eval echo $includedir)"
5096echo "config directory $(eval echo $sysconfdir)"
bellard11d9f692004-04-02 20:55:59 +00005097if test "$mingw32" = "no" ; then
Stefan Weil89138852016-05-16 15:10:20 +02005098echo "local state directory $(eval echo $local_statedir)"
5099echo "Manual directory $(eval echo $mandir)"
bellard43ce4df2003-06-09 19:53:12 +00005100echo "ELF interp prefix $interp_prefix"
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005101else
5102echo "local state directory queried at runtime"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005103echo "Windows SDK $win_sdk"
bellard11d9f692004-04-02 20:55:59 +00005104fi
bellard5a671352003-10-01 00:13:48 +00005105echo "Source path $source_path"
bellard43ce4df2003-06-09 19:53:12 +00005106echo "C compiler $cc"
bellard83469012005-07-23 14:27:54 +00005107echo "Host C compiler $host_cc"
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005108echo "C++ compiler $cxx"
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005109echo "Objective-C compiler $objcc"
Peter Maydell45d285a2013-10-21 21:03:06 +01005110echo "ARFLAGS $ARFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005111echo "CFLAGS $CFLAGS"
Juan Quintelaa558ee12009-08-03 14:46:21 +02005112echo "QEMU_CFLAGS $QEMU_CFLAGS"
Juan Quintela0c439cb2009-08-03 14:46:01 +02005113echo "LDFLAGS $LDFLAGS"
bellard43ce4df2003-06-09 19:53:12 +00005114echo "make $make"
pbrook6a882642006-04-17 13:57:12 +00005115echo "install $install"
Blue Swirlc886edf2011-07-22 21:08:09 +00005116echo "python $python"
Brade2d88302011-09-02 16:53:28 -04005117if test "$slirp" = "yes" ; then
5118 echo "smbd $smbd"
5119fi
Fam Zheng17969262014-02-10 14:48:56 +08005120echo "module support $modules"
bellard43ce4df2003-06-09 19:53:12 +00005121echo "host CPU $cpu"
bellardde83cd02003-06-15 20:25:43 +00005122echo "host big endian $bigendian"
bellard97a847b2003-08-10 21:36:04 +00005123echo "target list $target_list"
aurel32ade25b02009-04-16 09:58:41 +00005124echo "tcg debug enabled $debug_tcg"
bellard43ce4df2003-06-09 19:53:12 +00005125echo "gprof enabled $gprof"
aliguori03b4fe72008-10-07 19:16:17 +00005126echo "sparse enabled $sparse"
aliguori1625af82009-04-05 17:41:02 +00005127echo "strip binaries $strip_opt"
bellard05c2a3e2006-02-08 22:39:17 +00005128echo "profiler $profiler"
bellard43ce4df2003-06-09 19:53:12 +00005129echo "static build $static"
bellard5b0753e2005-03-01 21:37:28 +00005130if test "$darwin" = "yes" ; then
5131 echo "Cocoa support $cocoa"
5132fi
Gerd Hoffmanne2134eb2012-09-25 16:04:58 +02005133echo "pixman $pixman"
Stefan Weil89138852016-05-16 15:10:20 +02005134echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5135echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005136echo "GTK GL support $gtk_gl"
Stefan Weil89138852016-05-16 15:10:20 +02005137echo "VTE support $vte $(echo_version $vte $vteversion)"
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005138echo "TLS priority $tls_priority"
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005139echo "GNUTLS support $gnutls"
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005140echo "GNUTLS rnd $gnutls_rnd"
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005141echo "libgcrypt $gcrypt"
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005142echo "libgcrypt kdf $gcrypt_kdf"
Stefan Weil89138852016-05-16 15:10:20 +02005143echo "nettle $nettle $(echo_version $nettle $nettle_version)"
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005144echo "nettle kdf $nettle_kdf"
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005145echo "libtasn1 $tasn1"
balrog4d3b6f62008-02-10 16:33:14 +00005146echo "curses support $curses"
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005147echo "virgl support $virglrenderer"
Alexander Graf769ce762009-05-11 17:41:42 +02005148echo "curl support $curl"
bellard67b915a2004-03-31 23:37:16 +00005149echo "mingw32 support $mingw32"
malc0c58ac12008-06-25 21:04:05 +00005150echo "Audio drivers $audio_drv_list"
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005151echo "Block whitelist (rw) $block_drv_rw_whitelist"
5152echo "Block whitelist (ro) $block_drv_ro_whitelist"
Meador Inge983eef52012-02-24 14:00:42 +05305153echo "VirtFS support $virtfs"
Jes Sorensen821601e2011-03-16 13:33:36 +01005154echo "VNC support $vnc"
5155if test "$vnc" = "yes" ; then
Jes Sorensen821601e2011-03-16 13:33:36 +01005156 echo "VNC SASL support $vnc_sasl"
5157 echo "VNC JPEG support $vnc_jpeg"
5158 echo "VNC PNG support $vnc_png"
Jes Sorensen821601e2011-03-16 13:33:36 +01005159fi
blueswir131422552007-04-16 18:27:06 +00005160if test -n "$sparc_cpu"; then
5161 echo "Target Sparc Arch $sparc_cpu"
5162fi
aliguorie37630c2009-04-22 15:19:10 +00005163echo "xen support $xen"
Paul Durrant3996e852015-01-20 11:06:19 +00005164if test "$xen" = "yes" ; then
5165 echo "xen ctrl version $xen_ctrl_version"
Ian Campbell64a7ad62016-01-15 13:23:44 +00005166 echo "pv dom build $xen_pv_domain_build"
Paul Durrant3996e852015-01-20 11:06:19 +00005167fi
aurel322e4d9fb2008-04-08 06:01:02 +00005168echo "brlapi support $brlapi"
Juan Quintelaa20a6f42009-08-12 18:29:50 +02005169echo "bluez support $bluez"
Juan Quintelaa25dba12009-08-12 18:29:52 +02005170echo "Documentation $docs"
Avi Kivity40d64442011-11-15 20:12:17 +02005171echo "PIE $pie"
ths8a16d272008-07-19 09:56:24 +00005172echo "vde support $vde"
Vincenzo Maffione58952132013-11-06 11:44:06 +01005173echo "netmap support $netmap"
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005174echo "Linux AIO support $linux_aio"
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005175echo "ATTR/XATTR support $attr"
ths77755342008-11-27 15:45:16 +00005176echo "Install blobs $blobs"
Juan Quintelab31a0272009-08-12 18:29:56 +02005177echo "KVM support $kvm"
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01005178echo "HAX support $hax"
Michael R. Hines2da776d2013-07-22 10:01:54 -04005179echo "RDMA support $rdma"
Stefan Weil9195b2c2011-10-19 07:07:18 +02005180echo "TCG interpreter $tcg_interpreter"
aurel32f652e6a2008-12-16 10:43:48 +00005181echo "fdt support $fdt"
aliguoriceb42de2009-04-07 18:43:28 +00005182echo "preadv support $preadv"
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005183echo "fdatasync $fdatasync"
Andreas Färbere78815a2010-09-25 11:26:05 +00005184echo "madvise $madvise"
5185echo "posix_madvise $posix_madvise"
Corey Bryant47e98652012-01-26 09:42:26 -05005186echo "libcap-ng support $cap_ng"
Michael S. Tsirkind5970052010-03-17 13:08:17 +02005187echo "vhost-net support $vhost_net"
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005188echo "vhost-scsi support $vhost_scsi"
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005189echo "vhost-vsock support $vhost_vsock"
Lluís Vilanova5b808272014-05-27 15:02:14 +02005190echo "Trace backends $trace_backends"
Marc-André Lureau713572a2015-12-10 01:47:46 +01005191if have_backend "simple"; then
Prerna Saxena9410b562010-07-13 09:26:32 +01005192echo "Trace output file $trace_file-<pid>"
Stefan Weile00e36f2014-03-14 21:09:10 +01005193fi
Stefan Weil89138852016-05-16 15:10:20 +02005194echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005195echo "rbd support $rbd"
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005196echo "xfsctl support $xfs"
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005197echo "smartcard support $smartcard"
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005198echo "libusb $libusb"
Hans de Goede69354a82011-07-19 11:04:10 +02005199echo "usb net redir $usb_redir"
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005200echo "OpenGL support $opengl"
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005201echo "OpenGL dmabufs $opengl_dmabuf"
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005202echo "libiscsi support $libiscsi"
Peter Lieven6542aa92014-02-03 10:26:13 +01005203echo "libnfs support $libnfs"
Michael Rothd138cee2011-08-01 14:52:57 -05005204echo "build guest agent $guest_agent"
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005205echo "QGA VSS support $guest_agent_with_vss"
Michael Roth50cbebb2015-07-07 18:10:09 -05005206echo "QGA w32 disk info $guest_agent_ntddscsi"
Michael Roth4c875d82015-08-25 15:46:18 -05005207echo "QGA MSI support $guest_agent_msi"
Eduardo Otubof7945732012-08-14 18:44:05 -03005208echo "seccomp support $seccomp"
Peter Maydell7c2acc72013-04-08 12:11:27 +01005209echo "coroutine backend $coroutine"
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005210echo "coroutine pool $coroutine_pool"
Peter Lieven7d992e42016-09-27 11:58:45 +02005211echo "debug stack usage $debug_stack_usage"
Bharata B Raoeb100392012-09-24 14:42:45 +05305212echo "GlusterFS support $glusterfs"
Blue Swirl1d728c32012-05-01 18:45:39 +00005213echo "gcov $gcov_tool"
5214echo "gcov enabled $gcov"
Stefan Bergerab214c22013-02-27 12:47:52 -05005215echo "TPM support $tpm"
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005216echo "libssh2 support $libssh2"
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005217echo "TPM passthrough $tpm_passthrough"
Paolo Bonzini3556c232013-05-10 14:16:40 +02005218echo "QOM debugging $qom_cast_debug"
qiaonuohan607dacd2014-02-18 14:11:30 +08005219echo "lzo support $lzo"
5220echo "snappy support $snappy"
Peter Wu6b383c02015-01-06 18:48:14 +01005221echo "bzip2 support $bzip2"
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08005222echo "NUMA host support $numa"
Fam Zheng2847b462015-03-26 11:03:12 +08005223echo "tcmalloc support $tcmalloc"
Alexandre Derumier7b01cb92015-06-19 12:56:58 +02005224echo "jemalloc support $jemalloc"
Liang Li99f2dbd2016-03-08 13:53:16 +08005225echo "avx2 optimization $avx2_opt"
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005226echo "replication support $replication"
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005227echo "VxHS block device $vxhs"
bellard67b915a2004-03-31 23:37:16 +00005228
Stefan Weil1ba16962011-07-29 22:40:45 +02005229if test "$sdl_too_old" = "yes"; then
bellard24b55b92005-03-01 22:30:41 +00005230echo "-> Your SDL version is too old - please upgrade to have SDL support"
bellarde8cd23d2003-06-25 16:08:13 +00005231fi
bellard97a847b2003-08-10 21:36:04 +00005232
Peter Maydell898be3e2017-03-21 14:31:57 +00005233if test "$supported_cpu" = "no"; then
5234 echo
5235 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5236 echo
5237 echo "CPU host architecture $cpu support is not currently maintained."
5238 echo "The QEMU project intends to remove support for this host CPU in"
5239 echo "a future release if nobody volunteers to maintain it and to"
5240 echo "provide a build host for our continuous integration setup."
5241 echo "configure has succeeded and you can continue to build, but"
5242 echo "if you care about QEMU on this platform you should contact"
5243 echo "us upstream at qemu-devel@nongnu.org."
5244fi
5245
5246if test "$supported_os" = "no"; then
5247 echo
5248 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5249 echo
Peter Maydellc50126a2017-03-21 18:08:49 +00005250 echo "Host OS $targetos support is not currently maintained."
5251 echo "The QEMU project intends to remove support for this host OS in"
Peter Maydell898be3e2017-03-21 14:31:57 +00005252 echo "a future release if nobody volunteers to maintain it and to"
5253 echo "provide a build host for our continuous integration setup."
5254 echo "configure has succeeded and you can continue to build, but"
5255 echo "if you care about QEMU on this platform you should contact"
5256 echo "us upstream at qemu-devel@nongnu.org."
5257fi
5258
Juan Quintela98ec69a2009-07-16 18:34:18 +02005259config_host_mak="config-host.mak"
bellard97a847b2003-08-10 21:36:04 +00005260
Stefan Weildbd99ae2013-01-01 18:33:44 +01005261echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5262
Juan Quintela98ec69a2009-07-16 18:34:18 +02005263echo "# Automatically generated by configure - do not modify" > $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005264echo >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005265
Paolo Bonzinie6c3b0f2010-10-21 10:18:35 +02005266echo all: >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005267echo "prefix=$prefix" >> $config_host_mak
5268echo "bindir=$bindir" >> $config_host_mak
Alon Levy3aa5d2b2011-05-15 12:08:59 +03005269echo "libdir=$libdir" >> $config_host_mak
Michael Tokarev8bf188a2012-06-07 01:11:00 +04005270echo "libexecdir=$libexecdir" >> $config_host_mak
Alon Levy0f94d6d2011-06-27 11:58:20 +02005271echo "includedir=$includedir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005272echo "mandir=$mandir" >> $config_host_mak
Paolo Bonzini99d7cc72010-05-26 16:08:24 +02005273echo "sysconfdir=$sysconfdir" >> $config_host_mak
Eduardo Habkost22d07032012-04-18 16:55:42 -03005274echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
Eduardo Habkost9afa52c2012-04-18 16:55:46 -03005275echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5276echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
Fam Zhenge26110c2014-02-10 14:48:57 +08005277echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
Laszlo Ersek5a699bb2013-05-18 06:31:50 +02005278if test "$mingw32" = "no" ; then
5279 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5280fi
Michael Tokarevf354b1a2012-10-21 22:52:54 +04005281echo "qemu_helperdir=$libexecdir" >> $config_host_mak
Gerd Hoffmannf9943cd2013-01-04 10:15:53 +01005282echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5283echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
Anthony Liguori834574e2013-02-20 07:43:24 -06005284echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
Paolo Bonzinif544a482013-04-17 16:26:44 +02005285echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005286
Juan Quintela98ec69a2009-07-16 18:34:18 +02005287echo "ARCH=$ARCH" >> $config_host_mak
Paolo Bonzini727e5282013-04-17 16:26:43 +02005288
aurel32f8393942009-04-13 18:45:38 +00005289if test "$debug_tcg" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005290 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
aurel32f8393942009-04-13 18:45:38 +00005291fi
aliguori1625af82009-04-05 17:41:02 +00005292if test "$strip_opt" = "yes" ; then
Hollis Blanchard52ba7842010-08-04 17:21:34 -07005293 echo "STRIP=${strip}" >> $config_host_mak
aliguori1625af82009-04-05 17:41:02 +00005294fi
bellard7d132992003-03-06 23:23:54 +00005295if test "$bigendian" = "yes" ; then
Juan Quintelae2542fe2009-07-27 16:13:06 +02005296 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005297fi
bellard67b915a2004-03-31 23:37:16 +00005298if test "$mingw32" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005299 echo "CONFIG_WIN32=y" >> $config_host_mak
Stefan Weil89138852016-05-16 15:10:20 +02005300 rc_version=$(cat $source_path/VERSION)
Blue Swirl9fe6de92010-09-26 16:07:57 +00005301 version_major=${rc_version%%.*}
5302 rc_version=${rc_version#*.}
5303 version_minor=${rc_version%%.*}
5304 rc_version=${rc_version#*.}
5305 version_subminor=${rc_version%%.*}
5306 version_micro=0
5307 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5308 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005309 if test "$guest_agent_with_vss" = "yes" ; then
5310 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
Michael Rothf33ca812015-08-26 16:19:41 -05005311 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
Tomoki Sekiyamad9840e22013-08-07 11:40:03 -04005312 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5313 fi
Michael Roth50cbebb2015-07-07 18:10:09 -05005314 if test "$guest_agent_ntddscsi" = "yes" ; then
5315 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5316 fi
Michael Roth1a349042015-08-26 11:14:31 -05005317 if test "$guest_agent_msi" = "yes"; then
Yossi Hindin9dacf322015-05-06 14:57:40 +03005318 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5319 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5320 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5321 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5322 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5323 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5324 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5325 fi
pbrook210fa552007-02-27 21:04:49 +00005326else
Juan Quintela35f4df22009-07-27 16:13:07 +02005327 echo "CONFIG_POSIX=y" >> $config_host_mak
bellard67b915a2004-03-31 23:37:16 +00005328fi
blueswir1128ab2f2008-08-15 18:33:42 +00005329
Mark McLoughlindffcb712009-10-22 17:49:11 +01005330if test "$linux" = "yes" ; then
5331 echo "CONFIG_LINUX=y" >> $config_host_mak
5332fi
5333
bellard83fb7ad2004-07-05 21:25:26 +00005334if test "$darwin" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005335 echo "CONFIG_DARWIN=y" >> $config_host_mak
bellard83fb7ad2004-07-05 21:25:26 +00005336fi
malcb29fe3e2008-11-18 01:42:22 +00005337
5338if test "$aix" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005339 echo "CONFIG_AIX=y" >> $config_host_mak
malcb29fe3e2008-11-18 01:42:22 +00005340fi
5341
bellardec530c82006-04-25 22:36:06 +00005342if test "$solaris" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005343 echo "CONFIG_SOLARIS=y" >> $config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02005344 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
ths0475a5c2007-04-01 18:54:44 +00005345 if test "$needs_libsunmath" = "yes" ; then
Juan Quintela75b5a692009-07-27 16:13:23 +02005346 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
ths0475a5c2007-04-01 18:54:44 +00005347 fi
bellardec530c82006-04-25 22:36:06 +00005348fi
Andreas Färber179cf402010-09-20 00:50:43 +02005349if test "$haiku" = "yes" ; then
5350 echo "CONFIG_HAIKU=y" >> $config_host_mak
5351fi
bellard97a847b2003-08-10 21:36:04 +00005352if test "$static" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005353 echo "CONFIG_STATIC=y" >> $config_host_mak
bellard97a847b2003-08-10 21:36:04 +00005354fi
Stefan Weil1ba16962011-07-29 22:40:45 +02005355if test "$profiler" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005356 echo "CONFIG_PROFILER=y" >> $config_host_mak
bellard05c2a3e2006-02-08 22:39:17 +00005357fi
bellardc20709a2004-04-21 23:27:19 +00005358if test "$slirp" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005359 echo "CONFIG_SLIRP=y" >> $config_host_mak
Brade2d88302011-09-02 16:53:28 -04005360 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
bellardc20709a2004-04-21 23:27:19 +00005361fi
ths8a16d272008-07-19 09:56:24 +00005362if test "$vde" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005363 echo "CONFIG_VDE=y" >> $config_host_mak
ths8a16d272008-07-19 09:56:24 +00005364fi
Vincenzo Maffione58952132013-11-06 11:44:06 +01005365if test "$netmap" = "yes" ; then
5366 echo "CONFIG_NETMAP=y" >> $config_host_mak
5367fi
Gonglei015a33b2014-07-01 20:58:08 +08005368if test "$l2tpv3" = "yes" ; then
5369 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5370fi
Corey Bryant47e98652012-01-26 09:42:26 -05005371if test "$cap_ng" = "yes" ; then
5372 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5373fi
Juan Quintela2358a492009-07-27 16:13:25 +02005374echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005375for drv in $audio_drv_list; do
Stefan Weil89138852016-05-16 15:10:20 +02005376 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
Juan Quintela98ec69a2009-07-16 18:34:18 +02005377 echo "$def=y" >> $config_host_mak
malc0c58ac12008-06-25 21:04:05 +00005378done
Juan Quintela67f86e82009-08-03 14:46:59 +02005379if test "$audio_pt_int" = "yes" ; then
5380 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5381fi
malcd5631632009-10-10 01:13:41 +04005382if test "$audio_win_int" = "yes" ; then
5383 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5384fi
Fam Zhengb64ec4e2013-05-29 19:35:40 +08005385echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5386echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
Jes Sorensen821601e2011-03-16 13:33:36 +01005387if test "$vnc" = "yes" ; then
5388 echo "CONFIG_VNC=y" >> $config_host_mak
5389fi
aliguori2f9606b2009-03-06 20:27:28 +00005390if test "$vnc_sasl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005391 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
aliguori2f9606b2009-03-06 20:27:28 +00005392fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005393if test "$vnc_jpeg" = "yes" ; then
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005394 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
Corentin Chary2f6f5c72010-07-07 20:57:49 +02005395fi
Jes Sorensen821601e2011-03-16 13:33:36 +01005396if test "$vnc_png" = "yes" ; then
Corentin Charyefe556a2010-07-07 20:57:56 +02005397 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
Corentin Charyefe556a2010-07-07 20:57:56 +02005398fi
aliguori76655d62009-03-06 20:27:37 +00005399if test "$fnmatch" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005400 echo "CONFIG_FNMATCH=y" >> $config_host_mak
aliguori76655d62009-03-06 20:27:37 +00005401fi
Christoph Hellwigdce512d2010-12-17 11:41:15 +01005402if test "$xfs" = "yes" ; then
5403 echo "CONFIG_XFS=y" >> $config_host_mak
5404fi
Stefan Weil89138852016-05-16 15:10:20 +02005405qemu_version=$(head $source_path/VERSION)
Juan Quintela98ec69a2009-07-16 18:34:18 +02005406echo "VERSION=$qemu_version" >>$config_host_mak
Juan Quintela2358a492009-07-27 16:13:25 +02005407echo "PKGVERSION=$pkgversion" >>$config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005408echo "SRC_PATH=$source_path" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005409echo "TARGET_DIRS=$target_list" >> $config_host_mak
Juan Quintelaa25dba12009-08-12 18:29:52 +02005410if [ "$docs" = "yes" ] ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005411 echo "BUILD_DOCS=yes" >> $config_host_mak
pbrookcc8ae6d2006-04-23 17:57:59 +00005412fi
Fam Zheng17969262014-02-10 14:48:56 +08005413if test "$modules" = "yes"; then
Fam Zhenge26110c2014-02-10 14:48:57 +08005414 # $shacmd can generate a hash started with digit, which the compiler doesn't
5415 # like as an symbol. So prefix it with an underscore
Stefan Weil89138852016-05-16 15:10:20 +02005416 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08005417 echo "CONFIG_MODULES=y" >> $config_host_mak
5418fi
Juan Quintela1ac88f22009-07-27 16:13:14 +02005419if test "$sdl" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005420 echo "CONFIG_SDL=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005421 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
Juan Quintela1ac88f22009-07-27 16:13:14 +02005422 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005423fi
5424if test "$cocoa" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005425 echo "CONFIG_COCOA=y" >> $config_host_mak
balrog4d3b6f62008-02-10 16:33:14 +00005426fi
5427if test "$curses" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005428 echo "CONFIG_CURSES=y" >> $config_host_mak
bellard49ecc3f2007-11-07 19:25:15 +00005429fi
Riku Voipioebc996f2009-04-21 15:01:51 +03005430if test "$utimens" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005431 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
Riku Voipioebc996f2009-04-21 15:01:51 +03005432fi
Riku Voipio099d6b02009-05-05 12:10:04 +03005433if test "$pipe2" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005434 echo "CONFIG_PIPE2=y" >> $config_host_mak
Riku Voipio099d6b02009-05-05 12:10:04 +03005435fi
Kevin Wolf40ff6d72009-12-02 12:24:42 +01005436if test "$accept4" = "yes" ; then
5437 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5438fi
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305439if test "$splice" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005440 echo "CONFIG_SPLICE=y" >> $config_host_mak
vibisreenivasan3ce34df2009-05-16 18:32:41 +05305441fi
Riku Voipioc2882b92009-08-12 15:08:24 +03005442if test "$eventfd" = "yes" ; then
5443 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5444fi
Marc-André Lureau751bcc32015-10-09 17:17:16 +02005445if test "$memfd" = "yes" ; then
5446 echo "CONFIG_MEMFD=y" >> $config_host_mak
5447fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005448if test "$fallocate" = "yes" ; then
5449 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5450fi
Kusanagi Kouichi3d4fa432013-01-14 16:26:52 +01005451if test "$fallocate_punch_hole" = "yes" ; then
5452 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5453fi
Denis V. Lunevb953f072015-01-30 11:42:14 +03005454if test "$fallocate_zero_range" = "yes" ; then
5455 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5456fi
Kevin Wolfed911432014-09-29 17:12:59 +02005457if test "$posix_fallocate" = "yes" ; then
5458 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5459fi
Peter Maydellc727f472011-01-06 11:05:10 +00005460if test "$sync_file_range" = "yes" ; then
5461 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5462fi
Peter Maydelldace20d2011-01-10 13:11:24 +00005463if test "$fiemap" = "yes" ; then
5464 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5465fi
Ulrich Hechtd0927932009-09-17 20:22:14 +03005466if test "$dup3" = "yes" ; then
5467 echo "CONFIG_DUP3=y" >> $config_host_mak
5468fi
Alex Bligh4e0c6522013-08-21 16:02:43 +01005469if test "$ppoll" = "yes" ; then
5470 echo "CONFIG_PPOLL=y" >> $config_host_mak
5471fi
Alex Blighcd758dd2013-08-21 16:02:44 +01005472if test "$prctl_pr_set_timerslack" = "yes" ; then
5473 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5474fi
Peter Maydell3b6edd12011-02-15 18:35:05 +00005475if test "$epoll" = "yes" ; then
5476 echo "CONFIG_EPOLL=y" >> $config_host_mak
5477fi
5478if test "$epoll_create1" = "yes" ; then
5479 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5480fi
Peter Maydella8fd1ab2013-02-08 07:31:55 +00005481if test "$sendfile" = "yes" ; then
5482 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5483fi
Riku Voipio51834342014-06-22 11:25:42 +01005484if test "$timerfd" = "yes" ; then
5485 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5486fi
Riku Voipio9af5c902014-08-12 15:58:57 +03005487if test "$setns" = "yes" ; then
5488 echo "CONFIG_SETNS=y" >> $config_host_mak
5489fi
Aleksandar Markovic38860a02016-10-10 13:23:29 +02005490if test "$clock_adjtime" = "yes" ; then
5491 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5492fi
Aleksandar Markovic5a03cd02016-10-10 13:23:30 +02005493if test "$syncfs" = "yes" ; then
5494 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5495fi
aurel323b3f24a2009-04-15 16:12:13 +00005496if test "$inotify" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005497 echo "CONFIG_INOTIFY=y" >> $config_host_mak
aurel323b3f24a2009-04-15 16:12:13 +00005498fi
Riku Voipioc05c7a72010-03-26 15:25:11 +00005499if test "$inotify1" = "yes" ; then
5500 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5501fi
Juan Quintela6ae9a1f2009-08-03 14:45:58 +02005502if test "$byteswap_h" = "yes" ; then
5503 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5504fi
5505if test "$bswap_h" = "yes" ; then
5506 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5507fi
Alexander Graf769ce762009-05-11 17:41:42 +02005508if test "$curl" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005509 echo "CONFIG_CURL=m" >> $config_host_mak
Juan Quintelab1d5a272009-08-03 14:46:05 +02005510 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005511 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
Alexander Graf769ce762009-05-11 17:41:42 +02005512fi
aurel322e4d9fb2008-04-08 06:01:02 +00005513if test "$brlapi" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005514 echo "CONFIG_BRLAPI=y" >> $config_host_mak
aurel322e4d9fb2008-04-08 06:01:02 +00005515fi
balrogfb599c92008-09-28 23:49:55 +00005516if test "$bluez" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005517 echo "CONFIG_BLUEZ=y" >> $config_host_mak
Juan Quintelaef7635e2009-07-27 16:12:46 +02005518 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
balrogfb599c92008-09-28 23:49:55 +00005519fi
Dr. David Alan Gilbertd46f7c92015-06-24 10:45:42 +01005520if test "$glib_subprocess" = "yes" ; then
Michael S. Tsirkin9d414012014-09-18 20:46:45 +03005521 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5522fi
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005523if test "$gtk" = "yes" ; then
5524 echo "CONFIG_GTK=y" >> $config_host_mak
Cole Robinsona3f4d632014-04-24 13:35:52 -04005525 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005526 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005527 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
Gerd Hoffmann925a0402015-05-26 12:26:21 +02005528 if test "$gtk_gl" = "yes" ; then
5529 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5530 fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005531fi
Daniel P. Berrangea1c5e942016-06-06 10:05:06 +01005532echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
Daniel P. Berrangeddbb0d02015-07-01 18:10:29 +01005533if test "$gnutls" = "yes" ; then
5534 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5535fi
Daniel P. Berrangeb917da42015-10-31 14:39:52 +09005536if test "$gnutls_rnd" = "yes" ; then
5537 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5538fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005539if test "$gcrypt" = "yes" ; then
5540 echo "CONFIG_GCRYPT=y" >> $config_host_mak
Longpeng(Mike)1f923c72016-12-13 18:42:55 +08005541 if test "$gcrypt_hmac" = "yes" ; then
5542 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5543 fi
Daniel P. Berrange37788f22015-10-14 13:14:04 +01005544 if test "$gcrypt_kdf" = "yes" ; then
5545 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5546 fi
Daniel P. Berrange62893b62015-07-01 18:10:33 +01005547fi
Daniel P. Berrange91bfcdb2015-10-16 16:36:53 +01005548if test "$nettle" = "yes" ; then
5549 echo "CONFIG_NETTLE=y" >> $config_host_mak
Radim Krčmářbecaeb72015-07-10 19:18:00 +02005550 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
Daniel P. Berrangefff2f982016-03-29 15:47:51 +01005551 if test "$nettle_kdf" = "yes" ; then
5552 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5553 fi
Daniel P. Berrangeed754742015-07-01 18:10:34 +01005554fi
Daniel P. Berrange9a2fd432015-04-13 14:01:39 +01005555if test "$tasn1" = "yes" ; then
5556 echo "CONFIG_TASN1=y" >> $config_host_mak
5557fi
Daniel P. Berrange559607e2015-02-27 16:19:33 +00005558if test "$have_ifaddrs_h" = "yes" ; then
5559 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5560fi
Eric Blake6b39b062016-10-11 10:46:23 -05005561if test "$have_broken_size_max" = "yes" ; then
5562 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5563fi
Jan Vesely277abf12016-04-29 13:15:23 -04005564
5565# Work around a system header bug with some kernel/XFS header
5566# versions where they both try to define 'struct fsxattr':
5567# xfs headers will not try to redefine structs from linux headers
5568# if this macro is set.
5569if test "$have_fsxattr" = "yes" ; then
5570 echo "HAVE_FSXATTR=y" >> $config_host_mak
5571fi
Stefan Weilbbbf9bf2014-02-19 07:04:34 +01005572if test "$vte" = "yes" ; then
5573 echo "CONFIG_VTE=y" >> $config_host_mak
Anthony Liguoria4ccabc2013-02-20 07:43:20 -06005574 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5575fi
Gerd Hoffmann9d9e1522014-07-11 12:51:43 +02005576if test "$virglrenderer" = "yes" ; then
5577 echo "CONFIG_VIRGL=y" >> $config_host_mak
5578 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5579 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5580fi
aliguorie37630c2009-04-22 15:19:10 +00005581if test "$xen" = "yes" ; then
Jan Kiszka6dbd5882011-06-21 22:59:07 +02005582 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
Anthony PERARDd5b93dd2011-02-25 16:20:34 +00005583 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
Ian Campbell64a7ad62016-01-15 13:23:44 +00005584 if test "$xen_pv_domain_build" = "yes" ; then
5585 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5586 fi
aliguorie37630c2009-04-22 15:19:10 +00005587fi
Christoph Hellwig5c6c3a62009-08-20 16:58:35 +02005588if test "$linux_aio" = "yes" ; then
5589 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5590fi
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005591if test "$attr" = "yes" ; then
5592 echo "CONFIG_ATTR=y" >> $config_host_mak
5593fi
Avi Kivity4f26f2b2011-11-09 14:44:52 +02005594if test "$libattr" = "yes" ; then
5595 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5596fi
Meador Inge983eef52012-02-24 14:00:42 +05305597if test "$virtfs" = "yes" ; then
5598 echo "CONFIG_VIRTFS=y" >> $config_host_mak
Venkateswararao Jujjuri (JV)758e8e32010-06-14 13:34:41 -07005599fi
Nicholas Bellinger5e9be922013-03-29 01:08:16 +00005600if test "$vhost_scsi" = "yes" ; then
5601 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5602fi
Nikolay Nikolaev03ce5742014-06-10 13:02:16 +03005603if test "$vhost_net" = "yes" ; then
5604 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5605fi
Stefan Hajnoczifc0b9b02016-08-16 13:27:22 +01005606if test "$vhost_vsock" = "yes" ; then
5607 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5608fi
ths77755342008-11-27 15:45:16 +00005609if test "$blobs" = "yes" ; then
Juan Quintela98ec69a2009-07-16 18:34:18 +02005610 echo "INSTALL_BLOBS=yes" >> $config_host_mak
ths77755342008-11-27 15:45:16 +00005611fi
aliguoribf9298b2008-12-05 20:05:26 +00005612if test "$iovec" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005613 echo "CONFIG_IOVEC=y" >> $config_host_mak
aliguoribf9298b2008-12-05 20:05:26 +00005614fi
aliguoriceb42de2009-04-07 18:43:28 +00005615if test "$preadv" = "yes" ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005616 echo "CONFIG_PREADV=y" >> $config_host_mak
aliguoriceb42de2009-04-07 18:43:28 +00005617fi
aurel32f652e6a2008-12-16 10:43:48 +00005618if test "$fdt" = "yes" ; then
Juan Quintela3f0855b2009-07-27 16:12:52 +02005619 echo "CONFIG_FDT=y" >> $config_host_mak
aurel32f652e6a2008-12-16 10:43:48 +00005620fi
Marcelo Tosattidcc38d12010-10-11 15:31:15 -03005621if test "$signalfd" = "yes" ; then
5622 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5623fi
Stefan Weil9195b2c2011-10-19 07:07:18 +02005624if test "$tcg_interpreter" = "yes" ; then
5625 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5626fi
Blue Swirl5f6b9e82009-09-20 06:56:26 +00005627if test "$fdatasync" = "yes" ; then
5628 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5629fi
Andreas Färbere78815a2010-09-25 11:26:05 +00005630if test "$madvise" = "yes" ; then
5631 echo "CONFIG_MADVISE=y" >> $config_host_mak
5632fi
5633if test "$posix_madvise" = "yes" ; then
5634 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5635fi
bellard97a847b2003-08-10 21:36:04 +00005636
Gerd Hoffmanncd4ec0b2010-03-24 10:26:51 +01005637if test "$spice" = "yes" ; then
5638 echo "CONFIG_SPICE=y" >> $config_host_mak
5639fi
5640
Marc-André Lureau7b02f542015-08-30 11:48:40 +02005641if test "$smartcard" = "yes" ; then
5642 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
Robert Relyea111a38b2010-11-28 16:36:38 +02005643fi
5644
Gerd Hoffmann2b2325f2012-11-30 16:02:11 +01005645if test "$libusb" = "yes" ; then
5646 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5647fi
5648
Hans de Goede69354a82011-07-19 11:04:10 +02005649if test "$usb_redir" = "yes" ; then
5650 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5651fi
5652
Gerd Hoffmannda076ff2014-11-20 09:49:44 +01005653if test "$opengl" = "yes" ; then
5654 echo "CONFIG_OPENGL=y" >> $config_host_mak
5655 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
Gerd Hoffmann014cb152015-12-03 12:56:34 +01005656 if test "$opengl_dmabuf" = "yes" ; then
5657 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5658 fi
Michael Walle20ff0752011-03-07 23:32:39 +01005659fi
5660
Liang Li99f2dbd2016-03-08 13:53:16 +08005661if test "$avx2_opt" = "yes" ; then
5662 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5663fi
5664
qiaonuohan607dacd2014-02-18 14:11:30 +08005665if test "$lzo" = "yes" ; then
5666 echo "CONFIG_LZO=y" >> $config_host_mak
5667fi
5668
5669if test "$snappy" = "yes" ; then
5670 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5671fi
5672
Peter Wu6b383c02015-01-06 18:48:14 +01005673if test "$bzip2" = "yes" ; then
5674 echo "CONFIG_BZIP2=y" >> $config_host_mak
5675 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5676fi
5677
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005678if test "$libiscsi" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005679 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005680 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5681 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
Ronnie Sahlbergc589b242011-10-25 19:24:24 +11005682fi
5683
Peter Lieven6542aa92014-02-03 10:26:13 +01005684if test "$libnfs" = "yes" ; then
Colin Lord4be48792016-08-12 09:27:04 -04005685 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5686 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
Peter Lieven6542aa92014-02-03 10:26:13 +01005687fi
5688
Eduardo Otubof7945732012-08-14 18:44:05 -03005689if test "$seccomp" = "yes"; then
5690 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5691fi
5692
bellard83fb7ad2004-07-05 21:25:26 +00005693# XXX: suppress that
bellard7d3505c2004-05-12 19:32:15 +00005694if [ "$bsd" = "yes" ] ; then
Juan Quintela2358a492009-07-27 16:13:25 +02005695 echo "CONFIG_BSD=y" >> $config_host_mak
bellard7d3505c2004-05-12 19:32:15 +00005696fi
5697
Daniel P. Berrange4d9310f2015-09-22 15:13:26 +01005698if test "$localtime_r" = "yes" ; then
5699 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5700fi
Paolo Bonzini3556c232013-05-10 14:16:40 +02005701if test "$qom_cast_debug" = "yes" ; then
5702 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5703fi
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005704if test "$rbd" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005705 echo "CONFIG_RBD=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005706 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5707 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
Christian Brunnerf27aaf42010-12-06 20:53:01 +01005708fi
Anthony Liguori20ff6c82009-12-09 12:59:36 -06005709
Peter Maydell7c2acc72013-04-08 12:11:27 +01005710echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
Stefan Hajnoczi70c60c02013-09-11 16:42:35 +02005711if test "$coroutine_pool" = "yes" ; then
5712 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5713else
5714 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5715fi
Aneesh Kumar K.Vd0e2fce2011-06-09 23:11:06 +05305716
Peter Lieven7d992e42016-09-27 11:58:45 +02005717if test "$debug_stack_usage" = "yes" ; then
5718 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5719fi
5720
Aneesh Kumar K.Vd2042372011-10-12 19:11:24 +05305721if test "$open_by_handle_at" = "yes" ; then
5722 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5723fi
5724
Harsh Prateek Borae06a7652011-10-12 19:11:25 +05305725if test "$linux_magic_h" = "yes" ; then
5726 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5727fi
5728
Gerd Hoffmanncc6e3ca2013-01-09 10:17:07 +01005729if test "$pragma_diagnostic_available" = "yes" ; then
5730 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
Peter Maydell06d71fa2012-07-30 16:13:07 +01005731fi
5732
Kevin Wolf3f4349d2012-06-29 13:40:27 +02005733if test "$valgrind_h" = "yes" ; then
5734 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5735fi
5736
Luiz Capitulino8ab1bf12012-05-23 15:48:04 -03005737if test "$has_environ" = "yes" ; then
5738 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5739fi
5740
Richard Henderson76a347e2012-12-28 14:17:02 -08005741if test "$cpuid_h" = "yes" ; then
5742 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5743fi
5744
Richard Hendersonf5401662013-02-16 12:46:59 -08005745if test "$int128" = "yes" ; then
5746 echo "CONFIG_INT128=y" >> $config_host_mak
5747fi
5748
Richard Henderson7ebee432016-06-29 21:10:59 -07005749if test "$atomic128" = "yes" ; then
5750 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5751fi
5752
Richard Hendersondf79b992016-09-02 12:23:57 -07005753if test "$atomic64" = "yes" ; then
5754 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5755fi
5756
Richard Henderson1e6e9ac2013-02-18 09:11:15 -08005757if test "$getauxval" = "yes" ; then
5758 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5759fi
5760
Bharata B Raoeb100392012-09-24 14:42:45 +05305761if test "$glusterfs" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005762 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005763 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5764 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
Bharata B Raoeb100392012-09-24 14:42:45 +05305765fi
5766
Jeff Codyd85fa9e2016-04-05 10:40:09 -04005767if test "$glusterfs_xlator_opt" = "yes" ; then
5768 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5769fi
5770
Bharata B Rao0c14fb42013-07-16 21:47:42 +05305771if test "$glusterfs_discard" = "yes" ; then
5772 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5773fi
5774
Bharata B Rao7c815372013-12-21 14:51:25 +05305775if test "$glusterfs_zerofill" = "yes" ; then
5776 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5777fi
5778
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005779if test "$libssh2" = "yes" ; then
Fam Zhengd3399d72014-02-10 14:49:00 +08005780 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
Fam Zheng6ebc91e2014-02-10 14:48:54 +08005781 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5782 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
Richard W.M. Jones0a12ec82013-04-09 15:30:53 +01005783fi
5784
blueswir168063642008-11-22 21:03:55 +00005785# USB host support
Gerd Hoffmannb5613fd2013-09-10 11:02:59 +02005786if test "$libusb" = "yes"; then
5787 echo "HOST_USB=libusb legacy" >> $config_host_mak
5788else
Juan Quintela98ec69a2009-07-16 18:34:18 +02005789 echo "HOST_USB=stub" >> $config_host_mak
Gerd Hoffmannb5613fd2013-09-10 11:02:59 +02005790fi
blueswir168063642008-11-22 21:03:55 +00005791
Paolo Bonzini3b8acc12013-03-18 16:37:50 +01005792# TPM passthrough support?
5793if test "$tpm" = "yes"; then
5794 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5795 if test "$tpm_passthrough" = "yes"; then
5796 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5797 fi
5798fi
5799
Lluís Vilanova5b808272014-05-27 15:02:14 +02005800echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5801if have_backend "nop"; then
Lluís6d8a7642011-08-31 20:30:43 +02005802 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
Prerna Saxena22890ab2010-06-24 17:04:53 +05305803fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005804if have_backend "simple"; then
Lluís6d8a7642011-08-31 20:30:43 +02005805 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5806 # Set the appropriate trace file.
Andreas Färber953ffe02011-06-02 19:58:06 +02005807 trace_file="\"$trace_file-\" FMT_pid"
Prerna Saxena9410b562010-07-13 09:26:32 +01005808fi
Paolo Bonzinied7f5f12016-01-07 16:55:30 +03005809if have_backend "log"; then
5810 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
Lluís6d8a7642011-08-31 20:30:43 +02005811fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005812if have_backend "ust"; then
Lluís6d8a7642011-08-31 20:30:43 +02005813 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5814fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005815if have_backend "dtrace"; then
Lluís6d8a7642011-08-31 20:30:43 +02005816 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5817 if test "$trace_backend_stap" = "yes" ; then
5818 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5819 fi
Daniel P. Berrangec276b172010-11-12 13:20:25 +00005820fi
Lluís Vilanova5b808272014-05-27 15:02:14 +02005821if have_backend "ftrace"; then
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005822 if test "$linux" = "yes" ; then
5823 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005824 else
Stewart Smith21684af2014-01-24 12:39:10 +11005825 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
Eiichi Tsukata781e9542013-04-11 20:25:15 +09005826 fi
5827fi
Paul Durrant0a852412016-08-04 14:44:14 +01005828if have_backend "syslog"; then
5829 if test "$posix_syslog" = "yes" ; then
5830 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5831 else
5832 feature_not_found "syslog(trace backend)" "syslog not available"
5833 fi
5834fi
Prerna Saxena9410b562010-07-13 09:26:32 +01005835echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5836
Michael R. Hines2da776d2013-07-22 10:01:54 -04005837if test "$rdma" = "yes" ; then
5838 echo "CONFIG_RDMA=y" >> $config_host_mak
5839fi
5840
Laurent Vivier575b22b2016-06-02 22:14:15 +02005841if test "$have_rtnetlink" = "yes" ; then
5842 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5843fi
5844
Changlong Xiea6b1d4c2016-07-27 15:01:48 +08005845if test "$replication" = "yes" ; then
5846 echo "CONFIG_REPLICATION=y" >> $config_host_mak
5847fi
5848
Stefan Hajnoczi6a02c802016-10-14 10:00:55 +01005849if test "$have_af_vsock" = "yes" ; then
5850 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
5851fi
5852
Christopher Covington4d043512016-12-28 15:04:33 -05005853if test "$have_sysmacros" = "yes" ; then
5854 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
5855fi
5856
Andreas Grapentin49e00a12017-03-14 17:59:53 +01005857if test "$have_static_assert" = "yes" ; then
5858 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
5859fi
5860
Dr. David Alan Gilbert5c312072014-03-12 11:48:18 +00005861# Hold two types of flag:
5862# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5863# a thread we have a handle to
5864# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5865# platform
5866if test "$pthread_setname_np" = "yes" ; then
5867 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5868 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5869fi
5870
Ashish Mittalda92c3f2017-04-03 20:48:08 -07005871if test "$vxhs" = "yes" ; then
5872 echo "CONFIG_VXHS=y" >> $config_host_mak
5873 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
5874fi
5875
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02005876if test "$tcg_interpreter" = "yes"; then
5877 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5878elif test "$ARCH" = "sparc64" ; then
5879 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5880elif test "$ARCH" = "s390x" ; then
5881 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
Richard Hendersonc72b26e2013-08-20 12:20:05 -07005882elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02005883 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
Richard Henderson40d964b2014-04-30 14:07:47 -07005884elif test "$ARCH" = "ppc64" ; then
5885 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
Paolo Bonzini5b5e3032013-04-17 16:26:35 +02005886else
5887 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5888fi
5889QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5890
Juan Quintela98ec69a2009-07-16 18:34:18 +02005891echo "TOOLS=$tools" >> $config_host_mak
Juan Quintela98ec69a2009-07-16 18:34:18 +02005892echo "ROMS=$roms" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005893echo "MAKE=$make" >> $config_host_mak
5894echo "INSTALL=$install" >> $config_host_mak
Brad1901cb12011-08-28 04:01:33 -04005895echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5896echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
Michael Tokareve999ee42016-01-27 14:36:43 +03005897echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5898echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
Blue Swirlc886edf2011-07-22 21:08:09 +00005899echo "PYTHON=$python" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005900echo "CC=$cc" >> $config_host_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03005901if $iasl -h > /dev/null 2>&1; then
5902 echo "IASL=$iasl" >> $config_host_mak
5903fi
Paolo Bonzini2b2e59e2010-10-21 10:18:40 +02005904echo "CC_I386=$cc_i386" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005905echo "HOST_CC=$host_cc" >> $config_host_mak
Tomoki Sekiyama83f73fc2013-08-07 11:39:36 -04005906echo "CXX=$cxx" >> $config_host_mak
Peter Maydell3c4a4d02012-08-11 22:34:40 +01005907echo "OBJCC=$objcc" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005908echo "AR=$ar" >> $config_host_mak
Peter Maydell45d285a2013-10-21 21:03:06 +01005909echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07005910echo "AS=$as" >> $config_host_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07005911echo "CCAS=$ccas" >> $config_host_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00005912echo "CPP=$cpp" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005913echo "OBJCOPY=$objcopy" >> $config_host_mak
5914echo "LD=$ld" >> $config_host_mak
Stefan Weil4852ee92014-09-18 21:55:08 +02005915echo "NM=$nm" >> $config_host_mak
Blue Swirl9fe6de92010-09-26 16:07:57 +00005916echo "WINDRES=$windres" >> $config_host_mak
Juan Quintelae2a2ed02009-08-03 14:46:02 +02005917echo "CFLAGS=$CFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05005918echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
Juan Quintelaa558ee12009-08-03 14:46:21 +02005919echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
Paolo Bonzinif9728942010-12-23 11:43:53 +01005920echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01005921if test "$sparse" = "yes" ; then
5922 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
Christian Borntraeger80fd48d2015-01-22 10:53:46 +01005923 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
Gerd Hoffmann2944d742014-10-15 11:51:09 +02005924 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
Paolo Bonzinie39f0062010-12-23 11:43:51 +01005925 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5926 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5927fi
Gerd Hoffmann42da6042012-11-07 11:09:52 +01005928if test "$cross_prefix" != ""; then
5929 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5930else
5931 echo "AUTOCONF_HOST := " >> $config_host_mak
5932fi
Juan Quintelae2a2ed02009-08-03 14:46:02 +02005933echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
Brad46eef332013-12-10 19:49:08 -05005934echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
James Clarke6969ec62016-06-06 12:02:50 +01005935echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
Peter Maydelle57218b2016-08-08 17:11:28 +01005936echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
Juan Quintela73da3752009-08-03 14:46:26 +02005937echo "LIBS+=$LIBS" >> $config_host_mak
Juan Quintela3e2e0e62009-08-03 14:47:06 +02005938echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
Daniel P. Berrange409437e2016-07-20 14:23:13 +01005939echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
Juan Quintela804edf22009-07-27 16:12:49 +02005940echo "EXESUF=$EXESUF" >> $config_host_mak
Fam Zheng17969262014-02-10 14:48:56 +08005941echo "DSOSUF=$DSOSUF" >> $config_host_mak
5942echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
Michael Roth957f1f92011-08-11 15:38:12 -05005943echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
Daniel P. Berrange90246032015-09-21 17:25:34 +01005944echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5945echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
Gerd Hoffmann94dd53c2012-03-29 10:55:18 +02005946echo "POD2MAN=$POD2MAN" >> $config_host_mak
Paolo Bonzinicbdd1992012-11-28 09:40:23 +01005947echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
Blue Swirl1d728c32012-05-01 18:45:39 +00005948if test "$gcov" = "yes" ; then
5949 echo "CONFIG_GCOV=y" >> $config_host_mak
5950 echo "GCOV=$gcov_tool" >> $config_host_mak
5951fi
Juan Quintela804edf22009-07-27 16:12:49 +02005952
Peter Maydell6efd7512011-11-30 11:59:04 +00005953# use included Linux headers
5954if test "$linux" = "yes" ; then
Andreas Färbera307beb2012-06-14 15:14:33 +00005955 mkdir -p linux-headers
Peter Maydell6efd7512011-11-30 11:59:04 +00005956 case "$cpu" in
Richard Hendersonc72b26e2013-08-20 12:20:05 -07005957 i386|x86_64|x32)
Peter Maydell08312a62012-08-03 13:51:25 +01005958 linux_arch=x86
Peter Maydell6efd7512011-11-30 11:59:04 +00005959 ;;
5960 ppcemb|ppc|ppc64)
Peter Maydell08312a62012-08-03 13:51:25 +01005961 linux_arch=powerpc
Peter Maydell6efd7512011-11-30 11:59:04 +00005962 ;;
5963 s390x)
Peter Maydell08312a62012-08-03 13:51:25 +01005964 linux_arch=s390
5965 ;;
Claudio Fontana1f080312013-06-12 16:20:23 +01005966 aarch64)
5967 linux_arch=arm64
5968 ;;
Sanjay Lal222e7d12014-06-17 23:10:36 +01005969 mips64)
5970 linux_arch=mips
5971 ;;
Peter Maydell08312a62012-08-03 13:51:25 +01005972 *)
5973 # For most CPUs the kernel architecture name and QEMU CPU name match.
5974 linux_arch="$cpu"
Peter Maydell6efd7512011-11-30 11:59:04 +00005975 ;;
5976 esac
Peter Maydell08312a62012-08-03 13:51:25 +01005977 # For non-KVM architectures we will not have asm headers
5978 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5979 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5980 fi
Peter Maydell6efd7512011-11-30 11:59:04 +00005981fi
5982
bellard1d14ffa2005-10-30 18:58:22 +00005983for target in $target_list; do
bellard97a847b2003-08-10 21:36:04 +00005984target_dir="$target"
Juan Quintela25be2102009-10-07 02:41:00 +02005985config_target_mak=$target_dir/config-target.mak
Stefan Weil89138852016-05-16 15:10:20 +02005986target_name=$(echo $target | cut -d '-' -f 1)
bellard97a847b2003-08-10 21:36:04 +00005987target_bigendian="no"
Juan Quintela1f3d3c82009-10-07 02:41:02 +02005988
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005989case "$target_name" in
Richard Henderson4a09d0b2017-02-08 15:06:54 -08005990 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
Juan Quintelaea2d6a32009-07-16 18:34:10 +02005991 target_bigendian=yes
5992 ;;
5993esac
bellard97a847b2003-08-10 21:36:04 +00005994target_softmmu="no"
bellard997344f2003-10-27 21:10:39 +00005995target_user_only="no"
ths831b7822007-01-18 20:06:33 +00005996target_linux_user="no"
blueswir184778502008-10-26 20:33:16 +00005997target_bsd_user="no"
pbrook9e407a82007-05-26 16:38:53 +00005998case "$target" in
Paolo Bonzinic1799a82013-06-14 15:19:07 +01005999 ${target_name}-softmmu)
pbrook9e407a82007-05-26 16:38:53 +00006000 target_softmmu="yes"
6001 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006002 ${target_name}-linux-user)
Blue Swirl9c7a4202009-11-17 20:52:56 +00006003 if test "$linux" != "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01006004 error_exit "Target '$target' is only available on a Linux host"
Blue Swirl9c7a4202009-11-17 20:52:56 +00006005 fi
pbrook9e407a82007-05-26 16:38:53 +00006006 target_user_only="yes"
6007 target_linux_user="yes"
6008 ;;
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006009 ${target_name}-bsd-user)
Blue Swirl9cf55762009-11-17 21:27:18 +00006010 if test "$bsd" != "yes" ; then
Peter Maydell76ad07a2013-04-08 12:11:26 +01006011 error_exit "Target '$target' is only available on a BSD host"
Blue Swirl9c7a4202009-11-17 20:52:56 +00006012 fi
blueswir184778502008-10-26 20:33:16 +00006013 target_user_only="yes"
6014 target_bsd_user="yes"
6015 ;;
pbrook9e407a82007-05-26 16:38:53 +00006016 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006017 error_exit "Target '$target' not recognised"
pbrook9e407a82007-05-26 16:38:53 +00006018 exit 1
6019 ;;
6020esac
ths831b7822007-01-18 20:06:33 +00006021
bellard97a847b2003-08-10 21:36:04 +00006022mkdir -p $target_dir
Juan Quintela25be2102009-10-07 02:41:00 +02006023echo "# Automatically generated by configure - do not modify" > $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006024
pbrooke5fe0c52006-06-11 13:32:59 +00006025bflt="no"
Alex Bennéeca759f92017-02-23 18:29:27 +00006026mttcg="no"
Stefan Weil89138852016-05-16 15:10:20 +02006027interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
pbrook56aebc82008-10-11 17:55:29 +00006028gdb_xml_files=""
aliguori7ba1e612008-11-05 16:04:33 +00006029
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006030TARGET_ARCH="$target_name"
Juan Quintela6acff7d2009-07-16 18:34:15 +02006031TARGET_BASE_ARCH=""
Juan Quintelae6e91b92009-07-16 18:34:17 +02006032TARGET_ABI_DIR=""
Juan Quintelae73aae62009-07-16 18:34:14 +02006033
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006034case "$target_name" in
aurel322408a522008-04-20 20:19:44 +00006035 i386)
Abdallah Bouassida00fcd102016-12-28 17:34:02 +01006036 gdb_xml_files="i386-32bit-core.xml"
aurel322408a522008-04-20 20:19:44 +00006037 ;;
6038 x86_64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006039 TARGET_BASE_ARCH=i386
Abdallah Bouassida00fcd102016-12-28 17:34:02 +01006040 gdb_xml_files="i386-64bit-core.xml"
aurel322408a522008-04-20 20:19:44 +00006041 ;;
6042 alpha)
Richard Henderson5ee4f3c2017-02-24 09:12:43 +11006043 mttcg="yes"
aurel322408a522008-04-20 20:19:44 +00006044 ;;
6045 arm|armeb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006046 TARGET_ARCH=arm
aurel322408a522008-04-20 20:19:44 +00006047 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006048 mttcg="yes"
pbrook56aebc82008-10-11 17:55:29 +00006049 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
aurel322408a522008-04-20 20:19:44 +00006050 ;;
Alexander Graf6a49fa92013-09-03 20:12:22 +01006051 aarch64)
6052 TARGET_BASE_ARCH=arm
6053 bflt="yes"
Alex Bennéeca759f92017-02-23 18:29:27 +00006054 mttcg="yes"
Peter Maydell8f95ce22014-09-29 18:48:47 +01006055 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 +01006056 ;;
aurel322408a522008-04-20 20:19:44 +00006057 cris)
aurel322408a522008-04-20 20:19:44 +00006058 ;;
Richard Henderson61766fe2016-12-15 11:26:14 -08006059 hppa)
6060 ;;
Michael Walle613a22c2011-02-17 23:45:17 +01006061 lm32)
Michael Walle613a22c2011-02-17 23:45:17 +01006062 ;;
aurel322408a522008-04-20 20:19:44 +00006063 m68k)
aurel322408a522008-04-20 20:19:44 +00006064 bflt="yes"
pbrook56aebc82008-10-11 17:55:29 +00006065 gdb_xml_files="cf-core.xml cf-fp.xml"
aurel322408a522008-04-20 20:19:44 +00006066 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006067 microblaze|microblazeel)
6068 TARGET_ARCH=microblaze
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006069 bflt="yes"
Edgar E. Iglesias72b675c2009-05-20 21:17:31 +02006070 ;;
Juan Quintela0adcffb2009-07-16 18:34:16 +02006071 mips|mipsel)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006072 TARGET_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006073 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006074 ;;
6075 mipsn32|mipsn32el)
Richard Henderson597e2ce2013-02-10 10:30:50 -08006076 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006077 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006078 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
Richard Henderson597e2ce2013-02-10 10:30:50 -08006079 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006080 ;;
6081 mips64|mips64el)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006082 TARGET_ARCH=mips64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006083 TARGET_BASE_ARCH=mips
Juan Quintela25be2102009-10-07 02:41:00 +02006084 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006085 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006086 moxie)
6087 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006088 nios2)
6089 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006090 or1k)
Jia Liue67db062012-07-20 15:50:39 +08006091 TARGET_ARCH=openrisc
6092 TARGET_BASE_ARCH=openrisc
Jia Liue67db062012-07-20 15:50:39 +08006093 ;;
aurel322408a522008-04-20 20:19:44 +00006094 ppc)
aurel32c8b35322009-01-24 15:07:34 +00006095 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00006096 ;;
6097 ppcemb)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006098 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006099 TARGET_ABI_DIR=ppc
aurel32c8b35322009-01-24 15:07:34 +00006100 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
aurel322408a522008-04-20 20:19:44 +00006101 ;;
6102 ppc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006103 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006104 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306105 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006106 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00006107 ;;
Doug Kwan9c351262014-05-29 09:12:21 -05006108 ppc64le)
6109 TARGET_ARCH=ppc64
6110 TARGET_BASE_ARCH=ppc
6111 TARGET_ABI_DIR=ppc
Nikunj A Dadhaniaf0b06852017-04-27 10:48:23 +05306112 mttcg=yes
Anton Blanchard1438eff2016-01-15 16:00:51 +01006113 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 -05006114 ;;
aurel322408a522008-04-20 20:19:44 +00006115 ppc64abi32)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006116 TARGET_ARCH=ppc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006117 TARGET_BASE_ARCH=ppc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006118 TARGET_ABI_DIR=ppc
Juan Quintela25be2102009-10-07 02:41:00 +02006119 echo "TARGET_ABI32=y" >> $config_target_mak
Anton Blanchard1438eff2016-01-15 16:00:51 +01006120 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
aurel322408a522008-04-20 20:19:44 +00006121 ;;
6122 sh4|sh4eb)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006123 TARGET_ARCH=sh4
aurel322408a522008-04-20 20:19:44 +00006124 bflt="yes"
6125 ;;
6126 sparc)
aurel322408a522008-04-20 20:19:44 +00006127 ;;
6128 sparc64)
Juan Quintela6acff7d2009-07-16 18:34:15 +02006129 TARGET_BASE_ARCH=sparc
aurel322408a522008-04-20 20:19:44 +00006130 ;;
6131 sparc32plus)
Juan Quintelab498c8a2009-07-16 18:34:11 +02006132 TARGET_ARCH=sparc64
Juan Quintela6acff7d2009-07-16 18:34:15 +02006133 TARGET_BASE_ARCH=sparc
Juan Quintelae6e91b92009-07-16 18:34:17 +02006134 TARGET_ABI_DIR=sparc
Juan Quintela25be2102009-10-07 02:41:00 +02006135 echo "TARGET_ABI32=y" >> $config_target_mak
aurel322408a522008-04-20 20:19:44 +00006136 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006137 s390x)
David Hildenbrand8a641ff2015-10-01 10:49:44 +02006138 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 +01006139 ;;
Chen Gang444e06b2015-08-21 05:43:37 +08006140 tilegx)
6141 ;;
Peter Crosthwaite5ecaa4e2015-04-26 19:14:26 -07006142 tricore)
6143 ;;
Guan Xuetaod2fbca92011-04-12 16:27:03 +08006144 unicore32)
Guan Xuetaod2fbca92011-04-12 16:27:03 +08006145 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006146 xtensa|xtensaeb)
6147 TARGET_ARCH=xtensa
Max Filippovcfa550c2011-09-06 03:55:26 +04006148 ;;
aurel322408a522008-04-20 20:19:44 +00006149 *)
Peter Maydell76ad07a2013-04-08 12:11:26 +01006150 error_exit "Unsupported target CPU"
aurel322408a522008-04-20 20:19:44 +00006151 ;;
6152esac
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006153# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6154if [ "$TARGET_BASE_ARCH" = "" ]; then
6155 TARGET_BASE_ARCH=$TARGET_ARCH
6156fi
6157
Paolo Bonzini5e8861a2012-05-29 10:23:15 +02006158symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6159
Daniel P. Berrange99afc912012-08-20 15:31:38 +01006160upper() {
6161 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6162}
6163
Stefan Weil89138852016-05-16 15:10:20 +02006164target_arch_name="$(upper $TARGET_ARCH)"
Juan Quintela25be2102009-10-07 02:41:00 +02006165echo "TARGET_$target_arch_name=y" >> $config_target_mak
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006166echo "TARGET_NAME=$target_name" >> $config_target_mak
Juan Quintela25be2102009-10-07 02:41:00 +02006167echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
Juan Quintelae6e91b92009-07-16 18:34:17 +02006168if [ "$TARGET_ABI_DIR" = "" ]; then
6169 TARGET_ABI_DIR=$TARGET_ARCH
6170fi
Juan Quintela25be2102009-10-07 02:41:00 +02006171echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
Stacey Sonadfc3e92014-06-08 09:57:22 -07006172if [ "$HOST_VARIANT_DIR" != "" ]; then
6173 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6174fi
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006175case "$target_name" in
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006176 i386|x86_64)
6177 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006178 echo "CONFIG_XEN=y" >> $config_target_mak
Anthony PERARDeb6fda02012-06-21 15:32:59 +00006179 if test "$xen_pci_passthrough" = yes; then
6180 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6181 fi
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006182 fi
Alexander Graf59d21e52011-07-17 07:30:29 +02006183 ;;
6184 *)
Juan Quintela1b0c87f2009-07-16 18:33:59 +02006185esac
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006186case "$target_name" in
Sanjay Lal222e7d12014-06-17 23:10:36 +01006187 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
Juan Quintelac59249f2009-07-16 18:34:00 +02006188 # Make sure the target and host cpus are compatible
6189 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006190 \( "$target_name" = "$cpu" -o \
6191 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
6192 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
6193 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
6194 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
Sanjay Lal222e7d12014-06-17 23:10:36 +01006195 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
Paolo Bonzinic1799a82013-06-14 15:19:07 +01006196 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
Michael Tokarev18b82632015-03-12 09:13:45 +03006197 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
6198 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
6199 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006200 echo "CONFIG_KVM=y" >> $config_target_mak
Stefan Weil1ba16962011-07-29 22:40:45 +02006201 if test "$vhost_net" = "yes" ; then
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006202 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
Marc-André Lureau421f4442015-10-26 15:32:00 +01006203 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
Michael S. Tsirkind5970052010-03-17 13:08:17 +02006204 fi
Juan Quintelac59249f2009-07-16 18:34:00 +02006205 fi
6206esac
Vincent Palatinb0cb0a62017-01-10 11:59:57 +01006207if test "$hax" = "yes" ; then
6208 if test "$target_softmmu" = "yes" ; then
6209 case "$target_name" in
6210 i386|x86_64)
6211 echo "CONFIG_HAX=y" >> $config_target_mak
6212 ;;
6213 esac
6214 fi
6215fi
bellardde83cd02003-06-15 20:25:43 +00006216if test "$target_bigendian" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006217 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
bellard97a847b2003-08-10 21:36:04 +00006218fi
6219if test "$target_softmmu" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006220 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
Alex Bennéeca759f92017-02-23 18:29:27 +00006221 if test "$mttcg" = "yes" ; then
6222 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6223 fi
bellardde83cd02003-06-15 20:25:43 +00006224fi
bellard997344f2003-10-27 21:10:39 +00006225if test "$target_user_only" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006226 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
Stefan Weila2c80be2011-12-22 11:26:10 +01006227 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
bellard997344f2003-10-27 21:10:39 +00006228fi
ths831b7822007-01-18 20:06:33 +00006229if test "$target_linux_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006230 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
ths831b7822007-01-18 20:06:33 +00006231fi
pbrook56aebc82008-10-11 17:55:29 +00006232list=""
6233if test ! -z "$gdb_xml_files" ; then
6234 for x in $gdb_xml_files; do
6235 list="$list $source_path/gdb-xml/$x"
6236 done
Juan Quintela3d0f1512009-10-07 02:41:04 +02006237 echo "TARGET_XML_FILES=$list" >> $config_target_mak
pbrook56aebc82008-10-11 17:55:29 +00006238fi
bellardde83cd02003-06-15 20:25:43 +00006239
pbrooke5fe0c52006-06-11 13:32:59 +00006240if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
Juan Quintela25be2102009-10-07 02:41:00 +02006241 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
pbrooke5fe0c52006-06-11 13:32:59 +00006242fi
blueswir184778502008-10-26 20:33:16 +00006243if test "$target_bsd_user" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006244 echo "CONFIG_BSD_USER=y" >> $config_target_mak
blueswir184778502008-10-26 20:33:16 +00006245fi
bellard5b0753e2005-03-01 21:37:28 +00006246
Juan Quintela4afddb52009-08-03 14:46:45 +02006247# generate QEMU_CFLAGS/LDFLAGS for targets
Juan Quintelafa282482009-07-22 22:37:39 +02006248
Juan Quintela4afddb52009-08-03 14:46:45 +02006249cflags=""
Juan Quintelafa282482009-07-22 22:37:39 +02006250ldflags=""
Juan Quintela9b8e1112009-08-03 14:46:46 +02006251
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006252disas_config() {
6253 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6254 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6255}
6256
Juan Quintela64656022009-08-03 14:46:53 +02006257for i in $ARCH $TARGET_BASE_ARCH ; do
6258 case "$i" in
6259 alpha)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006260 disas_config "ALPHA"
Juan Quintela64656022009-08-03 14:46:53 +02006261 ;;
Richard Henderson82295d82014-03-03 22:53:27 -05006262 aarch64)
6263 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006264 disas_config "ARM_A64"
Richard Henderson82295d82014-03-03 22:53:27 -05006265 fi
6266 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006267 arm)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006268 disas_config "ARM"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006269 if test -n "${cxx}"; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006270 disas_config "ARM_A64"
Claudio Fontana999b53e2014-02-05 17:27:28 +00006271 fi
Juan Quintela64656022009-08-03 14:46:53 +02006272 ;;
6273 cris)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006274 disas_config "CRIS"
Juan Quintela64656022009-08-03 14:46:53 +02006275 ;;
Richard Henderson429b31a2016-09-29 10:55:53 -07006276 hppa)
6277 disas_config "HPPA"
6278 ;;
Richard Hendersonc72b26e2013-08-20 12:20:05 -07006279 i386|x86_64|x32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006280 disas_config "I386"
Juan Quintela64656022009-08-03 14:46:53 +02006281 ;;
Aurelien Jarno903ec552010-03-29 02:12:51 +02006282 ia64*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006283 disas_config "IA64"
Aurelien Jarno903ec552010-03-29 02:12:51 +02006284 ;;
Michael Walle79368f42012-03-31 19:54:20 +02006285 lm32)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006286 disas_config "LM32"
Michael Walle79368f42012-03-31 19:54:20 +02006287 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006288 m68k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006289 disas_config "M68K"
Juan Quintela64656022009-08-03 14:46:53 +02006290 ;;
Edgar E. Iglesias877fdc12011-02-21 12:42:20 +01006291 microblaze*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006292 disas_config "MICROBLAZE"
Juan Quintela64656022009-08-03 14:46:53 +02006293 ;;
6294 mips*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006295 disas_config "MIPS"
Juan Quintela64656022009-08-03 14:46:53 +02006296 ;;
Anthony Greend15a9c22013-03-18 15:49:25 -04006297 moxie*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006298 disas_config "MOXIE"
Anthony Greend15a9c22013-03-18 15:49:25 -04006299 ;;
Marek Vasute6717112017-01-18 23:01:46 +01006300 nios2)
6301 disas_config "NIOS2"
6302 ;;
Richard Henderson4a09d0b2017-02-08 15:06:54 -08006303 or1k)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006304 disas_config "OPENRISC"
Jia Liue67db062012-07-20 15:50:39 +08006305 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006306 ppc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006307 disas_config "PPC"
Juan Quintela64656022009-08-03 14:46:53 +02006308 ;;
Alexander Graf24e804ec2009-12-05 12:44:22 +01006309 s390*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006310 disas_config "S390"
Juan Quintela64656022009-08-03 14:46:53 +02006311 ;;
6312 sh4)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006313 disas_config "SH4"
Juan Quintela64656022009-08-03 14:46:53 +02006314 ;;
6315 sparc*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006316 disas_config "SPARC"
Juan Quintela64656022009-08-03 14:46:53 +02006317 ;;
Max Filippovcfa550c2011-09-06 03:55:26 +04006318 xtensa*)
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006319 disas_config "XTENSA"
Max Filippovcfa550c2011-09-06 03:55:26 +04006320 ;;
Juan Quintela64656022009-08-03 14:46:53 +02006321 esac
6322done
Stefan Weil9195b2c2011-10-19 07:07:18 +02006323if test "$tcg_interpreter" = "yes" ; then
Peter Crosthwaitec765fca2015-08-29 03:33:59 -07006324 disas_config "TCI"
Stefan Weil9195b2c2011-10-19 07:07:18 +02006325fi
Juan Quintela64656022009-08-03 14:46:53 +02006326
Juan Quintela6ee71262009-08-03 14:46:47 +02006327case "$ARCH" in
6328alpha)
6329 # Ensure there's only a single GP
6330 cflags="-msmall-data $cflags"
6331;;
6332esac
6333
Juan Quintelad02c1db2009-08-03 14:46:50 +02006334if test "$gprof" = "yes" ; then
Juan Quintela25be2102009-10-07 02:41:00 +02006335 echo "TARGET_GPROF=yes" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006336 if test "$target_linux_user" = "yes" ; then
6337 cflags="-p $cflags"
6338 ldflags="-p $ldflags"
6339 fi
6340 if test "$target_softmmu" = "yes" ; then
6341 ldflags="-p $ldflags"
Juan Quintela25be2102009-10-07 02:41:00 +02006342 echo "GPROF_CFLAGS=-p" >> $config_target_mak
Juan Quintelad02c1db2009-08-03 14:46:50 +02006343 fi
6344fi
6345
Juan Quintela9b8e1112009-08-03 14:46:46 +02006346if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
Richard Henderson964c6fa2013-06-21 19:10:16 -07006347 ldflags="$ldflags $textseg_ldflags"
Juan Quintelafa282482009-07-22 22:37:39 +02006348fi
Juan Quintelafa282482009-07-22 22:37:39 +02006349
Juan Quintela25be2102009-10-07 02:41:00 +02006350echo "LDFLAGS+=$ldflags" >> $config_target_mak
6351echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
Juan Quintelafa282482009-07-22 22:37:39 +02006352
bellard97a847b2003-08-10 21:36:04 +00006353done # for target in $targets
bellard7d132992003-03-06 23:23:54 +00006354
Gerd Hoffmannb776eca2012-11-12 12:18:38 +01006355if [ "$pixman" = "internal" ]; then
6356 echo "config-host.h: subdir-pixman" >> $config_host_mak
6357fi
6358
Peter Crosthwaitea540f152013-04-18 14:47:31 +10006359if [ "$dtc_internal" = "yes" ]; then
6360 echo "config-host.h: subdir-dtc" >> $config_host_mak
6361fi
6362
Wanlong Gaoa99d57b2014-05-14 17:43:28 +08006363if test "$numa" = "yes"; then
6364 echo "CONFIG_NUMA=y" >> $config_host_mak
6365fi
6366
John Snowfd0e6052015-03-25 18:57:39 -04006367if test "$ccache_cpp2" = "yes"; then
6368 echo "export CCACHE_CPP2=y" >> $config_host_mak
6369fi
6370
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006371# build tree in object directory in case the source is not in the current directory
Wenchao Xiaf93296e2013-09-06 11:24:32 +08006372DIRS="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 +01006373DIRS="$DIRS docs fsdev"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006374DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006375DIRS="$DIRS roms/seabios roms/vgabios"
Paolo Bonzini2dee8d52012-06-04 09:15:43 +02006376DIRS="$DIRS qapi-generated"
Anthony Liguoric09015d2012-01-10 13:10:42 -06006377FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6378FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
Andreas Färberaaa2ebc2013-07-06 20:41:37 +02006379FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006380FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
Andreas Färber446b9162011-05-08 13:25:56 +02006381FILES="$FILES pc-bios/spapr-rtas/Makefile"
Christian Borntraeger9933c302013-04-23 01:23:03 +00006382FILES="$FILES pc-bios/s390-ccw/Makefile"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006383FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
Jan Kiszka4652b792013-02-22 21:05:01 +01006384FILES="$FILES pc-bios/qemu-icon.bmp"
Richard Henderson753d11f2011-06-24 11:58:37 -07006385for bios_file in \
6386 $source_path/pc-bios/*.bin \
Alexey Kardashevskiy225a9ab2016-10-26 13:18:03 +11006387 $source_path/pc-bios/*.lid \
Gerd Hoffmann5acc2ec2012-12-03 10:45:49 +01006388 $source_path/pc-bios/*.aml \
Richard Henderson753d11f2011-06-24 11:58:37 -07006389 $source_path/pc-bios/*.rom \
6390 $source_path/pc-bios/*.dtb \
Dominik Dingele89e33e2013-04-29 04:52:06 +00006391 $source_path/pc-bios/*.img \
Richard Henderson753d11f2011-06-24 11:58:37 -07006392 $source_path/pc-bios/openbios-* \
Alexander Graf4e73c782014-01-20 00:25:40 +01006393 $source_path/pc-bios/u-boot.* \
Richard Henderson753d11f2011-06-24 11:58:37 -07006394 $source_path/pc-bios/palcode-*
6395do
Stefan Weil89138852016-05-16 15:10:20 +02006396 FILES="$FILES pc-bios/$(basename $bios_file)"
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006397done
Stefan Weil89138852016-05-16 15:10:20 +02006398for test_file in $(find $source_path/tests/acpi-test-data -type f)
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006399do
Stefan Weil89138852016-05-16 15:10:20 +02006400 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
Marcel Apfelbaumc2304b52013-12-26 16:54:20 +02006401done
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006402mkdir -p $DIRS
6403for f in $FILES ; do
Michael S. Tsirkincab00a52014-04-28 15:09:01 +03006404 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
Peter Maydellf9245e12011-06-03 17:10:40 +01006405 symlink "$source_path/$f" "$f"
6406 fi
Paolo Bonzinid1807a42010-12-23 11:43:59 +01006407done
Paul Brook1ad21342009-05-19 16:17:58 +01006408
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006409# temporary config to build submodules
Anthony Liguori2d9f27d2009-11-02 15:50:27 -06006410for rom in seabios vgabios ; do
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006411 config_mak=roms/$rom/config.mak
Stefan Weil37116c82010-03-01 22:20:29 +01006412 echo "# Automatically generated by configure - do not modify" > $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006413 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
Richard Hendersoncdbd7272016-07-07 21:49:36 -07006414 echo "AS=$as" >> $config_mak
Richard Henderson5f6f0e22016-06-23 10:39:18 -07006415 echo "CCAS=$ccas" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006416 echo "CC=$cc" >> $config_mak
6417 echo "BCC=bcc" >> $config_mak
Blue Swirl3dd46c72013-01-05 10:10:27 +00006418 echo "CPP=$cpp" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006419 echo "OBJCOPY=objcopy" >> $config_mak
Michael S. Tsirkina31a8642013-07-24 18:56:03 +03006420 echo "IASL=$iasl" >> $config_mak
Anthony Liguoric34ebfd2009-09-04 10:13:29 -05006421 echo "LD=$ld" >> $config_mak
6422done
6423
Marc-André Lureaufe310172016-06-15 13:06:00 +02006424# set up tests data directory
6425if [ ! -e tests/data ]; then
6426 symlink "$source_path/tests/data" tests/data
6427fi
6428
Max Reitz76c75602014-05-24 23:24:56 +02006429# set up qemu-iotests in this build directory
6430iotests_common_env="tests/qemu-iotests/common.env"
6431iotests_check="tests/qemu-iotests/check"
6432
6433echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6434echo >> "$iotests_common_env"
6435echo "export PYTHON='$python'" >> "$iotests_common_env"
6436
6437if [ ! -e "$iotests_check" ]; then
6438 symlink "$source_path/$iotests_check" "$iotests_check"
6439fi
6440
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006441# Save the configure command line for later reuse.
6442cat <<EOD >config.status
6443#!/bin/sh
6444# Generated by configure.
6445# Run this file to recreate the current configuration.
6446# Compiler output produced by configure, useful for debugging
6447# configure, is in config.log if it exists.
6448EOD
6449printf "exec" >>config.status
6450printf " '%s'" "$0" "$@" >>config.status
Dr. David Alan Gilbertcf7cc922016-01-12 11:58:48 +00006451echo ' "$@"' >>config.status
Michael S. Tsirkindc655402014-03-09 17:37:49 +02006452chmod +x config.status
6453
Peter Maydell8cd05ab2014-05-23 17:07:24 +01006454rm -r "$TMPDIR1"