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