]> git.proxmox.com Git - mirror_qemu.git/blame - configure
configure: handle clang -nopie argument warning
[mirror_qemu.git] / configure
CommitLineData
7d13299d
FB
1#!/bin/sh
2#
3ef693a0 3# qemu configure script (c) 2003 Fabrice Bellard
7d13299d 4#
8cd05ab6 5
99519e67
CH
6# 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
8cd05ab6
PM
11# Temporary directory used for files created while
12# configure runs. Since it is in the build directory
13# we can safely blow away any previous version of it
14# (and we need not jump through hoops to try to delete
15# it when configure exits.)
16TMPDIR1="config-temp"
17rm -rf "${TMPDIR1}"
18mkdir -p "${TMPDIR1}"
19if [ $? -ne 0 ]; then
20 echo "ERROR: failed to create temporary directory"
21 exit 1
7d13299d
FB
22fi
23
8cd05ab6
PM
24TMPB="qemu-conf"
25TMPC="${TMPDIR1}/${TMPB}.c"
66518bf6 26TMPO="${TMPDIR1}/${TMPB}.o"
9c83ffd8 27TMPCXX="${TMPDIR1}/${TMPB}.cxx"
66518bf6
DS
28TMPL="${TMPDIR1}/${TMPB}.lo"
29TMPA="${TMPDIR1}/lib${TMPB}.la"
8cd05ab6 30TMPE="${TMPDIR1}/${TMPB}.exe"
7d13299d 31
da1d85e3 32rm -f config.log
9ac81bbb 33
b48e3611
PM
34# Print a helpful header at the top of config.log
35echo "# QEMU configure log $(date)" >> config.log
979ae168
PM
36printf "# Configured with:" >> config.log
37printf " '%s'" "$0" "$@" >> config.log
38echo >> config.log
b48e3611
PM
39echo "#" >> config.log
40
76ad07a4
PM
41error_exit() {
42 echo
43 echo "ERROR: $1"
44 while test -n "$2"; do
45 echo " $2"
46 shift
47 done
48 echo
49 exit 1
50}
51
9c83ffd8
PM
52do_compiler() {
53 # Run the compiler, capturing its output to the log. First argument
54 # is compiler binary to execute.
55 local compiler="$1"
56 shift
57 echo $compiler "$@" >> config.log
58 $compiler "$@" >> config.log 2>&1 || return $?
8dc38a78
PM
59 # Test passed. If this is an --enable-werror build, rerun
60 # the test with -Werror and bail out if it fails. This
61 # makes warning-generating-errors in configure test code
62 # obvious to developers.
63 if test "$werror" != "yes"; then
64 return 0
65 fi
66 # Don't bother rerunning the compile if we were already using -Werror
67 case "$*" in
68 *-Werror*)
69 return 0
70 ;;
71 esac
9c83ffd8
PM
72 echo $compiler -Werror "$@" >> config.log
73 $compiler -Werror "$@" >> config.log 2>&1 && return $?
76ad07a4
PM
74 error_exit "configure test passed without -Werror but failed with -Werror." \
75 "This is probably a bug in the configure script. The failing command" \
76 "will be at the bottom of config.log." \
77 "You can run configure with --disable-werror to bypass this check."
8dc38a78
PM
78}
79
9c83ffd8
PM
80do_cc() {
81 do_compiler "$cc" "$@"
82}
83
84do_cxx() {
85 do_compiler "$cxx" "$@"
86}
87
88update_cxxflags() {
89 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
90 # options which some versions of GCC's C++ compiler complain about
91 # because they only make sense for C programs.
92 QEMU_CXXFLAGS=
93 for arg in $QEMU_CFLAGS; do
94 case $arg in
95 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
96 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
97 ;;
98 *)
99 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
100 ;;
101 esac
102 done
103}
104
52166aa0 105compile_object() {
8dc38a78 106 do_cc $QEMU_CFLAGS -c -o $TMPO $TMPC
52166aa0
JQ
107}
108
109compile_prog() {
110 local_cflags="$1"
111 local_ldflags="$2"
8dc38a78 112 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
52166aa0
JQ
113}
114
66518bf6
DS
115do_libtool() {
116 local mode=$1
117 shift
118 # Run the compiler, capturing its output to the log.
119 echo $libtool $mode --tag=CC $cc "$@" >> config.log
120 $libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
121 # Test passed. If this is an --enable-werror build, rerun
122 # the test with -Werror and bail out if it fails. This
123 # makes warning-generating-errors in configure test code
124 # obvious to developers.
125 if test "$werror" != "yes"; then
126 return 0
127 fi
128 # Don't bother rerunning the compile if we were already using -Werror
129 case "$*" in
130 *-Werror*)
131 return 0
132 ;;
133 esac
134 echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
135 $libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
136 error_exit "configure test passed without -Werror but failed with -Werror." \
137 "This is probably a bug in the configure script. The failing command" \
138 "will be at the bottom of config.log." \
139 "You can run configure with --disable-werror to bypass this check."
140}
141
142libtool_prog() {
143 do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
144 do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
145}
146
11568d6d
PB
147# symbolically link $1 to $2. Portable version of "ln -sf".
148symlink() {
72b8b5a1 149 rm -rf "$2"
ec5b06d7 150 mkdir -p "$(dirname "$2")"
72b8b5a1 151 ln -s "$1" "$2"
11568d6d
PB
152}
153
0dba6195
LM
154# check whether a command is available to this shell (may be either an
155# executable or a builtin)
156has() {
157 type "$1" >/dev/null 2>&1
158}
159
160# search for an executable in PATH
161path_of() {
162 local_command="$1"
163 local_ifs="$IFS"
164 local_dir=""
165
166 # pathname has a dir component?
167 if [ "${local_command#*/}" != "$local_command" ]; then
168 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
169 echo "$local_command"
170 return 0
171 fi
172 fi
173 if [ -z "$local_command" ]; then
174 return 1
175 fi
176
177 IFS=:
178 for local_dir in $PATH; do
179 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
180 echo "$local_dir/$local_command"
181 IFS="${local_ifs:-$(printf ' \t\n')}"
182 return 0
183 fi
184 done
185 # not found
186 IFS="${local_ifs:-$(printf ' \t\n')}"
187 return 1
188}
189
5b808275
LV
190have_backend () {
191 echo "$trace_backends" | grep "$1" >/dev/null
192}
193
7d13299d 194# default parameters
ca4deeb1 195source_path=`dirname "$0"`
2ff6b91e 196cpu=""
a31a8642 197iasl="iasl"
1e43adfc 198interp_prefix="/usr/gnemul/qemu-%M"
43ce4dfe 199static="no"
7d13299d 200cross_prefix=""
0c58ac1c 201audio_drv_list=""
b64ec4e4
FZ
202block_drv_rw_whitelist=""
203block_drv_ro_whitelist=""
e49d021e 204host_cc="cc"
73da375e 205libs_softmmu=""
3e2e0e6b 206libs_tools=""
67f86e8e 207audio_pt_int=""
d5631638 208audio_win_int=""
2b2e59e6 209cc_i386=i386-pc-linux-gnu-gcc
957f1f99 210libs_qga=""
5bc62e01 211debug_info="yes"
63678e17 212stack_protector=""
ac0df51d 213
afb63ebd
SW
214# Don't accept a target_list environment variable.
215unset target_list
377529c0
PB
216
217# Default value for a variable defining feature "foo".
218# * foo="no" feature will only be used if --enable-foo arg is given
219# * foo="" feature will be searched for, and if found, will be used
220# unless --disable-foo is given
221# * foo="yes" this value will only be set by --enable-foo flag.
222# feature will searched for,
223# if not found, configure exits with error
224#
225# Always add --enable-foo and --disable-foo command line args.
226# Distributions want to ensure that several features are compiled in, and it
227# is impossible without a --enable-foo that exits if a feature is not found.
228
229bluez=""
230brlapi=""
231curl=""
232curses=""
233docs=""
234fdt=""
58952137 235netmap="no"
e2134eb9 236pixman=""
377529c0 237sdl=""
47c03744 238sdlabi="1.2"
983eef5a 239virtfs=""
821601ea 240vnc="yes"
377529c0
PB
241sparse="no"
242uuid=""
243vde=""
244vnc_tls=""
245vnc_sasl=""
246vnc_jpeg=""
247vnc_png=""
7536ee4b 248vnc_ws=""
377529c0 249xen=""
d5b93ddf 250xen_ctrl_version=""
eb6fda0f 251xen_pci_passthrough=""
377529c0 252linux_aio=""
47e98658 253cap_ng=""
377529c0 254attr=""
4f26f2b6 255libattr=""
377529c0
PB
256xfs=""
257
d41a75a2 258vhost_net="no"
5e9be92d 259vhost_scsi="no"
d41a75a2 260kvm="no"
2da776db 261rdma=""
377529c0
PB
262gprof="no"
263debug_tcg="no"
377529c0
PB
264debug="no"
265strip_opt="yes"
9195b2c2 266tcg_interpreter="no"
377529c0
PB
267bigendian="no"
268mingw32="no"
1d728c39
BS
269gcov="no"
270gcov_tool="gcov"
377529c0 271EXESUF=""
17969268
FZ
272DSOSUF=".so"
273LDFLAGS_SHARED="-shared"
274modules="no"
377529c0
PB
275prefix="/usr/local"
276mandir="\${prefix}/share/man"
528ae5b8 277datadir="\${prefix}/share"
850da188 278qemu_docdir="\${prefix}/share/doc/qemu"
377529c0 279bindir="\${prefix}/bin"
3aa5d2be 280libdir="\${prefix}/lib"
8bf188aa 281libexecdir="\${prefix}/libexec"
0f94d6da 282includedir="\${prefix}/include"
377529c0 283sysconfdir="\${prefix}/etc"
785c23ae 284local_statedir="\${prefix}/var"
377529c0
PB
285confsuffix="/qemu"
286slirp="yes"
287fmod_lib=""
288fmod_inc=""
289oss_lib=""
290bsd="no"
291linux="no"
292solaris="no"
293profiler="no"
294cocoa="no"
295softmmu="yes"
296linux_user="no"
377529c0 297bsd_user="no"
30163d89 298guest_base="yes"
377529c0
PB
299aix="no"
300blobs="yes"
301pkgversion=""
40d6444e 302pie=""
377529c0 303zero_malloc=""
3556c233 304qom_cast_debug="yes"
5b808275 305trace_backends="nop"
377529c0
PB
306trace_file="trace"
307spice=""
308rbd=""
111a38b0 309smartcard_nss=""
2b2325ff 310libusb=""
69354a83 311usb_redir=""
da076ffe 312opengl=""
1ece9905 313zlib="yes"
b25c9dff
SW
314lzo=""
315snappy=""
6b383c08 316bzip2=""
e8ef31a3 317guest_agent=""
d9840e25
TS
318guest_agent_with_vss="no"
319vss_win32_sdk=""
320win_sdk="no"
4b1c11fd 321want_tools="yes"
c589b249 322libiscsi=""
6542aa9c 323libnfs=""
519175a2 324coroutine=""
70c60c08 325coroutine_pool=""
f794573e 326seccomp=""
eb100396 327glusterfs=""
0c14fb47 328glusterfs_discard="no"
7c815372 329glusterfs_zerofill="no"
6a460ed1 330archipelago="no"
a4ccabcf 331gtk=""
9e04c683 332gtkabi=""
bbbf9bfb 333vte=""
e91c793c 334tpm="yes"
0a12ec87 335libssh2=""
4f18b782 336vhdx=""
b25c9dff 337quorum=""
a99d57bb 338numa=""
2847b469 339tcmalloc="no"
377529c0 340
ac0df51d
AL
341# parse CC options first
342for opt do
343 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
344 case "$opt" in
345 --cross-prefix=*) cross_prefix="$optarg"
346 ;;
3d8df640 347 --cc=*) CC="$optarg"
ac0df51d 348 ;;
83f73fce
TS
349 --cxx=*) CXX="$optarg"
350 ;;
ca4deeb1
PB
351 --source-path=*) source_path="$optarg"
352 ;;
2ff6b91e
JQ
353 --cpu=*) cpu="$optarg"
354 ;;
a558ee17 355 --extra-cflags=*) QEMU_CFLAGS="$optarg $QEMU_CFLAGS"
f9943cd5 356 EXTRA_CFLAGS="$optarg"
e2a2ed06
JQ
357 ;;
358 --extra-ldflags=*) LDFLAGS="$optarg $LDFLAGS"
f9943cd5 359 EXTRA_LDFLAGS="$optarg"
e2a2ed06 360 ;;
5bc62e01
GH
361 --enable-debug-info) debug_info="yes"
362 ;;
363 --disable-debug-info) debug_info="no"
364 ;;
ac0df51d
AL
365 esac
366done
ac0df51d
AL
367# OS specific
368# Using uname is really, really broken. Once we have the right set of checks
93148aa5 369# we can eliminate its usage altogether.
ac0df51d 370
e49d021e
PM
371# Preferred compiler:
372# ${CC} (if set)
373# ${cross_prefix}gcc (if cross-prefix specified)
374# system compiler
375if test -z "${CC}${cross_prefix}"; then
376 cc="$host_cc"
377else
378 cc="${CC-${cross_prefix}gcc}"
379fi
380
83f73fce
TS
381if test -z "${CXX}${cross_prefix}"; then
382 cxx="c++"
383else
384 cxx="${CXX-${cross_prefix}g++}"
385fi
386
b3198cc2 387ar="${AR-${cross_prefix}ar}"
3dd46c78
BS
388as="${AS-${cross_prefix}as}"
389cpp="${CPP-$cc -E}"
b3198cc2
SY
390objcopy="${OBJCOPY-${cross_prefix}objcopy}"
391ld="${LD-${cross_prefix}ld}"
3f534581 392libtool="${LIBTOOL-${cross_prefix}libtool}"
4852ee95 393nm="${NM-${cross_prefix}nm}"
b3198cc2
SY
394strip="${STRIP-${cross_prefix}strip}"
395windres="${WINDRES-${cross_prefix}windres}"
17884d7b
ST
396pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
397query_pkg_config() {
398 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
399}
400pkg_config=query_pkg_config
b3198cc2 401sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
47c03744 402sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
ac0df51d 403
45d285ab
PM
404# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
405ARFLAGS="${ARFLAGS-rv}"
406
be17dc90 407# default flags for all hosts
4c288acb 408QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
f9188227 409QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
c95e3080 410QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
be17dc90 411QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
6b4c305c 412QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
5bc62e01
GH
413if test "$debug_info" = "yes"; then
414 CFLAGS="-g $CFLAGS"
415 LDFLAGS="-g $LDFLAGS"
416fi
be17dc90 417
ca4deeb1
PB
418# make source path absolute
419source_path=`cd "$source_path"; pwd`
420
cab00a5a
MT
421# running configure in the source tree?
422# we know that's the case if configure is there.
423if test -f "./configure"; then
424 pwd_is_source_path="y"
425else
426 pwd_is_source_path="n"
427fi
428
ac0df51d
AL
429check_define() {
430cat > $TMPC <<EOF
431#if !defined($1)
fd786e1a 432#error $1 not defined
ac0df51d
AL
433#endif
434int main(void) { return 0; }
435EOF
52166aa0 436 compile_object
ac0df51d
AL
437}
438
bbea4050
PM
439if check_define __linux__ ; then
440 targetos="Linux"
441elif check_define _WIN32 ; then
442 targetos='MINGW32'
443elif check_define __OpenBSD__ ; then
444 targetos='OpenBSD'
445elif check_define __sun__ ; then
446 targetos='SunOS'
447elif check_define __HAIKU__ ; then
448 targetos='Haiku'
449else
450 targetos=`uname -s`
451fi
452
453# Some host OSes need non-standard checks for which CPU to use.
454# Note that these checks are broken for cross-compilation: if you're
455# cross-compiling to one of these OSes then you'll need to specify
456# the correct CPU with the --cpu option.
457case $targetos in
458Darwin)
459 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
460 # run 64-bit userspace code.
461 # If the user didn't specify a CPU explicitly and the kernel says this is
462 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
463 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
464 cpu="x86_64"
465 fi
466 ;;
467SunOS)
468 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
469 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
470 cpu="x86_64"
471 fi
472esac
473
2ff6b91e
JQ
474if test ! -z "$cpu" ; then
475 # command line argument
476 :
477elif check_define __i386__ ; then
ac0df51d
AL
478 cpu="i386"
479elif check_define __x86_64__ ; then
c72b26ec
RH
480 if check_define __ILP32__ ; then
481 cpu="x32"
482 else
483 cpu="x86_64"
484 fi
3aa9bd6c 485elif check_define __sparc__ ; then
3aa9bd6c
BS
486 if check_define __arch64__ ; then
487 cpu="sparc64"
488 else
489 cpu="sparc"
490 fi
fdf7ed96 491elif check_define _ARCH_PPC ; then
492 if check_define _ARCH_PPC64 ; then
493 cpu="ppc64"
494 else
495 cpu="ppc"
496 fi
afa05235
AJ
497elif check_define __mips__ ; then
498 cpu="mips"
477ba620
AJ
499elif check_define __ia64__ ; then
500 cpu="ia64"
d66ed0ea
AJ
501elif check_define __s390__ ; then
502 if check_define __s390x__ ; then
503 cpu="s390x"
504 else
505 cpu="s390"
506 fi
21d89f84
PM
507elif check_define __arm__ ; then
508 cpu="arm"
1f080313
CF
509elif check_define __aarch64__ ; then
510 cpu="aarch64"
f28ffed5
BS
511elif check_define __hppa__ ; then
512 cpu="hppa"
ac0df51d 513else
fdf7ed96 514 cpu=`uname -m`
ac0df51d
AL
515fi
516
359bc95d
PM
517ARCH=
518# Normalise host CPU name and set ARCH.
519# Note that this case should only have supported host CPUs, not guests.
7d13299d 520case "$cpu" in
c72b26ec 521 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
ea8f20f8
JQ
522 cpu="$cpu"
523 ;;
7d13299d 524 i386|i486|i586|i686|i86pc|BePC)
97a847bc 525 cpu="i386"
7d13299d 526 ;;
aaa5fa14
AJ
527 x86_64|amd64)
528 cpu="x86_64"
529 ;;
21d89f84
PM
530 armv*b|armv*l|arm)
531 cpu="arm"
7d13299d 532 ;;
1f080313
CF
533 aarch64)
534 cpu="aarch64"
535 ;;
afa05235
AJ
536 mips*)
537 cpu="mips"
538 ;;
3142255c 539 sparc|sun4[cdmuv])
ae228531
FB
540 cpu="sparc"
541 ;;
7d13299d 542 *)
359bc95d
PM
543 # This will result in either an error or falling back to TCI later
544 ARCH=unknown
7d13299d
FB
545 ;;
546esac
359bc95d
PM
547if test -z "$ARCH"; then
548 ARCH="$cpu"
549fi
e2d52ad3 550
7d13299d 551# OS specific
0dbfc675 552
adfc3e91
SS
553# host *BSD for user mode
554HOST_VARIANT_DIR=""
555
7d13299d 556case $targetos in
c326e0af 557CYGWIN*)
0dbfc675 558 mingw32="yes"
a558ee17 559 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
d5631638 560 audio_possible_drivers="winwave sdl"
561 audio_drv_list="winwave"
c326e0af 562;;
67b915a5 563MINGW32*)
0dbfc675 564 mingw32="yes"
d5631638 565 audio_possible_drivers="winwave dsound sdl fmod"
566 audio_drv_list="winwave"
67b915a5 567;;
5c40d2bd 568GNU/kFreeBSD)
a167ba50 569 bsd="yes"
0dbfc675
JQ
570 audio_drv_list="oss"
571 audio_possible_drivers="oss sdl esd pa"
5c40d2bd 572;;
7d3505c5 573FreeBSD)
0dbfc675 574 bsd="yes"
0db4a067 575 make="${MAKE-gmake}"
0dbfc675
JQ
576 audio_drv_list="oss"
577 audio_possible_drivers="oss sdl esd pa"
f01576f1
JL
578 # needed for kinfo_getvmmap(3) in libutil.h
579 LIBS="-lutil $LIBS"
58952137 580 netmap="" # enable netmap autodetect
adfc3e91 581 HOST_VARIANT_DIR="freebsd"
7d3505c5 582;;
c5e97233 583DragonFly)
0dbfc675 584 bsd="yes"
0db4a067 585 make="${MAKE-gmake}"
0dbfc675
JQ
586 audio_drv_list="oss"
587 audio_possible_drivers="oss sdl esd pa"
adfc3e91 588 HOST_VARIANT_DIR="dragonfly"
c5e97233 589;;
7d3505c5 590NetBSD)
0dbfc675 591 bsd="yes"
0db4a067 592 make="${MAKE-gmake}"
0dbfc675
JQ
593 audio_drv_list="oss"
594 audio_possible_drivers="oss sdl esd"
595 oss_lib="-lossaudio"
adfc3e91 596 HOST_VARIANT_DIR="netbsd"
7d3505c5
FB
597;;
598OpenBSD)
0dbfc675 599 bsd="yes"
0db4a067 600 make="${MAKE-gmake}"
4f6ab397
BS
601 audio_drv_list="sdl"
602 audio_possible_drivers="sdl esd"
adfc3e91 603 HOST_VARIANT_DIR="openbsd"
7d3505c5 604;;
83fb7adf 605Darwin)
0dbfc675
JQ
606 bsd="yes"
607 darwin="yes"
17969268 608 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
0dbfc675 609 if [ "$cpu" = "x86_64" ] ; then
a558ee17 610 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
0c439cbf 611 LDFLAGS="-arch x86_64 $LDFLAGS"
0dbfc675 612 fi
0dbfc675
JQ
613 cocoa="yes"
614 audio_drv_list="coreaudio"
615 audio_possible_drivers="coreaudio sdl fmod"
616 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
7973f21c 617 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
a0b7cf6b
PM
618 # Disable attempts to use ObjectiveC features in os/object.h since they
619 # won't work when we're compiling with gcc as a C compiler.
620 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
adfc3e91 621 HOST_VARIANT_DIR="darwin"
83fb7adf 622;;
ec530c81 623SunOS)
0dbfc675 624 solaris="yes"
0db4a067
PB
625 make="${MAKE-gmake}"
626 install="${INSTALL-ginstall}"
fa58948d 627 ld="gld"
e2d8830e 628 smbd="${SMBD-/usr/sfw/sbin/smbd}"
0dbfc675
JQ
629 needs_libsunmath="no"
630 solarisrev=`uname -r | cut -f2 -d.`
0dbfc675
JQ
631 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
632 if test "$solarisrev" -le 9 ; then
633 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
634 needs_libsunmath="yes"
f14bfdf9
JQ
635 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
636 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
637 LIBS="-lsunmath $LIBS"
0dbfc675 638 else
76ad07a4
PM
639 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
640 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
641 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
642 "Studio 11 can be downloaded from www.sun.com."
0dbfc675 643 fi
86b2bd93 644 fi
0dbfc675
JQ
645 fi
646 if test -f /usr/include/sys/soundcard.h ; then
647 audio_drv_list="oss"
648 fi
649 audio_possible_drivers="oss sdl"
d741429a
BS
650# needed for CMSG_ macros in sys/socket.h
651 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
652# needed for TIOCWIN* defines in termios.h
653 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
a558ee17 654 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
560d375f
AF
655 solarisnetlibs="-lsocket -lnsl -lresolv"
656 LIBS="$solarisnetlibs $LIBS"
657 libs_qga="$solarisnetlibs $libs_qga"
86b2bd93 658;;
b29fe3ed 659AIX)
0dbfc675 660 aix="yes"
0db4a067 661 make="${MAKE-gmake}"
b29fe3ed 662;;
179cf400
AF
663Haiku)
664 haiku="yes"
665 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
666 LIBS="-lposix_error_mapper -lnetwork $LIBS"
667;;
1d14ffa9 668*)
0dbfc675
JQ
669 audio_drv_list="oss"
670 audio_possible_drivers="oss alsa sdl esd pa"
671 linux="yes"
672 linux_user="yes"
af2be207
JK
673 kvm="yes"
674 vhost_net="yes"
5e9be92d 675 vhost_scsi="yes"
c72b26ec 676 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" -o "$cpu" = "x32" ] ; then
c2de5c91 677 audio_possible_drivers="$audio_possible_drivers fmod"
0dbfc675 678 fi
a585140d 679 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
fb065187 680;;
7d13299d
FB
681esac
682
7d3505c5 683if [ "$bsd" = "yes" ] ; then
b1a550a0 684 if [ "$darwin" != "yes" ] ; then
08de3949 685 bsd_user="yes"
83fb7adf 686 fi
7d3505c5
FB
687fi
688
0db4a067
PB
689: ${make=${MAKE-make}}
690: ${install=${INSTALL-install}}
52510f8b 691: ${python=${PYTHON-python}}
e2d8830e 692: ${smbd=${SMBD-/usr/sbin/smbd}}
0db4a067 693
3c4a4d0d
PM
694# Default objcc to clang if available, otherwise use CC
695if has clang; then
696 objcc=clang
697else
698 objcc="$cc"
699fi
700
3457a3f8 701if test "$mingw32" = "yes" ; then
3457a3f8 702 EXESUF=".exe"
17969268 703 DSOSUF=".dll"
a558ee17 704 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
e94a7936
SW
705 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
706 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
f7cf5d5b
SW
707 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
708cat > $TMPC << EOF
709int main(void) { return 0; }
710EOF
711 if compile_prog "" "-liberty" ; then
712 LIBS="-liberty $LIBS"
713 fi
c5ec15ea 714 prefix="c:/Program Files/QEMU"
683035de 715 mandir="\${prefix}"
528ae5b8 716 datadir="\${prefix}"
850da188 717 qemu_docdir="\${prefix}"
683035de
PB
718 bindir="\${prefix}"
719 sysconfdir="\${prefix}"
5a699bbb 720 local_statedir=
683035de 721 confsuffix=""
368542b8 722 libs_qga="-lws2_32 -lwinmm -lpowrprof $libs_qga"
3457a3f8
JQ
723fi
724
487fefdb 725werror=""
85aa5189 726
7d13299d 727for opt do
a46e4035 728 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
7d13299d 729 case "$opt" in
2efc3265
FB
730 --help|-h) show_help=yes
731 ;;
99123e13
MF
732 --version|-V) exec cat $source_path/VERSION
733 ;;
b1a550a0 734 --prefix=*) prefix="$optarg"
7d13299d 735 ;;
b1a550a0 736 --interp-prefix=*) interp_prefix="$optarg"
32ce6337 737 ;;
ca4deeb1 738 --source-path=*)
7d13299d 739 ;;
ac0df51d 740 --cross-prefix=*)
7d13299d 741 ;;
ac0df51d 742 --cc=*)
7d13299d 743 ;;
b1a550a0 744 --host-cc=*) host_cc="$optarg"
83469015 745 ;;
83f73fce
TS
746 --cxx=*)
747 ;;
e007dbec
MT
748 --iasl=*) iasl="$optarg"
749 ;;
3c4a4d0d
PM
750 --objcc=*) objcc="$optarg"
751 ;;
b1a550a0 752 --make=*) make="$optarg"
7d13299d 753 ;;
6a882643
PB
754 --install=*) install="$optarg"
755 ;;
c886edfb
BS
756 --python=*) python="$optarg"
757 ;;
1d728c39
BS
758 --gcov=*) gcov_tool="$optarg"
759 ;;
e2d8830e
BS
760 --smbd=*) smbd="$optarg"
761 ;;
e2a2ed06 762 --extra-cflags=*)
7d13299d 763 ;;
e2a2ed06 764 --extra-ldflags=*)
7d13299d 765 ;;
5bc62e01
GH
766 --enable-debug-info)
767 ;;
768 --disable-debug-info)
769 ;;
17969268
FZ
770 --enable-modules)
771 modules="yes"
772 ;;
2ff6b91e 773 --cpu=*)
7d13299d 774 ;;
b1a550a0 775 --target-list=*) target_list="$optarg"
de83cd02 776 ;;
5b808275
LV
777 --enable-trace-backends=*) trace_backends="$optarg"
778 ;;
779 # XXX: backwards compatibility
780 --enable-trace-backend=*) trace_backends="$optarg"
94a420b1 781 ;;
74242e0f 782 --with-trace-file=*) trace_file="$optarg"
9410b56c 783 ;;
7d13299d
FB
784 --enable-gprof) gprof="yes"
785 ;;
1d728c39
BS
786 --enable-gcov) gcov="yes"
787 ;;
79427693
LM
788 --static)
789 static="yes"
790 LDFLAGS="-static $LDFLAGS"
17884d7b 791 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
43ce4dfe 792 ;;
0b24e75f
PB
793 --mandir=*) mandir="$optarg"
794 ;;
795 --bindir=*) bindir="$optarg"
796 ;;
3aa5d2be
AL
797 --libdir=*) libdir="$optarg"
798 ;;
8bf188aa
MT
799 --libexecdir=*) libexecdir="$optarg"
800 ;;
0f94d6da
AL
801 --includedir=*) includedir="$optarg"
802 ;;
528ae5b8 803 --datadir=*) datadir="$optarg"
0b24e75f 804 ;;
023d3d67
EH
805 --with-confsuffix=*) confsuffix="$optarg"
806 ;;
850da188 807 --docdir=*) qemu_docdir="$optarg"
0b24e75f 808 ;;
ca2fb938 809 --sysconfdir=*) sysconfdir="$optarg"
07381cc1 810 ;;
785c23ae
LC
811 --localstatedir=*) local_statedir="$optarg"
812 ;;
813 --sbindir=*|--sharedstatedir=*|\
023ddd74
MF
814 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
815 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
816 # These switches are silently ignored, for compatibility with
817 # autoconf-generated configure scripts. This allows QEMU's
818 # configure to be used by RPM and similar macros that set
819 # lots of directory switches by default.
820 ;;
e2134eb9
GH
821 --with-system-pixman) pixman="system"
822 ;;
823 --without-system-pixman) pixman="internal"
824 ;;
74880fe2
RS
825 --without-pixman) pixman="none"
826 ;;
97a847bc
FB
827 --disable-sdl) sdl="no"
828 ;;
c4198157
JQ
829 --enable-sdl) sdl="yes"
830 ;;
47c03744
DA
831 --with-sdlabi=*) sdlabi="$optarg"
832 ;;
3556c233
PB
833 --disable-qom-cast-debug) qom_cast_debug="no"
834 ;;
835 --enable-qom-cast-debug) qom_cast_debug="yes"
836 ;;
983eef5a
MI
837 --disable-virtfs) virtfs="no"
838 ;;
839 --enable-virtfs) virtfs="yes"
840 ;;
821601ea
JS
841 --disable-vnc) vnc="no"
842 ;;
843 --enable-vnc) vnc="yes"
844 ;;
0c58ac1c 845 --fmod-lib=*) fmod_lib="$optarg"
1d14ffa9 846 ;;
c2de5c91 847 --fmod-inc=*) fmod_inc="$optarg"
848 ;;
2f6a1ab0
BS
849 --oss-lib=*) oss_lib="$optarg"
850 ;;
0c58ac1c 851 --audio-drv-list=*) audio_drv_list="$optarg"
102a52e4 852 ;;
b64ec4e4
FZ
853 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
854 ;;
855 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
eb852011 856 ;;
f8393946
AJ
857 --enable-debug-tcg) debug_tcg="yes"
858 ;;
859 --disable-debug-tcg) debug_tcg="no"
860 ;;
f3d08ee6
PB
861 --enable-debug)
862 # Enable debugging options that aren't excessively noisy
863 debug_tcg="yes"
864 debug="yes"
865 strip_opt="no"
866 ;;
03b4fe7d
AL
867 --enable-sparse) sparse="yes"
868 ;;
869 --disable-sparse) sparse="no"
870 ;;
1625af87
AL
871 --disable-strip) strip_opt="no"
872 ;;
8d5d2d4c
TS
873 --disable-vnc-tls) vnc_tls="no"
874 ;;
1be10ad2
JQ
875 --enable-vnc-tls) vnc_tls="yes"
876 ;;
2f9606b3
AL
877 --disable-vnc-sasl) vnc_sasl="no"
878 ;;
ea784e3b
JQ
879 --enable-vnc-sasl) vnc_sasl="yes"
880 ;;
2f6f5c7a
CC
881 --disable-vnc-jpeg) vnc_jpeg="no"
882 ;;
883 --enable-vnc-jpeg) vnc_jpeg="yes"
884 ;;
efe556ad
CC
885 --disable-vnc-png) vnc_png="no"
886 ;;
887 --enable-vnc-png) vnc_png="yes"
888 ;;
7536ee4b
TH
889 --disable-vnc-ws) vnc_ws="no"
890 ;;
891 --enable-vnc-ws) vnc_ws="yes"
892 ;;
443f1376 893 --disable-slirp) slirp="no"
1d14ffa9 894 ;;
ee682d27
SW
895 --disable-uuid) uuid="no"
896 ;;
897 --enable-uuid) uuid="yes"
898 ;;
e0e6c8c0 899 --disable-vde) vde="no"
8a16d273 900 ;;
dfb278bd
JQ
901 --enable-vde) vde="yes"
902 ;;
58952137
VM
903 --disable-netmap) netmap="no"
904 ;;
905 --enable-netmap) netmap="yes"
906 ;;
e37630ca
AL
907 --disable-xen) xen="no"
908 ;;
fc321b4b
JQ
909 --enable-xen) xen="yes"
910 ;;
eb6fda0f
AP
911 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
912 ;;
913 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
914 ;;
2e4d9fb1
AJ
915 --disable-brlapi) brlapi="no"
916 ;;
4ffcedb6
JQ
917 --enable-brlapi) brlapi="yes"
918 ;;
fb599c9a
AZ
919 --disable-bluez) bluez="no"
920 ;;
a20a6f46
JQ
921 --enable-bluez) bluez="yes"
922 ;;
7ba1e619
AL
923 --disable-kvm) kvm="no"
924 ;;
b31a0277
JQ
925 --enable-kvm) kvm="yes"
926 ;;
9195b2c2
SW
927 --disable-tcg-interpreter) tcg_interpreter="no"
928 ;;
929 --enable-tcg-interpreter) tcg_interpreter="yes"
930 ;;
47e98658
CB
931 --disable-cap-ng) cap_ng="no"
932 ;;
933 --enable-cap-ng) cap_ng="yes"
934 ;;
cd4ec0b4
GH
935 --disable-spice) spice="no"
936 ;;
937 --enable-spice) spice="yes"
938 ;;
c589b249
RS
939 --disable-libiscsi) libiscsi="no"
940 ;;
941 --enable-libiscsi) libiscsi="yes"
942 ;;
6542aa9c
PL
943 --disable-libnfs) libnfs="no"
944 ;;
945 --enable-libnfs) libnfs="yes"
946 ;;
05c2a3e7
FB
947 --enable-profiler) profiler="yes"
948 ;;
14821030
PB
949 --disable-cocoa) cocoa="no"
950 ;;
c2de5c91 951 --enable-cocoa)
952 cocoa="yes" ;
953 sdl="no" ;
954 audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
1d14ffa9 955 ;;
cad25d69 956 --disable-system) softmmu="no"
0a8e90f4 957 ;;
cad25d69 958 --enable-system) softmmu="yes"
0a8e90f4 959 ;;
0953a80f
ZA
960 --disable-user)
961 linux_user="no" ;
962 bsd_user="no" ;
0953a80f
ZA
963 ;;
964 --enable-user) ;;
831b7825 965 --disable-linux-user) linux_user="no"
0a8e90f4 966 ;;
831b7825
TS
967 --enable-linux-user) linux_user="yes"
968 ;;
84778508
BS
969 --disable-bsd-user) bsd_user="no"
970 ;;
971 --enable-bsd-user) bsd_user="yes"
972 ;;
379f6698
PB
973 --enable-guest-base) guest_base="yes"
974 ;;
975 --disable-guest-base) guest_base="no"
976 ;;
40d6444e 977 --enable-pie) pie="yes"
34005a00 978 ;;
40d6444e 979 --disable-pie) pie="no"
34005a00 980 ;;
85aa5189
FB
981 --enable-werror) werror="yes"
982 ;;
983 --disable-werror) werror="no"
984 ;;
63678e17
SN
985 --enable-stack-protector) stack_protector="yes"
986 ;;
987 --disable-stack-protector) stack_protector="no"
988 ;;
4d3b6f6e
AZ
989 --disable-curses) curses="no"
990 ;;
c584a6d0
JQ
991 --enable-curses) curses="yes"
992 ;;
769ce76d
AG
993 --disable-curl) curl="no"
994 ;;
788c8196
JQ
995 --enable-curl) curl="yes"
996 ;;
2df87df7
JQ
997 --disable-fdt) fdt="no"
998 ;;
999 --enable-fdt) fdt="yes"
1000 ;;
5c6c3a6c
CH
1001 --disable-linux-aio) linux_aio="no"
1002 ;;
1003 --enable-linux-aio) linux_aio="yes"
1004 ;;
758e8e38
VJ
1005 --disable-attr) attr="no"
1006 ;;
1007 --enable-attr) attr="yes"
1008 ;;
77755340
TS
1009 --disable-blobs) blobs="no"
1010 ;;
4a19f1ec
PB
1011 --with-pkgversion=*) pkgversion=" ($optarg)"
1012 ;;
519175a2
AB
1013 --with-coroutine=*) coroutine="$optarg"
1014 ;;
70c60c08
SH
1015 --disable-coroutine-pool) coroutine_pool="no"
1016 ;;
1017 --enable-coroutine-pool) coroutine_pool="yes"
1018 ;;
a25dba17 1019 --disable-docs) docs="no"
70ec5dc0 1020 ;;
a25dba17 1021 --enable-docs) docs="yes"
83a3ab8b 1022 ;;
d5970055
MT
1023 --disable-vhost-net) vhost_net="no"
1024 ;;
1025 --enable-vhost-net) vhost_net="yes"
1026 ;;
5e9be92d
NB
1027 --disable-vhost-scsi) vhost_scsi="no"
1028 ;;
1029 --enable-vhost-scsi) vhost_scsi="yes"
1030 ;;
da076ffe 1031 --disable-opengl) opengl="no"
20ff075b 1032 ;;
da076ffe 1033 --enable-opengl) opengl="yes"
20ff075b 1034 ;;
f27aaf4b
CB
1035 --disable-rbd) rbd="no"
1036 ;;
1037 --enable-rbd) rbd="yes"
1038 ;;
8c84cf11
ST
1039 --disable-xfsctl) xfs="no"
1040 ;;
1041 --enable-xfsctl) xfs="yes"
1042 ;;
111a38b0
RR
1043 --disable-smartcard-nss) smartcard_nss="no"
1044 ;;
1045 --enable-smartcard-nss) smartcard_nss="yes"
1046 ;;
2b2325ff
GH
1047 --disable-libusb) libusb="no"
1048 ;;
1049 --enable-libusb) libusb="yes"
1050 ;;
69354a83
HG
1051 --disable-usb-redir) usb_redir="no"
1052 ;;
1053 --enable-usb-redir) usb_redir="yes"
1054 ;;
1ece9905
AL
1055 --disable-zlib-test) zlib="no"
1056 ;;
b25c9dff
SW
1057 --disable-lzo) lzo="no"
1058 ;;
607dacd0
QN
1059 --enable-lzo) lzo="yes"
1060 ;;
b25c9dff
SW
1061 --disable-snappy) snappy="no"
1062 ;;
607dacd0
QN
1063 --enable-snappy) snappy="yes"
1064 ;;
6b383c08
PW
1065 --disable-bzip2) bzip2="no"
1066 ;;
1067 --enable-bzip2) bzip2="yes"
1068 ;;
d138cee9
MR
1069 --enable-guest-agent) guest_agent="yes"
1070 ;;
1071 --disable-guest-agent) guest_agent="no"
1072 ;;
d9840e25
TS
1073 --with-vss-sdk) vss_win32_sdk=""
1074 ;;
1075 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1076 ;;
1077 --without-vss-sdk) vss_win32_sdk="no"
1078 ;;
1079 --with-win-sdk) win_sdk=""
1080 ;;
1081 --with-win-sdk=*) win_sdk="$optarg"
1082 ;;
1083 --without-win-sdk) win_sdk="no"
1084 ;;
4b1c11fd
DB
1085 --enable-tools) want_tools="yes"
1086 ;;
1087 --disable-tools) want_tools="no"
1088 ;;
f794573e
EO
1089 --enable-seccomp) seccomp="yes"
1090 ;;
1091 --disable-seccomp) seccomp="no"
1092 ;;
eb100396
BR
1093 --disable-glusterfs) glusterfs="no"
1094 ;;
1095 --enable-glusterfs) glusterfs="yes"
1096 ;;
c9a12e75
CN
1097 --disable-archipelago) archipelago="no"
1098 ;;
1099 --enable-archipelago) archipelago="yes"
1100 ;;
52b53c04
FZ
1101 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1102 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
583f6e7b 1103 ;;
a4ccabcf
AL
1104 --disable-gtk) gtk="no"
1105 ;;
1106 --enable-gtk) gtk="yes"
1107 ;;
2da776db
MH
1108 --enable-rdma) rdma="yes"
1109 ;;
1110 --disable-rdma) rdma="no"
1111 ;;
528de90a
DB
1112 --with-gtkabi=*) gtkabi="$optarg"
1113 ;;
bbbf9bfb
SW
1114 --disable-vte) vte="no"
1115 ;;
1116 --enable-vte) vte="yes"
1117 ;;
e91c793c
CR
1118 --disable-tpm) tpm="no"
1119 ;;
ab214c29
SB
1120 --enable-tpm) tpm="yes"
1121 ;;
0a12ec87
RJ
1122 --disable-libssh2) libssh2="no"
1123 ;;
1124 --enable-libssh2) libssh2="yes"
1125 ;;
4f18b782
JC
1126 --enable-vhdx) vhdx="yes"
1127 ;;
1128 --disable-vhdx) vhdx="no"
1129 ;;
95c6bff3
BC
1130 --disable-quorum) quorum="no"
1131 ;;
1132 --enable-quorum) quorum="yes"
1133 ;;
a99d57bb
WG
1134 --disable-numa) numa="no"
1135 ;;
1136 --enable-numa) numa="yes"
1137 ;;
2847b469
FZ
1138 --disable-tcmalloc) tcmalloc="no"
1139 ;;
1140 --enable-tcmalloc) tcmalloc="yes"
1141 ;;
2d2ad6d0
FZ
1142 *)
1143 echo "ERROR: unknown option $opt"
1144 echo "Try '$0 --help' for more information"
1145 exit 1
7f1559c6 1146 ;;
7d13299d
FB
1147 esac
1148done
1149
f6f0b7d9
SW
1150if ! has $python; then
1151 error_exit "Python not found. Use --python=/path/to/python"
1152fi
1153
1154# Note that if the Python conditional here evaluates True we will exit
1155# with status 1 which is a shell 'false' value.
1156if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
1157 error_exit "Cannot use '$python', Python 2.4 or later is required." \
1158 "Note that Python 3 or later is not yet supported." \
1159 "Use --python=/path/to/python to specify a supported Python."
1160fi
1161
1162# The -B switch was added in Python 2.6.
1163# If it is supplied, compiled files are not written.
1164# Use it for Python versions which support it.
1165if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
1166 python="$python -B"
1167fi
1168
40293e58 1169case "$cpu" in
e3608d66
RH
1170 ppc)
1171 CPU_CFLAGS="-m32"
1172 LDFLAGS="-m32 $LDFLAGS"
1173 ;;
1174 ppc64)
1175 CPU_CFLAGS="-m64"
1176 LDFLAGS="-m64 $LDFLAGS"
1177 ;;
9b9c37c3 1178 sparc)
ed968ff1 1179 LDFLAGS="-m32 $LDFLAGS"
79f3b12f 1180 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
3142255c 1181 ;;
ed968ff1 1182 sparc64)
ed968ff1 1183 LDFLAGS="-m64 $LDFLAGS"
79f3b12f 1184 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
3142255c 1185 ;;
76d83bde 1186 s390)
061cdd81 1187 CPU_CFLAGS="-m31"
28d7cc49
RH
1188 LDFLAGS="-m31 $LDFLAGS"
1189 ;;
1190 s390x)
061cdd81 1191 CPU_CFLAGS="-m64"
28d7cc49 1192 LDFLAGS="-m64 $LDFLAGS"
76d83bde 1193 ;;
40293e58 1194 i386)
79f3b12f 1195 CPU_CFLAGS="-m32"
0c439cbf 1196 LDFLAGS="-m32 $LDFLAGS"
2b2e59e6 1197 cc_i386='$(CC) -m32'
40293e58
FB
1198 ;;
1199 x86_64)
79f3b12f 1200 CPU_CFLAGS="-m64"
0c439cbf 1201 LDFLAGS="-m64 $LDFLAGS"
2b2e59e6 1202 cc_i386='$(CC) -m32'
d2fbca94 1203 ;;
c72b26ec
RH
1204 x32)
1205 CPU_CFLAGS="-mx32"
1206 LDFLAGS="-mx32 $LDFLAGS"
1207 cc_i386='$(CC) -m32'
1208 ;;
30163d89 1209 # No special flags required for other host CPUs
3142255c
BS
1210esac
1211
79f3b12f
PC
1212QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1213EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1214
60e0df25
PM
1215default_target_list=""
1216
6e92f823
PM
1217mak_wilds=""
1218
1219if [ "$softmmu" = "yes" ]; then
1220 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
60e0df25 1221fi
6e92f823
PM
1222if [ "$linux_user" = "yes" ]; then
1223 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
60e0df25 1224fi
6e92f823
PM
1225if [ "$bsd_user" = "yes" ]; then
1226 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
60e0df25
PM
1227fi
1228
6e92f823
PM
1229for config in $mak_wilds; do
1230 default_target_list="${default_target_list} $(basename "$config" .mak)"
1231done
1232
af5db58e
PB
1233if test x"$show_help" = x"yes" ; then
1234cat << EOF
1235
1236Usage: configure [options]
1237Options: [defaults in brackets after descriptions]
1238
08fb77ed
SW
1239Standard options:
1240 --help print this message
1241 --prefix=PREFIX install in PREFIX [$prefix]
1242 --interp-prefix=PREFIX where to find shared libraries, etc.
1243 use %M for cpu name [$interp_prefix]
1244 --target-list=LIST set target list (default: build everything)
1245$(echo Available targets: $default_target_list | \
1246 fold -s -w 53 | sed -e 's/^/ /')
1247
1248Advanced options (experts only):
1249 --source-path=PATH path of source code [$source_path]
1250 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1251 --cc=CC use C compiler CC [$cc]
1252 --iasl=IASL use ACPI compiler IASL [$iasl]
1253 --host-cc=CC use C compiler CC [$host_cc] for code run at
1254 build time
1255 --cxx=CXX use C++ compiler CXX [$cxx]
1256 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1257 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1258 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1259 --make=MAKE use specified make [$make]
1260 --install=INSTALL use specified install [$install]
1261 --python=PYTHON use specified python [$python]
1262 --smbd=SMBD use specified smbd [$smbd]
1263 --static enable static build [$static]
1264 --mandir=PATH install man pages in PATH
1265 --datadir=PATH install firmware in PATH$confsuffix
1266 --docdir=PATH install documentation in PATH$confsuffix
1267 --bindir=PATH install binaries in PATH
1268 --libdir=PATH install libraries in PATH
1269 --sysconfdir=PATH install config in PATH$confsuffix
1270 --localstatedir=PATH install local state in PATH (set at runtime on win32)
e26110cf 1271 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
17969268 1272 --enable-modules enable modules support
08fb77ed
SW
1273 --enable-debug-tcg enable TCG debugging
1274 --disable-debug-tcg disable TCG debugging (default)
d61ce900
PM
1275 --enable-debug-info enable debugging information (default)
1276 --disable-debug-info disable debugging information
08fb77ed
SW
1277 --enable-debug enable common debug build options
1278 --enable-sparse enable sparse checker
1279 --disable-sparse disable sparse checker (default)
1280 --disable-strip disable stripping binaries
1281 --disable-werror disable compilation abort on warning
63678e17 1282 --disable-stack-protector disable compiler-provided stack protection
08fb77ed
SW
1283 --disable-sdl disable SDL
1284 --enable-sdl enable SDL
47c03744 1285 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
08fb77ed
SW
1286 --disable-gtk disable gtk UI
1287 --enable-gtk enable gtk UI
f92d61f3 1288 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
08fb77ed
SW
1289 --disable-virtfs disable VirtFS
1290 --enable-virtfs enable VirtFS
1291 --disable-vnc disable VNC
1292 --enable-vnc enable VNC
1293 --disable-cocoa disable Cocoa (Mac OS X only)
1294 --enable-cocoa enable Cocoa (default on Mac OS X)
1295 --audio-drv-list=LIST set audio drivers list:
1296 Available drivers: $audio_possible_drivers
1297 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1298 --block-drv-rw-whitelist=L
1299 set block driver read-write whitelist
1300 (affects only QEMU, not qemu-img)
1301 --block-drv-ro-whitelist=L
1302 set block driver read-only whitelist
1303 (affects only QEMU, not qemu-img)
1304 --disable-xen disable xen backend driver support
1305 --enable-xen enable xen backend driver support
1306 --disable-xen-pci-passthrough
1307 --enable-xen-pci-passthrough
1308 --disable-brlapi disable BrlAPI
1309 --enable-brlapi enable BrlAPI
1310 --disable-vnc-tls disable TLS encryption for VNC server
1311 --enable-vnc-tls enable TLS encryption for VNC server
1312 --disable-vnc-sasl disable SASL encryption for VNC server
1313 --enable-vnc-sasl enable SASL encryption for VNC server
1314 --disable-vnc-jpeg disable JPEG lossy compression for VNC server
1315 --enable-vnc-jpeg enable JPEG lossy compression for VNC server
1316 --disable-vnc-png disable PNG compression for VNC server (default)
1317 --enable-vnc-png enable PNG compression for VNC server
1318 --disable-vnc-ws disable Websockets support for VNC server
1319 --enable-vnc-ws enable Websockets support for VNC server
1320 --disable-curses disable curses output
1321 --enable-curses enable curses output
1322 --disable-curl disable curl connectivity
1323 --enable-curl enable curl connectivity
1324 --disable-fdt disable fdt device tree
1325 --enable-fdt enable fdt device tree
1326 --disable-bluez disable bluez stack connectivity
1327 --enable-bluez enable bluez stack connectivity
1328 --disable-slirp disable SLIRP userspace network connectivity
1329 --disable-kvm disable KVM acceleration support
1330 --enable-kvm enable KVM acceleration support
1331 --disable-rdma disable RDMA-based migration support
1332 --enable-rdma enable RDMA-based migration support
1333 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1334 --enable-system enable all system emulation targets
1335 --disable-system disable all system emulation targets
1336 --enable-user enable supported user emulation targets
1337 --disable-user disable all user emulation targets
1338 --enable-linux-user enable all linux usermode emulation targets
1339 --disable-linux-user disable all linux usermode emulation targets
1340 --enable-bsd-user enable all BSD usermode emulation targets
1341 --disable-bsd-user disable all BSD usermode emulation targets
1342 --enable-guest-base enable GUEST_BASE support for usermode
1343 emulation targets
1344 --disable-guest-base disable GUEST_BASE support
1345 --enable-pie build Position Independent Executables
1346 --disable-pie do not build Position Independent Executables
1347 --fmod-lib path to FMOD library
1348 --fmod-inc path to FMOD includes
1349 --oss-lib path to OSS library
08fb77ed
SW
1350 --cpu=CPU Build for host CPU [$cpu]
1351 --disable-uuid disable uuid support
1352 --enable-uuid enable uuid support
1353 --disable-vde disable support for vde network
1354 --enable-vde enable support for vde network
1355 --disable-netmap disable support for netmap network
1356 --enable-netmap enable support for netmap network
1357 --disable-linux-aio disable Linux AIO support
1358 --enable-linux-aio enable Linux AIO support
1359 --disable-cap-ng disable libcap-ng support
1360 --enable-cap-ng enable libcap-ng support
2d5361f2 1361 --disable-attr disable attr and xattr support
08fb77ed
SW
1362 --enable-attr enable attr and xattr support
1363 --disable-blobs disable installing provided firmware blobs
1364 --enable-docs enable documentation build
1365 --disable-docs disable documentation build
1366 --disable-vhost-net disable vhost-net acceleration support
1367 --enable-vhost-net enable vhost-net acceleration support
5b808275 1368 --enable-trace-backends=B Set trace backend
08fb77ed
SW
1369 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1370 --with-trace-file=NAME Full PATH,NAME of file to store traces
1371 Default:trace-<pid>
1372 --disable-spice disable spice
1373 --enable-spice enable spice
1374 --enable-rbd enable building the rados block device (rbd)
1375 --disable-libiscsi disable iscsi support
1376 --enable-libiscsi enable iscsi support
6542aa9c
PL
1377 --disable-libnfs disable nfs support
1378 --enable-libnfs enable nfs support
08fb77ed
SW
1379 --disable-smartcard-nss disable smartcard nss support
1380 --enable-smartcard-nss enable smartcard nss support
1381 --disable-libusb disable libusb (for usb passthrough)
1382 --enable-libusb enable libusb (for usb passthrough)
1383 --disable-usb-redir disable usb network redirection support
1384 --enable-usb-redir enable usb network redirection support
607dacd0
QN
1385 --enable-lzo enable the support of lzo compression library
1386 --enable-snappy enable the support of snappy compression library
6b383c08
PW
1387 --enable-bzip2 enable the support of bzip2 compression library (for
1388 reading bzip2-compressed dmg images)
08fb77ed
SW
1389 --disable-guest-agent disable building of the QEMU Guest Agent
1390 --enable-guest-agent enable building of the QEMU Guest Agent
1391 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1392 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1393 --disable-seccomp disable seccomp support
2d5361f2 1394 --enable-seccomp enable seccomp support
08fb77ed
SW
1395 --with-coroutine=BACKEND coroutine backend. Supported options:
1396 gthread, ucontext, sigaltstack, windows
1397 --disable-coroutine-pool disable coroutine freelist (worse performance)
1398 --enable-coroutine-pool enable coroutine freelist (better performance)
1399 --enable-glusterfs enable GlusterFS backend
1400 --disable-glusterfs disable GlusterFS backend
c9a12e75
CN
1401 --enable-archipelago enable Archipelago backend
1402 --disable-archipelago disable Archipelago backend
08fb77ed
SW
1403 --enable-gcov enable test coverage analysis with gcov
1404 --gcov=GCOV use specified gcov [$gcov_tool]
e91c793c 1405 --disable-tpm disable TPM support
08fb77ed
SW
1406 --enable-tpm enable TPM support
1407 --disable-libssh2 disable ssh block device support
1408 --enable-libssh2 enable ssh block device support
2d5361f2 1409 --disable-vhdx disable support for the Microsoft VHDX image format
08fb77ed 1410 --enable-vhdx enable support for the Microsoft VHDX image format
95c6bff3
BC
1411 --disable-quorum disable quorum block filter support
1412 --enable-quorum enable quorum block filter support
a99d57bb
WG
1413 --disable-numa disable libnuma support
1414 --enable-numa enable libnuma support
2847b469
FZ
1415 --disable-tcmalloc disable tcmalloc support
1416 --enable-tcmalloc enable tcmalloc support
08fb77ed
SW
1417
1418NOTE: The object files are built at the place where configure is launched
af5db58e 1419EOF
2d2ad6d0 1420exit 0
af5db58e
PB
1421fi
1422
359bc95d
PM
1423# Now we have handled --enable-tcg-interpreter and know we're not just
1424# printing the help message, bail out if the host CPU isn't supported.
1425if test "$ARCH" = "unknown"; then
1426 if test "$tcg_interpreter" = "yes" ; then
1427 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1428 ARCH=tci
1429 else
76ad07a4 1430 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
359bc95d
PM
1431 fi
1432fi
1433
9c83ffd8
PM
1434# Consult white-list to determine whether to enable werror
1435# by default. Only enable by default for git builds
1436z_version=`cut -f3 -d. $source_path/VERSION`
1437
1438if test -z "$werror" ; then
1439 if test -d "$source_path/.git" -a \
1440 "$linux" = "yes" ; then
1441 werror="yes"
1442 else
1443 werror="no"
1444 fi
1445fi
1446
8d05095c
PB
1447# check that the C compiler works.
1448cat > $TMPC <<EOF
75cafad7 1449int main(void) { return 0; }
8d05095c
PB
1450EOF
1451
1452if compile_object ; then
1453 : C compiler works ok
1454else
76ad07a4 1455 error_exit "\"$cc\" either does not exist or does not work"
8d05095c
PB
1456fi
1457
98b21dcd
PM
1458# Check that the C++ compiler exists and works with the C compiler
1459if has $cxx; then
1460 cat > $TMPC <<EOF
1461int c_function(void);
1462int main(void) { return c_function(); }
1463EOF
1464
1465 compile_object
1466
9c83ffd8 1467 cat > $TMPCXX <<EOF
98b21dcd
PM
1468extern "C" {
1469 int c_function(void);
1470}
1471int c_function(void) { return 42; }
1472EOF
1473
9c83ffd8
PM
1474 update_cxxflags
1475
1476 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
98b21dcd
PM
1477 # C++ compiler $cxx works ok with C compiler $cc
1478 :
1479 else
1480 echo "C++ compiler $cxx does not work with C compiler $cc"
1481 echo "Disabling C++ specific optional code"
1482 cxx=
1483 fi
1484else
1485 echo "No C++ compiler available; disabling C++ specific optional code"
1486 cxx=
1487fi
1488
8d05095c
PB
1489gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1490gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1491gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
37746c5e 1492gcc_flags="-Wendif-labels $gcc_flags"
c1556a81 1493gcc_flags="-Wno-initializer-overrides $gcc_flags"
71429097 1494gcc_flags="-Wno-string-plus-int $gcc_flags"
6ca026cb
PM
1495# Note that we do not add -Werror to gcc_flags here, because that would
1496# enable it for all configure tests. If a configure test failed due
1497# to -Werror this would just silently disable some features,
1498# so it's too error prone.
8d05095c
PB
1499cat > $TMPC << EOF
1500int main(void) { return 0; }
1501EOF
1502for flag in $gcc_flags; do
a1d29d6c
PM
1503 # Use the positive sense of the flag when testing for -Wno-wombat
1504 # support (gcc will happily accept the -Wno- form of unknown
1505 # warning options).
1506 optflag="$(echo $flag | sed -e 's/^-Wno-/-W/')"
1507 if compile_prog "-Werror $optflag" "" ; then
8d05095c
PB
1508 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1509 fi
1510done
1511
3b463a3f 1512if test "$stack_protector" != "no"; then
63678e17 1513 gcc_flags="-fstack-protector-strong -fstack-protector-all"
3b463a3f 1514 sp_on=0
63678e17 1515 for flag in $gcc_flags; do
590e5dd9
PM
1516 # We need to check both a compile and a link, since some compiler
1517 # setups fail only on a .c->.o compile and some only at link time
1518 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1519 compile_prog "-Werror $flag" ""; then
63678e17
SN
1520 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1521 LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
3b463a3f 1522 sp_on=1
63678e17
SN
1523 break
1524 fi
1525 done
3b463a3f
MR
1526 if test "$stack_protector" = yes; then
1527 if test $sp_on = 0; then
1528 error_exit "Stack protector not supported"
1529 fi
1530 fi
37746c5e
MAL
1531fi
1532
cbdd1999
PB
1533# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1534# large functions that use global variables. The bug is in all releases of
1535# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1536# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1537cat > $TMPC << EOF
1538#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1539int main(void) { return 0; }
1540#else
1541#error No bug in this compiler.
1542#endif
1543EOF
1544if compile_prog "-Werror -fno-gcse" "" ; then
1545 TRANSLATE_OPT_CFLAGS=-fno-gcse
1546fi
1547
40d6444e 1548if test "$static" = "yes" ; then
aa0d1f44
PB
1549 if test "$modules" = "yes" ; then
1550 error_exit "static and modules are mutually incompatible"
1551 fi
40d6444e 1552 if test "$pie" = "yes" ; then
76ad07a4 1553 error_exit "static and pie are mutually incompatible"
40d6444e
AK
1554 else
1555 pie="no"
1556 fi
1557fi
1558
768b7855
EC
1559# Unconditional check for compiler __thread support
1560 cat > $TMPC << EOF
1561static __thread int tls_var;
1562int main(void) { return tls_var; }
1563EOF
1564
1565if ! compile_prog "-Werror" "" ; then
1566 error_exit "Your compiler does not support the __thread specifier for " \
1567 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1568fi
1569
40d6444e
AK
1570if test "$pie" = ""; then
1571 case "$cpu-$targetos" in
c72b26ec 1572 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
40d6444e
AK
1573 ;;
1574 *)
1575 pie="no"
1576 ;;
1577 esac
1578fi
1579
1580if test "$pie" != "no" ; then
1581 cat > $TMPC << EOF
21d4a791
AK
1582
1583#ifdef __linux__
1584# define THREAD __thread
1585#else
1586# define THREAD
1587#endif
1588
1589static THREAD int tls_var;
1590
1591int main(void) { return tls_var; }
1592
40d6444e
AK
1593EOF
1594 if compile_prog "-fPIE -DPIE" "-pie"; then
1595 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1596 LDFLAGS="-pie $LDFLAGS"
1597 pie="yes"
1598 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1599 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1600 fi
1601 else
1602 if test "$pie" = "yes"; then
76ad07a4 1603 error_exit "PIE not available due to missing toolchain support"
40d6444e
AK
1604 else
1605 echo "Disabling PIE due to missing toolchain support"
1606 pie="no"
1607 fi
1608 fi
46eef33b 1609
e4a7b344 1610 if compile_prog "-Werror -fno-pie" "-nopie"; then
46eef33b
BS
1611 CFLAGS_NOPIE="-fno-pie"
1612 LDFLAGS_NOPIE="-nopie"
1613 fi
40d6444e
AK
1614fi
1615
66518bf6
DS
1616# check for broken gcc and libtool in RHEL5
1617if test -n "$libtool" -a "$pie" != "no" ; then
1618 cat > $TMPC <<EOF
1619
1620void *f(unsigned char *buf, int len);
1621void *g(unsigned char *buf, int len);
1622
1623void *
1624f(unsigned char *buf, int len)
1625{
1626 return (void*)0L;
1627}
1628
1629void *
1630g(unsigned char *buf, int len)
1631{
1632 return f(buf, len);
1633}
1634
1635EOF
1636 if ! libtool_prog; then
1637 echo "Disabling libtool due to broken toolchain support"
1638 libtool=
1639 fi
1640fi
1641
09dada40
PB
1642##########################################
1643# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1644# use i686 as default anyway, but for those that don't, an explicit
1645# specification is necessary
1646
1647if test "$cpu" = "i386"; then
1648 cat > $TMPC << EOF
1649static int sfaa(int *ptr)
1650{
1651 return __sync_fetch_and_and(ptr, 0);
1652}
1653
1654int main(void)
1655{
1656 int val = 42;
1405b629 1657 val = __sync_val_compare_and_swap(&val, 0, 1);
09dada40
PB
1658 sfaa(&val);
1659 return val;
1660}
1661EOF
1662 if ! compile_prog "" "" ; then
1663 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1664 fi
1665fi
1666
1667#########################################
ec530c81 1668# Solaris specific configure tool chain decisions
09dada40 1669
ec530c81 1670if test "$solaris" = "yes" ; then
6792aa11
LM
1671 if has $install; then
1672 :
1673 else
76ad07a4
PM
1674 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1675 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1676 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
ec530c81 1677 fi
6792aa11 1678 if test "`path_of $install`" = "/usr/sbin/install" ; then
76ad07a4
PM
1679 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1680 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1681 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
ec530c81 1682 fi
6792aa11
LM
1683 if has ar; then
1684 :
1685 else
ec530c81 1686 if test -f /usr/ccs/bin/ar ; then
76ad07a4
PM
1687 error_exit "No path includes ar" \
1688 "Add /usr/ccs/bin to your path and rerun configure"
ec530c81 1689 fi
76ad07a4 1690 error_exit "No path includes ar"
ec530c81 1691 fi
5fafdf24 1692fi
ec530c81 1693
afb63ebd 1694if test -z "${target_list+xxx}" ; then
121afa9e
AL
1695 target_list="$default_target_list"
1696else
1697 target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1698fi
25b48338
PM
1699
1700# Check that we recognised the target name; this allows a more
1701# friendly error message than if we let it fall through.
1702for target in $target_list; do
1703 case " $default_target_list " in
1704 *" $target "*)
1705 ;;
1706 *)
1707 error_exit "Unknown target name '$target'"
1708 ;;
1709 esac
1710done
1711
f55fe278
PB
1712# see if system emulation was really requested
1713case " $target_list " in
1714 *"-softmmu "*) softmmu=yes
1715 ;;
1716 *) softmmu=no
1717 ;;
1718esac
5327cf48 1719
249247c9
JQ
1720feature_not_found() {
1721 feature=$1
21684af0 1722 remedy=$2
249247c9 1723
76ad07a4 1724 error_exit "User requested feature $feature" \
21684af0
SS
1725 "configure was not able to find it." \
1726 "$remedy"
249247c9
JQ
1727}
1728
7d13299d
FB
1729# ---
1730# big/little endian test
1731cat > $TMPC << EOF
61cc919f
MF
1732short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1733short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1734extern int foo(short *, short *);
1735int main(int argc, char *argv[]) {
1736 return foo(big_endian, little_endian);
7d13299d
FB
1737}
1738EOF
1739
61cc919f
MF
1740if compile_object ; then
1741 if grep -q BiGeNdIaN $TMPO ; then
1742 bigendian="yes"
1743 elif grep -q LiTtLeEnDiAn $TMPO ; then
1744 bigendian="no"
1745 else
1746 echo big/little test failed
21d89f84 1747 fi
61cc919f
MF
1748else
1749 echo big/little test failed
7d13299d
FB
1750fi
1751
015a33bd
GA
1752##########################################
1753# L2TPV3 probe
1754
1755cat > $TMPC <<EOF
1756#include <sys/socket.h>
bff6cb72 1757#include <linux/ip.h>
015a33bd
GA
1758int main(void) { return sizeof(struct mmsghdr); }
1759EOF
1760if compile_prog "" "" ; then
1761 l2tpv3=yes
1762else
1763 l2tpv3=no
1764fi
1765
779ab5e3
SW
1766##########################################
1767# pkg-config probe
1768
1769if ! has "$pkg_config_exe"; then
76ad07a4 1770 error_exit "pkg-config binary '$pkg_config_exe' not found"
779ab5e3
SW
1771fi
1772
b0a47e79
JQ
1773##########################################
1774# NPTL probe
1775
24cb36a6 1776if test "$linux_user" = "yes"; then
b0a47e79 1777 cat > $TMPC <<EOF
bd0c5661 1778#include <sched.h>
30813cea 1779#include <linux/futex.h>
182eacc0 1780int main(void) {
bd0c5661
PB
1781#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1782#error bork
1783#endif
182eacc0 1784 return 0;
bd0c5661
PB
1785}
1786EOF
24cb36a6 1787 if ! compile_object ; then
21684af0 1788 feature_not_found "nptl" "Install glibc and linux kernel headers."
b0a47e79 1789 fi
bd0c5661
PB
1790fi
1791
ac62922e
AZ
1792##########################################
1793# zlib check
1794
1ece9905
AL
1795if test "$zlib" != "no" ; then
1796 cat > $TMPC << EOF
ac62922e
AZ
1797#include <zlib.h>
1798int main(void) { zlibVersion(); return 0; }
1799EOF
1ece9905
AL
1800 if compile_prog "" "-lz" ; then
1801 :
1802 else
76ad07a4
PM
1803 error_exit "zlib check failed" \
1804 "Make sure to have the zlib libs and headers installed."
1ece9905 1805 fi
ac62922e 1806fi
eb0ecd5a 1807LIBS="$LIBS -lz"
ac62922e 1808
607dacd0
QN
1809##########################################
1810# lzo check
1811
1812if test "$lzo" != "no" ; then
1813 cat > $TMPC << EOF
1814#include <lzo/lzo1x.h>
1815int main(void) { lzo_version(); return 0; }
1816EOF
1817 if compile_prog "" "-llzo2" ; then
b25c9dff
SW
1818 libs_softmmu="$libs_softmmu -llzo2"
1819 lzo="yes"
607dacd0 1820 else
b25c9dff
SW
1821 if test "$lzo" = "yes"; then
1822 feature_not_found "liblzo2" "Install liblzo2 devel"
1823 fi
1824 lzo="no"
607dacd0 1825 fi
607dacd0
QN
1826fi
1827
1828##########################################
1829# snappy check
1830
1831if test "$snappy" != "no" ; then
1832 cat > $TMPC << EOF
1833#include <snappy-c.h>
1834int main(void) { snappy_max_compressed_length(4096); return 0; }
1835EOF
1836 if compile_prog "" "-lsnappy" ; then
b25c9dff
SW
1837 libs_softmmu="$libs_softmmu -lsnappy"
1838 snappy="yes"
607dacd0 1839 else
b25c9dff
SW
1840 if test "$snappy" = "yes"; then
1841 feature_not_found "libsnappy" "Install libsnappy devel"
1842 fi
1843 snappy="no"
607dacd0 1844 fi
607dacd0
QN
1845fi
1846
6b383c08
PW
1847##########################################
1848# bzip2 check
1849
1850if test "$bzip2" != "no" ; then
1851 cat > $TMPC << EOF
1852#include <bzlib.h>
1853int main(void) { BZ2_bzlibVersion(); return 0; }
1854EOF
1855 if compile_prog "" "-lbz2" ; then
1856 bzip2="yes"
1857 else
1858 if test "$bzip2" = "yes"; then
1859 feature_not_found "libbzip2" "Install libbzip2 devel"
1860 fi
1861 bzip2="no"
1862 fi
1863fi
1864
f794573e
EO
1865##########################################
1866# libseccomp check
1867
1868if test "$seccomp" != "no" ; then
ae6e8ef1
PM
1869 if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1870 $pkg_config --atleast-version=2.1.1 libseccomp; then
b4451996 1871 libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
372e47e9 1872 QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
f794573e
EO
1873 seccomp="yes"
1874 else
f794573e 1875 if test "$seccomp" = "yes"; then
896848f0 1876 feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
f794573e 1877 fi
e84d5956 1878 seccomp="no"
f794573e
EO
1879 fi
1880fi
e37630ca
AL
1881##########################################
1882# xen probe
1883
fc321b4b 1884if test "$xen" != "no" ; then
b2266bee 1885 xen_libs="-lxenstore -lxenctrl -lxenguest"
d5b93ddf 1886
50ced5b3
SW
1887 # First we test whether Xen headers and libraries are available.
1888 # If no, we are done and there is no Xen support.
1889 # If yes, more tests are run to detect the Xen version.
1890
1891 # Xen (any)
b2266bee 1892 cat > $TMPC <<EOF
e37630ca 1893#include <xenctrl.h>
50ced5b3
SW
1894int main(void) {
1895 return 0;
1896}
1897EOF
1898 if ! compile_prog "" "$xen_libs" ; then
1899 # Xen not found
1900 if test "$xen" = "yes" ; then
21684af0 1901 feature_not_found "xen" "Install xen devel"
50ced5b3
SW
1902 fi
1903 xen=no
1904
1905 # Xen unstable
69deef08
PM
1906 elif
1907 cat > $TMPC <<EOF &&
50ced5b3 1908#include <xenctrl.h>
e108a3c1 1909#include <xenstore.h>
d5b93ddf
AP
1910#include <stdint.h>
1911#include <xen/hvm/hvm_info_table.h>
1912#if !defined(HVM_MAX_VCPUS)
1913# error HVM_MAX_VCPUS not defined
1914#endif
3996e85c
PD
1915int main(void) {
1916 xc_interface *xc;
1917 xs_daemon_open();
1918 xc = xc_interface_open(0, 0, 0);
1919 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1920 xc_gnttab_open(NULL, 0);
1921 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1922 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1923 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
1924 return 0;
1925}
1926EOF
1927 compile_prog "" "$xen_libs"
1928 then
1929 xen_ctrl_version=450
1930 xen=yes
1931
1932 elif
1933 cat > $TMPC <<EOF &&
1934#include <xenctrl.h>
1935#include <xenstore.h>
1936#include <stdint.h>
1937#include <xen/hvm/hvm_info_table.h>
1938#if !defined(HVM_MAX_VCPUS)
1939# error HVM_MAX_VCPUS not defined
1940#endif
8688e065
SS
1941int main(void) {
1942 xc_interface *xc;
1943 xs_daemon_open();
1944 xc = xc_interface_open(0, 0, 0);
1945 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1946 xc_gnttab_open(NULL, 0);
1947 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1948 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1949 return 0;
1950}
1951EOF
1952 compile_prog "" "$xen_libs"
69deef08 1953 then
8688e065
SS
1954 xen_ctrl_version=420
1955 xen=yes
1956
69deef08
PM
1957 elif
1958 cat > $TMPC <<EOF &&
8688e065
SS
1959#include <xenctrl.h>
1960#include <xs.h>
1961#include <stdint.h>
1962#include <xen/hvm/hvm_info_table.h>
1963#if !defined(HVM_MAX_VCPUS)
1964# error HVM_MAX_VCPUS not defined
1965#endif
d5b93ddf 1966int main(void) {
d5b93ddf 1967 xs_daemon_open();
9b4c0b56 1968 xc_interface_open(0, 0, 0);
d5b93ddf
AP
1969 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1970 xc_gnttab_open(NULL, 0);
b87de24e 1971 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
d5b93ddf
AP
1972 return 0;
1973}
e37630ca 1974EOF
50ced5b3 1975 compile_prog "" "$xen_libs"
69deef08 1976 then
d5b93ddf 1977 xen_ctrl_version=410
fc321b4b 1978 xen=yes
d5b93ddf
AP
1979
1980 # Xen 4.0.0
69deef08
PM
1981 elif
1982 cat > $TMPC <<EOF &&
d5b93ddf
AP
1983#include <xenctrl.h>
1984#include <xs.h>
1985#include <stdint.h>
1986#include <xen/hvm/hvm_info_table.h>
1987#if !defined(HVM_MAX_VCPUS)
1988# error HVM_MAX_VCPUS not defined
1989#endif
1990int main(void) {
b87de24e
AP
1991 struct xen_add_to_physmap xatp = {
1992 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1993 };
d5b93ddf
AP
1994 xs_daemon_open();
1995 xc_interface_open();
1996 xc_gnttab_open();
1997 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
b87de24e 1998 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
d5b93ddf
AP
1999 return 0;
2000}
2001EOF
2002 compile_prog "" "$xen_libs"
69deef08 2003 then
d5b93ddf
AP
2004 xen_ctrl_version=400
2005 xen=yes
2006
b87de24e 2007 # Xen 3.4.0
69deef08
PM
2008 elif
2009 cat > $TMPC <<EOF &&
b87de24e
AP
2010#include <xenctrl.h>
2011#include <xs.h>
2012int main(void) {
2013 struct xen_add_to_physmap xatp = {
2014 .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2015 };
2016 xs_daemon_open();
2017 xc_interface_open();
2018 xc_gnttab_open();
2019 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2020 xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2021 return 0;
2022}
2023EOF
2024 compile_prog "" "$xen_libs"
69deef08 2025 then
b87de24e
AP
2026 xen_ctrl_version=340
2027 xen=yes
2028
2029 # Xen 3.3.0
69deef08
PM
2030 elif
2031 cat > $TMPC <<EOF &&
d5b93ddf
AP
2032#include <xenctrl.h>
2033#include <xs.h>
2034int main(void) {
2035 xs_daemon_open();
2036 xc_interface_open();
2037 xc_gnttab_open();
2038 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2039 return 0;
2040}
2041EOF
2042 compile_prog "" "$xen_libs"
69deef08 2043 then
d5b93ddf
AP
2044 xen_ctrl_version=330
2045 xen=yes
2046
50ced5b3 2047 # Xen version unsupported
b2266bee 2048 else
fc321b4b 2049 if test "$xen" = "yes" ; then
21684af0 2050 feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
fc321b4b
JQ
2051 fi
2052 xen=no
b2266bee 2053 fi
d5b93ddf
AP
2054
2055 if test "$xen" = yes; then
2056 libs_softmmu="$xen_libs $libs_softmmu"
2057 fi
e37630ca
AL
2058fi
2059
eb6fda0f
AP
2060if test "$xen_pci_passthrough" != "no"; then
2061 if test "$xen" = "yes" && test "$linux" = "yes" &&
2062 test "$xen_ctrl_version" -ge 340; then
2063 xen_pci_passthrough=yes
2064 else
2065 if test "$xen_pci_passthrough" = "yes"; then
eb6fda0f 2066 if test "$xen_ctrl_version" -lt 340; then
76ad07a4
PM
2067 error_exit "User requested feature Xen PCI Passthrough" \
2068 "This feature does not work with Xen 3.3"
eb6fda0f 2069 fi
76ad07a4
PM
2070 error_exit "User requested feature Xen PCI Passthrough" \
2071 " but this feature requires /sys from Linux"
eb6fda0f
AP
2072 fi
2073 xen_pci_passthrough=no
2074 fi
2075fi
2076
44dc0ca3
AL
2077##########################################
2078# libtool probe
2079
3f534581 2080if ! has $libtool; then
44dc0ca3 2081 libtool=
44dc0ca3
AL
2082fi
2083
8e515b12
PM
2084# MacOSX ships with a libtool which isn't the GNU one; weed this
2085# out by checking whether libtool supports the --version switch
2086if test -n "$libtool"; then
2087 if ! "$libtool" --version >/dev/null 2>&1; then
2088 libtool=
2089 fi
2090fi
2091
dfffc653
JQ
2092##########################################
2093# Sparse probe
2094if test "$sparse" != "no" ; then
0dba6195 2095 if has cgcc; then
dfffc653
JQ
2096 sparse=yes
2097 else
2098 if test "$sparse" = "yes" ; then
21684af0 2099 feature_not_found "sparse" "Install sparse binary"
dfffc653
JQ
2100 fi
2101 sparse=no
2102 fi
2103fi
2104
f676c67e
JW
2105##########################################
2106# X11 probe
2107x11_cflags=
2108x11_libs=-lX11
2109if $pkg_config --exists "x11"; then
2110 x11_cflags=`$pkg_config --cflags x11`
2111 x11_libs=`$pkg_config --libs x11`
2112fi
2113
a4ccabcf
AL
2114##########################################
2115# GTK probe
2116
9e04c683
SW
2117if test "$gtkabi" = ""; then
2118 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2119 # Use 3.0 as a fallback if that is available.
2120 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2121 gtkabi=2.0
2122 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2123 gtkabi=3.0
2124 else
2125 gtkabi=2.0
2126 fi
2127fi
2128
a4ccabcf 2129if test "$gtk" != "no"; then
528de90a 2130 gtkpackage="gtk+-$gtkabi"
0a337ed0 2131 gtkx11package="gtk+-x11-$gtkabi"
528de90a
DB
2132 if test "$gtkabi" = "3.0" ; then
2133 gtkversion="3.0.0"
bbbf9bfb
SW
2134 else
2135 gtkversion="2.18.0"
2136 fi
2137 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2138 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2139 gtk_libs=`$pkg_config --libs $gtkpackage`
0a337ed0 2140 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
f676c67e
JW
2141 gtk_cflags="$gtk_cflags $x11_cflags"
2142 gtk_libs="$gtk_libs $x11_libs"
0a337ed0 2143 fi
bbbf9bfb
SW
2144 libs_softmmu="$gtk_libs $libs_softmmu"
2145 gtk="yes"
2146 elif test "$gtk" = "yes"; then
9e04c683 2147 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
bbbf9bfb
SW
2148 else
2149 gtk="no"
2150 fi
2151fi
2152
2153##########################################
2154# VTE probe
2155
2156if test "$vte" != "no"; then
2157 if test "$gtkabi" = "3.0"; then
528de90a
DB
2158 vtepackage="vte-2.90"
2159 vteversion="0.32.0"
2160 else
528de90a
DB
2161 vtepackage="vte"
2162 vteversion="0.24.0"
2163 fi
bbbf9bfb
SW
2164 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2165 vte_cflags=`$pkg_config --cflags $vtepackage`
2166 vte_libs=`$pkg_config --libs $vtepackage`
2167 libs_softmmu="$vte_libs $libs_softmmu"
2168 vte="yes"
2169 elif test "$vte" = "yes"; then
9e04c683
SW
2170 if test "$gtkabi" = "3.0"; then
2171 feature_not_found "vte" "Install libvte-2.90 devel"
2172 else
2173 feature_not_found "vte" "Install libvte devel"
2174 fi
0d185e63 2175 else
bbbf9bfb 2176 vte="no"
a4ccabcf
AL
2177 fi
2178fi
2179
11d9f695
FB
2180##########################################
2181# SDL probe
2182
3ec87ffe
PB
2183# Look for sdl configuration program (pkg-config or sdl-config). Try
2184# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
47c03744
DA
2185
2186if test $sdlabi = "2.0"; then
2187 sdl_config=$sdl2_config
2188 sdlname=sdl2
2189 sdlconfigname=sdl2_config
2190else
2191 sdlname=sdl
2192 sdlconfigname=sdl_config
2193fi
2194
2195if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2196 sdl_config=$sdlconfigname
3ec87ffe
PB
2197fi
2198
47c03744
DA
2199if $pkg_config $sdlname --exists; then
2200 sdlconfig="$pkg_config $sdlname"
9316f803 2201 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
3ec87ffe
PB
2202elif has ${sdl_config}; then
2203 sdlconfig="$sdl_config"
9316f803 2204 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
a0dfd8a4
LM
2205else
2206 if test "$sdl" = "yes" ; then
21684af0 2207 feature_not_found "sdl" "Install SDL devel"
a0dfd8a4
LM
2208 fi
2209 sdl=no
9316f803 2210fi
29e5bada 2211if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
3ec87ffe
PB
2212 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2213fi
11d9f695 2214
9316f803 2215sdl_too_old=no
c4198157 2216if test "$sdl" != "no" ; then
ac119f9d 2217 cat > $TMPC << EOF
11d9f695
FB
2218#include <SDL.h>
2219#undef main /* We don't want SDL to override our main() */
2220int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2221EOF
9316f803 2222 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
74f42e18
T
2223 if test "$static" = "yes" ; then
2224 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2225 else
2226 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2227 fi
52166aa0 2228 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
ac119f9d
JQ
2229 if test "$_sdlversion" -lt 121 ; then
2230 sdl_too_old=yes
2231 else
2232 if test "$cocoa" = "no" ; then
2233 sdl=yes
2234 fi
2235 fi
cd01b4a3 2236
67c274d3 2237 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
ac119f9d 2238 if test "$sdl" = "yes" -a "$static" = "yes" ; then
67c274d3 2239 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
f8aa6c7b
SW
2240 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2241 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
ac119f9d 2242 fi
52166aa0 2243 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
ac119f9d
JQ
2244 :
2245 else
2246 sdl=no
2247 fi
2248 fi # static link
c4198157
JQ
2249 else # sdl not found
2250 if test "$sdl" = "yes" ; then
21684af0 2251 feature_not_found "sdl" "Install SDL devel"
c4198157
JQ
2252 fi
2253 sdl=no
ac119f9d 2254 fi # sdl compile test
a68551bc 2255fi
11d9f695 2256
5368a422 2257if test "$sdl" = "yes" ; then
ac119f9d 2258 cat > $TMPC <<EOF
5368a422
AL
2259#include <SDL.h>
2260#if defined(SDL_VIDEO_DRIVER_X11)
2261#include <X11/XKBlib.h>
2262#else
2263#error No x11 support
2264#endif
2265int main(void) { return 0; }
2266EOF
f676c67e
JW
2267 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2268 sdl_cflags="$sdl_cflags $x11_cflags"
2269 sdl_libs="$sdl_libs $x11_libs"
ac119f9d 2270 fi
0705667e 2271 libs_softmmu="$sdl_libs $libs_softmmu"
5368a422
AL
2272fi
2273
2da776db
MH
2274##########################################
2275# RDMA needs OpenFabrics libraries
2276if test "$rdma" != "no" ; then
2277 cat > $TMPC <<EOF
2278#include <rdma/rdma_cma.h>
2279int main(void) { return 0; }
2280EOF
2281 rdma_libs="-lrdmacm -libverbs"
2282 if compile_prog "" "$rdma_libs" ; then
2283 rdma="yes"
2284 libs_softmmu="$libs_softmmu $rdma_libs"
2285 else
2286 if test "$rdma" = "yes" ; then
2287 error_exit \
2288 " OpenFabrics librdmacm/libibverbs not present." \
2289 " Your options:" \
2290 " (1) Fast: Install infiniband packages from your distro." \
2291 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2292 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2293 fi
2294 rdma="no"
2295 fi
2296fi
2297
8d5d2d4c 2298##########################################
7536ee4b
TH
2299# VNC TLS/WS detection
2300if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
1be10ad2 2301 cat > $TMPC <<EOF
ae6b5e5a
AL
2302#include <gnutls/gnutls.h>
2303int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2304EOF
a8bd70ad
PB
2305 vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2306 vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
1be10ad2 2307 if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
7536ee4b
TH
2308 if test "$vnc_tls" != "no" ; then
2309 vnc_tls=yes
2310 fi
2311 if test "$vnc_ws" != "no" ; then
2312 vnc_ws=yes
2313 fi
1be10ad2 2314 libs_softmmu="$vnc_tls_libs $libs_softmmu"
ca273d58 2315 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
1be10ad2
JQ
2316 else
2317 if test "$vnc_tls" = "yes" ; then
21684af0 2318 feature_not_found "vnc-tls" "Install gnutls devel"
ae6b5e5a 2319 fi
7536ee4b 2320 if test "$vnc_ws" = "yes" ; then
21684af0 2321 feature_not_found "vnc-ws" "Install gnutls devel"
7536ee4b 2322 fi
1be10ad2 2323 vnc_tls=no
7536ee4b 2324 vnc_ws=no
1be10ad2 2325 fi
8d5d2d4c
TS
2326fi
2327
95c6bff3
BC
2328##########################################
2329# Quorum probe (check for gnutls)
2330if test "$quorum" != "no" ; then
2331cat > $TMPC <<EOF
2332#include <gnutls/gnutls.h>
2333#include <gnutls/crypto.h>
2334int main(void) {char data[4096], digest[32];
2335gnutls_hash_fast(GNUTLS_DIG_SHA256, data, 4096, digest);
2336return 0;
2337}
2338EOF
2339quorum_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2340quorum_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2341if compile_prog "$quorum_tls_cflags" "$quorum_tls_libs" ; then
2342 qcow_tls=yes
2343 libs_softmmu="$quorum_tls_libs $libs_softmmu"
2344 libs_tools="$quorum_tls_libs $libs_softmmu"
2345 QEMU_CFLAGS="$QEMU_CFLAGS $quorum_tls_cflags"
b25c9dff 2346 quorum="yes"
95c6bff3 2347else
b25c9dff
SW
2348 if test "$quorum" = "yes"; then
2349 feature_not_found "gnutls" "gnutls > 2.10.0 required to compile Quorum"
2350 fi
2351 quorum="no"
95c6bff3
BC
2352fi
2353fi
2354
2f9606b3
AL
2355##########################################
2356# VNC SASL detection
821601ea 2357if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
ea784e3b 2358 cat > $TMPC <<EOF
2f9606b3
AL
2359#include <sasl/sasl.h>
2360#include <stdio.h>
2361int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2362EOF
ea784e3b
JQ
2363 # Assuming Cyrus-SASL installed in /usr prefix
2364 vnc_sasl_cflags=""
2365 vnc_sasl_libs="-lsasl2"
2366 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2367 vnc_sasl=yes
2368 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
ca273d58 2369 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
ea784e3b
JQ
2370 else
2371 if test "$vnc_sasl" = "yes" ; then
21684af0 2372 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2f9606b3 2373 fi
ea784e3b
JQ
2374 vnc_sasl=no
2375 fi
2f9606b3
AL
2376fi
2377
2f6f5c7a
CC
2378##########################################
2379# VNC JPEG detection
821601ea 2380if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2f6f5c7a
CC
2381cat > $TMPC <<EOF
2382#include <stdio.h>
2383#include <jpeglib.h>
2384int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2385EOF
2386 vnc_jpeg_cflags=""
2387 vnc_jpeg_libs="-ljpeg"
2388 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2389 vnc_jpeg=yes
2390 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
ca273d58 2391 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2f6f5c7a
CC
2392 else
2393 if test "$vnc_jpeg" = "yes" ; then
21684af0 2394 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2f6f5c7a
CC
2395 fi
2396 vnc_jpeg=no
2397 fi
2398fi
2399
efe556ad
CC
2400##########################################
2401# VNC PNG detection
821601ea 2402if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
efe556ad
CC
2403cat > $TMPC <<EOF
2404//#include <stdio.h>
2405#include <png.h>
832ce9c2 2406#include <stddef.h>
efe556ad
CC
2407int main(void) {
2408 png_structp png_ptr;
2409 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
7edc3fed 2410 return png_ptr != 0;
efe556ad
CC
2411}
2412EOF
65d5d3f9 2413 if $pkg_config libpng --exists; then
ca871ec8
SW
2414 vnc_png_cflags=`$pkg_config libpng --cflags`
2415 vnc_png_libs=`$pkg_config libpng --libs`
9af8025e 2416 else
efe556ad
CC
2417 vnc_png_cflags=""
2418 vnc_png_libs="-lpng"
9af8025e 2419 fi
efe556ad
CC
2420 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2421 vnc_png=yes
2422 libs_softmmu="$vnc_png_libs $libs_softmmu"
9af8025e 2423 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
efe556ad
CC
2424 else
2425 if test "$vnc_png" = "yes" ; then
21684af0 2426 feature_not_found "vnc-png" "Install libpng devel"
efe556ad
CC
2427 fi
2428 vnc_png=no
2429 fi
2430fi
2431
76655d6d
AL
2432##########################################
2433# fnmatch() probe, used for ACL routines
2434fnmatch="no"
2435cat > $TMPC << EOF
2436#include <fnmatch.h>
2437int main(void)
2438{
2439 fnmatch("foo", "foo", 0);
2440 return 0;
2441}
2442EOF
52166aa0 2443if compile_prog "" "" ; then
76655d6d
AL
2444 fnmatch="yes"
2445fi
2446
ee682d27
SW
2447##########################################
2448# uuid_generate() probe, used for vdi block driver
2d16c8e9
PM
2449# Note that on some systems (notably MacOSX) no extra library
2450# need be linked to get the uuid functions.
ee682d27
SW
2451if test "$uuid" != "no" ; then
2452 uuid_libs="-luuid"
2453 cat > $TMPC << EOF
2454#include <uuid/uuid.h>
2455int main(void)
2456{
2457 uuid_t my_uuid;
2458 uuid_generate(my_uuid);
2459 return 0;
2460}
2461EOF
2d16c8e9
PM
2462 if compile_prog "" "" ; then
2463 uuid="yes"
2464 elif compile_prog "" "$uuid_libs" ; then
ee682d27
SW
2465 uuid="yes"
2466 libs_softmmu="$uuid_libs $libs_softmmu"
2467 libs_tools="$uuid_libs $libs_tools"
2468 else
2469 if test "$uuid" = "yes" ; then
21684af0 2470 feature_not_found "uuid" "Install libuuid devel"
ee682d27
SW
2471 fi
2472 uuid=no
2473 fi
2474fi
2475
4f18b782
JC
2476if test "$vhdx" = "yes" ; then
2477 if test "$uuid" = "no" ; then
2478 error_exit "uuid required for VHDX support"
2479 fi
2480elif test "$vhdx" != "no" ; then
2481 if test "$uuid" = "yes" ; then
2482 vhdx=yes
2483 else
2484 vhdx=no
2485 fi
2486fi
2487
dce512de
CH
2488##########################################
2489# xfsctl() probe, used for raw-posix
2490if test "$xfs" != "no" ; then
2491 cat > $TMPC << EOF
ffc41d10 2492#include <stddef.h> /* NULL */
dce512de
CH
2493#include <xfs/xfs.h>
2494int main(void)
2495{
2496 xfsctl(NULL, 0, 0, NULL);
2497 return 0;
2498}
2499EOF
2500 if compile_prog "" "" ; then
2501 xfs="yes"
2502 else
2503 if test "$xfs" = "yes" ; then
21684af0 2504 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
dce512de
CH
2505 fi
2506 xfs=no
2507 fi
2508fi
2509
8a16d273
TS
2510##########################################
2511# vde libraries probe
dfb278bd 2512if test "$vde" != "no" ; then
4baae0ac 2513 vde_libs="-lvdeplug"
8a16d273
TS
2514 cat > $TMPC << EOF
2515#include <libvdeplug.h>
4a7f0e06
PB
2516int main(void)
2517{
2518 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
2519 char s[] = "";
2520 vde_open(s, s, &a);
4a7f0e06
PB
2521 return 0;
2522}
8a16d273 2523EOF
52166aa0 2524 if compile_prog "" "$vde_libs" ; then
4baae0ac 2525 vde=yes
8e02e54c
JQ
2526 libs_softmmu="$vde_libs $libs_softmmu"
2527 libs_tools="$vde_libs $libs_tools"
dfb278bd
JQ
2528 else
2529 if test "$vde" = "yes" ; then
21684af0 2530 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
2531 fi
2532 vde=no
4baae0ac 2533 fi
8a16d273
TS
2534fi
2535
58952137 2536##########################################
0a985b37
VM
2537# netmap support probe
2538# Apart from looking for netmap headers, we make sure that the host API version
2539# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2540# a minor/major version number. Minor new features will be marked with values up
2541# to 15, and if something happens that requires a change to the backend we will
2542# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
2543if test "$netmap" != "no" ; then
2544 cat > $TMPC << EOF
2545#include <inttypes.h>
2546#include <net/if.h>
2547#include <net/netmap.h>
2548#include <net/netmap_user.h>
0a985b37
VM
2549#if (NETMAP_API < 11) || (NETMAP_API > 15)
2550#error
2551#endif
58952137
VM
2552int main(void) { return 0; }
2553EOF
2554 if compile_prog "" "" ; then
2555 netmap=yes
2556 else
2557 if test "$netmap" = "yes" ; then
2558 feature_not_found "netmap"
2559 fi
2560 netmap=no
2561 fi
2562fi
2563
47e98658
CB
2564##########################################
2565# libcap-ng library probe
2566if test "$cap_ng" != "no" ; then
2567 cap_libs="-lcap-ng"
2568 cat > $TMPC << EOF
2569#include <cap-ng.h>
2570int main(void)
2571{
2572 capng_capability_to_name(CAPNG_EFFECTIVE);
2573 return 0;
2574}
2575EOF
2576 if compile_prog "" "$cap_libs" ; then
2577 cap_ng=yes
2578 libs_tools="$cap_libs $libs_tools"
2579 else
2580 if test "$cap_ng" = "yes" ; then
21684af0 2581 feature_not_found "cap_ng" "Install libcap-ng devel"
47e98658
CB
2582 fi
2583 cap_ng=no
2584 fi
2585fi
2586
8f28f3fb 2587##########################################
c2de5c91 2588# Sound support libraries probe
8f28f3fb 2589
c2de5c91 2590audio_drv_probe()
2591{
2592 drv=$1
2593 hdr=$2
2594 lib=$3
2595 exp=$4
2596 cfl=$5
2597 cat > $TMPC << EOF
2598#include <$hdr>
2599int main(void) { $exp }
8f28f3fb 2600EOF
52166aa0 2601 if compile_prog "$cfl" "$lib" ; then
c2de5c91 2602 :
2603 else
76ad07a4
PM
2604 error_exit "$drv check failed" \
2605 "Make sure to have the $drv libs and headers installed."
c2de5c91 2606 fi
2607}
2608
2fa7d3bf 2609audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
c2de5c91 2610for drv in $audio_drv_list; do
2611 case $drv in
2612 alsa)
2613 audio_drv_probe $drv alsa/asoundlib.h -lasound \
e35bcb0c 2614 "return snd_pcm_close((snd_pcm_t *)0);"
a4bf6780 2615 libs_softmmu="-lasound $libs_softmmu"
c2de5c91 2616 ;;
2617
2618 fmod)
2619 if test -z $fmod_lib || test -z $fmod_inc; then
76ad07a4
PM
2620 error_exit "You must specify path to FMOD library and headers" \
2621 "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so"
c2de5c91 2622 fi
2623 audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc"
a4bf6780 2624 libs_softmmu="$fmod_lib $libs_softmmu"
c2de5c91 2625 ;;
2626
2627 esd)
2628 audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);'
a4bf6780 2629 libs_softmmu="-lesd $libs_softmmu"
67f86e8e 2630 audio_pt_int="yes"
c2de5c91 2631 ;;
b8e59f18 2632
2633 pa)
a394aed2
MAL
2634 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2635 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2636 libs_softmmu="-lpulse $libs_softmmu"
67f86e8e 2637 audio_pt_int="yes"
b8e59f18 2638 ;;
2639
997e690a
JQ
2640 coreaudio)
2641 libs_softmmu="-framework CoreAudio $libs_softmmu"
2642 ;;
2643
a4bf6780
JQ
2644 dsound)
2645 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
d5631638 2646 audio_win_int="yes"
a4bf6780
JQ
2647 ;;
2648
2649 oss)
2650 libs_softmmu="$oss_lib $libs_softmmu"
2651 ;;
2652
2653 sdl|wav)
2f6a1ab0
BS
2654 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2655 ;;
2656
d5631638 2657 winwave)
2658 libs_softmmu="-lwinmm $libs_softmmu"
2659 audio_win_int="yes"
2660 ;;
2661
e4c63a6a 2662 *)
1c9b2a52 2663 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
2664 error_exit "Unknown driver '$drv' selected" \
2665 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 2666 }
2667 ;;
c2de5c91 2668 esac
2669done
8f28f3fb 2670
2e4d9fb1
AJ
2671##########################################
2672# BrlAPI probe
2673
4ffcedb6 2674if test "$brlapi" != "no" ; then
eb82284f
JQ
2675 brlapi_libs="-lbrlapi"
2676 cat > $TMPC << EOF
2e4d9fb1 2677#include <brlapi.h>
832ce9c2 2678#include <stddef.h>
2e4d9fb1
AJ
2679int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2680EOF
52166aa0 2681 if compile_prog "" "$brlapi_libs" ; then
eb82284f 2682 brlapi=yes
264606b3 2683 libs_softmmu="$brlapi_libs $libs_softmmu"
4ffcedb6
JQ
2684 else
2685 if test "$brlapi" = "yes" ; then
21684af0 2686 feature_not_found "brlapi" "Install brlapi devel"
4ffcedb6
JQ
2687 fi
2688 brlapi=no
eb82284f
JQ
2689 fi
2690fi
2e4d9fb1 2691
4d3b6f6e
AZ
2692##########################################
2693# curses probe
a3605bf6
MT
2694if test "$curses" != "no" ; then
2695 if test "$mingw32" = "yes" ; then
e095e2f3 2696 curses_list="-lpdcurses"
a3605bf6 2697 else
cfeda5f4 2698 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
a3605bf6 2699 fi
c584a6d0 2700 curses_found=no
4d3b6f6e
AZ
2701 cat > $TMPC << EOF
2702#include <curses.h>
ef9a2524
SW
2703int main(void) {
2704 const char *s = curses_version();
2705 resize_term(0, 0);
2706 return s != 0;
2707}
4d3b6f6e 2708EOF
ecbe251f 2709 IFS=:
4f78ef9a 2710 for curses_lib in $curses_list; do
ecbe251f 2711 unset IFS
4f78ef9a 2712 if compile_prog "" "$curses_lib" ; then
c584a6d0 2713 curses_found=yes
4f78ef9a
JQ
2714 libs_softmmu="$curses_lib $libs_softmmu"
2715 break
2716 fi
2717 done
ecbe251f 2718 unset IFS
c584a6d0
JQ
2719 if test "$curses_found" = "yes" ; then
2720 curses=yes
2721 else
2722 if test "$curses" = "yes" ; then
21684af0 2723 feature_not_found "curses" "Install ncurses devel"
c584a6d0
JQ
2724 fi
2725 curses=no
2726 fi
4f78ef9a 2727fi
4d3b6f6e 2728
769ce76d
AG
2729##########################################
2730# curl probe
788c8196 2731if test "$curl" != "no" ; then
65d5d3f9 2732 if $pkg_config libcurl --exists; then
a3605bf6
MT
2733 curlconfig="$pkg_config libcurl"
2734 else
2735 curlconfig=curl-config
2736 fi
769ce76d
AG
2737 cat > $TMPC << EOF
2738#include <curl/curl.h>
0b862ced 2739int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
769ce76d 2740EOF
4e2b0658
PB
2741 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2742 curl_libs=`$curlconfig --libs 2>/dev/null`
b1d5a277 2743 if compile_prog "$curl_cflags" "$curl_libs" ; then
769ce76d 2744 curl=yes
788c8196
JQ
2745 else
2746 if test "$curl" = "yes" ; then
21684af0 2747 feature_not_found "curl" "Install libcurl devel"
788c8196
JQ
2748 fi
2749 curl=no
769ce76d
AG
2750 fi
2751fi # test "$curl"
2752
fb599c9a
AZ
2753##########################################
2754# bluez support probe
a20a6f46 2755if test "$bluez" != "no" ; then
e820e3f4
AZ
2756 cat > $TMPC << EOF
2757#include <bluetooth/bluetooth.h>
2758int main(void) { return bt_error(0); }
2759EOF
a8bd70ad
PB
2760 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2761 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
52166aa0 2762 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
a20a6f46 2763 bluez=yes
e482d56a 2764 libs_softmmu="$bluez_libs $libs_softmmu"
e820e3f4 2765 else
a20a6f46 2766 if test "$bluez" = "yes" ; then
21684af0 2767 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
a20a6f46 2768 fi
e820e3f4
AZ
2769 bluez="no"
2770 fi
fb599c9a
AZ
2771fi
2772
e18df141
AL
2773##########################################
2774# glib support probe
a52d28af
PB
2775
2776if test "$mingw32" = yes; then
2777 # g_poll is required in order to integrate with the glib main loop.
2778 glib_req_ver=2.20
2779else
2780 glib_req_ver=2.12
2781fi
aa0d1f44
PB
2782glib_modules=gthread-2.0
2783if test "$modules" = yes; then
2784 glib_modules="$glib_modules gmodule-2.0"
2785fi
e26110cf 2786
aa0d1f44 2787for i in $glib_modules; do
e26110cf
FZ
2788 if $pkg_config --atleast-version=$glib_req_ver $i; then
2789 glib_cflags=`$pkg_config --cflags $i`
2790 glib_libs=`$pkg_config --libs $i`
2791 CFLAGS="$glib_cflags $CFLAGS"
2792 LIBS="$glib_libs $LIBS"
2793 libs_qga="$glib_libs $libs_qga"
2794 else
2795 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2796 fi
2797done
2798
9d41401b
MT
2799# g_test_trap_subprocess added in 2.38. Used by some tests.
2800glib_subprocess=yes
2801if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2802 glib_subprocess=no
2803fi
2804
e26110cf
FZ
2805##########################################
2806# SHA command probe for modules
2807if test "$modules" = yes; then
2808 shacmd_probe="sha1sum sha1 shasum"
2809 for c in $shacmd_probe; do
8ccefb91 2810 if has $c; then
e26110cf
FZ
2811 shacmd="$c"
2812 break
2813 fi
2814 done
2815 if test "$shacmd" = ""; then
2816 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2817 fi
e18df141
AL
2818fi
2819
e2134eb9
GH
2820##########################################
2821# pixman support probe
2822
2823if test "$pixman" = ""; then
74880fe2
RS
2824 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2825 pixman="none"
236f282c 2826 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
e2134eb9
GH
2827 pixman="system"
2828 else
2829 pixman="internal"
2830 fi
2831fi
74880fe2
RS
2832if test "$pixman" = "none"; then
2833 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
76ad07a4
PM
2834 error_exit "pixman disabled but system emulation or tools build" \
2835 "enabled. You can turn off pixman only if you also" \
2836 "disable all system emulation targets and the tools" \
2837 "build with '--disable-tools --disable-system'."
74880fe2
RS
2838 fi
2839 pixman_cflags=
2840 pixman_libs=
2841elif test "$pixman" = "system"; then
236f282c 2842 # pixman version has been checked above
ca871ec8
SW
2843 pixman_cflags=`$pkg_config --cflags pixman-1`
2844 pixman_libs=`$pkg_config --libs pixman-1`
e2134eb9
GH
2845else
2846 if test ! -d ${source_path}/pixman/pixman; then
236f282c 2847 error_exit "pixman >= 0.21.8 not present. Your options:" \
76ad07a4
PM
2848 " (1) Preferred: Install the pixman devel package (any recent" \
2849 " distro should have packages as Xorg needs pixman too)." \
2850 " (2) Fetch the pixman submodule, using:" \
2851 " git submodule update --init pixman"
e2134eb9 2852 fi
5ca9388a
GH
2853 mkdir -p pixman/pixman
2854 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2855 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
e2134eb9 2856fi
e2134eb9 2857
17bff52b
MK
2858##########################################
2859# libcap probe
2860
2861if test "$cap" != "no" ; then
2862 cat > $TMPC <<EOF
2863#include <stdio.h>
2864#include <sys/capability.h>
cc939743 2865int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
17bff52b
MK
2866EOF
2867 if compile_prog "" "-lcap" ; then
2868 cap=yes
2869 else
2870 cap=no
2871 fi
2872fi
2873
414f0dab 2874##########################################
e5d355d1 2875# pthread probe
4b29ec41 2876PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 2877
4dd75c70 2878pthread=no
e5d355d1 2879cat > $TMPC << EOF
3c529d93 2880#include <pthread.h>
7a42bbe4
SW
2881static void *f(void *p) { return NULL; }
2882int main(void) {
2883 pthread_t thread;
2884 pthread_create(&thread, 0, f, 0);
2885 return 0;
2886}
414f0dab 2887EOF
bd00d539
AF
2888if compile_prog "" "" ; then
2889 pthread=yes
2890else
2891 for pthread_lib in $PTHREADLIBS_LIST; do
2892 if compile_prog "" "$pthread_lib" ; then
2893 pthread=yes
e3c56761
PP
2894 found=no
2895 for lib_entry in $LIBS; do
2896 if test "$lib_entry" = "$pthread_lib"; then
2897 found=yes
2898 break
2899 fi
2900 done
2901 if test "$found" = "no"; then
2902 LIBS="$pthread_lib $LIBS"
2903 fi
bd00d539
AF
2904 break
2905 fi
2906 done
2907fi
414f0dab 2908
4617e593 2909if test "$mingw32" != yes -a "$pthread" = no; then
76ad07a4
PM
2910 error_exit "pthread check failed" \
2911 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
2912fi
2913
5c312079
DDAG
2914# check for pthread_setname_np
2915pthread_setname_np=no
2916cat > $TMPC << EOF
2917#include <pthread.h>
2918
2919static void *f(void *p) { return NULL; }
2920int main(void)
2921{
2922 pthread_t thread;
2923 pthread_create(&thread, 0, f, 0);
2924 pthread_setname_np(thread, "QEMU");
2925 return 0;
2926}
2927EOF
2928if compile_prog "" "$pthread_lib" ; then
2929 pthread_setname_np=yes
2930fi
2931
f27aaf4b
CB
2932##########################################
2933# rbd probe
2934if test "$rbd" != "no" ; then
2935 cat > $TMPC <<EOF
2936#include <stdio.h>
ad32e9c0 2937#include <rbd/librbd.h>
f27aaf4b 2938int main(void) {
ad32e9c0
JD
2939 rados_t cluster;
2940 rados_create(&cluster, NULL);
f27aaf4b
CB
2941 return 0;
2942}
2943EOF
ad32e9c0
JD
2944 rbd_libs="-lrbd -lrados"
2945 if compile_prog "" "$rbd_libs" ; then
2946 rbd=yes
f27aaf4b
CB
2947 else
2948 if test "$rbd" = "yes" ; then
21684af0 2949 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
2950 fi
2951 rbd=no
2952 fi
f27aaf4b
CB
2953fi
2954
0a12ec87
RJ
2955##########################################
2956# libssh2 probe
4fc16838 2957min_libssh2_version=1.2.8
0a12ec87 2958if test "$libssh2" != "no" ; then
65d5d3f9 2959 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
0a12ec87
RJ
2960 libssh2_cflags=`$pkg_config libssh2 --cflags`
2961 libssh2_libs=`$pkg_config libssh2 --libs`
0a12ec87 2962 libssh2=yes
0a12ec87
RJ
2963 else
2964 if test "$libssh2" = "yes" ; then
4fc16838 2965 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
0a12ec87
RJ
2966 fi
2967 libssh2=no
2968 fi
2969fi
2970
9a2d462e
RJ
2971##########################################
2972# libssh2_sftp_fsync probe
2973
2974if test "$libssh2" = "yes"; then
2975 cat > $TMPC <<EOF
2976#include <stdio.h>
2977#include <libssh2.h>
2978#include <libssh2_sftp.h>
2979int main(void) {
2980 LIBSSH2_SESSION *session;
2981 LIBSSH2_SFTP *sftp;
2982 LIBSSH2_SFTP_HANDLE *sftp_handle;
2983 session = libssh2_session_init ();
2984 sftp = libssh2_sftp_init (session);
2985 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
2986 libssh2_sftp_fsync (sftp_handle);
2987 return 0;
2988}
2989EOF
2990 # libssh2_cflags/libssh2_libs defined in previous test.
2991 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
2992 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
2993 fi
2994fi
2995
5c6c3a6c
CH
2996##########################################
2997# linux-aio probe
5c6c3a6c
CH
2998
2999if test "$linux_aio" != "no" ; then
3000 cat > $TMPC <<EOF
3001#include <libaio.h>
3002#include <sys/eventfd.h>
832ce9c2 3003#include <stddef.h>
5c6c3a6c
CH
3004int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3005EOF
3006 if compile_prog "" "-laio" ; then
3007 linux_aio=yes
5c6c3a6c
CH
3008 else
3009 if test "$linux_aio" = "yes" ; then
21684af0 3010 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3011 fi
3cfcae3c 3012 linux_aio=no
5c6c3a6c
CH
3013 fi
3014fi
3015
3b8acc11
PB
3016##########################################
3017# TPM passthrough is only on x86 Linux
3018
3019if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3020 tpm_passthrough=$tpm
3021else
3022 tpm_passthrough=no
3023fi
3024
758e8e38
VJ
3025##########################################
3026# attr probe
3027
3028if test "$attr" != "no" ; then
3029 cat > $TMPC <<EOF
3030#include <stdio.h>
3031#include <sys/types.h>
f2338fb4
PB
3032#ifdef CONFIG_LIBATTR
3033#include <attr/xattr.h>
3034#else
4f26f2b6 3035#include <sys/xattr.h>
f2338fb4 3036#endif
758e8e38
VJ
3037int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3038EOF
4f26f2b6
AK
3039 if compile_prog "" "" ; then
3040 attr=yes
3041 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 3042 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38
VJ
3043 attr=yes
3044 LIBS="-lattr $LIBS"
4f26f2b6 3045 libattr=yes
758e8e38
VJ
3046 else
3047 if test "$attr" = "yes" ; then
21684af0 3048 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
3049 fi
3050 attr=no
3051 fi
3052fi
3053
bf9298b9
AL
3054##########################################
3055# iovec probe
3056cat > $TMPC <<EOF
db34f0b3 3057#include <sys/types.h>
bf9298b9 3058#include <sys/uio.h>
db34f0b3 3059#include <unistd.h>
f91f9bee 3060int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3061EOF
3062iovec=no
52166aa0 3063if compile_prog "" "" ; then
bf9298b9
AL
3064 iovec=yes
3065fi
3066
ceb42de8
AL
3067##########################################
3068# preadv probe
3069cat > $TMPC <<EOF
3070#include <sys/types.h>
3071#include <sys/uio.h>
3072#include <unistd.h>
c075a723 3073int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
3074EOF
3075preadv=no
52166aa0 3076if compile_prog "" "" ; then
ceb42de8
AL
3077 preadv=yes
3078fi
3079
f652e6af
AJ
3080##########################################
3081# fdt probe
e169e1e1
PM
3082# fdt support is mandatory for at least some target architectures,
3083# so insist on it if we're building those system emulators.
3084fdt_required=no
3085for target in $target_list; do
3086 case $target in
6a49fa95 3087 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
e169e1e1
PM
3088 fdt_required=yes
3089 ;;
3090 esac
3091done
3092
3093if test "$fdt_required" = "yes"; then
3094 if test "$fdt" = "no"; then
3095 error_exit "fdt disabled but some requested targets require it." \
3096 "You can turn off fdt only if you also disable all the system emulation" \
3097 "targets which need it (by specifying a cut down --target-list)."
3098 fi
3099 fdt=yes
3100fi
3101
2df87df7 3102if test "$fdt" != "no" ; then
b41af4ba 3103 fdt_libs="-lfdt"
96ce6545 3104 # explicitly check for libfdt_env.h as it is missing in some stable installs
b41af4ba 3105 cat > $TMPC << EOF
96ce6545 3106#include <libfdt_env.h>
f652e6af
AJ
3107int main(void) { return 0; }
3108EOF
52166aa0 3109 if compile_prog "" "$fdt_libs" ; then
a540f158 3110 # system DTC is good - use it
f652e6af 3111 fdt=yes
a540f158
PC
3112 elif test -d ${source_path}/dtc/libfdt ; then
3113 # have submodule DTC - use it
3114 fdt=yes
3115 dtc_internal="yes"
3116 mkdir -p dtc
cab00a5a 3117 if [ "$pwd_is_source_path" != "y" ] ; then
a540f158
PC
3118 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3119 symlink "$source_path/dtc/scripts" "dtc/scripts"
2df87df7 3120 fi
a540f158
PC
3121 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3122 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3123 elif test "$fdt" = "yes" ; then
3124 # have neither and want - prompt for system/submodule install
3f281822
SS
3125 error_exit "DTC (libfdt) not present. Your options:" \
3126 " (1) Preferred: Install the DTC (libfdt) devel package" \
a540f158
PC
3127 " (2) Fetch the DTC submodule, using:" \
3128 " git submodule update --init dtc"
3129 else
3130 # don't have and don't want
de3a354a 3131 fdt_libs=
2df87df7 3132 fdt=no
f652e6af
AJ
3133 fi
3134fi
3135
a540f158
PC
3136libs_softmmu="$libs_softmmu $fdt_libs"
3137
20ff075b 3138##########################################
da076ffe 3139# opengl probe (for sdl2, milkymist-tmu2)
b1546f32
GH
3140
3141# GLX probe, used by milkymist-tmu2
3142# this is temporary, code will be switched to egl mid-term.
3143cat > $TMPC << EOF
3144#include <X11/Xlib.h>
3145#include <GL/gl.h>
3146#include <GL/glx.h>
3147int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3148EOF
3149if compile_prog "" "-lGL -lX11" ; then
3150 have_glx=yes
3151else
3152 have_glx=no
3153fi
3154
da076ffe 3155if test "$opengl" != "no" ; then
cd2bc889 3156 opengl_pkgs="gl glesv2"
b1546f32 3157 if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
f676c67e
JW
3158 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3159 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
da076ffe 3160 opengl=yes
20ff075b 3161 else
da076ffe
GH
3162 if test "$opengl" = "yes" ; then
3163 feature_not_found "opengl" "Install GL devel (e.g. MESA)"
20ff075b 3164 fi
f676c67e 3165 opengl_cflags=""
da076ffe
GH
3166 opengl_libs=""
3167 opengl=no
20ff075b
MW
3168 fi
3169fi
3170
c9a12e75
CN
3171
3172##########################################
3173# archipelago probe
3174if test "$archipelago" != "no" ; then
3175 cat > $TMPC <<EOF
3176#include <stdio.h>
3177#include <xseg/xseg.h>
3178#include <xseg/protocol.h>
3179int main(void) {
3180 xseg_initialize();
3181 return 0;
3182}
3183EOF
3184 archipelago_libs=-lxseg
3185 if compile_prog "" "$archipelago_libs"; then
3186 archipelago="yes"
3187 libs_tools="$archipelago_libs $libs_tools"
3188 libs_softmmu="$archipelago_libs $libs_softmmu"
6a460ed1
SH
3189
3190 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3191 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3192 echo "license and therefore prevent redistribution."
3193 echo
3194 echo "To disable Archipelago, use --disable-archipelago"
c9a12e75
CN
3195 else
3196 if test "$archipelago" = "yes" ; then
3197 feature_not_found "Archipelago backend support" "Install libxseg devel"
3198 fi
3199 archipelago="no"
3200 fi
3201fi
3202
3203
eb100396
BR
3204##########################################
3205# glusterfs probe
3206if test "$glusterfs" != "no" ; then
65d5d3f9 3207 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 3208 glusterfs="yes"
ca871ec8
SW
3209 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3210 glusterfs_libs=`$pkg_config --libs glusterfs-api`
65d5d3f9 3211 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
3212 glusterfs_discard="yes"
3213 fi
7c815372
BR
3214 if $pkg_config --atleast-version=6 glusterfs-api; then
3215 glusterfs_zerofill="yes"
3216 fi
eb100396
BR
3217 else
3218 if test "$glusterfs" = "yes" ; then
8efc9363
HT
3219 feature_not_found "GlusterFS backend support" \
3220 "Install glusterfs-api devel >= 3"
eb100396 3221 fi
e01bee08 3222 glusterfs="no"
eb100396
BR
3223 fi
3224fi
3225
39386ac7 3226# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
3227# emulator. This is done because older glibc versions don't
3228# have syscall stubs for these implemented. In that case we
3229# don't provide them even if kernel supports them.
3230#
3231inotify=no
67ba57f6 3232cat > $TMPC << EOF
3b3f24ad
AJ
3233#include <sys/inotify.h>
3234
3235int
3236main(void)
3237{
3238 /* try to start inotify */
8690e420 3239 return inotify_init();
3b3f24ad
AJ
3240}
3241EOF
52166aa0 3242if compile_prog "" "" ; then
67ba57f6 3243 inotify=yes
3b3f24ad
AJ
3244fi
3245
c05c7a73
RV
3246inotify1=no
3247cat > $TMPC << EOF
3248#include <sys/inotify.h>
3249
3250int
3251main(void)
3252{
3253 /* try to start inotify */
3254 return inotify_init1(0);
3255}
3256EOF
3257if compile_prog "" "" ; then
3258 inotify1=yes
3259fi
3260
ebc996f3
RV
3261# check if utimensat and futimens are supported
3262utimens=no
3263cat > $TMPC << EOF
3264#define _ATFILE_SOURCE
ebc996f3
RV
3265#include <stddef.h>
3266#include <fcntl.h>
3014ee00 3267#include <sys/stat.h>
ebc996f3
RV
3268
3269int main(void)
3270{
3271 utimensat(AT_FDCWD, "foo", NULL, 0);
3272 futimens(0, NULL);
3273 return 0;
3274}
3275EOF
52166aa0 3276if compile_prog "" "" ; then
ebc996f3
RV
3277 utimens=yes
3278fi
3279
099d6b0f
RV
3280# check if pipe2 is there
3281pipe2=no
3282cat > $TMPC << EOF
099d6b0f
RV
3283#include <unistd.h>
3284#include <fcntl.h>
3285
3286int main(void)
3287{
3288 int pipefd[2];
9bca8162 3289 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
3290}
3291EOF
52166aa0 3292if compile_prog "" "" ; then
099d6b0f
RV
3293 pipe2=yes
3294fi
3295
40ff6d7e
KW
3296# check if accept4 is there
3297accept4=no
3298cat > $TMPC << EOF
40ff6d7e
KW
3299#include <sys/socket.h>
3300#include <stddef.h>
3301
3302int main(void)
3303{
3304 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3305 return 0;
3306}
3307EOF
3308if compile_prog "" "" ; then
3309 accept4=yes
3310fi
3311
3ce34dfb
VS
3312# check if tee/splice is there. vmsplice was added same time.
3313splice=no
3314cat > $TMPC << EOF
3ce34dfb
VS
3315#include <unistd.h>
3316#include <fcntl.h>
3317#include <limits.h>
3318
3319int main(void)
3320{
66ea0f22 3321 int len, fd = 0;
3ce34dfb
VS
3322 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3323 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3324 return 0;
3325}
3326EOF
52166aa0 3327if compile_prog "" "" ; then
3ce34dfb
VS
3328 splice=yes
3329fi
3330
a99d57bb
WG
3331##########################################
3332# libnuma probe
3333
3334if test "$numa" != "no" ; then
3335 cat > $TMPC << EOF
3336#include <numa.h>
3337int main(void) { return numa_available(); }
3338EOF
3339
3340 if compile_prog "" "-lnuma" ; then
3341 numa=yes
3342 libs_softmmu="-lnuma $libs_softmmu"
3343 else
3344 if test "$numa" = "yes" ; then
3345 feature_not_found "numa" "install numactl devel"
3346 fi
3347 numa=no
3348 fi
3349fi
3350
2847b469
FZ
3351##########################################
3352# tcmalloc probe
3353
3354if test "$tcmalloc" = "yes" ; then
3355 cat > $TMPC << EOF
3356#include <stdlib.h>
3357int main(void) { malloc(1); return 0; }
3358EOF
3359
3360 if compile_prog "" "-ltcmalloc" ; then
3361 LIBS="-ltcmalloc $LIBS"
3362 else
3363 feature_not_found "tcmalloc" "install gperftools devel"
3364 fi
3365fi
3366
dcc38d1c
MT
3367##########################################
3368# signalfd probe
3369signalfd="no"
3370cat > $TMPC << EOF
dcc38d1c
MT
3371#include <unistd.h>
3372#include <sys/syscall.h>
3373#include <signal.h>
3374int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3375EOF
3376
3377if compile_prog "" "" ; then
3378 signalfd=yes
3379fi
3380
c2882b96
RV
3381# check if eventfd is supported
3382eventfd=no
3383cat > $TMPC << EOF
3384#include <sys/eventfd.h>
3385
3386int main(void)
3387{
55cc7f3e 3388 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
3389}
3390EOF
3391if compile_prog "" "" ; then
3392 eventfd=yes
3393fi
3394
d0927938
UH
3395# check for fallocate
3396fallocate=no
3397cat > $TMPC << EOF
3398#include <fcntl.h>
3399
3400int main(void)
3401{
3402 fallocate(0, 0, 0, 0);
3403 return 0;
3404}
3405EOF
8fb03151 3406if compile_prog "" "" ; then
d0927938
UH
3407 fallocate=yes
3408fi
3409
3d4fa43e
KK
3410# check for fallocate hole punching
3411fallocate_punch_hole=no
3412cat > $TMPC << EOF
3413#include <fcntl.h>
3414#include <linux/falloc.h>
3415
3416int main(void)
3417{
3418 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3419 return 0;
3420}
3421EOF
3422if compile_prog "" "" ; then
3423 fallocate_punch_hole=yes
3424fi
3425
b953f075
DL
3426# check that fallocate supports range zeroing inside the file
3427fallocate_zero_range=no
3428cat > $TMPC << EOF
3429#include <fcntl.h>
3430#include <linux/falloc.h>
3431
3432int main(void)
3433{
3434 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3435 return 0;
3436}
3437EOF
3438if compile_prog "" "" ; then
3439 fallocate_zero_range=yes
3440fi
3441
ed911435
KW
3442# check for posix_fallocate
3443posix_fallocate=no
3444cat > $TMPC << EOF
3445#include <fcntl.h>
3446
3447int main(void)
3448{
3449 posix_fallocate(0, 0, 0);
3450 return 0;
3451}
3452EOF
3453if compile_prog "" "" ; then
3454 posix_fallocate=yes
3455fi
3456
c727f47d
PM
3457# check for sync_file_range
3458sync_file_range=no
3459cat > $TMPC << EOF
3460#include <fcntl.h>
3461
3462int main(void)
3463{
3464 sync_file_range(0, 0, 0, 0);
3465 return 0;
3466}
3467EOF
8fb03151 3468if compile_prog "" "" ; then
c727f47d
PM
3469 sync_file_range=yes
3470fi
3471
dace20dc
PM
3472# check for linux/fiemap.h and FS_IOC_FIEMAP
3473fiemap=no
3474cat > $TMPC << EOF
3475#include <sys/ioctl.h>
3476#include <linux/fs.h>
3477#include <linux/fiemap.h>
3478
3479int main(void)
3480{
3481 ioctl(0, FS_IOC_FIEMAP, 0);
3482 return 0;
3483}
3484EOF
8fb03151 3485if compile_prog "" "" ; then
dace20dc
PM
3486 fiemap=yes
3487fi
3488
d0927938
UH
3489# check for dup3
3490dup3=no
3491cat > $TMPC << EOF
3492#include <unistd.h>
3493
3494int main(void)
3495{
3496 dup3(0, 0, 0);
3497 return 0;
3498}
3499EOF
78f5d726 3500if compile_prog "" "" ; then
d0927938
UH
3501 dup3=yes
3502fi
3503
4e0c6529
AB
3504# check for ppoll support
3505ppoll=no
3506cat > $TMPC << EOF
3507#include <poll.h>
3508
3509int main(void)
3510{
3511 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3512 ppoll(&pfd, 1, 0, 0);
3513 return 0;
3514}
3515EOF
3516if compile_prog "" "" ; then
3517 ppoll=yes
3518fi
3519
cd758dd0
AB
3520# check for prctl(PR_SET_TIMERSLACK , ... ) support
3521prctl_pr_set_timerslack=no
3522cat > $TMPC << EOF
3523#include <sys/prctl.h>
3524
3525int main(void)
3526{
3527 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3528 return 0;
3529}
3530EOF
3531if compile_prog "" "" ; then
3532 prctl_pr_set_timerslack=yes
3533fi
3534
3b6edd16
PM
3535# check for epoll support
3536epoll=no
3537cat > $TMPC << EOF
3538#include <sys/epoll.h>
3539
3540int main(void)
3541{
3542 epoll_create(0);
3543 return 0;
3544}
3545EOF
8fb03151 3546if compile_prog "" "" ; then
3b6edd16
PM
3547 epoll=yes
3548fi
3549
3550# epoll_create1 and epoll_pwait are later additions
3551# so we must check separately for their presence
3552epoll_create1=no
3553cat > $TMPC << EOF
3554#include <sys/epoll.h>
3555
3556int main(void)
3557{
19e83f6b
PM
3558 /* Note that we use epoll_create1 as a value, not as
3559 * a function being called. This is necessary so that on
3560 * old SPARC glibc versions where the function was present in
3561 * the library but not declared in the header file we will
3562 * fail the configure check. (Otherwise we will get a compiler
3563 * warning but not an error, and will proceed to fail the
3564 * qemu compile where we compile with -Werror.)
3565 */
c075a723 3566 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
3567}
3568EOF
8fb03151 3569if compile_prog "" "" ; then
3b6edd16
PM
3570 epoll_create1=yes
3571fi
3572
3573epoll_pwait=no
3574cat > $TMPC << EOF
3575#include <sys/epoll.h>
3576
3577int main(void)
3578{
3579 epoll_pwait(0, 0, 0, 0, 0);
3580 return 0;
3581}
3582EOF
8fb03151 3583if compile_prog "" "" ; then
3b6edd16
PM
3584 epoll_pwait=yes
3585fi
3586
a8fd1aba
PM
3587# check for sendfile support
3588sendfile=no
3589cat > $TMPC << EOF
3590#include <sys/sendfile.h>
3591
3592int main(void)
3593{
3594 return sendfile(0, 0, 0, 0);
3595}
3596EOF
3597if compile_prog "" "" ; then
3598 sendfile=yes
3599fi
3600
51834341
RV
3601# check for timerfd support (glibc 2.8 and newer)
3602timerfd=no
3603cat > $TMPC << EOF
3604#include <sys/timerfd.h>
3605
3606int main(void)
3607{
3608 return(timerfd_create(CLOCK_REALTIME, 0));
3609}
3610EOF
3611if compile_prog "" "" ; then
3612 timerfd=yes
3613fi
3614
9af5c906
RV
3615# check for setns and unshare support
3616setns=no
3617cat > $TMPC << EOF
3618#include <sched.h>
3619
3620int main(void)
3621{
3622 int ret;
3623 ret = setns(0, 0);
3624 ret = unshare(0);
3625 return ret;
3626}
3627EOF
3628if compile_prog "" "" ; then
3629 setns=yes
3630fi
3631
cc8ae6de 3632# Check if tools are available to build documentation.
a25dba17 3633if test "$docs" != "no" ; then
01668d98 3634 if has makeinfo && has pod2man; then
a25dba17 3635 docs=yes
83a3ab8b 3636 else
a25dba17 3637 if test "$docs" = "yes" ; then
21684af0 3638 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
83a3ab8b 3639 fi
a25dba17 3640 docs=no
83a3ab8b 3641 fi
cc8ae6de
PB
3642fi
3643
f514f41c 3644# Search for bswap_32 function
6ae9a1f4
JQ
3645byteswap_h=no
3646cat > $TMPC << EOF
3647#include <byteswap.h>
3648int main(void) { return bswap_32(0); }
3649EOF
52166aa0 3650if compile_prog "" "" ; then
6ae9a1f4
JQ
3651 byteswap_h=yes
3652fi
3653
75f13596 3654# Search for bswap32 function
6ae9a1f4
JQ
3655bswap_h=no
3656cat > $TMPC << EOF
3657#include <sys/endian.h>
3658#include <sys/types.h>
3659#include <machine/bswap.h>
3660int main(void) { return bswap32(0); }
3661EOF
52166aa0 3662if compile_prog "" "" ; then
6ae9a1f4
JQ
3663 bswap_h=yes
3664fi
3665
c589b249 3666##########################################
e49ab19f 3667# Do we have libiscsi >= 1.9.0
c589b249 3668if test "$libiscsi" != "no" ; then
e49ab19f 3669 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 3670 libiscsi="yes"
ca871ec8
SW
3671 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3672 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
3673 else
3674 if test "$libiscsi" = "yes" ; then
e49ab19f 3675 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
3676 fi
3677 libiscsi="no"
3678 fi
3679fi
3680
8bacde8d
NC
3681##########################################
3682# Do we need libm
3683cat > $TMPC << EOF
3684#include <math.h>
f80ea986 3685int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
3686EOF
3687if compile_prog "" "" ; then
3688 :
3689elif compile_prog "" "-lm" ; then
3690 LIBS="-lm $LIBS"
3691 libs_qga="-lm $libs_qga"
3692else
76ad07a4 3693 error_exit "libm check failed"
8bacde8d
NC
3694fi
3695
da93a1fd
AL
3696##########################################
3697# Do we need librt
8bacde8d
NC
3698# uClibc provides 2 versions of clock_gettime(), one with realtime
3699# support and one without. This means that the clock_gettime() don't
3700# need -lrt. We still need it for timer_create() so we check for this
3701# function in addition.
da93a1fd
AL
3702cat > $TMPC <<EOF
3703#include <signal.h>
3704#include <time.h>
8bacde8d
NC
3705int main(void) {
3706 timer_create(CLOCK_REALTIME, NULL, NULL);
3707 return clock_gettime(CLOCK_REALTIME, NULL);
3708}
da93a1fd
AL
3709EOF
3710
52166aa0 3711if compile_prog "" "" ; then
07ffa4bd 3712 :
8bacde8d 3713# we need pthread for static linking. use previous pthread test result
18e588b1
RL
3714elif compile_prog "" "$pthread_lib -lrt" ; then
3715 LIBS="$LIBS -lrt"
3716 libs_qga="$libs_qga -lrt"
da93a1fd
AL
3717fi
3718
31ff504d 3719if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
179cf400 3720 "$aix" != "yes" -a "$haiku" != "yes" ; then
6362a53f
JQ
3721 libs_softmmu="-lutil $libs_softmmu"
3722fi
3723
de5071c5 3724##########################################
cd4ec0b4
GH
3725# spice probe
3726if test "$spice" != "no" ; then
3727 cat > $TMPC << EOF
3728#include <spice.h>
3729int main(void) { spice_server_new(); return 0; }
3730EOF
710fc4f5
JD
3731 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3732 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
65d5d3f9
SW
3733 if $pkg_config --atleast-version=0.12.0 spice-server && \
3734 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
3735 compile_prog "$spice_cflags" "$spice_libs" ; then
3736 spice="yes"
3737 libs_softmmu="$libs_softmmu $spice_libs"
3738 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
3739 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3740 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
3741 else
3742 if test "$spice" = "yes" ; then
8efc9363
HT
3743 feature_not_found "spice" \
3744 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
3745 fi
3746 spice="no"
3747 fi
3748fi
3749
111a38b0 3750# check for libcacard for smartcard support
afd347ab
PB
3751smartcard_cflags=""
3752# TODO - what's the minimal nss version we support?
3753if test "$smartcard_nss" != "no"; then
3754 cat > $TMPC << EOF
5f01e06f
ST
3755#include <pk11pub.h>
3756int main(void) { PK11_FreeSlot(0); return 0; }
3757EOF
9d171bd9
MT
3758 # FIXME: do not include $glib_* in here
3759 nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3760 nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3761 test_cflags="$nss_cflags"
afd347ab
PB
3762 # The header files in nss < 3.13.3 have a bug which causes them to
3763 # emit a warning. If we're going to compile QEMU with -Werror, then
3764 # test that the headers don't have this bug. Otherwise we would pass
3765 # the configure test but fail to compile QEMU later.
3766 if test "$werror" = "yes"; then
3767 test_cflags="-Werror $test_cflags"
3768 fi
b6fc675b 3769 if test -n "$libtool" &&
65d5d3f9 3770 $pkg_config --atleast-version=3.12.8 nss && \
9d171bd9 3771 compile_prog "$test_cflags" "$nss_libs"; then
afd347ab 3772 smartcard_nss="yes"
afd347ab
PB
3773 else
3774 if test "$smartcard_nss" = "yes"; then
8efc9363 3775 feature_not_found "nss" "Install nss devel >= 3.12.8"
111a38b0 3776 fi
afd347ab 3777 smartcard_nss="no"
111a38b0
RR
3778 fi
3779fi
111a38b0 3780
2b2325ff
GH
3781# check for libusb
3782if test "$libusb" != "no" ; then
65d5d3f9 3783 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 3784 libusb="yes"
ca871ec8
SW
3785 libusb_cflags=$($pkg_config --cflags libusb-1.0)
3786 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
3787 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3788 libs_softmmu="$libs_softmmu $libusb_libs"
3789 else
3790 if test "$libusb" = "yes"; then
8efc9363 3791 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
3792 fi
3793 libusb="no"
3794 fi
3795fi
3796
69354a83
HG
3797# check for usbredirparser for usb network redirection support
3798if test "$usb_redir" != "no" ; then
65d5d3f9 3799 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 3800 usb_redir="yes"
ca871ec8
SW
3801 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3802 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83 3803 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
56ab2ad1 3804 libs_softmmu="$libs_softmmu $usb_redir_libs"
69354a83
HG
3805 else
3806 if test "$usb_redir" = "yes"; then
21684af0 3807 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
3808 fi
3809 usb_redir="no"
3810 fi
3811fi
3812
d9840e25
TS
3813##########################################
3814# check if we have VSS SDK headers for win
3815
3816if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3817 case "$vss_win32_sdk" in
3818 "") vss_win32_include="-I$source_path" ;;
3819 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3820 # handle path with spaces. So we symlink the headers into ".sdk/vss".
3821 vss_win32_include="-I$source_path/.sdk/vss"
3822 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3823 ;;
3824 *) vss_win32_include="-I$vss_win32_sdk"
3825 esac
3826 cat > $TMPC << EOF
3827#define __MIDL_user_allocate_free_DEFINED__
3828#include <inc/win2003/vss.h>
3829int main(void) { return VSS_CTX_BACKUP; }
3830EOF
3831 if compile_prog "$vss_win32_include" "" ; then
3832 guest_agent_with_vss="yes"
3833 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3834 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3835 else
3836 if test "$vss_win32_sdk" != "" ; then
3837 echo "ERROR: Please download and install Microsoft VSS SDK:"
3838 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3839 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3840 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3841 echo "ERROR: The headers are extracted in the directory \`inc'."
3842 feature_not_found "VSS support"
3843 fi
3844 guest_agent_with_vss="no"
3845 fi
3846fi
3847
3848##########################################
3849# lookup Windows platform SDK (if not specified)
3850# The SDK is needed only to build .tlb (type library) file of guest agent
3851# VSS provider from the source. It is usually unnecessary because the
3852# pre-compiled .tlb file is included.
3853
3854if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3855 if test -z "$win_sdk"; then
3856 programfiles="$PROGRAMFILES"
3857 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3858 if test -n "$programfiles"; then
3859 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3860 else
3861 feature_not_found "Windows SDK"
3862 fi
3863 elif test "$win_sdk" = "no"; then
3864 win_sdk=""
3865 fi
3866fi
3867
cd4ec0b4
GH
3868##########################################
3869
5f6b9e8f
BS
3870##########################################
3871# check if we have fdatasync
3872
3873fdatasync=no
3874cat > $TMPC << EOF
3875#include <unistd.h>
d1722a27
AR
3876int main(void) {
3877#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3878return fdatasync(0);
3879#else
e172fe11 3880#error Not supported
d1722a27
AR
3881#endif
3882}
5f6b9e8f
BS
3883EOF
3884if compile_prog "" "" ; then
3885 fdatasync=yes
3886fi
3887
e78815a5
AF
3888##########################################
3889# check if we have madvise
3890
3891madvise=no
3892cat > $TMPC << EOF
3893#include <sys/types.h>
3894#include <sys/mman.h>
832ce9c2 3895#include <stddef.h>
e78815a5
AF
3896int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3897EOF
3898if compile_prog "" "" ; then
3899 madvise=yes
3900fi
3901
3902##########################################
3903# check if we have posix_madvise
3904
3905posix_madvise=no
3906cat > $TMPC << EOF
3907#include <sys/mman.h>
832ce9c2 3908#include <stddef.h>
e78815a5
AF
3909int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3910EOF
3911if compile_prog "" "" ; then
3912 posix_madvise=yes
3913fi
3914
1e9737da
RH
3915##########################################
3916# check if we have usable SIGEV_THREAD_ID
3917
3918sigev_thread_id=no
3919cat > $TMPC << EOF
3920#include <signal.h>
3921int main(void) {
3922 struct sigevent ev;
3923 ev.sigev_notify = SIGEV_THREAD_ID;
3924 ev._sigev_un._tid = 0;
3925 asm volatile("" : : "g"(&ev));
3926 return 0;
3927}
3928EOF
3929if compile_prog "" "" ; then
3930 sigev_thread_id=yes
3931fi
3932
94a420b1
SH
3933##########################################
3934# check if trace backend exists
3935
5b808275 3936$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 3937if test "$?" -ne 0 ; then
5b808275
LV
3938 error_exit "invalid trace backends" \
3939 "Please choose supported trace backends."
94a420b1
SH
3940fi
3941
7e24e92a
SH
3942##########################################
3943# For 'ust' backend, test if ust headers are present
5b808275 3944if have_backend "ust"; then
7e24e92a 3945 cat > $TMPC << EOF
bf15f63c 3946#include <lttng/tracepoint.h>
7e24e92a
SH
3947int main(void) { return 0; }
3948EOF
3949 if compile_prog "" "" ; then
bf15f63c
MG
3950 if $pkg_config lttng-ust --exists; then
3951 lttng_ust_libs=`$pkg_config --libs lttng-ust`
3952 else
3953 lttng_ust_libs="-llttng-ust"
3954 fi
3955 if $pkg_config liburcu-bp --exists; then
3956 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
3957 else
3958 urcu_bp_libs="-lurcu-bp"
3959 fi
3960
3961 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
3962 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 3963 else
bf15f63c 3964 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
3965 fi
3966fi
b3d08c02
DB
3967
3968##########################################
3969# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 3970if have_backend "dtrace"; then
b3d08c02 3971 if ! has 'dtrace' ; then
76ad07a4 3972 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 3973 fi
c276b17d
DB
3974 trace_backend_stap="no"
3975 if has 'stap' ; then
3976 trace_backend_stap="yes"
3977 fi
b3d08c02
DB
3978fi
3979
023367e6 3980##########################################
519175a2 3981# check and set a backend for coroutine
d0e2fce5 3982
7c2acc70
PM
3983# We prefer ucontext, but it's not always possible. The fallback
3984# is sigcontext. gthread is not selectable except explicitly, because
3985# it is not functional enough to run QEMU proper. (It is occasionally
3986# useful for debugging purposes.) On Windows the only valid backend
3987# is the Windows-specific one.
3988
3989ucontext_works=no
3990if test "$darwin" != "yes"; then
3991 cat > $TMPC << EOF
d0e2fce5 3992#include <ucontext.h>
cdf84806
PM
3993#ifdef __stub_makecontext
3994#error Ignoring glibc stub makecontext which will always fail
3995#endif
75cafad7 3996int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 3997EOF
7c2acc70
PM
3998 if compile_prog "" "" ; then
3999 ucontext_works=yes
4000 fi
4001fi
4002
4003if test "$coroutine" = ""; then
4004 if test "$mingw32" = "yes"; then
4005 coroutine=win32
4006 elif test "$ucontext_works" = "yes"; then
4007 coroutine=ucontext
4008 else
4009 coroutine=sigaltstack
d0e2fce5 4010 fi
519175a2 4011else
7c2acc70
PM
4012 case $coroutine in
4013 windows)
4014 if test "$mingw32" != "yes"; then
4015 error_exit "'windows' coroutine backend only valid for Windows"
4016 fi
4017 # Unfortunately the user visible backend name doesn't match the
4018 # coroutine-*.c filename for this case, so we have to adjust it here.
4019 coroutine=win32
4020 ;;
4021 ucontext)
4022 if test "$ucontext_works" != "yes"; then
4023 feature_not_found "ucontext"
4024 fi
4025 ;;
4026 gthread|sigaltstack)
4027 if test "$mingw32" = "yes"; then
4028 error_exit "only the 'windows' coroutine backend is valid for Windows"
4029 fi
4030 ;;
4031 *)
4032 error_exit "unknown coroutine backend $coroutine"
4033 ;;
4034 esac
d0e2fce5
AK
4035fi
4036
70c60c08
SH
4037if test "$coroutine_pool" = ""; then
4038 if test "$coroutine" = "gthread"; then
4039 coroutine_pool=no
4040 else
4041 coroutine_pool=yes
4042 fi
4043fi
4044if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4045 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4046fi
4047
d2042378
AK
4048##########################################
4049# check if we have open_by_handle_at
4050
4e1797f9 4051open_by_handle_at=no
d2042378
AK
4052cat > $TMPC << EOF
4053#include <fcntl.h>
acc55ba8
SW
4054#if !defined(AT_EMPTY_PATH)
4055# error missing definition
4056#else
75cafad7 4057int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 4058#endif
d2042378
AK
4059EOF
4060if compile_prog "" "" ; then
4061 open_by_handle_at=yes
4062fi
4063
e06a765e
HPB
4064########################################
4065# check if we have linux/magic.h
4066
4067linux_magic_h=no
4068cat > $TMPC << EOF
4069#include <linux/magic.h>
4070int main(void) {
75cafad7 4071 return 0;
e06a765e
HPB
4072}
4073EOF
4074if compile_prog "" "" ; then
4075 linux_magic_h=yes
4076fi
4077
06d71fa1 4078########################################
c95e3080
KW
4079# check whether we can disable warning option with a pragma (this is needed
4080# to silence warnings in the headers of some versions of external libraries).
4081# This test has to be compiled with -Werror as otherwise an unknown pragma is
4082# only a warning.
4083#
4084# If we can't selectively disable warning in the code, disable -Werror so that
4085# the build doesn't fail anyway.
4086
06d71fa1
PM
4087pragma_disable_unused_but_set=no
4088cat > $TMPC << EOF
e6f53fd5 4089#pragma GCC diagnostic push
06d71fa1 4090#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
c95e3080 4091#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 4092#pragma GCC diagnostic pop
c95e3080 4093
06d71fa1
PM
4094int main(void) {
4095 return 0;
4096}
4097EOF
4098if compile_prog "-Werror" "" ; then
cc6e3ca9 4099 pragma_diagnostic_available=yes
c95e3080
KW
4100else
4101 werror=no
06d71fa1
PM
4102fi
4103
3f4349dc 4104########################################
541be927 4105# check if we have valgrind/valgrind.h
3f4349dc
KW
4106
4107valgrind_h=no
4108cat > $TMPC << EOF
4109#include <valgrind/valgrind.h>
3f4349dc 4110int main(void) {
3f4349dc
KW
4111 return 0;
4112}
4113EOF
4114if compile_prog "" "" ; then
4115 valgrind_h=yes
4116fi
4117
8ab1bf12
LC
4118########################################
4119# check if environ is declared
4120
4121has_environ=no
4122cat > $TMPC << EOF
4123#include <unistd.h>
4124int main(void) {
c075a723 4125 environ = 0;
8ab1bf12
LC
4126 return 0;
4127}
4128EOF
4129if compile_prog "" "" ; then
4130 has_environ=yes
4131fi
4132
76a347e1
RH
4133########################################
4134# check if cpuid.h is usable.
4135
4136cpuid_h=no
4137cat > $TMPC << EOF
4138#include <cpuid.h>
4139int main(void) {
774d566c
PM
4140 unsigned a, b, c, d;
4141 int max = __get_cpuid_max(0, 0);
4142
4143 if (max >= 1) {
4144 __cpuid(1, a, b, c, d);
4145 }
4146
4147 if (max >= 7) {
4148 __cpuid_count(7, 0, a, b, c, d);
4149 }
4150
4151 return 0;
76a347e1
RH
4152}
4153EOF
4154if compile_prog "" "" ; then
4155 cpuid_h=yes
4156fi
4157
f540166b
RH
4158########################################
4159# check if __[u]int128_t is usable.
4160
4161int128=no
4162cat > $TMPC << EOF
a00f66ab
SW
4163#if defined(__clang_major__) && defined(__clang_minor__)
4164# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4165# error __int128_t does not work in CLANG before 3.2
4166# endif
4167#endif
f540166b
RH
4168__int128_t a;
4169__uint128_t b;
4170int main (void) {
4171 a = a + b;
4172 b = a * b;
464e3671 4173 a = a * a;
f540166b
RH
4174 return 0;
4175}
4176EOF
4177if compile_prog "" "" ; then
4178 int128=yes
4179fi
76a347e1 4180
1e6e9aca
RH
4181########################################
4182# check if getauxval is available.
4183
4184getauxval=no
4185cat > $TMPC << EOF
4186#include <sys/auxv.h>
4187int main(void) {
4188 return getauxval(AT_HWCAP) == 0;
4189}
4190EOF
4191if compile_prog "" "" ; then
4192 getauxval=yes
4193fi
4194
7e24e92a 4195##########################################
e86ecd4b
JQ
4196# End of CC checks
4197# After here, no more $cc or $ld runs
4198
1d728c39
BS
4199if test "$gcov" = "yes" ; then
4200 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4201 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4202elif test "$debug" = "no" ; then
e600cdf3 4203 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
e86ecd4b 4204fi
a316e378 4205
6542aa9c
PL
4206##########################################
4207# Do we have libnfs
4208if test "$libnfs" != "no" ; then
b7d769c9 4209 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
4210 libnfs="yes"
4211 libnfs_libs=$($pkg_config --libs libnfs)
4212 LIBS="$LIBS $libnfs_libs"
4213 else
4214 if test "$libnfs" = "yes" ; then
8efc9363 4215 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
4216 fi
4217 libnfs="no"
4218 fi
4219fi
1d728c39 4220
20ff6c80
AL
4221# Disable zero malloc errors for official releases unless explicitly told to
4222# enable/disable
4223if test -z "$zero_malloc" ; then
4224 if test "$z_version" = "50" ; then
4225 zero_malloc="no"
4226 else
4227 zero_malloc="yes"
4228 fi
4229fi
4230
6ca026cb
PM
4231# Now we've finished running tests it's OK to add -Werror to the compiler flags
4232if test "$werror" = "yes"; then
4233 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4234fi
4235
e86ecd4b
JQ
4236if test "$solaris" = "no" ; then
4237 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 4238 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
4239 fi
4240fi
4241
94dd53c5
GH
4242# test if pod2man has --utf8 option
4243if pod2man --help | grep -q utf8; then
4244 POD2MAN="pod2man --utf8"
4245else
4246 POD2MAN="pod2man"
4247fi
4248
952afb71
BS
4249# Use ASLR, no-SEH and DEP if available
4250if test "$mingw32" = "yes" ; then
4251 for flag in --dynamicbase --no-seh --nxcompat; do
4252 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4253 LDFLAGS="-Wl,$flag $LDFLAGS"
4254 fi
4255 done
4256fi
4257
10ea68b3 4258qemu_confdir=$sysconfdir$confsuffix
e26110cf 4259qemu_moddir=$libdir$confsuffix
528ae5b8 4260qemu_datadir=$datadir$confsuffix
834574ea 4261qemu_localedir="$datadir/locale"
e7b45cc4 4262
4b1c11fd
DB
4263tools=""
4264if test "$want_tools" = "yes" ; then
ca35f780 4265 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4b1c11fd
DB
4266 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4267 tools="qemu-nbd\$(EXESUF) $tools"
4268 fi
4269fi
4270if test "$softmmu" = yes ; then
983eef5a 4271 if test "$virtfs" != no ; then
aabfd88d
AF
4272 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4273 virtfs=yes
4274 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4275 else
4276 if test "$virtfs" = yes; then
76ad07a4 4277 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
983eef5a 4278 fi
17500370 4279 virtfs=no
aabfd88d 4280 fi
17bff52b 4281 fi
e8ef31a3
MT
4282fi
4283if [ "$guest_agent" != "no" ]; then
b39297ae 4284 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
48ff7a62 4285 tools="qemu-ga\$(EXESUF) $tools"
b39297ae
TS
4286 if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4287 tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4288 fi
e8ef31a3
MT
4289 guest_agent=yes
4290 elif [ "$guest_agent" != yes ]; then
4291 guest_agent=no
4292 else
4293 error_exit "Guest agent is not supported on this platform"
ca35f780 4294 fi
00c705fb 4295fi
ca35f780
PB
4296
4297# Mac OS X ships with a broken assembler
4298roms=
4299if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4300 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4301 "$softmmu" = yes ; then
4302 roms="optionrom"
4303fi
d0384d1d 4304if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
4305 roms="$roms spapr-rtas"
4306fi
ca35f780 4307
9933c305
CB
4308if test "$cpu" = "s390x" ; then
4309 roms="$roms s390-ccw"
4310fi
4311
964c6fa1
RH
4312# Probe for the need for relocating the user-only binary.
4313if test "$pie" = "no" ; then
4314 textseg_addr=
4315 case "$cpu" in
479eb121
RH
4316 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4317 # ??? Rationale for choosing this address
964c6fa1
RH
4318 textseg_addr=0x60000000
4319 ;;
4320 mips)
479eb121
RH
4321 # A 256M aligned address, high in the address space, with enough
4322 # room for the code_gen_buffer above it before the stack.
4323 textseg_addr=0x60000000
964c6fa1
RH
4324 ;;
4325 esac
4326 if [ -n "$textseg_addr" ]; then
4327 cat > $TMPC <<EOF
4328 int main(void) { return 0; }
4329EOF
4330 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4331 if ! compile_prog "" "$textseg_ldflags"; then
4332 # In case ld does not support -Ttext-segment, edit the default linker
4333 # script via sed to set the .text start addr. This is needed on FreeBSD
4334 # at least.
4335 $ld --verbose | sed \
4336 -e '1,/==================================================/d' \
4337 -e '/==================================================/,$d' \
4338 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4339 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4340 textseg_ldflags="-Wl,-T../config-host.ld"
4341 fi
4342 fi
4343fi
4344
50e12060
JK
4345# prepend pixman and ftd flags after all config tests are done
4346QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4347libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 4348
43ce4dfe 4349echo "Install prefix $prefix"
c00b2808 4350echo "BIOS directory `eval echo $qemu_datadir`"
f2b9e1e3 4351echo "binary directory `eval echo $bindir`"
3aa5d2be 4352echo "library directory `eval echo $libdir`"
e26110cf 4353echo "module directory `eval echo $qemu_moddir`"
8bf188aa 4354echo "libexec directory `eval echo $libexecdir`"
0f94d6da 4355echo "include directory `eval echo $includedir`"
1c0fd160 4356echo "config directory `eval echo $sysconfdir`"
11d9f695 4357if test "$mingw32" = "no" ; then
5a699bbb 4358echo "local state directory `eval echo $local_statedir`"
f2b9e1e3 4359echo "Manual directory `eval echo $mandir`"
43ce4dfe 4360echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
4361else
4362echo "local state directory queried at runtime"
d9840e25 4363echo "Windows SDK $win_sdk"
11d9f695 4364fi
5a67135a 4365echo "Source path $source_path"
43ce4dfe 4366echo "C compiler $cc"
83469015 4367echo "Host C compiler $host_cc"
83f73fce 4368echo "C++ compiler $cxx"
3c4a4d0d 4369echo "Objective-C compiler $objcc"
45d285ab 4370echo "ARFLAGS $ARFLAGS"
0c439cbf 4371echo "CFLAGS $CFLAGS"
a558ee17 4372echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 4373echo "LDFLAGS $LDFLAGS"
43ce4dfe 4374echo "make $make"
6a882643 4375echo "install $install"
c886edfb 4376echo "python $python"
e2d8830e
BS
4377if test "$slirp" = "yes" ; then
4378 echo "smbd $smbd"
4379fi
17969268 4380echo "module support $modules"
43ce4dfe 4381echo "host CPU $cpu"
de83cd02 4382echo "host big endian $bigendian"
97a847bc 4383echo "target list $target_list"
ade25b0d 4384echo "tcg debug enabled $debug_tcg"
43ce4dfe 4385echo "gprof enabled $gprof"
03b4fe7d 4386echo "sparse enabled $sparse"
1625af87 4387echo "strip binaries $strip_opt"
05c2a3e7 4388echo "profiler $profiler"
43ce4dfe 4389echo "static build $static"
5b0753e0
FB
4390if test "$darwin" = "yes" ; then
4391 echo "Cocoa support $cocoa"
4392fi
e2134eb9 4393echo "pixman $pixman"
97a847bc 4394echo "SDL support $sdl"
a4ccabcf 4395echo "GTK support $gtk"
bbbf9bfb 4396echo "VTE support $vte"
4d3b6f6e 4397echo "curses support $curses"
769ce76d 4398echo "curl support $curl"
67b915a5 4399echo "mingw32 support $mingw32"
0c58ac1c 4400echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
4401echo "Block whitelist (rw) $block_drv_rw_whitelist"
4402echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 4403echo "VirtFS support $virtfs"
821601ea
JS
4404echo "VNC support $vnc"
4405if test "$vnc" = "yes" ; then
4406 echo "VNC TLS support $vnc_tls"
4407 echo "VNC SASL support $vnc_sasl"
4408 echo "VNC JPEG support $vnc_jpeg"
4409 echo "VNC PNG support $vnc_png"
7536ee4b 4410 echo "VNC WS support $vnc_ws"
821601ea 4411fi
3142255c
BS
4412if test -n "$sparc_cpu"; then
4413 echo "Target Sparc Arch $sparc_cpu"
4414fi
e37630ca 4415echo "xen support $xen"
3996e85c
PD
4416if test "$xen" = "yes" ; then
4417 echo "xen ctrl version $xen_ctrl_version"
4418fi
2e4d9fb1 4419echo "brlapi support $brlapi"
a20a6f46 4420echo "bluez support $bluez"
a25dba17 4421echo "Documentation $docs"
379f6698 4422echo "GUEST_BASE $guest_base"
40d6444e 4423echo "PIE $pie"
8a16d273 4424echo "vde support $vde"
58952137 4425echo "netmap support $netmap"
5c6c3a6c 4426echo "Linux AIO support $linux_aio"
758e8e38 4427echo "ATTR/XATTR support $attr"
77755340 4428echo "Install blobs $blobs"
b31a0277 4429echo "KVM support $kvm"
2da776db 4430echo "RDMA support $rdma"
9195b2c2 4431echo "TCG interpreter $tcg_interpreter"
f652e6af 4432echo "fdt support $fdt"
ceb42de8 4433echo "preadv support $preadv"
5f6b9e8f 4434echo "fdatasync $fdatasync"
e78815a5
AF
4435echo "madvise $madvise"
4436echo "posix_madvise $posix_madvise"
1e9737da 4437echo "sigev_thread_id $sigev_thread_id"
ee682d27 4438echo "uuid support $uuid"
47e98658 4439echo "libcap-ng support $cap_ng"
d5970055 4440echo "vhost-net support $vhost_net"
5e9be92d 4441echo "vhost-scsi support $vhost_scsi"
5b808275 4442echo "Trace backends $trace_backends"
e00e36fb 4443if test "$trace_backend" = "simple"; then
9410b56c 4444echo "Trace output file $trace_file-<pid>"
e00e36fb 4445fi
c9dd4074 4446if test "$spice" = "yes"; then
2e0e3c39 4447echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
c9dd4074
SW
4448else
4449echo "spice support $spice"
4450fi
f27aaf4b 4451echo "rbd support $rbd"
dce512de 4452echo "xfsctl support $xfs"
111a38b0 4453echo "nss used $smartcard_nss"
2b2325ff 4454echo "libusb $libusb"
69354a83 4455echo "usb net redir $usb_redir"
da076ffe 4456echo "OpenGL support $opengl"
c589b249 4457echo "libiscsi support $libiscsi"
6542aa9c 4458echo "libnfs support $libnfs"
d138cee9 4459echo "build guest agent $guest_agent"
d9840e25 4460echo "QGA VSS support $guest_agent_with_vss"
f794573e 4461echo "seccomp support $seccomp"
7c2acc70 4462echo "coroutine backend $coroutine"
70c60c08 4463echo "coroutine pool $coroutine_pool"
eb100396 4464echo "GlusterFS support $glusterfs"
c9a12e75 4465echo "Archipelago support $archipelago"
1d728c39
BS
4466echo "gcov $gcov_tool"
4467echo "gcov enabled $gcov"
ab214c29 4468echo "TPM support $tpm"
0a12ec87 4469echo "libssh2 support $libssh2"
3b8acc11 4470echo "TPM passthrough $tpm_passthrough"
3556c233 4471echo "QOM debugging $qom_cast_debug"
4f18b782 4472echo "vhdx $vhdx"
95c6bff3 4473echo "Quorum $quorum"
607dacd0
QN
4474echo "lzo support $lzo"
4475echo "snappy support $snappy"
6b383c08 4476echo "bzip2 support $bzip2"
a99d57bb 4477echo "NUMA host support $numa"
2847b469 4478echo "tcmalloc support $tcmalloc"
67b915a5 4479
1ba16968 4480if test "$sdl_too_old" = "yes"; then
24b55b96 4481echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 4482fi
7d13299d 4483
98ec69ac 4484config_host_mak="config-host.mak"
98ec69ac 4485
dbd99ae3
SW
4486echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4487
98ec69ac 4488echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 4489echo >> $config_host_mak
98ec69ac 4490
e6c3b0f7 4491echo all: >> $config_host_mak
99d7cc75
PB
4492echo "prefix=$prefix" >> $config_host_mak
4493echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 4494echo "libdir=$libdir" >> $config_host_mak
8bf188aa 4495echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 4496echo "includedir=$includedir" >> $config_host_mak
99d7cc75 4497echo "mandir=$mandir" >> $config_host_mak
99d7cc75 4498echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 4499echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce
EH
4500echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4501echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 4502echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
4503if test "$mingw32" = "no" ; then
4504 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4505fi
f354b1a1 4506echo "qemu_helperdir=$libexecdir" >> $config_host_mak
f9943cd5
GH
4507echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4508echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
834574ea 4509echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
f544a488 4510echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
804edf29 4511
98ec69ac 4512echo "ARCH=$ARCH" >> $config_host_mak
727e5283 4513
f8393946 4514if test "$debug_tcg" = "yes" ; then
2358a494 4515 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 4516fi
1625af87 4517if test "$strip_opt" = "yes" ; then
52ba784d 4518 echo "STRIP=${strip}" >> $config_host_mak
1625af87 4519fi
7d13299d 4520if test "$bigendian" = "yes" ; then
e2542fe2 4521 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 4522fi
67b915a5 4523if test "$mingw32" = "yes" ; then
98ec69ac 4524 echo "CONFIG_WIN32=y" >> $config_host_mak
9fe6de94
BS
4525 rc_version=`cat $source_path/VERSION`
4526 version_major=${rc_version%%.*}
4527 rc_version=${rc_version#*.}
4528 version_minor=${rc_version%%.*}
4529 rc_version=${rc_version#*.}
4530 version_subminor=${rc_version%%.*}
4531 version_micro=0
4532 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4533 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
4534 if test "$guest_agent_with_vss" = "yes" ; then
4535 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4536 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4537 fi
210fa556 4538else
35f4df27 4539 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
4540fi
4541
4542if test "$linux" = "yes" ; then
4543 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 4544fi
128ab2ff 4545
83fb7adf 4546if test "$darwin" = "yes" ; then
98ec69ac 4547 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 4548fi
b29fe3ed 4549
4550if test "$aix" = "yes" ; then
98ec69ac 4551 echo "CONFIG_AIX=y" >> $config_host_mak
b29fe3ed 4552fi
4553
ec530c81 4554if test "$solaris" = "yes" ; then
98ec69ac 4555 echo "CONFIG_SOLARIS=y" >> $config_host_mak
2358a494 4556 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
0475a5ca 4557 if test "$needs_libsunmath" = "yes" ; then
75b5a697 4558 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
0475a5ca 4559 fi
ec530c81 4560fi
179cf400
AF
4561if test "$haiku" = "yes" ; then
4562 echo "CONFIG_HAIKU=y" >> $config_host_mak
4563fi
97a847bc 4564if test "$static" = "yes" ; then
98ec69ac 4565 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 4566fi
1ba16968 4567if test "$profiler" = "yes" ; then
2358a494 4568 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 4569fi
c20709aa 4570if test "$slirp" = "yes" ; then
98ec69ac 4571 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 4572 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 4573fi
8a16d273 4574if test "$vde" = "yes" ; then
98ec69ac 4575 echo "CONFIG_VDE=y" >> $config_host_mak
8a16d273 4576fi
58952137
VM
4577if test "$netmap" = "yes" ; then
4578 echo "CONFIG_NETMAP=y" >> $config_host_mak
4579fi
015a33bd
GA
4580if test "$l2tpv3" = "yes" ; then
4581 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4582fi
47e98658
CB
4583if test "$cap_ng" = "yes" ; then
4584 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4585fi
2358a494 4586echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 4587for drv in $audio_drv_list; do
bb55b712 4588 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
98ec69ac 4589 echo "$def=y" >> $config_host_mak
923e4521 4590 if test "$drv" = "fmod"; then
7aac6cb1 4591 echo "FMOD_CFLAGS=-I$fmod_inc" >> $config_host_mak
0c58ac1c 4592 fi
4593done
67f86e8e
JQ
4594if test "$audio_pt_int" = "yes" ; then
4595 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4596fi
d5631638 4597if test "$audio_win_int" = "yes" ; then
4598 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4599fi
b64ec4e4
FZ
4600echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4601echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
4602if test "$vnc" = "yes" ; then
4603 echo "CONFIG_VNC=y" >> $config_host_mak
4604fi
8d5d2d4c 4605if test "$vnc_tls" = "yes" ; then
98ec69ac 4606 echo "CONFIG_VNC_TLS=y" >> $config_host_mak
8d5d2d4c 4607fi
2f9606b3 4608if test "$vnc_sasl" = "yes" ; then
98ec69ac 4609 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 4610fi
821601ea 4611if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 4612 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 4613fi
821601ea 4614if test "$vnc_png" = "yes" ; then
efe556ad 4615 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 4616fi
7536ee4b
TH
4617if test "$vnc_ws" = "yes" ; then
4618 echo "CONFIG_VNC_WS=y" >> $config_host_mak
4619 echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
4620fi
76655d6d 4621if test "$fnmatch" = "yes" ; then
2358a494 4622 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 4623fi
ee682d27
SW
4624if test "$uuid" = "yes" ; then
4625 echo "CONFIG_UUID=y" >> $config_host_mak
4626fi
dce512de
CH
4627if test "$xfs" = "yes" ; then
4628 echo "CONFIG_XFS=y" >> $config_host_mak
4629fi
b1a550a0 4630qemu_version=`head $source_path/VERSION`
98ec69ac 4631echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 4632echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 4633echo "SRC_PATH=$source_path" >> $config_host_mak
98ec69ac 4634echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 4635if [ "$docs" = "yes" ] ; then
98ec69ac 4636 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 4637fi
17969268 4638if test "$modules" = "yes"; then
e26110cf
FZ
4639 # $shacmd can generate a hash started with digit, which the compiler doesn't
4640 # like as an symbol. So prefix it with an underscore
4641 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
17969268
FZ
4642 echo "CONFIG_MODULES=y" >> $config_host_mak
4643fi
1ac88f28 4644if test "$sdl" = "yes" ; then
98ec69ac 4645 echo "CONFIG_SDL=y" >> $config_host_mak
a3f4d63d 4646 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 4647 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
49ecc3fa
FB
4648fi
4649if test "$cocoa" = "yes" ; then
98ec69ac 4650 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
4651fi
4652if test "$curses" = "yes" ; then
98ec69ac 4653 echo "CONFIG_CURSES=y" >> $config_host_mak
49ecc3fa 4654fi
ebc996f3 4655if test "$utimens" = "yes" ; then
2358a494 4656 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
ebc996f3 4657fi
099d6b0f 4658if test "$pipe2" = "yes" ; then
2358a494 4659 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 4660fi
40ff6d7e
KW
4661if test "$accept4" = "yes" ; then
4662 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4663fi
3ce34dfb 4664if test "$splice" = "yes" ; then
2358a494 4665 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 4666fi
c2882b96
RV
4667if test "$eventfd" = "yes" ; then
4668 echo "CONFIG_EVENTFD=y" >> $config_host_mak
4669fi
d0927938
UH
4670if test "$fallocate" = "yes" ; then
4671 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4672fi
3d4fa43e
KK
4673if test "$fallocate_punch_hole" = "yes" ; then
4674 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4675fi
b953f075
DL
4676if test "$fallocate_zero_range" = "yes" ; then
4677 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4678fi
ed911435
KW
4679if test "$posix_fallocate" = "yes" ; then
4680 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4681fi
c727f47d
PM
4682if test "$sync_file_range" = "yes" ; then
4683 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4684fi
dace20dc
PM
4685if test "$fiemap" = "yes" ; then
4686 echo "CONFIG_FIEMAP=y" >> $config_host_mak
4687fi
d0927938
UH
4688if test "$dup3" = "yes" ; then
4689 echo "CONFIG_DUP3=y" >> $config_host_mak
4690fi
4e0c6529
AB
4691if test "$ppoll" = "yes" ; then
4692 echo "CONFIG_PPOLL=y" >> $config_host_mak
4693fi
cd758dd0
AB
4694if test "$prctl_pr_set_timerslack" = "yes" ; then
4695 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4696fi
3b6edd16
PM
4697if test "$epoll" = "yes" ; then
4698 echo "CONFIG_EPOLL=y" >> $config_host_mak
4699fi
4700if test "$epoll_create1" = "yes" ; then
4701 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4702fi
4703if test "$epoll_pwait" = "yes" ; then
4704 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4705fi
a8fd1aba
PM
4706if test "$sendfile" = "yes" ; then
4707 echo "CONFIG_SENDFILE=y" >> $config_host_mak
4708fi
51834341
RV
4709if test "$timerfd" = "yes" ; then
4710 echo "CONFIG_TIMERFD=y" >> $config_host_mak
4711fi
9af5c906
RV
4712if test "$setns" = "yes" ; then
4713 echo "CONFIG_SETNS=y" >> $config_host_mak
4714fi
3b3f24ad 4715if test "$inotify" = "yes" ; then
2358a494 4716 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 4717fi
c05c7a73
RV
4718if test "$inotify1" = "yes" ; then
4719 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4720fi
6ae9a1f4
JQ
4721if test "$byteswap_h" = "yes" ; then
4722 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4723fi
4724if test "$bswap_h" = "yes" ; then
4725 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4726fi
769ce76d 4727if test "$curl" = "yes" ; then
d3399d7c 4728 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 4729 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 4730 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 4731fi
2e4d9fb1 4732if test "$brlapi" = "yes" ; then
98ec69ac 4733 echo "CONFIG_BRLAPI=y" >> $config_host_mak
2e4d9fb1 4734fi
fb599c9a 4735if test "$bluez" = "yes" ; then
98ec69ac 4736 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 4737 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 4738fi
9d41401b
MT
4739if test "glib_subprocess" = "yes" ; then
4740 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4741fi
e18df141 4742echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
a4ccabcf
AL
4743if test "$gtk" = "yes" ; then
4744 echo "CONFIG_GTK=y" >> $config_host_mak
a3f4d63d 4745 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
a4ccabcf 4746 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
bbbf9bfb
SW
4747fi
4748if test "$vte" = "yes" ; then
4749 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf
AL
4750 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4751fi
e37630ca 4752if test "$xen" = "yes" ; then
6dbd588a 4753 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 4754 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
e37630ca 4755fi
5c6c3a6c
CH
4756if test "$linux_aio" = "yes" ; then
4757 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4758fi
758e8e38
VJ
4759if test "$attr" = "yes" ; then
4760 echo "CONFIG_ATTR=y" >> $config_host_mak
4761fi
4f26f2b6
AK
4762if test "$libattr" = "yes" ; then
4763 echo "CONFIG_LIBATTR=y" >> $config_host_mak
4764fi
983eef5a
MI
4765if test "$virtfs" = "yes" ; then
4766 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 4767fi
5e9be92d
NB
4768if test "$vhost_scsi" = "yes" ; then
4769 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4770fi
03ce5744
NN
4771if test "$vhost_net" = "yes" ; then
4772 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4773fi
77755340 4774if test "$blobs" = "yes" ; then
98ec69ac 4775 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 4776fi
bf9298b9 4777if test "$iovec" = "yes" ; then
2358a494 4778 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 4779fi
ceb42de8 4780if test "$preadv" = "yes" ; then
2358a494 4781 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 4782fi
f652e6af 4783if test "$fdt" = "yes" ; then
3f0855b1 4784 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 4785fi
dcc38d1c
MT
4786if test "$signalfd" = "yes" ; then
4787 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4788fi
9195b2c2
SW
4789if test "$tcg_interpreter" = "yes" ; then
4790 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4791fi
5f6b9e8f
BS
4792if test "$fdatasync" = "yes" ; then
4793 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
4794fi
e78815a5
AF
4795if test "$madvise" = "yes" ; then
4796 echo "CONFIG_MADVISE=y" >> $config_host_mak
4797fi
4798if test "$posix_madvise" = "yes" ; then
4799 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4800fi
1e9737da
RH
4801if test "$sigev_thread_id" = "yes" ; then
4802 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
4803fi
97a847bc 4804
cd4ec0b4
GH
4805if test "$spice" = "yes" ; then
4806 echo "CONFIG_SPICE=y" >> $config_host_mak
4807fi
36707144 4808
111a38b0
RR
4809if test "$smartcard_nss" = "yes" ; then
4810 echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
9d171bd9
MT
4811 echo "NSS_LIBS=$nss_libs" >> $config_host_mak
4812 echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
111a38b0
RR
4813fi
4814
2b2325ff
GH
4815if test "$libusb" = "yes" ; then
4816 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
4817fi
4818
69354a83
HG
4819if test "$usb_redir" = "yes" ; then
4820 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
4821fi
4822
da076ffe
GH
4823if test "$opengl" = "yes" ; then
4824 echo "CONFIG_OPENGL=y" >> $config_host_mak
f676c67e 4825 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
da076ffe 4826 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
20ff075b
MW
4827fi
4828
607dacd0
QN
4829if test "$lzo" = "yes" ; then
4830 echo "CONFIG_LZO=y" >> $config_host_mak
4831fi
4832
4833if test "$snappy" = "yes" ; then
4834 echo "CONFIG_SNAPPY=y" >> $config_host_mak
4835fi
4836
6b383c08
PW
4837if test "$bzip2" = "yes" ; then
4838 echo "CONFIG_BZIP2=y" >> $config_host_mak
4839 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
4840fi
4841
c589b249 4842if test "$libiscsi" = "yes" ; then
d3399d7c 4843 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
4844 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
4845 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
4846fi
4847
6542aa9c
PL
4848if test "$libnfs" = "yes" ; then
4849 echo "CONFIG_LIBNFS=y" >> $config_host_mak
4850fi
4851
f794573e
EO
4852if test "$seccomp" = "yes"; then
4853 echo "CONFIG_SECCOMP=y" >> $config_host_mak
4854fi
4855
83fb7adf 4856# XXX: suppress that
7d3505c5 4857if [ "$bsd" = "yes" ] ; then
2358a494 4858 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
4859fi
4860
20ff6c80
AL
4861if test "$zero_malloc" = "yes" ; then
4862 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
4863fi
3556c233
PB
4864if test "$qom_cast_debug" = "yes" ; then
4865 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4866fi
f27aaf4b 4867if test "$rbd" = "yes" ; then
d3399d7c 4868 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
4869 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
4870 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
4871fi
4872
7c2acc70 4873echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
4874if test "$coroutine_pool" = "yes" ; then
4875 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4876else
4877 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4878fi
20ff6c80 4879
d2042378
AK
4880if test "$open_by_handle_at" = "yes" ; then
4881 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
4882fi
4883
e06a765e
HPB
4884if test "$linux_magic_h" = "yes" ; then
4885 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
4886fi
4887
cc6e3ca9
GH
4888if test "$pragma_diagnostic_available" = "yes" ; then
4889 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
4890fi
4891
3f4349dc
KW
4892if test "$valgrind_h" = "yes" ; then
4893 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
4894fi
4895
8ab1bf12
LC
4896if test "$has_environ" = "yes" ; then
4897 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
4898fi
4899
76a347e1
RH
4900if test "$cpuid_h" = "yes" ; then
4901 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4902fi
4903
f540166b
RH
4904if test "$int128" = "yes" ; then
4905 echo "CONFIG_INT128=y" >> $config_host_mak
4906fi
4907
1e6e9aca
RH
4908if test "$getauxval" = "yes" ; then
4909 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4910fi
4911
eb100396 4912if test "$glusterfs" = "yes" ; then
d3399d7c 4913 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
4914 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
4915 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
4916fi
4917
4918if test "$glusterfs_discard" = "yes" ; then
4919 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 4920fi
e06a765e 4921
7c815372
BR
4922if test "$glusterfs_zerofill" = "yes" ; then
4923 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
4924fi
4925
c9a12e75
CN
4926if test "$archipelago" = "yes" ; then
4927 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
4928 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
4929fi
4930
0a12ec87 4931if test "$libssh2" = "yes" ; then
d3399d7c 4932 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
4933 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
4934 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
4935fi
4936
95c6bff3
BC
4937if test "$quorum" = "yes" ; then
4938 echo "CONFIG_QUORUM=y" >> $config_host_mak
4939fi
4940
4f18b782
JC
4941if test "$vhdx" = "yes" ; then
4942 echo "CONFIG_VHDX=y" >> $config_host_mak
4943fi
4944
68063649 4945# USB host support
b5613fdc
GH
4946if test "$libusb" = "yes"; then
4947 echo "HOST_USB=libusb legacy" >> $config_host_mak
4948else
98ec69ac 4949 echo "HOST_USB=stub" >> $config_host_mak
b5613fdc 4950fi
68063649 4951
3b8acc11
PB
4952# TPM passthrough support?
4953if test "$tpm" = "yes"; then
4954 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
4955 if test "$tpm_passthrough" = "yes"; then
4956 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
4957 fi
4958fi
4959
5b808275
LV
4960echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
4961if have_backend "nop"; then
6d8a764e 4962 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 4963fi
5b808275 4964if have_backend "simple"; then
6d8a764e
LV
4965 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
4966 # Set the appropriate trace file.
953ffe0f 4967 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 4968fi
5b808275 4969if have_backend "stderr"; then
6d8a764e
LV
4970 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
4971fi
5b808275 4972if have_backend "ust"; then
6d8a764e
LV
4973 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
4974fi
5b808275 4975if have_backend "dtrace"; then
6d8a764e
LV
4976 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
4977 if test "$trace_backend_stap" = "yes" ; then
4978 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
4979 fi
c276b17d 4980fi
5b808275 4981if have_backend "ftrace"; then
781e9545
ET
4982 if test "$linux" = "yes" ; then
4983 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 4984 else
21684af0 4985 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
4986 fi
4987fi
9410b56c
PS
4988echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
4989
2da776db
MH
4990if test "$rdma" = "yes" ; then
4991 echo "CONFIG_RDMA=y" >> $config_host_mak
4992fi
4993
5c312079
DDAG
4994# Hold two types of flag:
4995# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
4996# a thread we have a handle to
4997# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
4998# platform
4999if test "$pthread_setname_np" = "yes" ; then
5000 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5001 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5002fi
5003
5b5e3037
PB
5004if test "$tcg_interpreter" = "yes"; then
5005 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5006elif test "$ARCH" = "sparc64" ; then
5007 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5008elif test "$ARCH" = "s390x" ; then
5009 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 5010elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5b5e3037 5011 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5
RH
5012elif test "$ARCH" = "ppc64" ; then
5013 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5b5e3037
PB
5014else
5015 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5016fi
5017QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5018
98ec69ac 5019echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 5020echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
5021echo "MAKE=$make" >> $config_host_mak
5022echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
5023echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5024echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
21655882
PB
5025if test -n "$libtool"; then
5026 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5027 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5028else
5029 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5030 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5031fi
c886edfb 5032echo "PYTHON=$python" >> $config_host_mak
804edf29 5033echo "CC=$cc" >> $config_host_mak
a31a8642
MT
5034if $iasl -h > /dev/null 2>&1; then
5035 echo "IASL=$iasl" >> $config_host_mak
5036fi
2b2e59e6 5037echo "CC_I386=$cc_i386" >> $config_host_mak
804edf29 5038echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 5039echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 5040echo "OBJCC=$objcc" >> $config_host_mak
804edf29 5041echo "AR=$ar" >> $config_host_mak
45d285ab 5042echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
3dd46c78
BS
5043echo "AS=$as" >> $config_host_mak
5044echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
5045echo "OBJCOPY=$objcopy" >> $config_host_mak
5046echo "LD=$ld" >> $config_host_mak
4852ee95 5047echo "NM=$nm" >> $config_host_mak
9fe6de94 5048echo "WINDRES=$windres" >> $config_host_mak
44dc0ca3 5049echo "LIBTOOL=$libtool" >> $config_host_mak
e2a2ed06 5050echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 5051echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 5052echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
f9728943 5053echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
5054if test "$sparse" = "yes" ; then
5055 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 5056 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 5057 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
5058 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5059 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5060fi
42da6041
GH
5061if test "$cross_prefix" != ""; then
5062 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5063else
5064 echo "AUTOCONF_HOST := " >> $config_host_mak
5065fi
e2a2ed06 5066echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 5067echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
37746c5e 5068echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
73da375e 5069echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 5070echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
804edf29 5071echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
5072echo "DSOSUF=$DSOSUF" >> $config_host_mak
5073echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 5074echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
94dd53c5 5075echo "POD2MAN=$POD2MAN" >> $config_host_mak
cbdd1999 5076echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
1d728c39
BS
5077if test "$gcov" = "yes" ; then
5078 echo "CONFIG_GCOV=y" >> $config_host_mak
5079 echo "GCOV=$gcov_tool" >> $config_host_mak
5080fi
804edf29 5081
6efd7517
PM
5082# use included Linux headers
5083if test "$linux" = "yes" ; then
a307beb6 5084 mkdir -p linux-headers
6efd7517 5085 case "$cpu" in
c72b26ec 5086 i386|x86_64|x32)
08312a63 5087 linux_arch=x86
6efd7517
PM
5088 ;;
5089 ppcemb|ppc|ppc64)
08312a63 5090 linux_arch=powerpc
6efd7517
PM
5091 ;;
5092 s390x)
08312a63
PM
5093 linux_arch=s390
5094 ;;
1f080313
CF
5095 aarch64)
5096 linux_arch=arm64
5097 ;;
222e7d11
SL
5098 mips64)
5099 linux_arch=mips
5100 ;;
08312a63
PM
5101 *)
5102 # For most CPUs the kernel architecture name and QEMU CPU name match.
5103 linux_arch="$cpu"
6efd7517
PM
5104 ;;
5105 esac
08312a63
PM
5106 # For non-KVM architectures we will not have asm headers
5107 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5108 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5109 fi
6efd7517
PM
5110fi
5111
1d14ffa9 5112for target in $target_list; do
97a847bc 5113target_dir="$target"
25be210f 5114config_target_mak=$target_dir/config-target.mak
c1799a84 5115target_name=`echo $target | cut -d '-' -f 1`
97a847bc 5116target_bigendian="no"
1f3d3c8f 5117
c1799a84 5118case "$target_name" in
d15a9c23 5119 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
5120 target_bigendian=yes
5121 ;;
5122esac
97a847bc 5123target_softmmu="no"
997344f3 5124target_user_only="no"
831b7825 5125target_linux_user="no"
84778508 5126target_bsd_user="no"
9e407a85 5127case "$target" in
c1799a84 5128 ${target_name}-softmmu)
9e407a85
PB
5129 target_softmmu="yes"
5130 ;;
c1799a84 5131 ${target_name}-linux-user)
9c7a4202 5132 if test "$linux" != "yes" ; then
76ad07a4 5133 error_exit "Target '$target' is only available on a Linux host"
9c7a4202 5134 fi
9e407a85
PB
5135 target_user_only="yes"
5136 target_linux_user="yes"
5137 ;;
c1799a84 5138 ${target_name}-bsd-user)
9cf55765 5139 if test "$bsd" != "yes" ; then
76ad07a4 5140 error_exit "Target '$target' is only available on a BSD host"
9c7a4202 5141 fi
84778508
BS
5142 target_user_only="yes"
5143 target_bsd_user="yes"
5144 ;;
9e407a85 5145 *)
76ad07a4 5146 error_exit "Target '$target' not recognised"
9e407a85
PB
5147 exit 1
5148 ;;
5149esac
831b7825 5150
97a847bc 5151mkdir -p $target_dir
25be210f 5152echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 5153
e5fe0c52 5154bflt="no"
c1799a84 5155interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
56aebc89 5156gdb_xml_files=""
7ba1e619 5157
c1799a84 5158TARGET_ARCH="$target_name"
6acff7da 5159TARGET_BASE_ARCH=""
e6e91b9c 5160TARGET_ABI_DIR=""
e73aae67 5161
c1799a84 5162case "$target_name" in
2408a527 5163 i386)
2408a527
AJ
5164 ;;
5165 x86_64)
6acff7da 5166 TARGET_BASE_ARCH=i386
2408a527
AJ
5167 ;;
5168 alpha)
2408a527
AJ
5169 ;;
5170 arm|armeb)
b498c8a0 5171 TARGET_ARCH=arm
2408a527 5172 bflt="yes"
56aebc89 5173 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
2408a527 5174 ;;
6a49fa95
AG
5175 aarch64)
5176 TARGET_BASE_ARCH=arm
5177 bflt="yes"
8f95ce2e 5178 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6a49fa95 5179 ;;
2408a527 5180 cris)
2408a527 5181 ;;
613a22c9 5182 lm32)
613a22c9 5183 ;;
2408a527 5184 m68k)
2408a527 5185 bflt="yes"
56aebc89 5186 gdb_xml_files="cf-core.xml cf-fp.xml"
2408a527 5187 ;;
877fdc12
EI
5188 microblaze|microblazeel)
5189 TARGET_ARCH=microblaze
72b675ca 5190 bflt="yes"
72b675ca 5191 ;;
0adcffb1 5192 mips|mipsel)
b498c8a0 5193 TARGET_ARCH=mips
25be210f 5194 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
5195 ;;
5196 mipsn32|mipsn32el)
597e2cec 5197 TARGET_ARCH=mips64
6acff7da 5198 TARGET_BASE_ARCH=mips
25be210f 5199 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 5200 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
5201 ;;
5202 mips64|mips64el)
b498c8a0 5203 TARGET_ARCH=mips64
6acff7da 5204 TARGET_BASE_ARCH=mips
25be210f 5205 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 5206 ;;
d15a9c23
AG
5207 moxie)
5208 ;;
e67db06e
JL
5209 or32)
5210 TARGET_ARCH=openrisc
5211 TARGET_BASE_ARCH=openrisc
e67db06e 5212 ;;
2408a527 5213 ppc)
c8b3532d 5214 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5215 ;;
5216 ppcemb)
6acff7da 5217 TARGET_BASE_ARCH=ppc
e6e91b9c 5218 TARGET_ABI_DIR=ppc
c8b3532d 5219 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5220 ;;
5221 ppc64)
6acff7da 5222 TARGET_BASE_ARCH=ppc
e6e91b9c 5223 TARGET_ABI_DIR=ppc
c8b3532d 5224 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527 5225 ;;
9c35126c
DK
5226 ppc64le)
5227 TARGET_ARCH=ppc64
5228 TARGET_BASE_ARCH=ppc
5229 TARGET_ABI_DIR=ppc
5230 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5231 ;;
2408a527 5232 ppc64abi32)
b498c8a0 5233 TARGET_ARCH=ppc64
6acff7da 5234 TARGET_BASE_ARCH=ppc
e6e91b9c 5235 TARGET_ABI_DIR=ppc
25be210f 5236 echo "TARGET_ABI32=y" >> $config_target_mak
c8b3532d 5237 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
5238 ;;
5239 sh4|sh4eb)
b498c8a0 5240 TARGET_ARCH=sh4
2408a527
AJ
5241 bflt="yes"
5242 ;;
5243 sparc)
2408a527
AJ
5244 ;;
5245 sparc64)
6acff7da 5246 TARGET_BASE_ARCH=sparc
2408a527
AJ
5247 ;;
5248 sparc32plus)
b498c8a0 5249 TARGET_ARCH=sparc64
6acff7da 5250 TARGET_BASE_ARCH=sparc
e6e91b9c 5251 TARGET_ABI_DIR=sparc
25be210f 5252 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 5253 ;;
24e804ec 5254 s390x)
6117afac 5255 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml"
24e804ec 5256 ;;
5ecaa4ed
PC
5257 tricore)
5258 ;;
d2fbca94 5259 unicore32)
d2fbca94 5260 ;;
cfa550c6
MF
5261 xtensa|xtensaeb)
5262 TARGET_ARCH=xtensa
cfa550c6 5263 ;;
2408a527 5264 *)
76ad07a4 5265 error_exit "Unsupported target CPU"
2408a527
AJ
5266 ;;
5267esac
5e8861a0
PB
5268# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5269if [ "$TARGET_BASE_ARCH" = "" ]; then
5270 TARGET_BASE_ARCH=$TARGET_ARCH
5271fi
5272
5e8861a0
PB
5273symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5274
99afc91d
DB
5275upper() {
5276 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5277}
5278
99afc91d 5279target_arch_name="`upper $TARGET_ARCH`"
25be210f 5280echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 5281echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 5282echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
5283if [ "$TARGET_ABI_DIR" = "" ]; then
5284 TARGET_ABI_DIR=$TARGET_ARCH
5285fi
25be210f 5286echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
5287if [ "$HOST_VARIANT_DIR" != "" ]; then
5288 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5289fi
c1799a84 5290case "$target_name" in
1b0c87fc
JQ
5291 i386|x86_64)
5292 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
25be210f 5293 echo "CONFIG_XEN=y" >> $config_target_mak
eb6fda0f
AP
5294 if test "$xen_pci_passthrough" = yes; then
5295 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5296 fi
1b0c87fc 5297 fi
59d21e53
AG
5298 ;;
5299 *)
1b0c87fc 5300esac
c1799a84 5301case "$target_name" in
222e7d11 5302 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
c59249f9
JQ
5303 # Make sure the target and host cpus are compatible
5304 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
c1799a84
PB
5305 \( "$target_name" = "$cpu" -o \
5306 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5307 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5308 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5309 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
222e7d11 5310 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
c1799a84 5311 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
18b8263e
MT
5312 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5313 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5314 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
25be210f 5315 echo "CONFIG_KVM=y" >> $config_target_mak
1ba16968 5316 if test "$vhost_net" = "yes" ; then
d5970055
MT
5317 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5318 fi
c59249f9
JQ
5319 fi
5320esac
de83cd02 5321if test "$target_bigendian" = "yes" ; then
25be210f 5322 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 5323fi
97a847bc 5324if test "$target_softmmu" = "yes" ; then
25be210f 5325 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
43ce4dfe 5326fi
997344f3 5327if test "$target_user_only" = "yes" ; then
25be210f 5328 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 5329 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 5330fi
831b7825 5331if test "$target_linux_user" = "yes" ; then
25be210f 5332 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 5333fi
56aebc89
PB
5334list=""
5335if test ! -z "$gdb_xml_files" ; then
5336 for x in $gdb_xml_files; do
5337 list="$list $source_path/gdb-xml/$x"
5338 done
3d0f1517 5339 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 5340fi
97a847bc 5341
e5fe0c52 5342if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 5343 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 5344fi
379f6698 5345if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
25be210f 5346 echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
379f6698 5347fi
84778508 5348if test "$target_bsd_user" = "yes" ; then
25be210f 5349 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 5350fi
5b0753e0 5351
4afddb55 5352# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 5353
4afddb55 5354cflags=""
fa282484 5355ldflags=""
9b8e111f 5356
64656024
JQ
5357for i in $ARCH $TARGET_BASE_ARCH ; do
5358 case "$i" in
5359 alpha)
25be210f 5360 echo "CONFIG_ALPHA_DIS=y" >> $config_target_mak
76cad711 5361 echo "CONFIG_ALPHA_DIS=y" >> config-all-disas.mak
64656024 5362 ;;
82295d8a
RH
5363 aarch64)
5364 if test -n "${cxx}"; then
5365 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5366 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5367 fi
5368 ;;
64656024 5369 arm)
25be210f 5370 echo "CONFIG_ARM_DIS=y" >> $config_target_mak
76cad711 5371 echo "CONFIG_ARM_DIS=y" >> config-all-disas.mak
999b53ec
CF
5372 if test -n "${cxx}"; then
5373 echo "CONFIG_ARM_A64_DIS=y" >> $config_target_mak
5374 echo "CONFIG_ARM_A64_DIS=y" >> config-all-disas.mak
5375 fi
64656024
JQ
5376 ;;
5377 cris)
25be210f 5378 echo "CONFIG_CRIS_DIS=y" >> $config_target_mak
76cad711 5379 echo "CONFIG_CRIS_DIS=y" >> config-all-disas.mak
64656024
JQ
5380 ;;
5381 hppa)
25be210f 5382 echo "CONFIG_HPPA_DIS=y" >> $config_target_mak
76cad711 5383 echo "CONFIG_HPPA_DIS=y" >> config-all-disas.mak
64656024 5384 ;;
c72b26ec 5385 i386|x86_64|x32)
25be210f 5386 echo "CONFIG_I386_DIS=y" >> $config_target_mak
76cad711 5387 echo "CONFIG_I386_DIS=y" >> config-all-disas.mak
64656024 5388 ;;
903ec55c
AJ
5389 ia64*)
5390 echo "CONFIG_IA64_DIS=y" >> $config_target_mak
76cad711 5391 echo "CONFIG_IA64_DIS=y" >> config-all-disas.mak
903ec55c 5392 ;;
79368f49
MW
5393 lm32)
5394 echo "CONFIG_LM32_DIS=y" >> $config_target_mak
76cad711 5395 echo "CONFIG_LM32_DIS=y" >> config-all-disas.mak
79368f49 5396 ;;
64656024 5397 m68k)
25be210f 5398 echo "CONFIG_M68K_DIS=y" >> $config_target_mak
76cad711 5399 echo "CONFIG_M68K_DIS=y" >> config-all-disas.mak
64656024 5400 ;;
877fdc12 5401 microblaze*)
25be210f 5402 echo "CONFIG_MICROBLAZE_DIS=y" >> $config_target_mak
76cad711 5403 echo "CONFIG_MICROBLAZE_DIS=y" >> config-all-disas.mak
64656024
JQ
5404 ;;
5405 mips*)
25be210f 5406 echo "CONFIG_MIPS_DIS=y" >> $config_target_mak
76cad711 5407 echo "CONFIG_MIPS_DIS=y" >> config-all-disas.mak
64656024 5408 ;;
d15a9c23
AG
5409 moxie*)
5410 echo "CONFIG_MOXIE_DIS=y" >> $config_target_mak
5411 echo "CONFIG_MOXIE_DIS=y" >> config-all-disas.mak
5412 ;;
e67db06e
JL
5413 or32)
5414 echo "CONFIG_OPENRISC_DIS=y" >> $config_target_mak
76cad711 5415 echo "CONFIG_OPENRISC_DIS=y" >> config-all-disas.mak
e67db06e 5416 ;;
64656024 5417 ppc*)
25be210f 5418 echo "CONFIG_PPC_DIS=y" >> $config_target_mak
76cad711 5419 echo "CONFIG_PPC_DIS=y" >> config-all-disas.mak
64656024 5420 ;;
24e804ec 5421 s390*)
25be210f 5422 echo "CONFIG_S390_DIS=y" >> $config_target_mak
76cad711 5423 echo "CONFIG_S390_DIS=y" >> config-all-disas.mak
64656024
JQ
5424 ;;
5425 sh4)
25be210f 5426 echo "CONFIG_SH4_DIS=y" >> $config_target_mak
76cad711 5427 echo "CONFIG_SH4_DIS=y" >> config-all-disas.mak
64656024
JQ
5428 ;;
5429 sparc*)
25be210f 5430 echo "CONFIG_SPARC_DIS=y" >> $config_target_mak
76cad711 5431 echo "CONFIG_SPARC_DIS=y" >> config-all-disas.mak
64656024 5432 ;;
cfa550c6
MF
5433 xtensa*)
5434 echo "CONFIG_XTENSA_DIS=y" >> $config_target_mak
76cad711 5435 echo "CONFIG_XTENSA_DIS=y" >> config-all-disas.mak
cfa550c6 5436 ;;
64656024
JQ
5437 esac
5438done
9195b2c2
SW
5439if test "$tcg_interpreter" = "yes" ; then
5440 echo "CONFIG_TCI_DIS=y" >> $config_target_mak
76cad711 5441 echo "CONFIG_TCI_DIS=y" >> config-all-disas.mak
9195b2c2 5442fi
64656024 5443
6ee7126f
JQ
5444case "$ARCH" in
5445alpha)
5446 # Ensure there's only a single GP
5447 cflags="-msmall-data $cflags"
5448;;
5449esac
5450
d02c1db3 5451if test "$gprof" = "yes" ; then
25be210f 5452 echo "TARGET_GPROF=yes" >> $config_target_mak
d02c1db3
JQ
5453 if test "$target_linux_user" = "yes" ; then
5454 cflags="-p $cflags"
5455 ldflags="-p $ldflags"
5456 fi
5457 if test "$target_softmmu" = "yes" ; then
5458 ldflags="-p $ldflags"
25be210f 5459 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
5460 fi
5461fi
5462
9b8e111f 5463if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 5464 ldflags="$ldflags $textseg_ldflags"
fa282484 5465fi
fa282484 5466
25be210f
JQ
5467echo "LDFLAGS+=$ldflags" >> $config_target_mak
5468echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 5469
97a847bc 5470done # for target in $targets
7d13299d 5471
b776eca1
GH
5472if [ "$pixman" = "internal" ]; then
5473 echo "config-host.h: subdir-pixman" >> $config_host_mak
5474fi
5475
2da776db
MH
5476if test "$rdma" = "yes" ; then
5477echo "CONFIG_RDMA=y" >> $config_host_mak
5478fi
5479
a540f158
PC
5480if [ "$dtc_internal" = "yes" ]; then
5481 echo "config-host.h: subdir-dtc" >> $config_host_mak
5482fi
5483
a99d57bb
WG
5484if test "$numa" = "yes"; then
5485 echo "CONFIG_NUMA=y" >> $config_host_mak
5486fi
5487
d1807a4f 5488# build tree in object directory in case the source is not in the current directory
f93296ea 5489DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
2b170eff 5490DIRS="$DIRS fsdev"
9933c305 5491DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 5492DIRS="$DIRS roms/seabios roms/vgabios"
2dee8d54 5493DIRS="$DIRS qapi-generated"
c09015dd
AL
5494FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5495FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
aaa2ebc5 5496FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
d1807a4f 5497FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
446b9165 5498FILES="$FILES pc-bios/spapr-rtas/Makefile"
9933c305 5499FILES="$FILES pc-bios/s390-ccw/Makefile"
d1807a4f 5500FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
4652b792 5501FILES="$FILES pc-bios/qemu-icon.bmp"
753d11f2
RH
5502for bios_file in \
5503 $source_path/pc-bios/*.bin \
5acc2ec0 5504 $source_path/pc-bios/*.aml \
753d11f2
RH
5505 $source_path/pc-bios/*.rom \
5506 $source_path/pc-bios/*.dtb \
e89e33e1 5507 $source_path/pc-bios/*.img \
753d11f2 5508 $source_path/pc-bios/openbios-* \
4e73c781 5509 $source_path/pc-bios/u-boot.* \
753d11f2
RH
5510 $source_path/pc-bios/palcode-*
5511do
d1807a4f
PB
5512 FILES="$FILES pc-bios/`basename $bios_file`"
5513done
c2304b52
MA
5514for test_file in `find $source_path/tests/acpi-test-data -type f`
5515do
5516 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5517done
d1807a4f
PB
5518mkdir -p $DIRS
5519for f in $FILES ; do
cab00a5a 5520 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
5521 symlink "$source_path/$f" "$f"
5522 fi
d1807a4f 5523done
1ad2134f 5524
c34ebfdc 5525# temporary config to build submodules
2d9f27d2 5526for rom in seabios vgabios ; do
c34ebfdc 5527 config_mak=roms/$rom/config.mak
37116c89 5528 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 5529 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
3dd46c78 5530 echo "AS=$as" >> $config_mak
c34ebfdc
AL
5531 echo "CC=$cc" >> $config_mak
5532 echo "BCC=bcc" >> $config_mak
3dd46c78 5533 echo "CPP=$cpp" >> $config_mak
c34ebfdc 5534 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 5535 echo "IASL=$iasl" >> $config_mak
c34ebfdc
AL
5536 echo "LD=$ld" >> $config_mak
5537done
5538
76c7560a
HR
5539# set up qemu-iotests in this build directory
5540iotests_common_env="tests/qemu-iotests/common.env"
5541iotests_check="tests/qemu-iotests/check"
5542
5543echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5544echo >> "$iotests_common_env"
5545echo "export PYTHON='$python'" >> "$iotests_common_env"
5546
5547if [ ! -e "$iotests_check" ]; then
5548 symlink "$source_path/$iotests_check" "$iotests_check"
5549fi
5550
dc655404
MT
5551# Save the configure command line for later reuse.
5552cat <<EOD >config.status
5553#!/bin/sh
5554# Generated by configure.
5555# Run this file to recreate the current configuration.
5556# Compiler output produced by configure, useful for debugging
5557# configure, is in config.log if it exists.
5558EOD
5559printf "exec" >>config.status
5560printf " '%s'" "$0" "$@" >>config.status
5561echo >>config.status
5562chmod +x config.status
5563
8cd05ab6 5564rm -r "$TMPDIR1"