]> git.proxmox.com Git - mirror_qemu.git/blame - configure
Merge remote-tracking branch 'remotes/kraxel/tags/fixes-20210726-pull-request' into...
[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
dedad027
DB
14# make source path absolute
15source_path=$(cd "$(dirname -- "$0")"; pwd)
16
17if test "$PWD" = "$source_path"
18then
19 echo "Using './build' as the directory for build output"
20
21 MARKER=build/auto-created-by-configure
22
23 if test -e build
24 then
25 if test -f $MARKER
26 then
27 rm -rf build
28 else
29 echo "ERROR: ./build dir already exists and was not previously created by configure"
30 exit 1
31 fi
32 fi
33
34 mkdir build
35 touch $MARKER
36
37 cat > GNUmakefile <<'EOF'
38# This file is auto-generated by configure to support in-source tree
39# 'make' command invocation
40
41ifeq ($(MAKECMDGOALS),)
42recurse: all
43endif
44
45.NOTPARALLEL: %
46%: force
47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49 @if test "$(MAKECMDGOALS)" = "distclean" && \
50 test -e build/auto-created-by-configure ; \
51 then \
52 rm -rf build GNUmakefile ; \
53 fi
54force: ;
55.PHONY: force
56GNUmakefile: ;
57
58EOF
59 cd build
60 exec $source_path/configure "$@"
61fi
62
8cd05ab6
PM
63# Temporary directory used for files created while
64# configure runs. Since it is in the build directory
65# we can safely blow away any previous version of it
66# (and we need not jump through hoops to try to delete
67# it when configure exits.)
68TMPDIR1="config-temp"
69rm -rf "${TMPDIR1}"
70mkdir -p "${TMPDIR1}"
71if [ $? -ne 0 ]; then
72 echo "ERROR: failed to create temporary directory"
73 exit 1
7d13299d
FB
74fi
75
8cd05ab6
PM
76TMPB="qemu-conf"
77TMPC="${TMPDIR1}/${TMPB}.c"
66518bf6 78TMPO="${TMPDIR1}/${TMPB}.o"
9c83ffd8 79TMPCXX="${TMPDIR1}/${TMPB}.cxx"
8cd05ab6 80TMPE="${TMPDIR1}/${TMPB}.exe"
26fffe29 81TMPTXT="${TMPDIR1}/${TMPB}.txt"
7d13299d 82
da1d85e3 83rm -f config.log
9ac81bbb 84
b48e3611
PM
85# Print a helpful header at the top of config.log
86echo "# QEMU configure log $(date)" >> config.log
979ae168
PM
87printf "# Configured with:" >> config.log
88printf " '%s'" "$0" "$@" >> config.log
89echo >> config.log
b48e3611
PM
90echo "#" >> config.log
91
835af899
PB
92quote_sh() {
93 printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
94}
95
d880a3ba
PB
96print_error() {
97 (echo
76ad07a4
PM
98 echo "ERROR: $1"
99 while test -n "$2"; do
100 echo " $2"
101 shift
102 done
d880a3ba
PB
103 echo) >&2
104}
105
106error_exit() {
107 print_error "$@"
76ad07a4
PM
108 exit 1
109}
110
9c83ffd8
PM
111do_compiler() {
112 # Run the compiler, capturing its output to the log. First argument
113 # is compiler binary to execute.
630d86b7 114 compiler="$1"
9c83ffd8 115 shift
8bbe05d7
IJ
116 if test -n "$BASH_VERSION"; then eval '
117 echo >>config.log "
118funcs: ${FUNCNAME[*]}
119lines: ${BASH_LINENO[*]}"
120 '; fi
9c83ffd8
PM
121 echo $compiler "$@" >> config.log
122 $compiler "$@" >> config.log 2>&1 || return $?
8dc38a78
PM
123 # Test passed. If this is an --enable-werror build, rerun
124 # the test with -Werror and bail out if it fails. This
125 # makes warning-generating-errors in configure test code
126 # obvious to developers.
127 if test "$werror" != "yes"; then
128 return 0
129 fi
130 # Don't bother rerunning the compile if we were already using -Werror
131 case "$*" in
132 *-Werror*)
133 return 0
134 ;;
135 esac
9c83ffd8
PM
136 echo $compiler -Werror "$@" >> config.log
137 $compiler -Werror "$@" >> config.log 2>&1 && return $?
76ad07a4
PM
138 error_exit "configure test passed without -Werror but failed with -Werror." \
139 "This is probably a bug in the configure script. The failing command" \
140 "will be at the bottom of config.log." \
141 "You can run configure with --disable-werror to bypass this check."
8dc38a78
PM
142}
143
9c83ffd8
PM
144do_cc() {
145 do_compiler "$cc" "$@"
146}
147
148do_cxx() {
149 do_compiler "$cxx" "$@"
150}
151
00849b92
RH
152# Append $2 to the variable named $1, with space separation
153add_to() {
154 eval $1=\${$1:+\"\$$1 \"}\$2
155}
156
9c83ffd8
PM
157update_cxxflags() {
158 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
159 # options which some versions of GCC's C++ compiler complain about
160 # because they only make sense for C programs.
53422040 161 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
8a9d3d56 162 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/)
9c83ffd8
PM
163 for arg in $QEMU_CFLAGS; do
164 case $arg in
165 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
166 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
167 ;;
168 *)
169 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
170 ;;
171 esac
172 done
173}
174
52166aa0 175compile_object() {
fd0e6053 176 local_cflags="$1"
5770e8af 177 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
52166aa0
JQ
178}
179
180compile_prog() {
181 local_cflags="$1"
182 local_ldflags="$2"
5770e8af
PB
183 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
184 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
52166aa0
JQ
185}
186
11568d6d
PB
187# symbolically link $1 to $2. Portable version of "ln -sf".
188symlink() {
72b8b5a1 189 rm -rf "$2"
ec5b06d7 190 mkdir -p "$(dirname "$2")"
72b8b5a1 191 ln -s "$1" "$2"
11568d6d
PB
192}
193
0dba6195
LM
194# check whether a command is available to this shell (may be either an
195# executable or a builtin)
196has() {
197 type "$1" >/dev/null 2>&1
198}
199
0a01d76f 200version_ge () {
2df52b9b
AB
201 local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
202 local_ver2=$(echo "$2" | tr . ' ')
0a01d76f
MAL
203 while true; do
204 set x $local_ver1
205 local_first=${2-0}
c44a33e2
SG
206 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
207 shift ${2:+2}
0a01d76f
MAL
208 local_ver1=$*
209 set x $local_ver2
210 # the second argument finished, the first must be greater or equal
211 test $# = 1 && return 0
212 test $local_first -lt $2 && return 1
213 test $local_first -gt $2 && return 0
c44a33e2 214 shift ${2:+2}
0a01d76f
MAL
215 local_ver2=$*
216 done
217}
218
5b808275
LV
219have_backend () {
220 echo "$trace_backends" | grep "$1" >/dev/null
221}
222
3b6b7550
PB
223glob() {
224 eval test -z '"${1#'"$2"'}"'
225}
226
e9a3591f
CB
227ld_has() {
228 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
229}
230
4ace32e2
AO
231if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
232then
233 error_exit "main directory cannot contain spaces nor colons"
234fi
235
14211825 236# default parameters
2ff6b91e 237cpu=""
a31a8642 238iasl="iasl"
1e43adfc 239interp_prefix="/usr/gnemul/qemu-%M"
43ce4dfe 240static="no"
3812c0c4 241cross_compile="no"
7d13299d 242cross_prefix=""
0c58ac1c 243audio_drv_list=""
b64ec4e4
FZ
244block_drv_rw_whitelist=""
245block_drv_ro_whitelist=""
e5f05f8c 246block_drv_whitelist_tools="no"
e49d021e 247host_cc="cc"
d5631638 248audio_win_int=""
957f1f99 249libs_qga=""
5bc62e01 250debug_info="yes"
cdad781d 251lto="false"
63678e17 252stack_protector=""
1e4f6065 253safe_stack=""
afc3a8f9 254use_containers="yes"
f2385398 255gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
ac0df51d 256
92712822
DB
257if test -e "$source_path/.git"
258then
7d7dbf9d 259 git_submodules_action="update"
92712822 260else
7d7dbf9d 261 git_submodules_action="ignore"
92712822 262fi
2d652f24
PB
263
264git_submodules="ui/keycodemapdb"
cc84d63a 265git="git"
ac0df51d 266
afb63ebd
SW
267# Don't accept a target_list environment variable.
268unset target_list
447e133f 269unset target_list_exclude
377529c0
PB
270
271# Default value for a variable defining feature "foo".
272# * foo="no" feature will only be used if --enable-foo arg is given
273# * foo="" feature will be searched for, and if found, will be used
274# unless --disable-foo is given
275# * foo="yes" this value will only be set by --enable-foo flag.
276# feature will searched for,
277# if not found, configure exits with error
278#
279# Always add --enable-foo and --disable-foo command line args.
280# Distributions want to ensure that several features are compiled in, and it
281# is impossible without a --enable-foo that exits if a feature is not found.
282
c87ea116
AB
283default_feature=""
284# parse CC options second
285for opt do
286 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
287 case "$opt" in
288 --without-default-features)
289 default_feature="no"
290 ;;
291 esac
292done
293
8c6d4ff4 294brlapi="auto"
f9cd86fe 295curl="auto"
5285e593
YL
296iconv="auto"
297curses="auto"
e3667660 298docs="auto"
fbb4121d 299fdt="auto"
58952137 300netmap="no"
35be72ba
PB
301sdl="auto"
302sdl_image="auto"
422a5fd0 303coreaudio="auto"
cece116c 304virtiofsd="auto"
69202b40 305virtfs="auto"
5c53015a 306libudev="auto"
6ec0e15d 307mpath="auto"
3a6a1256 308vnc="auto"
deb62371 309sparse="auto"
c87ea116 310vde="$default_feature"
a0b93237
PB
311vnc_sasl="auto"
312vnc_jpeg="auto"
313vnc_png="auto"
4113f4cf 314xkbcommon="auto"
bcf0a7da 315xen=${default_feature:+disabled}
c87ea116 316xen_ctrl_version="$default_feature"
1badb709 317xen_pci_passthrough="auto"
c87ea116 318linux_aio="$default_feature"
53c22b68 319linux_io_uring="auto"
727c8bb8 320cap_ng="auto"
f7f2d651 321attr="auto"
c87ea116 322xfs="$default_feature"
1badb709 323tcg="enabled"
c87ea116 324membarrier="$default_feature"
0848f8ac 325vhost_kernel="$default_feature"
c87ea116
AB
326vhost_net="$default_feature"
327vhost_crypto="$default_feature"
328vhost_scsi="$default_feature"
329vhost_vsock="$default_feature"
d88618f7 330vhost_user="no"
e5e856c1 331vhost_user_blk_server="auto"
c87ea116 332vhost_user_fs="$default_feature"
0848f8ac 333vhost_vdpa="$default_feature"
46627f41 334bpf="auto"
3bd40ec7
PB
335kvm="auto"
336hax="auto"
337hvf="auto"
338whpx="auto"
74a414a1 339nvmm="auto"
c87ea116
AB
340rdma="$default_feature"
341pvrdma="$default_feature"
377529c0
PB
342gprof="no"
343debug_tcg="no"
377529c0 344debug="no"
247724cb 345sanitizers="no"
0aebab04 346tsan="no"
c87ea116 347fortify_source="$default_feature"
377529c0 348strip_opt="yes"
23a77b2d 349tcg_interpreter="false"
377529c0
PB
350bigendian="no"
351mingw32="no"
1d728c39 352gcov="no"
c7328271 353EXESUF=""
484e2cc7 354HOST_DSOSUF=".so"
17969268 355modules="no"
bd83c861 356module_upgrades="no"
377529c0 357prefix="/usr/local"
10ff82d1 358qemu_suffix="qemu"
4d34a86b 359slirp="auto"
377529c0
PB
360oss_lib=""
361bsd="no"
362linux="no"
363solaris="no"
364profiler="no"
b4e312e9 365cocoa="auto"
377529c0
PB
366softmmu="yes"
367linux_user="no"
377529c0 368bsd_user="no"
c8d5450b 369blobs="true"
377529c0 370pkgversion=""
40d6444e 371pie=""
3556c233 372qom_cast_debug="yes"
baf86d6b 373trace_backends="log"
377529c0 374trace_file="trace"
c87ea116 375spice="$default_feature"
58d3f3ff 376spice_protocol="auto"
fabd1e93 377rbd="auto"
5f364c57 378smartcard="auto"
0a40bcb7 379u2f="auto"
90540f32 380libusb="auto"
18f31e60 381usb_redir="auto"
c87ea116 382opengl="$default_feature"
5dd89908 383cpuid_h="no"
c87ea116 384avx2_opt="$default_feature"
8b18cdbf 385capstone="auto"
0c32a0ae 386lzo="auto"
241611ea 387snappy="auto"
29ba6116 388bzip2="auto"
ecea3696 389lzfse="auto"
b1def33d 390zstd="auto"
c87ea116 391guest_agent="$default_feature"
d9840e25 392guest_agent_with_vss="no"
50cbebb9 393guest_agent_ntddscsi="no"
b846ab7c 394guest_agent_msi="auto"
c87ea116 395vss_win32_sdk="$default_feature"
d9840e25 396win_sdk="no"
c87ea116 397want_tools="$default_feature"
9db405a3 398libiscsi="auto"
30045c05 399libnfs="auto"
519175a2 400coroutine=""
c87ea116 401coroutine_pool="$default_feature"
7d992e4d 402debug_stack_usage="no"
f0d92b56 403crypto_afalg="no"
9e62ba48
DB
404cfi="false"
405cfi_debug="false"
90835c2b 406seccomp="auto"
08821ca2 407glusterfs="auto"
1b695471 408gtk="auto"
a1c5e949 409tls_priority="NORMAL"
57612511
PB
410gnutls="auto"
411nettle="auto"
412gcrypt="auto"
05e391ae 413auth_pam="auto"
c23d7b4e 414vte="auto"
587d59d6 415virglrenderer="auto"
c87ea116
AB
416tpm="$default_feature"
417libssh="$default_feature"
418live_block_migration=${default_feature:-yes}
419numa="$default_feature"
2847b469 420tcmalloc="no"
7b01cb97 421jemalloc="no"
c87ea116
AB
422replication=${default_feature:-yes}
423bochs=${default_feature:-yes}
424cloop=${default_feature:-yes}
425dmg=${default_feature:-yes}
426qcow1=${default_feature:-yes}
427vdi=${default_feature:-yes}
428vvfat=${default_feature:-yes}
429qed=${default_feature:-yes}
430parallels=${default_feature:-yes}
c5b36c25 431libxml2="auto"
ba59fb77 432debug_mutex="no"
e36e8c70 433libpmem="auto"
7bc3ca7f 434default_devices="true"
ba4dd2aa 435plugins="$default_feature"
adc28027 436fuzzing="no"
b767d257 437rng_none="no"
c87ea116 438secret_keyring="$default_feature"
83ef1682 439libdaxctl="auto"
a5665051 440meson=""
48328880 441ninja=""
a5665051 442skip_meson=no
0e8e77d4 443gettext="auto"
a484a719 444fuse="auto"
df4ea709 445fuse_lseek="auto"
106ad1f9 446multiprocess="auto"
b8e0c493 447slirp_smbd="$default_feature"
377529c0 448
aa087962 449malloc_trim="auto"
20cf7b8e 450gio="$default_feature"
898be3e0 451
c87ea116 452# parse CC options second
ac0df51d 453for opt do
89138857 454 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
ac0df51d
AL
455 case "$opt" in
456 --cross-prefix=*) cross_prefix="$optarg"
3812c0c4 457 cross_compile="yes"
ac0df51d 458 ;;
3d8df640 459 --cc=*) CC="$optarg"
ac0df51d 460 ;;
83f73fce
TS
461 --cxx=*) CXX="$optarg"
462 ;;
2ff6b91e
JQ
463 --cpu=*) cpu="$optarg"
464 ;;
de385287 465 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
db5adeaa 466 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
e2a2ed06 467 ;;
11cde1c8 468 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
11cde1c8 469 ;;
db5adeaa 470 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
f9943cd5 471 EXTRA_LDFLAGS="$optarg"
e2a2ed06 472 ;;
5bc62e01
GH
473 --enable-debug-info) debug_info="yes"
474 ;;
475 --disable-debug-info) debug_info="no"
476 ;;
d75402b5
AB
477 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
478 ;;
d422b2bc
AB
479 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
480 eval "cross_cc_cflags_${cc_arch}=\$optarg"
2038f8c8 481 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
d422b2bc 482 ;;
d75402b5 483 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
2038f8c8 484 cc_archs="$cc_archs $cc_arch"
d75402b5 485 eval "cross_cc_${cc_arch}=\$optarg"
2038f8c8 486 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
d75402b5 487 ;;
ac0df51d
AL
488 esac
489done
ac0df51d
AL
490# OS specific
491# Using uname is really, really broken. Once we have the right set of checks
93148aa5 492# we can eliminate its usage altogether.
ac0df51d 493
e49d021e
PM
494# Preferred compiler:
495# ${CC} (if set)
496# ${cross_prefix}gcc (if cross-prefix specified)
497# system compiler
498if test -z "${CC}${cross_prefix}"; then
499 cc="$host_cc"
500else
501 cc="${CC-${cross_prefix}gcc}"
502fi
503
83f73fce
TS
504if test -z "${CXX}${cross_prefix}"; then
505 cxx="c++"
506else
507 cxx="${CXX-${cross_prefix}g++}"
508fi
509
b3198cc2 510ar="${AR-${cross_prefix}ar}"
cdbd727c 511as="${AS-${cross_prefix}as}"
5f6f0e27 512ccas="${CCAS-$cc}"
3dd46c78 513cpp="${CPP-$cc -E}"
b3198cc2
SY
514objcopy="${OBJCOPY-${cross_prefix}objcopy}"
515ld="${LD-${cross_prefix}ld}"
9f81aeb5 516ranlib="${RANLIB-${cross_prefix}ranlib}"
4852ee95 517nm="${NM-${cross_prefix}nm}"
b3198cc2
SY
518strip="${STRIP-${cross_prefix}strip}"
519windres="${WINDRES-${cross_prefix}windres}"
17884d7b
ST
520pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
521query_pkg_config() {
522 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
523}
524pkg_config=query_pkg_config
47c03744 525sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
ac0df51d 526
be17dc90 527# default flags for all hosts
2d31515b
PM
528# We use -fwrapv to tell the compiler that we require a C dialect where
529# left shift of signed integers is well defined and has the expected
530# 2s-complement style results. (Both clang and gcc agree that it
531# provides these semantics.)
086d5f75
PB
532QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
533QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
c95e3080 534QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
be17dc90 535QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
5770e8af
PB
536
537# Flags that are needed during configure but later taken care of by Meson
8a9d3d56 538CONFIGURE_CFLAGS="-std=gnu11 -Wall"
5770e8af 539CONFIGURE_LDFLAGS=
086d5f75 540
be17dc90 541
ac0df51d
AL
542check_define() {
543cat > $TMPC <<EOF
544#if !defined($1)
fd786e1a 545#error $1 not defined
ac0df51d
AL
546#endif
547int main(void) { return 0; }
548EOF
52166aa0 549 compile_object
ac0df51d
AL
550}
551
307119e7
GH
552check_include() {
553cat > $TMPC <<EOF
554#include <$1>
555int main(void) { return 0; }
556EOF
557 compile_object
558}
559
93b25869
JS
560write_c_skeleton() {
561 cat > $TMPC <<EOF
562int main(void) { return 0; }
563EOF
564}
565
adc28027
AB
566write_c_fuzzer_skeleton() {
567 cat > $TMPC <<EOF
568#include <stdint.h>
569#include <sys/types.h>
570int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
571int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
572EOF
573}
574
bbea4050
PM
575if check_define __linux__ ; then
576 targetos="Linux"
577elif check_define _WIN32 ; then
578 targetos='MINGW32'
579elif check_define __OpenBSD__ ; then
580 targetos='OpenBSD'
581elif check_define __sun__ ; then
582 targetos='SunOS'
583elif check_define __HAIKU__ ; then
584 targetos='Haiku'
951fedfc
PM
585elif check_define __FreeBSD__ ; then
586 targetos='FreeBSD'
587elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
588 targetos='GNU/kFreeBSD'
589elif check_define __DragonFly__ ; then
590 targetos='DragonFly'
591elif check_define __NetBSD__; then
592 targetos='NetBSD'
593elif check_define __APPLE__; then
594 targetos='Darwin'
bbea4050 595else
951fedfc
PM
596 # This is a fatal error, but don't report it yet, because we
597 # might be going to just print the --help text, or it might
598 # be the result of a missing compiler.
599 targetos='bogus'
bbea4050
PM
600fi
601
602# Some host OSes need non-standard checks for which CPU to use.
603# Note that these checks are broken for cross-compilation: if you're
604# cross-compiling to one of these OSes then you'll need to specify
605# the correct CPU with the --cpu option.
606case $targetos in
607Darwin)
5869f8dd 608 HOST_DSOSUF=".dylib"
bbea4050
PM
609 ;;
610SunOS)
89138857 611 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
bbea4050
PM
612 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
613 cpu="x86_64"
614 fi
615esac
616
2ff6b91e
JQ
617if test ! -z "$cpu" ; then
618 # command line argument
619 :
620elif check_define __i386__ ; then
ac0df51d
AL
621 cpu="i386"
622elif check_define __x86_64__ ; then
c72b26ec
RH
623 if check_define __ILP32__ ; then
624 cpu="x32"
625 else
626 cpu="x86_64"
627 fi
3aa9bd6c 628elif check_define __sparc__ ; then
3aa9bd6c
BS
629 if check_define __arch64__ ; then
630 cpu="sparc64"
631 else
632 cpu="sparc"
633 fi
fdf7ed96 634elif check_define _ARCH_PPC ; then
635 if check_define _ARCH_PPC64 ; then
f8378acc
RH
636 if check_define _LITTLE_ENDIAN ; then
637 cpu="ppc64le"
638 else
639 cpu="ppc64"
640 fi
fdf7ed96 641 else
642 cpu="ppc"
643 fi
afa05235
AJ
644elif check_define __mips__ ; then
645 cpu="mips"
d66ed0ea
AJ
646elif check_define __s390__ ; then
647 if check_define __s390x__ ; then
648 cpu="s390x"
649 else
650 cpu="s390"
651 fi
c4f80543
AF
652elif check_define __riscv ; then
653 if check_define _LP64 ; then
654 cpu="riscv64"
655 else
656 cpu="riscv32"
657 fi
21d89f84
PM
658elif check_define __arm__ ; then
659 cpu="arm"
1f080313
CF
660elif check_define __aarch64__ ; then
661 cpu="aarch64"
ac0df51d 662else
89138857 663 cpu=$(uname -m)
ac0df51d
AL
664fi
665
359bc95d
PM
666ARCH=
667# Normalise host CPU name and set ARCH.
668# Note that this case should only have supported host CPUs, not guests.
7d13299d 669case "$cpu" in
ee35e968 670 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
898be3e0 671 ;;
f8378acc
RH
672 ppc64le)
673 ARCH="ppc64"
f8378acc 674 ;;
7d13299d 675 i386|i486|i586|i686|i86pc|BePC)
97a847bc 676 cpu="i386"
7d13299d 677 ;;
aaa5fa14
AJ
678 x86_64|amd64)
679 cpu="x86_64"
680 ;;
21d89f84
PM
681 armv*b|armv*l|arm)
682 cpu="arm"
7d13299d 683 ;;
1f080313
CF
684 aarch64)
685 cpu="aarch64"
686 ;;
afa05235
AJ
687 mips*)
688 cpu="mips"
689 ;;
3142255c 690 sparc|sun4[cdmuv])
ae228531
FB
691 cpu="sparc"
692 ;;
7d13299d 693 *)
359bc95d
PM
694 # This will result in either an error or falling back to TCI later
695 ARCH=unknown
7d13299d
FB
696 ;;
697esac
359bc95d
PM
698if test -z "$ARCH"; then
699 ARCH="$cpu"
700fi
e2d52ad3 701
7d13299d 702# OS specific
0dbfc675 703
7d13299d 704case $targetos in
67b915a5 705MINGW32*)
0dbfc675 706 mingw32="yes"
3cec7cc2 707 audio_possible_drivers="dsound sdl"
307119e7
GH
708 if check_include dsound.h; then
709 audio_drv_list="dsound"
710 else
711 audio_drv_list=""
712 fi
898be3e0 713 supported_os="yes"
9b8e4298 714 plugins="no"
fb648e9c 715 pie="no"
67b915a5 716;;
5c40d2bd 717GNU/kFreeBSD)
a167ba50 718 bsd="yes"
6a485418 719 audio_drv_list="oss try-sdl"
0bac1111 720 audio_possible_drivers="oss sdl pa"
5c40d2bd 721;;
7d3505c5 722FreeBSD)
0dbfc675 723 bsd="yes"
0db4a067 724 make="${MAKE-gmake}"
6a485418 725 audio_drv_list="oss try-sdl"
0bac1111 726 audio_possible_drivers="oss sdl pa"
f01576f1 727 # needed for kinfo_getvmmap(3) in libutil.h
58952137 728 netmap="" # enable netmap autodetect
7d3505c5 729;;
c5e97233 730DragonFly)
0dbfc675 731 bsd="yes"
0db4a067 732 make="${MAKE-gmake}"
6a485418 733 audio_drv_list="oss try-sdl"
0bac1111 734 audio_possible_drivers="oss sdl pa"
c5e97233 735;;
7d3505c5 736NetBSD)
0dbfc675 737 bsd="yes"
0db4a067 738 make="${MAKE-gmake}"
6a485418 739 audio_drv_list="oss try-sdl"
0bac1111 740 audio_possible_drivers="oss sdl"
0dbfc675 741 oss_lib="-lossaudio"
7d3505c5
FB
742;;
743OpenBSD)
0dbfc675 744 bsd="yes"
0db4a067 745 make="${MAKE-gmake}"
f92c7168 746 audio_drv_list="try-sdl"
0bac1111 747 audio_possible_drivers="sdl"
7d3505c5 748;;
83fb7adf 749Darwin)
0dbfc675
JQ
750 bsd="yes"
751 darwin="yes"
422a5fd0 752 audio_drv_list="try-coreaudio try-sdl"
14382605 753 audio_possible_drivers="coreaudio sdl"
a0b7cf6b
PM
754 # Disable attempts to use ObjectiveC features in os/object.h since they
755 # won't work when we're compiling with gcc as a C compiler.
756 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
83fb7adf 757;;
ec530c81 758SunOS)
0dbfc675 759 solaris="yes"
0db4a067 760 make="${MAKE-gmake}"
e2d8830e 761 smbd="${SMBD-/usr/sfw/sbin/smbd}"
0dbfc675 762 if test -f /usr/include/sys/soundcard.h ; then
6a485418 763 audio_drv_list="oss try-sdl"
0dbfc675
JQ
764 fi
765 audio_possible_drivers="oss sdl"
d741429a
BS
766# needed for CMSG_ macros in sys/socket.h
767 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
768# needed for TIOCWIN* defines in termios.h
769 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
86b2bd93 770;;
179cf400
AF
771Haiku)
772 haiku="yes"
cde99253 773 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
179cf400 774;;
898be3e0 775Linux)
7183834a 776 audio_drv_list="try-pa oss"
0bac1111 777 audio_possible_drivers="oss alsa sdl pa"
0dbfc675
JQ
778 linux="yes"
779 linux_user="yes"
c87ea116 780 vhost_user=${default_feature:-yes}
898be3e0 781;;
7d13299d
FB
782esac
783
7d3505c5 784if [ "$bsd" = "yes" ] ; then
b1a550a0 785 if [ "$darwin" != "yes" ] ; then
08de3949 786 bsd_user="yes"
83fb7adf 787 fi
7d3505c5
FB
788fi
789
0db4a067 790: ${make=${MAKE-make}}
b6daf4d3 791
faf44142
DB
792# We prefer python 3.x. A bare 'python' is traditionally
793# python 2.x, but some distros have it as python 3.x, so
ddf90699 794# we check that too
faf44142 795python=
0a01d76f 796explicit_python=no
ddf90699 797for binary in "${PYTHON-python3}" python
faf44142
DB
798do
799 if has "$binary"
800 then
95c5f2de 801 python=$(command -v "$binary")
faf44142
DB
802 break
803 fi
804done
903458c8 805
903458c8 806
39d87c8c
AB
807# Check for ancillary tools used in testing
808genisoimage=
3df437c7 809for binary in genisoimage mkisofs
39d87c8c
AB
810do
811 if has $binary
812 then
813 genisoimage=$(command -v "$binary")
814 break
815 fi
816done
817
3c4a4d0d
PM
818# Default objcc to clang if available, otherwise use CC
819if has clang; then
820 objcc=clang
821else
822 objcc="$cc"
823fi
824
3457a3f8 825if test "$mingw32" = "yes" ; then
3457a3f8 826 EXESUF=".exe"
484e2cc7 827 HOST_DSOSUF=".dll"
78e9d4ad 828 # MinGW needs -mthreads for TLS and macro _MT.
5770e8af 829 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
93b25869 830 write_c_skeleton;
d17f305a 831 prefix="/qemu"
77433a5f 832 qemu_suffix=""
105fad6b 833 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
3457a3f8
JQ
834fi
835
487fefdb 836werror=""
85aa5189 837
7d13299d 838for opt do
89138857 839 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
7d13299d 840 case "$opt" in
2efc3265
FB
841 --help|-h) show_help=yes
842 ;;
99123e13
MF
843 --version|-V) exec cat $source_path/VERSION
844 ;;
b1a550a0 845 --prefix=*) prefix="$optarg"
7d13299d 846 ;;
b1a550a0 847 --interp-prefix=*) interp_prefix="$optarg"
32ce6337 848 ;;
ac0df51d 849 --cross-prefix=*)
7d13299d 850 ;;
ac0df51d 851 --cc=*)
7d13299d 852 ;;
b1a550a0 853 --host-cc=*) host_cc="$optarg"
83469015 854 ;;
83f73fce
TS
855 --cxx=*)
856 ;;
e007dbec
MT
857 --iasl=*) iasl="$optarg"
858 ;;
3c4a4d0d
PM
859 --objcc=*) objcc="$optarg"
860 ;;
b1a550a0 861 --make=*) make="$optarg"
7d13299d 862 ;;
b6daf4d3 863 --install=*)
6a882643 864 ;;
0a01d76f 865 --python=*) python="$optarg" ; explicit_python=yes
c886edfb 866 ;;
2eb054c2
PM
867 --sphinx-build=*) sphinx_build="$optarg"
868 ;;
a5665051
PB
869 --skip-meson) skip_meson=yes
870 ;;
871 --meson=*) meson="$optarg"
872 ;;
48328880
PB
873 --ninja=*) ninja="$optarg"
874 ;;
e2d8830e
BS
875 --smbd=*) smbd="$optarg"
876 ;;
e2a2ed06 877 --extra-cflags=*)
7d13299d 878 ;;
11cde1c8
BD
879 --extra-cxxflags=*)
880 ;;
e2a2ed06 881 --extra-ldflags=*)
7d13299d 882 ;;
5bc62e01
GH
883 --enable-debug-info)
884 ;;
885 --disable-debug-info)
886 ;;
d75402b5
AB
887 --cross-cc-*)
888 ;;
17969268
FZ
889 --enable-modules)
890 modules="yes"
3aa88b31
SH
891 ;;
892 --disable-modules)
893 modules="no"
17969268 894 ;;
bd83c861
CE
895 --disable-module-upgrades) module_upgrades="no"
896 ;;
897 --enable-module-upgrades) module_upgrades="yes"
898 ;;
2ff6b91e 899 --cpu=*)
7d13299d 900 ;;
b1a550a0 901 --target-list=*) target_list="$optarg"
447e133f
AB
902 if test "$target_list_exclude"; then
903 error_exit "Can't mix --target-list with --target-list-exclude"
904 fi
905 ;;
906 --target-list-exclude=*) target_list_exclude="$optarg"
907 if test "$target_list"; then
908 error_exit "Can't mix --target-list-exclude with --target-list"
909 fi
de83cd02 910 ;;
5b808275
LV
911 --enable-trace-backends=*) trace_backends="$optarg"
912 ;;
913 # XXX: backwards compatibility
914 --enable-trace-backend=*) trace_backends="$optarg"
94a420b1 915 ;;
74242e0f 916 --with-trace-file=*) trace_file="$optarg"
9410b56c 917 ;;
7bc3ca7f 918 --with-default-devices) default_devices="true"
f3494749 919 ;;
7bc3ca7f 920 --without-default-devices) default_devices="false"
f3494749 921 ;;
d1d5e9ee
AB
922 --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
923 ;;
924 --with-devices-*) device_arch=${opt#--with-devices-};
925 device_arch=${device_arch%%=*}
926 cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
927 if test -f "$cf"; then
928 device_archs="$device_archs $device_arch"
929 eval "devices_${device_arch}=\$optarg"
930 else
931 error_exit "File $cf does not exist"
932 fi
933 ;;
c87ea116
AB
934 --without-default-features) # processed above
935 ;;
7d13299d
FB
936 --enable-gprof) gprof="yes"
937 ;;
1d728c39
BS
938 --enable-gcov) gcov="yes"
939 ;;
79427693
LM
940 --static)
941 static="yes"
17884d7b 942 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
43ce4dfe 943 ;;
0b24e75f
PB
944 --mandir=*) mandir="$optarg"
945 ;;
946 --bindir=*) bindir="$optarg"
947 ;;
3aa5d2be
AL
948 --libdir=*) libdir="$optarg"
949 ;;
8bf188aa
MT
950 --libexecdir=*) libexecdir="$optarg"
951 ;;
0f94d6da
AL
952 --includedir=*) includedir="$optarg"
953 ;;
528ae5b8 954 --datadir=*) datadir="$optarg"
0b24e75f 955 ;;
77433a5f 956 --with-suffix=*) qemu_suffix="$optarg"
023d3d67 957 ;;
c6502638 958 --docdir=*) docdir="$optarg"
0b24e75f 959 ;;
fe0038be
PB
960 --localedir=*) localedir="$optarg"
961 ;;
ca2fb938 962 --sysconfdir=*) sysconfdir="$optarg"
07381cc1 963 ;;
785c23ae
LC
964 --localstatedir=*) local_statedir="$optarg"
965 ;;
3d5eecab
GH
966 --firmwarepath=*) firmwarepath="$optarg"
967 ;;
181ce1d0
OH
968 --host=*|--build=*|\
969 --disable-dependency-tracking|\
785c23ae 970 --sbindir=*|--sharedstatedir=*|\
fe0038be 971 --oldincludedir=*|--datarootdir=*|--infodir=*|\
023ddd74
MF
972 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
973 # These switches are silently ignored, for compatibility with
974 # autoconf-generated configure scripts. This allows QEMU's
975 # configure to be used by RPM and similar macros that set
976 # lots of directory switches by default.
977 ;;
35be72ba 978 --disable-sdl) sdl="disabled"
97a847bc 979 ;;
35be72ba 980 --enable-sdl) sdl="enabled"
c4198157 981 ;;
35be72ba 982 --disable-sdl-image) sdl_image="disabled"
a442fe2f 983 ;;
35be72ba 984 --enable-sdl-image) sdl_image="enabled"
a442fe2f 985 ;;
3556c233
PB
986 --disable-qom-cast-debug) qom_cast_debug="no"
987 ;;
988 --enable-qom-cast-debug) qom_cast_debug="yes"
989 ;;
69202b40 990 --disable-virtfs) virtfs="disabled"
983eef5a 991 ;;
69202b40 992 --enable-virtfs) virtfs="enabled"
983eef5a 993 ;;
5c53015a
PB
994 --disable-libudev) libudev="disabled"
995 ;;
996 --enable-libudev) libudev="enabled"
997 ;;
cece116c
MT
998 --disable-virtiofsd) virtiofsd="disabled"
999 ;;
1000 --enable-virtiofsd) virtiofsd="enabled"
1001 ;;
6ec0e15d 1002 --disable-mpath) mpath="disabled"
fe8fc5ae 1003 ;;
6ec0e15d 1004 --enable-mpath) mpath="enabled"
fe8fc5ae 1005 ;;
a0b93237 1006 --disable-vnc) vnc="disabled"
821601ea 1007 ;;
a0b93237 1008 --enable-vnc) vnc="enabled"
821601ea 1009 ;;
0e8e77d4 1010 --disable-gettext) gettext="disabled"
e8f3bd71 1011 ;;
0e8e77d4 1012 --enable-gettext) gettext="enabled"
e8f3bd71 1013 ;;
2f6a1ab0
BS
1014 --oss-lib=*) oss_lib="$optarg"
1015 ;;
0c58ac1c 1016 --audio-drv-list=*) audio_drv_list="$optarg"
102a52e4 1017 ;;
89138857 1018 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
b64ec4e4 1019 ;;
89138857 1020 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
eb852011 1021 ;;
e5f05f8c
KW
1022 --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes"
1023 ;;
1024 --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no"
1025 ;;
f8393946
AJ
1026 --enable-debug-tcg) debug_tcg="yes"
1027 ;;
1028 --disable-debug-tcg) debug_tcg="no"
1029 ;;
f3d08ee6
PB
1030 --enable-debug)
1031 # Enable debugging options that aren't excessively noisy
1032 debug_tcg="yes"
1fcc6d42 1033 debug_mutex="yes"
f3d08ee6
PB
1034 debug="yes"
1035 strip_opt="no"
b553a042 1036 fortify_source="no"
f3d08ee6 1037 ;;
247724cb
MAL
1038 --enable-sanitizers) sanitizers="yes"
1039 ;;
1040 --disable-sanitizers) sanitizers="no"
1041 ;;
0aebab04
LY
1042 --enable-tsan) tsan="yes"
1043 ;;
1044 --disable-tsan) tsan="no"
1045 ;;
deb62371 1046 --enable-sparse) sparse="enabled"
03b4fe7d 1047 ;;
deb62371 1048 --disable-sparse) sparse="disabled"
03b4fe7d 1049 ;;
1625af87
AL
1050 --disable-strip) strip_opt="no"
1051 ;;
a0b93237 1052 --disable-vnc-sasl) vnc_sasl="disabled"
2f9606b3 1053 ;;
a0b93237 1054 --enable-vnc-sasl) vnc_sasl="enabled"
ea784e3b 1055 ;;
a0b93237 1056 --disable-vnc-jpeg) vnc_jpeg="disabled"
2f6f5c7a 1057 ;;
a0b93237 1058 --enable-vnc-jpeg) vnc_jpeg="enabled"
2f6f5c7a 1059 ;;
a0b93237 1060 --disable-vnc-png) vnc_png="disabled"
efe556ad 1061 ;;
a0b93237 1062 --enable-vnc-png) vnc_png="enabled"
efe556ad 1063 ;;
4d34a86b 1064 --disable-slirp) slirp="disabled"
1d14ffa9 1065 ;;
fd6fc214
PB
1066 --enable-slirp) slirp="enabled"
1067 ;;
4d34a86b 1068 --enable-slirp=git) slirp="internal"
7c57bdd8 1069 ;;
675b9b53
MAL
1070 --enable-slirp=system) slirp="system"
1071 ;;
e0e6c8c0 1072 --disable-vde) vde="no"
8a16d273 1073 ;;
dfb278bd
JQ
1074 --enable-vde) vde="yes"
1075 ;;
58952137
VM
1076 --disable-netmap) netmap="no"
1077 ;;
1078 --enable-netmap) netmap="yes"
1079 ;;
1badb709 1080 --disable-xen) xen="disabled"
e37630ca 1081 ;;
1badb709 1082 --enable-xen) xen="enabled"
fc321b4b 1083 ;;
1badb709 1084 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
eb6fda0f 1085 ;;
1badb709 1086 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
eb6fda0f 1087 ;;
8c6d4ff4 1088 --disable-brlapi) brlapi="disabled"
2e4d9fb1 1089 ;;
8c6d4ff4 1090 --enable-brlapi) brlapi="enabled"
4ffcedb6 1091 ;;
1badb709 1092 --disable-kvm) kvm="disabled"
7ba1e619 1093 ;;
1badb709 1094 --enable-kvm) kvm="enabled"
b31a0277 1095 ;;
1badb709 1096 --disable-hax) hax="disabled"
180fb750 1097 ;;
1badb709 1098 --enable-hax) hax="enabled"
180fb750 1099 ;;
1badb709 1100 --disable-hvf) hvf="disabled"
c97d6d2c 1101 ;;
1badb709 1102 --enable-hvf) hvf="enabled"
c97d6d2c 1103 ;;
74a414a1
RZ
1104 --disable-nvmm) nvmm="disabled"
1105 ;;
1106 --enable-nvmm) nvmm="enabled"
1107 ;;
1badb709 1108 --disable-whpx) whpx="disabled"
d661d9a4 1109 ;;
1badb709 1110 --enable-whpx) whpx="enabled"
d661d9a4 1111 ;;
c6fbea47 1112 --disable-tcg-interpreter) tcg_interpreter="false"
9195b2c2 1113 ;;
c6fbea47 1114 --enable-tcg-interpreter) tcg_interpreter="true"
9195b2c2 1115 ;;
727c8bb8 1116 --disable-cap-ng) cap_ng="disabled"
47e98658 1117 ;;
727c8bb8 1118 --enable-cap-ng) cap_ng="enabled"
47e98658 1119 ;;
1badb709 1120 --disable-tcg) tcg="disabled"
d1a14257 1121 plugins="no"
b3f6ea7e 1122 ;;
1badb709 1123 --enable-tcg) tcg="enabled"
b3f6ea7e 1124 ;;
aa087962 1125 --disable-malloc-trim) malloc_trim="disabled"
5a22ab71 1126 ;;
aa087962 1127 --enable-malloc-trim) malloc_trim="enabled"
5a22ab71 1128 ;;
cd4ec0b4
GH
1129 --disable-spice) spice="no"
1130 ;;
58d3f3ff
GH
1131 --enable-spice)
1132 spice_protocol="yes"
1133 spice="yes"
1134 ;;
1135 --disable-spice-protocol)
1136 spice_protocol="no"
1137 spice="no"
1138 ;;
1139 --enable-spice-protocol) spice_protocol="yes"
cd4ec0b4 1140 ;;
9db405a3 1141 --disable-libiscsi) libiscsi="disabled"
c589b249 1142 ;;
9db405a3 1143 --enable-libiscsi) libiscsi="enabled"
c589b249 1144 ;;
30045c05 1145 --disable-libnfs) libnfs="disabled"
6542aa9c 1146 ;;
30045c05 1147 --enable-libnfs) libnfs="enabled"
6542aa9c 1148 ;;
05c2a3e7
FB
1149 --enable-profiler) profiler="yes"
1150 ;;
b4e312e9 1151 --disable-cocoa) cocoa="disabled"
14821030 1152 ;;
a23a6789 1153 --enable-cocoa) cocoa="enabled"
1d14ffa9 1154 ;;
cad25d69 1155 --disable-system) softmmu="no"
0a8e90f4 1156 ;;
cad25d69 1157 --enable-system) softmmu="yes"
0a8e90f4 1158 ;;
0953a80f
ZA
1159 --disable-user)
1160 linux_user="no" ;
1161 bsd_user="no" ;
0953a80f
ZA
1162 ;;
1163 --enable-user) ;;
831b7825 1164 --disable-linux-user) linux_user="no"
0a8e90f4 1165 ;;
831b7825
TS
1166 --enable-linux-user) linux_user="yes"
1167 ;;
84778508
BS
1168 --disable-bsd-user) bsd_user="no"
1169 ;;
1170 --enable-bsd-user) bsd_user="yes"
1171 ;;
40d6444e 1172 --enable-pie) pie="yes"
34005a00 1173 ;;
40d6444e 1174 --disable-pie) pie="no"
34005a00 1175 ;;
85aa5189
FB
1176 --enable-werror) werror="yes"
1177 ;;
1178 --disable-werror) werror="no"
1179 ;;
cdad781d
DB
1180 --enable-lto) lto="true"
1181 ;;
1182 --disable-lto) lto="false"
1183 ;;
63678e17
SN
1184 --enable-stack-protector) stack_protector="yes"
1185 ;;
1186 --disable-stack-protector) stack_protector="no"
1187 ;;
1e4f6065
DB
1188 --enable-safe-stack) safe_stack="yes"
1189 ;;
1190 --disable-safe-stack) safe_stack="no"
1191 ;;
9e62ba48
DB
1192 --enable-cfi)
1193 cfi="true";
1194 lto="true";
1195 ;;
1196 --disable-cfi) cfi="false"
1197 ;;
1198 --enable-cfi-debug) cfi_debug="true"
1199 ;;
1200 --disable-cfi-debug) cfi_debug="false"
1201 ;;
5285e593 1202 --disable-curses) curses="disabled"
4d3b6f6e 1203 ;;
5285e593 1204 --enable-curses) curses="enabled"
c584a6d0 1205 ;;
5285e593 1206 --disable-iconv) iconv="disabled"
e08bb301 1207 ;;
5285e593 1208 --enable-iconv) iconv="enabled"
e08bb301 1209 ;;
f9cd86fe 1210 --disable-curl) curl="disabled"
769ce76d 1211 ;;
f9cd86fe 1212 --enable-curl) curl="enabled"
788c8196 1213 ;;
fbb4121d 1214 --disable-fdt) fdt="disabled"
2df87df7 1215 ;;
fbb4121d
PB
1216 --enable-fdt) fdt="enabled"
1217 ;;
1218 --enable-fdt=git) fdt="internal"
1219 ;;
1220 --enable-fdt=system) fdt="system"
2df87df7 1221 ;;
5c6c3a6c
CH
1222 --disable-linux-aio) linux_aio="no"
1223 ;;
1224 --enable-linux-aio) linux_aio="yes"
1225 ;;
53c22b68 1226 --disable-linux-io-uring) linux_io_uring="disabled"
c10dd856 1227 ;;
53c22b68 1228 --enable-linux-io-uring) linux_io_uring="enabled"
c10dd856 1229 ;;
f7f2d651 1230 --disable-attr) attr="disabled"
758e8e38 1231 ;;
f7f2d651 1232 --enable-attr) attr="enabled"
758e8e38 1233 ;;
a40161cb
PB
1234 --disable-membarrier) membarrier="no"
1235 ;;
1236 --enable-membarrier) membarrier="yes"
1237 ;;
46627f41
AM
1238 --disable-bpf) bpf="disabled"
1239 ;;
1240 --enable-bpf) bpf="enabled"
1241 ;;
c8d5450b 1242 --disable-blobs) blobs="false"
77755340 1243 ;;
7e563bfb 1244 --with-pkgversion=*) pkgversion="$optarg"
4a19f1ec 1245 ;;
519175a2
AB
1246 --with-coroutine=*) coroutine="$optarg"
1247 ;;
70c60c08
SH
1248 --disable-coroutine-pool) coroutine_pool="no"
1249 ;;
1250 --enable-coroutine-pool) coroutine_pool="yes"
1251 ;;
7d992e4d
PL
1252 --enable-debug-stack-usage) debug_stack_usage="yes"
1253 ;;
f0d92b56
LM
1254 --enable-crypto-afalg) crypto_afalg="yes"
1255 ;;
1256 --disable-crypto-afalg) crypto_afalg="no"
1257 ;;
e3667660 1258 --disable-docs) docs="disabled"
70ec5dc0 1259 ;;
e3667660 1260 --enable-docs) docs="enabled"
83a3ab8b 1261 ;;
d5970055
MT
1262 --disable-vhost-net) vhost_net="no"
1263 ;;
1264 --enable-vhost-net) vhost_net="yes"
1265 ;;
042cea27
GA
1266 --disable-vhost-crypto) vhost_crypto="no"
1267 ;;
299e6f19 1268 --enable-vhost-crypto) vhost_crypto="yes"
042cea27 1269 ;;
5e9be92d
NB
1270 --disable-vhost-scsi) vhost_scsi="no"
1271 ;;
1272 --enable-vhost-scsi) vhost_scsi="yes"
1273 ;;
fc0b9b0e
SH
1274 --disable-vhost-vsock) vhost_vsock="no"
1275 ;;
1276 --enable-vhost-vsock) vhost_vsock="yes"
1277 ;;
e5e856c1 1278 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
bc15e44c 1279 ;;
e5e856c1 1280 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
bc15e44c 1281 ;;
98fc1ada
DDAG
1282 --disable-vhost-user-fs) vhost_user_fs="no"
1283 ;;
1284 --enable-vhost-user-fs) vhost_user_fs="yes"
1285 ;;
da076ffe 1286 --disable-opengl) opengl="no"
20ff075b 1287 ;;
da076ffe 1288 --enable-opengl) opengl="yes"
20ff075b 1289 ;;
fabd1e93 1290 --disable-rbd) rbd="disabled"
f27aaf4b 1291 ;;
fabd1e93 1292 --enable-rbd) rbd="enabled"
f27aaf4b 1293 ;;
8c84cf11
ST
1294 --disable-xfsctl) xfs="no"
1295 ;;
1296 --enable-xfsctl) xfs="yes"
1297 ;;
5f364c57 1298 --disable-smartcard) smartcard="disabled"
111a38b0 1299 ;;
5f364c57 1300 --enable-smartcard) smartcard="enabled"
111a38b0 1301 ;;
0a40bcb7
CB
1302 --disable-u2f) u2f="disabled"
1303 ;;
1304 --enable-u2f) u2f="enabled"
1305 ;;
90540f32 1306 --disable-libusb) libusb="disabled"
2b2325ff 1307 ;;
90540f32 1308 --enable-libusb) libusb="enabled"
2b2325ff 1309 ;;
18f31e60 1310 --disable-usb-redir) usb_redir="disabled"
69354a83 1311 ;;
18f31e60 1312 --enable-usb-redir) usb_redir="enabled"
69354a83 1313 ;;
1ffb3bbb 1314 --disable-zlib-test)
1ece9905 1315 ;;
0c32a0ae 1316 --disable-lzo) lzo="disabled"
b25c9dff 1317 ;;
0c32a0ae 1318 --enable-lzo) lzo="enabled"
607dacd0 1319 ;;
241611ea 1320 --disable-snappy) snappy="disabled"
b25c9dff 1321 ;;
241611ea 1322 --enable-snappy) snappy="enabled"
607dacd0 1323 ;;
29ba6116 1324 --disable-bzip2) bzip2="disabled"
6b383c08 1325 ;;
29ba6116 1326 --enable-bzip2) bzip2="enabled"
6b383c08 1327 ;;
ecea3696 1328 --enable-lzfse) lzfse="enabled"
83bc1f97 1329 ;;
ecea3696 1330 --disable-lzfse) lzfse="disabled"
83bc1f97 1331 ;;
b1def33d 1332 --disable-zstd) zstd="disabled"
3a678481 1333 ;;
b1def33d 1334 --enable-zstd) zstd="enabled"
3a678481 1335 ;;
d138cee9
MR
1336 --enable-guest-agent) guest_agent="yes"
1337 ;;
1338 --disable-guest-agent) guest_agent="no"
1339 ;;
b846ab7c 1340 --enable-guest-agent-msi) guest_agent_msi="enabled"
9dacf32d 1341 ;;
b846ab7c 1342 --disable-guest-agent-msi) guest_agent_msi="disabled"
9dacf32d 1343 ;;
d9840e25
TS
1344 --with-vss-sdk) vss_win32_sdk=""
1345 ;;
1346 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1347 ;;
1348 --without-vss-sdk) vss_win32_sdk="no"
1349 ;;
1350 --with-win-sdk) win_sdk=""
1351 ;;
1352 --with-win-sdk=*) win_sdk="$optarg"
1353 ;;
1354 --without-win-sdk) win_sdk="no"
1355 ;;
4b1c11fd
DB
1356 --enable-tools) want_tools="yes"
1357 ;;
1358 --disable-tools) want_tools="no"
1359 ;;
90835c2b 1360 --enable-seccomp) seccomp="enabled"
f794573e 1361 ;;
90835c2b 1362 --disable-seccomp) seccomp="disabled"
f794573e 1363 ;;
08821ca2 1364 --disable-glusterfs) glusterfs="disabled"
eb100396 1365 ;;
86583a07
LM
1366 --disable-avx2) avx2_opt="no"
1367 ;;
1368 --enable-avx2) avx2_opt="yes"
1369 ;;
6b8cd447
RH
1370 --disable-avx512f) avx512f_opt="no"
1371 ;;
1372 --enable-avx512f) avx512f_opt="yes"
1373 ;;
1374
08821ca2 1375 --enable-glusterfs) glusterfs="enabled"
eb100396 1376 ;;
52b53c04
FZ
1377 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1378 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
583f6e7b 1379 ;;
cb6414df
FZ
1380 --enable-vhdx|--disable-vhdx)
1381 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1382 ;;
315d3184
FZ
1383 --enable-uuid|--disable-uuid)
1384 echo "$0: $opt is obsolete, UUID support is always built" >&2
1385 ;;
1b695471 1386 --disable-gtk) gtk="disabled"
a4ccabcf 1387 ;;
1b695471 1388 --enable-gtk) gtk="enabled"
a4ccabcf 1389 ;;
a1c5e949
DB
1390 --tls-priority=*) tls_priority="$optarg"
1391 ;;
57612511 1392 --disable-gnutls) gnutls="disabled"
ddbb0d09 1393 ;;
57612511 1394 --enable-gnutls) gnutls="enabled"
ddbb0d09 1395 ;;
57612511 1396 --disable-nettle) nettle="disabled"
91bfcdb0 1397 ;;
57612511 1398 --enable-nettle) nettle="enabled"
91bfcdb0 1399 ;;
57612511 1400 --disable-gcrypt) gcrypt="disabled"
91bfcdb0 1401 ;;
57612511 1402 --enable-gcrypt) gcrypt="enabled"
91bfcdb0 1403 ;;
05e391ae 1404 --disable-auth-pam) auth_pam="disabled"
8953caf3 1405 ;;
05e391ae 1406 --enable-auth-pam) auth_pam="enabled"
8953caf3 1407 ;;
2da776db
MH
1408 --enable-rdma) rdma="yes"
1409 ;;
1410 --disable-rdma) rdma="no"
1411 ;;
21ab34c9
MA
1412 --enable-pvrdma) pvrdma="yes"
1413 ;;
1414 --disable-pvrdma) pvrdma="no"
1415 ;;
c23d7b4e 1416 --disable-vte) vte="disabled"
bbbf9bfb 1417 ;;
c23d7b4e 1418 --enable-vte) vte="enabled"
bbbf9bfb 1419 ;;
587d59d6 1420 --disable-virglrenderer) virglrenderer="disabled"
9d9e1521 1421 ;;
587d59d6 1422 --enable-virglrenderer) virglrenderer="enabled"
9d9e1521 1423 ;;
e91c793c
CR
1424 --disable-tpm) tpm="no"
1425 ;;
ab214c29
SB
1426 --enable-tpm) tpm="yes"
1427 ;;
b10d49d7 1428 --disable-libssh) libssh="no"
0a12ec87 1429 ;;
b10d49d7 1430 --enable-libssh) libssh="yes"
0a12ec87 1431 ;;
ed1701c6
DDAG
1432 --disable-live-block-migration) live_block_migration="no"
1433 ;;
1434 --enable-live-block-migration) live_block_migration="yes"
1435 ;;
a99d57bb
WG
1436 --disable-numa) numa="no"
1437 ;;
1438 --enable-numa) numa="yes"
1439 ;;
c5b36c25 1440 --disable-libxml2) libxml2="disabled"
ed279a06 1441 ;;
c5b36c25 1442 --enable-libxml2) libxml2="enabled"
ed279a06 1443 ;;
2847b469
FZ
1444 --disable-tcmalloc) tcmalloc="no"
1445 ;;
1446 --enable-tcmalloc) tcmalloc="yes"
1447 ;;
7b01cb97
AD
1448 --disable-jemalloc) jemalloc="no"
1449 ;;
1450 --enable-jemalloc) jemalloc="yes"
1451 ;;
a6b1d4c0
CX
1452 --disable-replication) replication="no"
1453 ;;
1454 --enable-replication) replication="yes"
1455 ;;
2f740136
JC
1456 --disable-bochs) bochs="no"
1457 ;;
1458 --enable-bochs) bochs="yes"
1459 ;;
1460 --disable-cloop) cloop="no"
1461 ;;
1462 --enable-cloop) cloop="yes"
1463 ;;
1464 --disable-dmg) dmg="no"
1465 ;;
1466 --enable-dmg) dmg="yes"
1467 ;;
1468 --disable-qcow1) qcow1="no"
1469 ;;
1470 --enable-qcow1) qcow1="yes"
1471 ;;
1472 --disable-vdi) vdi="no"
1473 ;;
1474 --enable-vdi) vdi="yes"
1475 ;;
1476 --disable-vvfat) vvfat="no"
1477 ;;
1478 --enable-vvfat) vvfat="yes"
1479 ;;
1480 --disable-qed) qed="no"
1481 ;;
1482 --enable-qed) qed="yes"
1483 ;;
1484 --disable-parallels) parallels="no"
1485 ;;
1486 --enable-parallels) parallels="yes"
1487 ;;
e6a74868
MAL
1488 --disable-vhost-user) vhost_user="no"
1489 ;;
299e6f19
PB
1490 --enable-vhost-user) vhost_user="yes"
1491 ;;
108a6481
CL
1492 --disable-vhost-vdpa) vhost_vdpa="no"
1493 ;;
1494 --enable-vhost-vdpa) vhost_vdpa="yes"
1495 ;;
299e6f19
PB
1496 --disable-vhost-kernel) vhost_kernel="no"
1497 ;;
1498 --enable-vhost-kernel) vhost_kernel="yes"
e6a74868 1499 ;;
8b18cdbf 1500 --disable-capstone) capstone="disabled"
8ca80760 1501 ;;
8b18cdbf 1502 --enable-capstone) capstone="enabled"
8ca80760 1503 ;;
8b18cdbf 1504 --enable-capstone=git) capstone="internal"
e219c499
RH
1505 ;;
1506 --enable-capstone=system) capstone="system"
1507 ;;
cc84d63a
DB
1508 --with-git=*) git="$optarg"
1509 ;;
7d7dbf9d
DS
1510 --enable-git-update)
1511 git_submodules_action="update"
1512 echo "--enable-git-update deprecated, use --with-git-submodules=update"
f62bbee5 1513 ;;
7d7dbf9d
DS
1514 --disable-git-update)
1515 git_submodules_action="validate"
1516 echo "--disable-git-update deprecated, use --with-git-submodules=validate"
1517 ;;
1518 --with-git-submodules=*)
1519 git_submodules_action="$optarg"
f62bbee5 1520 ;;
ba59fb77
PB
1521 --enable-debug-mutex) debug_mutex=yes
1522 ;;
1523 --disable-debug-mutex) debug_mutex=no
1524 ;;
5cd5d8a7 1525 --enable-libpmem) libpmem="enabled"
17824406 1526 ;;
5cd5d8a7 1527 --disable-libpmem) libpmem="disabled"
17824406 1528 ;;
4113f4cf 1529 --enable-xkbcommon) xkbcommon="enabled"
75411919 1530 ;;
4113f4cf 1531 --disable-xkbcommon) xkbcommon="disabled"
75411919 1532 ;;
9b8e4298
AB
1533 --enable-plugins) if test "$mingw32" = "yes"; then
1534 error_exit "TCG plugins not currently supported on Windows platforms"
1535 else
1536 plugins="yes"
1537 fi
40e8c6f4
AB
1538 ;;
1539 --disable-plugins) plugins="no"
1540 ;;
afc3a8f9
AB
1541 --enable-containers) use_containers="yes"
1542 ;;
1543 --disable-containers) use_containers="no"
1544 ;;
adc28027
AB
1545 --enable-fuzzing) fuzzing=yes
1546 ;;
1547 --disable-fuzzing) fuzzing=no
1548 ;;
f48e590a
AB
1549 --gdb=*) gdb_bin="$optarg"
1550 ;;
b767d257
MMG
1551 --enable-rng-none) rng_none=yes
1552 ;;
1553 --disable-rng-none) rng_none=no
1554 ;;
54e7aac0
AK
1555 --enable-keyring) secret_keyring="yes"
1556 ;;
1557 --disable-keyring) secret_keyring="no"
1558 ;;
12033e16 1559 --enable-libdaxctl) libdaxctl="enabled"
21b2eca6 1560 ;;
12033e16 1561 --disable-libdaxctl) libdaxctl="disabled"
21b2eca6 1562 ;;
a484a719
HR
1563 --enable-fuse) fuse="enabled"
1564 ;;
1565 --disable-fuse) fuse="disabled"
1566 ;;
df4ea709
HR
1567 --enable-fuse-lseek) fuse_lseek="enabled"
1568 ;;
1569 --disable-fuse-lseek) fuse_lseek="disabled"
1570 ;;
106ad1f9 1571 --enable-multiprocess) multiprocess="enabled"
3090de69 1572 ;;
106ad1f9 1573 --disable-multiprocess) multiprocess="disabled"
3090de69 1574 ;;
20cf7b8e
DP
1575 --enable-gio) gio=yes
1576 ;;
1577 --disable-gio) gio=no
1578 ;;
b8e0c493
JD
1579 --enable-slirp-smbd) slirp_smbd=yes
1580 ;;
1581 --disable-slirp-smbd) slirp_smbd=no
1582 ;;
2d2ad6d0
FZ
1583 *)
1584 echo "ERROR: unknown option $opt"
1585 echo "Try '$0 --help' for more information"
1586 exit 1
7f1559c6 1587 ;;
7d13299d
FB
1588 esac
1589done
1590
d1a14257
AB
1591# test for any invalid configuration combinations
1592if test "$plugins" = "yes" -a "$tcg" = "disabled"; then
1593 error_exit "Can't enable plugins on non-TCG builds"
1594fi
1595
7d7dbf9d
DS
1596case $git_submodules_action in
1597 update|validate)
1598 if test ! -e "$source_path/.git"; then
1599 echo "ERROR: cannot $git_submodules_action git submodules without .git"
1600 exit 1
1601 fi
1602 ;;
1603 ignore)
b80fd281
PB
1604 if ! test -f "$source_path/ui/keycodemapdb/README"
1605 then
1606 echo
1607 echo "ERROR: missing GIT submodules"
1608 echo
1609 if test -e "$source_path/.git"; then
1610 echo "--with-git-submodules=ignore specified but submodules were not"
1611 echo "checked out. Please initialize and update submodules."
1612 else
1613 echo "This is not a GIT checkout but module content appears to"
1614 echo "be missing. Do not use 'git archive' or GitHub download links"
1615 echo "to acquire QEMU source archives. Non-GIT builds are only"
1616 echo "supported with source archives linked from:"
1617 echo
1618 echo " https://www.qemu.org/download/#source"
1619 echo
1620 echo "Developers working with GIT can use scripts/archive-source.sh"
1621 echo "if they need to create valid source archives."
1622 fi
1623 echo
1624 exit 1
1625 fi
7d7dbf9d
DS
1626 ;;
1627 *)
1628 echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
1629 exit 1
1630 ;;
1631esac
1632
22a87800
MAL
1633libdir="${libdir:-$prefix/lib}"
1634libexecdir="${libexecdir:-$prefix/libexec}"
1635includedir="${includedir:-$prefix/include}"
1636
1637if test "$mingw32" = "yes" ; then
15588a62 1638 bindir="${bindir:-$prefix}"
22a87800 1639else
22a87800 1640 bindir="${bindir:-$prefix/bin}"
22a87800 1641fi
15588a62
JW
1642mandir="${mandir:-$prefix/share/man}"
1643datadir="${datadir:-$prefix/share}"
1644docdir="${docdir:-$prefix/share/doc}"
1645sysconfdir="${sysconfdir:-$prefix/etc}"
1646local_statedir="${local_statedir:-$prefix/var}"
16bf7a33
PB
1647firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1648localedir="${localedir:-$datadir/locale}"
22a87800 1649
40293e58 1650case "$cpu" in
e3608d66
RH
1651 ppc)
1652 CPU_CFLAGS="-m32"
db5adeaa 1653 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
e3608d66
RH
1654 ;;
1655 ppc64)
1656 CPU_CFLAGS="-m64"
db5adeaa 1657 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
e3608d66 1658 ;;
9b9c37c3 1659 sparc)
f1079bb8 1660 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
db5adeaa 1661 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
3142255c 1662 ;;
ed968ff1 1663 sparc64)
79f3b12f 1664 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
db5adeaa 1665 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
3142255c 1666 ;;
76d83bde 1667 s390)
061cdd81 1668 CPU_CFLAGS="-m31"
db5adeaa 1669 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
28d7cc49
RH
1670 ;;
1671 s390x)
061cdd81 1672 CPU_CFLAGS="-m64"
db5adeaa 1673 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
76d83bde 1674 ;;
40293e58 1675 i386)
79f3b12f 1676 CPU_CFLAGS="-m32"
db5adeaa 1677 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
40293e58
FB
1678 ;;
1679 x86_64)
7ebee43e
RH
1680 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1681 # If we truly care, we should simply detect this case at
1682 # runtime and generate the fallback to serial emulation.
1683 CPU_CFLAGS="-m64 -mcx16"
db5adeaa 1684 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
d2fbca94 1685 ;;
c72b26ec
RH
1686 x32)
1687 CPU_CFLAGS="-mx32"
db5adeaa 1688 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
c72b26ec 1689 ;;
30163d89 1690 # No special flags required for other host CPUs
3142255c
BS
1691esac
1692
b1aa4de1 1693eval "cross_cc_${cpu}=\$cc"
2038f8c8 1694cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
79f3b12f 1695QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
79f3b12f 1696
affc88cc
PM
1697# For user-mode emulation the host arch has to be one we explicitly
1698# support, even if we're using TCI.
1699if [ "$ARCH" = "unknown" ]; then
1700 bsd_user="no"
1701 linux_user="no"
1702fi
1703
60e0df25 1704default_target_list=""
43692239 1705deprecated_targets_list=ppc64abi32-linux-user
fdb75aef 1706deprecated_features=""
6e92f823
PM
1707mak_wilds=""
1708
1709if [ "$softmmu" = "yes" ]; then
812b31d3 1710 mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
60e0df25 1711fi
6e92f823 1712if [ "$linux_user" = "yes" ]; then
812b31d3 1713 mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
60e0df25 1714fi
6e92f823 1715if [ "$bsd_user" = "yes" ]; then
812b31d3 1716 mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
60e0df25
PM
1717fi
1718
3a5ae4a9
AB
1719# If the user doesn't explicitly specify a deprecated target we will
1720# skip it.
1721if test -z "$target_list"; then
1722 if test -z "$target_list_exclude"; then
1723 target_list_exclude="$deprecated_targets_list"
1724 else
1725 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1726 fi
2d838d9b
AB
1727fi
1728
2d838d9b
AB
1729for config in $mak_wilds; do
1730 target="$(basename "$config" .mak)"
98db9a06 1731 if echo "$target_list_exclude" | grep -vq "$target"; then
2d838d9b
AB
1732 default_target_list="${default_target_list} $target"
1733 fi
1734done
6e92f823 1735
c53eeaf7 1736# Enumerate public trace backends for --help output
64a6047d 1737trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
c53eeaf7 1738
af5db58e
PB
1739if test x"$show_help" = x"yes" ; then
1740cat << EOF
1741
1742Usage: configure [options]
1743Options: [defaults in brackets after descriptions]
1744
08fb77ed
SW
1745Standard options:
1746 --help print this message
1747 --prefix=PREFIX install in PREFIX [$prefix]
1748 --interp-prefix=PREFIX where to find shared libraries, etc.
1749 use %M for cpu name [$interp_prefix]
2deca810 1750 --target-list=LIST set target list (default: build all non-deprecated)
08fb77ed
SW
1751$(echo Available targets: $default_target_list | \
1752 fold -s -w 53 | sed -e 's/^/ /')
2deca810
AB
1753$(echo Deprecated targets: $deprecated_targets_list | \
1754 fold -s -w 53 | sed -e 's/^/ /')
447e133f 1755 --target-list-exclude=LIST exclude a set of targets from the default target-list
08fb77ed
SW
1756
1757Advanced options (experts only):
3812c0c4 1758 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
08fb77ed
SW
1759 --cc=CC use C compiler CC [$cc]
1760 --iasl=IASL use ACPI compiler IASL [$iasl]
1761 --host-cc=CC use C compiler CC [$host_cc] for code run at
1762 build time
1763 --cxx=CXX use C++ compiler CXX [$cxx]
1764 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1765 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
11cde1c8 1766 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
08fb77ed 1767 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
d75402b5 1768 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
d422b2bc 1769 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
08fb77ed 1770 --make=MAKE use specified make [$make]
08fb77ed 1771 --python=PYTHON use specified python [$python]
2eb054c2 1772 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
a5665051 1773 --meson=MESON use specified meson [$meson]
48328880 1774 --ninja=NINJA use specified ninja [$ninja]
08fb77ed 1775 --smbd=SMBD use specified smbd [$smbd]
db1b5f13 1776 --with-git=GIT use specified git [$git]
7d7dbf9d
DS
1777 --with-git-submodules=update update git submodules (default if .git dir exists)
1778 --with-git-submodules=validate fail if git submodules are not up to date
1779 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
08fb77ed
SW
1780 --static enable static build [$static]
1781 --mandir=PATH install man pages in PATH
10ff82d1 1782 --datadir=PATH install firmware in PATH/$qemu_suffix
fe0038be 1783 --localedir=PATH install translation in PATH/$qemu_suffix
10ff82d1 1784 --docdir=PATH install documentation in PATH/$qemu_suffix
08fb77ed
SW
1785 --bindir=PATH install binaries in PATH
1786 --libdir=PATH install libraries in PATH
db1b5f13 1787 --libexecdir=PATH install helper binaries in PATH
10ff82d1 1788 --sysconfdir=PATH install config in PATH/$qemu_suffix
08fb77ed 1789 --localstatedir=PATH install local state in PATH (set at runtime on win32)
3d5eecab 1790 --firmwarepath=PATH search PATH for firmware files
13336606 1791 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
ca8c0909 1792 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
db1b5f13 1793 --with-pkgversion=VERS use specified string as sub-version of the package
c035c8d6
PB
1794 --without-default-features default all --enable-* options to "disabled"
1795 --without-default-devices do not include any device that is not needed to
1796 start the emulator (only use if you are including
d1d5e9ee
AB
1797 desired devices in configs/devices/)
1798 --with-devices-ARCH=NAME override default configs/devices
08fb77ed 1799 --enable-debug enable common debug build options
247724cb 1800 --enable-sanitizers enable default sanitizers
0aebab04 1801 --enable-tsan enable thread sanitizer
08fb77ed
SW
1802 --disable-strip disable stripping binaries
1803 --disable-werror disable compilation abort on warning
63678e17 1804 --disable-stack-protector disable compiler-provided stack protection
08fb77ed
SW
1805 --audio-drv-list=LIST set audio drivers list:
1806 Available drivers: $audio_possible_drivers
1807 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1808 --block-drv-rw-whitelist=L
1809 set block driver read-write whitelist
e5f05f8c 1810 (by default affects only QEMU, not tools like qemu-img)
08fb77ed
SW
1811 --block-drv-ro-whitelist=L
1812 set block driver read-only whitelist
e5f05f8c
KW
1813 (by default affects only QEMU, not tools like qemu-img)
1814 --enable-block-drv-whitelist-in-tools
1815 use block whitelist also in tools instead of only QEMU
5b808275 1816 --enable-trace-backends=B Set trace backend
c53eeaf7 1817 Available backends: $trace_backend_list
08fb77ed
SW
1818 --with-trace-file=NAME Full PATH,NAME of file to store traces
1819 Default:trace-<pid>
c23f23b9 1820 --disable-slirp disable SLIRP userspace network connectivity
e9a16e38 1821 --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
5a22ab71 1822 --enable-malloc-trim enable libc malloc_trim() for memory optimization
c23f23b9
MT
1823 --oss-lib path to OSS library
1824 --cpu=CPU Build for host CPU [$cpu]
08fb77ed 1825 --with-coroutine=BACKEND coroutine backend. Supported options:
33c53c54 1826 ucontext, sigaltstack, windows
08fb77ed 1827 --enable-gcov enable test coverage analysis with gcov
c23f23b9
MT
1828 --disable-blobs disable installing provided firmware blobs
1829 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1830 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
a1c5e949 1831 --tls-priority default TLS protocol/cipher priority string
c12d66aa
LM
1832 --enable-gprof QEMU profiling with gprof
1833 --enable-profiler profiler support
c12d66aa
LM
1834 --enable-debug-stack-usage
1835 track the maximum stack usage of stacks created by qemu_alloc_stack
40e8c6f4
AB
1836 --enable-plugins
1837 enable plugins via shared library loading
afc3a8f9 1838 --disable-containers don't use containers for cross-building
f48e590a 1839 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
c23f23b9
MT
1840
1841Optional features, enabled with --enable-FEATURE and
c87ea116
AB
1842disabled with --disable-FEATURE, default is enabled if available
1843(unless built with --without-default-features):
c23f23b9
MT
1844
1845 system all system emulation targets
1846 user supported user emulation targets
1847 linux-user all linux usermode emulation targets
1848 bsd-user all BSD usermode emulation targets
c23f23b9
MT
1849 docs build documentation
1850 guest-agent build the QEMU Guest Agent
1851 guest-agent-msi build guest agent Windows MSI installation package
1852 pie Position Independent Executables
21e709aa 1853 modules modules support (non-Windows)
bd83c861 1854 module-upgrades try to load modules from alternate paths for upgrades
c23f23b9
MT
1855 debug-tcg TCG debugging (default is disabled)
1856 debug-info debugging information
cdad781d 1857 lto Enable Link-Time Optimization.
c23f23b9 1858 sparse sparse checker
1e4f6065
DB
1859 safe-stack SafeStack Stack Smash Protection. Depends on
1860 clang/llvm >= 3.7 and requires coroutine backend ucontext.
9e62ba48
DB
1861 cfi Enable Control-Flow Integrity for indirect function calls.
1862 In case of a cfi violation, QEMU is terminated with SIGILL
1863 Depends on lto and is incompatible with modules
1864 Automatically enables Link-Time Optimization (lto)
1865 cfi-debug In case of a cfi violation, a message containing the line that
1866 triggered the error is written to stderr. After the error,
1867 QEMU is still terminated with SIGILL
ddbb0d09 1868 gnutls GNUTLS cryptography support
91bfcdb0
DB
1869 nettle nettle cryptography support
1870 gcrypt libgcrypt cryptography support
8953caf3 1871 auth-pam PAM access control
c23f23b9 1872 sdl SDL UI
04c6e16f 1873 sdl-image SDL Image support for icons
c23f23b9 1874 gtk gtk UI
c23f23b9
MT
1875 vte vte support for the gtk UI
1876 curses curses UI
e08bb301 1877 iconv font glyph conversion support
c23f23b9 1878 vnc VNC UI support
c23f23b9
MT
1879 vnc-sasl SASL encryption for VNC server
1880 vnc-jpeg JPEG lossy compression for VNC server
1881 vnc-png PNG compression for VNC server
c23f23b9
MT
1882 cocoa Cocoa UI (Mac OS X only)
1883 virtfs VirtFS
cece116c 1884 virtiofsd build virtiofs daemon (virtiofsd)
5c53015a 1885 libudev Use libudev to enumerate host devices
fe8fc5ae 1886 mpath Multipath persistent reservation passthrough
c23f23b9 1887 xen xen backend driver support
70c292af 1888 xen-pci-passthrough PCI passthrough support for Xen
c23f23b9
MT
1889 brlapi BrlAPI (Braile)
1890 curl curl connectivity
a40161cb 1891 membarrier membarrier system call (for Linux 4.14+ or Windows)
c23f23b9 1892 fdt fdt device tree
c23f23b9 1893 kvm KVM acceleration support
b0cb0a66 1894 hax HAX acceleration support
c97d6d2c 1895 hvf Hypervisor.framework acceleration support
74a414a1 1896 nvmm NVMM acceleration support
d661d9a4 1897 whpx Windows Hypervisor Platform acceleration support
21ab34c9
MA
1898 rdma Enable RDMA-based migration
1899 pvrdma Enable PVRDMA support
c23f23b9
MT
1900 vde support for vde network
1901 netmap support for netmap network
1902 linux-aio Linux AIO support
c10dd856 1903 linux-io-uring Linux io_uring support
c23f23b9
MT
1904 cap-ng libcap-ng support
1905 attr attr and xattr support
299e6f19
PB
1906 vhost-net vhost-net kernel acceleration support
1907 vhost-vsock virtio sockets device support
1908 vhost-scsi vhost-scsi kernel target support
1909 vhost-crypto vhost-user-crypto backend support
1910 vhost-kernel vhost kernel backend support
1911 vhost-user vhost-user backend support
bc15e44c 1912 vhost-user-blk-server vhost-user-blk server support
108a6481 1913 vhost-vdpa vhost-vdpa kernel backend support
46627f41 1914 bpf BPF kernel support
c23f23b9 1915 spice spice
58d3f3ff 1916 spice-protocol spice-protocol
c23f23b9
MT
1917 rbd rados block device (rbd)
1918 libiscsi iscsi support
1919 libnfs nfs support
7b02f544 1920 smartcard smartcard support (libcacard)
0a40bcb7 1921 u2f U2F support (u2f-emu)
c23f23b9 1922 libusb libusb (for usb passthrough)
ed1701c6 1923 live-block-migration Block migration in the main migration stream
c23f23b9
MT
1924 usb-redir usb network redirection support
1925 lzo support of lzo compression library
1926 snappy support of snappy compression library
1927 bzip2 support of bzip2 compression library
1928 (for reading bzip2-compressed dmg images)
83bc1f97
JF
1929 lzfse support of lzfse compression library
1930 (for reading lzfse-compressed dmg images)
3a678481 1931 zstd support for zstd compression library
d298ac10 1932 (for migration compression and qcow2 cluster compression)
c23f23b9
MT
1933 seccomp seccomp support
1934 coroutine-pool coroutine freelist (better performance)
1935 glusterfs GlusterFS backend
c23f23b9 1936 tpm TPM support
b10d49d7 1937 libssh ssh block device support
c23f23b9 1938 numa libnuma support
ed279a06 1939 libxml2 for Parallels image format
c23f23b9 1940 tcmalloc tcmalloc support
7b01cb97 1941 jemalloc jemalloc support
86583a07 1942 avx2 AVX2 optimization support
6b8cd447 1943 avx512f AVX512F optimization support
a6b1d4c0 1944 replication replication support
c12d66aa
LM
1945 opengl opengl support
1946 virglrenderer virgl rendering support
1947 xfsctl xfsctl support
1948 qom-cast-debug cast debugging support
8de73fa8 1949 tools build qemu-io, qemu-nbd and qemu-img tools
2f740136
JC
1950 bochs bochs image format support
1951 cloop cloop image format support
1952 dmg dmg image format support
1953 qcow1 qcow v1 image format support
1954 vdi vdi image format support
1955 vvfat vvfat image format support
1956 qed qed image format support
1957 parallels parallels image format support
f0d92b56 1958 crypto-afalg Linux AF_ALG crypto backend driver
8ca80760 1959 capstone capstone disassembler support
ba59fb77 1960 debug-mutex mutex debugging support
17824406 1961 libpmem libpmem support
75411919 1962 xkbcommon xkbcommon support
b767d257 1963 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
21b2eca6 1964 libdaxctl libdaxctl support
a484a719 1965 fuse FUSE block device export
df4ea709 1966 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
106ad1f9 1967 multiprocess Out of process device emulation support
20cf7b8e 1968 gio libgio support
b8e0c493 1969 slirp-smbd use smbd (at path --smbd=*) in slirp networking
08fb77ed
SW
1970
1971NOTE: The object files are built at the place where configure is launched
af5db58e 1972EOF
2d2ad6d0 1973exit 0
af5db58e
PB
1974fi
1975
9c790242 1976# Remove old dependency files to make sure that they get properly regenerated
bb768f71 1977rm -f */config-devices.mak.d
9c790242 1978
faf44142
DB
1979if test -z "$python"
1980then
1981 error_exit "Python not found. Use --python=/path/to/python"
c53eeaf7 1982fi
8e2c76bd
RB
1983if ! has "$make"
1984then
1985 error_exit "GNU make ($make) not found"
1986fi
c53eeaf7
SH
1987
1988# Note that if the Python conditional here evaluates True we will exit
1989# with status 1 which is a shell 'false' value.
1b11f28d
TH
1990if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1991 error_exit "Cannot use '$python', Python >= 3.6 is required." \
c53eeaf7
SH
1992 "Use --python=/path/to/python to specify a supported Python."
1993fi
1994
755ee70f 1995# Preserve python version since some functionality is dependent on it
406ab2f3 1996python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
755ee70f 1997
c53eeaf7
SH
1998# Suppress writing compiled files
1999python="$python -B"
2000
0a01d76f 2001if test -z "$meson"; then
6ebd89cf 2002 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
0a01d76f 2003 meson=meson
7d7dbf9d 2004 elif test $git_submodules_action != 'ignore' ; then
0a01d76f
MAL
2005 meson=git
2006 elif test -e "${source_path}/meson/meson.py" ; then
2007 meson=internal
2008 else
2009 if test "$explicit_python" = yes; then
2010 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
2011 else
2012 error_exit "Meson not found. Use --meson=/path/to/meson"
2013 fi
2014 fi
2015else
2016 # Meson uses its own Python interpreter to invoke other Python scripts,
2017 # but the user wants to use the one they specified with --python.
2018 #
2019 # We do not want to override the distro Python interpreter (and sometimes
2020 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2021 # just require --meson=git|internal together with --python.
2022 if test "$explicit_python" = yes; then
2023 case "$meson" in
2024 git | internal) ;;
2025 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2026 esac
2027 fi
a5665051 2028fi
a5665051 2029
0a01d76f
MAL
2030if test "$meson" = git; then
2031 git_submodules="${git_submodules} meson"
a5665051 2032fi
0a01d76f
MAL
2033
2034case "$meson" in
2035 git | internal)
0a01d76f
MAL
2036 meson="$python ${source_path}/meson/meson.py"
2037 ;;
84ec0c24 2038 *) meson=$(command -v "$meson") ;;
0a01d76f
MAL
2039esac
2040
09e93326 2041# Probe for ninja
48328880
PB
2042
2043if test -z "$ninja"; then
2044 for c in ninja ninja-build samu; do
2045 if has $c; then
2046 ninja=$(command -v "$c")
2047 break
2048 fi
2049 done
09e93326
PB
2050 if test -z "$ninja"; then
2051 error_exit "Cannot find Ninja"
2052 fi
48328880 2053fi
a5665051 2054
9aae6e54
DHB
2055# Check that the C compiler works. Doing this here before testing
2056# the host CPU ensures that we had a valid CC to autodetect the
2057# $cpu var (and we should bail right here if that's not the case).
2058# It also allows the help message to be printed without a CC.
2059write_c_skeleton;
2060if compile_object ; then
2061 : C compiler works ok
2062else
2063 error_exit "\"$cc\" either does not exist or does not work"
2064fi
2065if ! compile_prog ; then
2066 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2067fi
2068
9c83ffd8
PM
2069# Consult white-list to determine whether to enable werror
2070# by default. Only enable by default for git builds
9c83ffd8 2071if test -z "$werror" ; then
7d7dbf9d 2072 if test "$git_submodules_action" != "ignore" && \
e633a5c6 2073 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
9c83ffd8
PM
2074 werror="yes"
2075 else
2076 werror="no"
2077 fi
2078fi
2079
975ff037 2080if test "$targetos" = "bogus"; then
fb59dabd
PM
2081 # Now that we know that we're not printing the help and that
2082 # the compiler works (so the results of the check_defines we used
2083 # to identify the OS are reliable), if we didn't recognize the
2084 # host OS we should stop now.
951fedfc 2085 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
fb59dabd
PM
2086fi
2087
efc6c070
TH
2088# Check whether the compiler matches our minimum requirements:
2089cat > $TMPC << EOF
2090#if defined(__clang_major__) && defined(__clang_minor__)
2091# ifdef __apple_build_version__
2a85a08c
DB
2092# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
2093# error You need at least XCode Clang v10.0 to compile QEMU
efc6c070
TH
2094# endif
2095# else
2a85a08c
DB
2096# if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
2097# error You need at least Clang v6.0 to compile QEMU
efc6c070
TH
2098# endif
2099# endif
2100#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
56208a0d
DB
2101# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 5)
2102# error You need at least GCC v7.5.0 to compile QEMU
efc6c070
TH
2103# endif
2104#else
2105# error You either need GCC or Clang to compiler QEMU
2106#endif
2107int main (void) { return 0; }
2108EOF
2109if ! compile_prog "" "" ; then
2a85a08c 2110 error_exit "You need at least GCC v7.5 or Clang v6.0 (or XCode Clang v10.0)"
efc6c070
TH
2111fi
2112
00849b92
RH
2113# Accumulate -Wfoo and -Wno-bar separately.
2114# We will list all of the enable flags first, and the disable flags second.
2115# Note that we do not add -Werror, because that would enable it for all
2116# configure tests. If a configure test failed due to -Werror this would
2117# just silently disable some features, so it's too error prone.
2118
2119warn_flags=
2120add_to warn_flags -Wold-style-declaration
2121add_to warn_flags -Wold-style-definition
2122add_to warn_flags -Wtype-limits
2123add_to warn_flags -Wformat-security
2124add_to warn_flags -Wformat-y2k
2125add_to warn_flags -Winit-self
2126add_to warn_flags -Wignored-qualifiers
2127add_to warn_flags -Wempty-body
2128add_to warn_flags -Wnested-externs
2129add_to warn_flags -Wendif-labels
2130add_to warn_flags -Wexpansion-to-defined
0a2ebce9 2131add_to warn_flags -Wimplicit-fallthrough=2
00849b92
RH
2132
2133nowarn_flags=
2134add_to nowarn_flags -Wno-initializer-overrides
2135add_to nowarn_flags -Wno-missing-include-dirs
2136add_to nowarn_flags -Wno-shift-negative-value
2137add_to nowarn_flags -Wno-string-plus-int
2138add_to nowarn_flags -Wno-typedef-redefinition
aabab967 2139add_to nowarn_flags -Wno-tautological-type-limit-compare
bac8d222 2140add_to nowarn_flags -Wno-psabi
00849b92
RH
2141
2142gcc_flags="$warn_flags $nowarn_flags"
93b25869
JS
2143
2144cc_has_warning_flag() {
2145 write_c_skeleton;
2146
a1d29d6c
PM
2147 # Use the positive sense of the flag when testing for -Wno-wombat
2148 # support (gcc will happily accept the -Wno- form of unknown
2149 # warning options).
93b25869
JS
2150 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2151 compile_prog "-Werror $optflag" ""
2152}
2153
2154for flag in $gcc_flags; do
2155 if cc_has_warning_flag $flag ; then
2156 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
8d05095c
PB
2157 fi
2158done
2159
3b463a3f 2160if test "$stack_protector" != "no"; then
fccd35a0
RR
2161 cat > $TMPC << EOF
2162int main(int argc, char *argv[])
2163{
2164 char arr[64], *p = arr, *c = argv[0];
2165 while (*c) {
2166 *p++ = *c++;
2167 }
2168 return 0;
2169}
2170EOF
63678e17 2171 gcc_flags="-fstack-protector-strong -fstack-protector-all"
3b463a3f 2172 sp_on=0
63678e17 2173 for flag in $gcc_flags; do
590e5dd9
PM
2174 # We need to check both a compile and a link, since some compiler
2175 # setups fail only on a .c->.o compile and some only at link time
086d5f75 2176 if compile_object "-Werror $flag" &&
590e5dd9 2177 compile_prog "-Werror $flag" ""; then
63678e17 2178 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
db5adeaa 2179 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3b463a3f 2180 sp_on=1
63678e17
SN
2181 break
2182 fi
2183 done
3b463a3f
MR
2184 if test "$stack_protector" = yes; then
2185 if test $sp_on = 0; then
2186 error_exit "Stack protector not supported"
2187 fi
2188 fi
37746c5e
MAL
2189fi
2190
20bc94a2
PB
2191# Disable -Wmissing-braces on older compilers that warn even for
2192# the "universal" C zero initializer {0}.
2193cat > $TMPC << EOF
2194struct {
2195 int a[2];
2196} x = {0};
2197EOF
2198if compile_object "-Werror" "" ; then
2199 :
2200else
2201 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2202fi
2203
21e709aa
MAL
2204# Our module code doesn't support Windows
2205if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2206 error_exit "Modules are not available for Windows"
2207fi
2208
bd83c861
CE
2209# module_upgrades is only reasonable if modules are enabled
2210if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2211 error_exit "Can't enable module-upgrades as Modules are not enabled"
2212fi
2213
5f2453ac 2214# Static linking is not possible with plugins, modules or PIE
40d6444e 2215if test "$static" = "yes" ; then
aa0d1f44
PB
2216 if test "$modules" = "yes" ; then
2217 error_exit "static and modules are mutually incompatible"
2218 fi
5f2453ac
AB
2219 if test "$plugins" = "yes"; then
2220 error_exit "static and plugins are mutually incompatible"
ba4dd2aa
AB
2221 else
2222 plugins="no"
5f2453ac 2223 fi
40d6444e
AK
2224fi
2225
768b7855
EC
2226# Unconditional check for compiler __thread support
2227 cat > $TMPC << EOF
2228static __thread int tls_var;
2229int main(void) { return tls_var; }
2230EOF
2231
2232if ! compile_prog "-Werror" "" ; then
2233 error_exit "Your compiler does not support the __thread specifier for " \
2234 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2235fi
2236
b2634124 2237cat > $TMPC << EOF
21d4a791
AK
2238
2239#ifdef __linux__
2240# define THREAD __thread
2241#else
2242# define THREAD
2243#endif
21d4a791 2244static THREAD int tls_var;
21d4a791 2245int main(void) { return tls_var; }
40d6444e 2246EOF
412aeacd 2247
b2634124
RH
2248# Check we support --no-pie first; we will need this for building ROMs.
2249if compile_prog "-Werror -fno-pie" "-no-pie"; then
2250 CFLAGS_NOPIE="-fno-pie"
b2634124
RH
2251fi
2252
12781462 2253if test "$static" = "yes"; then
eca7a8e6 2254 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
5770e8af 2255 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
12781462
RH
2256 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2257 pie="yes"
2258 elif test "$pie" = "yes"; then
2259 error_exit "-static-pie not available due to missing toolchain support"
2260 else
2261 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2262 pie="no"
2263 fi
2264elif test "$pie" = "no"; then
5770e8af 2265 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
eca7a8e6 2266elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
5770e8af
PB
2267 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2268 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2c674109
RH
2269 pie="yes"
2270elif test "$pie" = "yes"; then
2271 error_exit "PIE not available due to missing toolchain support"
2272else
2273 echo "Disabling PIE due to missing toolchain support"
2274 pie="no"
40d6444e
AK
2275fi
2276
e6cbd751
RH
2277# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2278# The combination is known as "full relro", because .got.plt is read-only too.
2279if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2280 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2281fi
2282
09dada40
PB
2283##########################################
2284# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2285# use i686 as default anyway, but for those that don't, an explicit
2286# specification is necessary
2287
2288if test "$cpu" = "i386"; then
2289 cat > $TMPC << EOF
2290static int sfaa(int *ptr)
2291{
2292 return __sync_fetch_and_and(ptr, 0);
2293}
2294
2295int main(void)
2296{
2297 int val = 42;
1405b629 2298 val = __sync_val_compare_and_swap(&val, 0, 1);
09dada40
PB
2299 sfaa(&val);
2300 return val;
2301}
2302EOF
2303 if ! compile_prog "" "" ; then
2304 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2305 fi
2306fi
2307
2308#########################################
ec530c81 2309# Solaris specific configure tool chain decisions
09dada40 2310
ec530c81 2311if test "$solaris" = "yes" ; then
6792aa11
LM
2312 if has ar; then
2313 :
2314 else
ec530c81 2315 if test -f /usr/ccs/bin/ar ; then
76ad07a4
PM
2316 error_exit "No path includes ar" \
2317 "Add /usr/ccs/bin to your path and rerun configure"
ec530c81 2318 fi
76ad07a4 2319 error_exit "No path includes ar"
ec530c81 2320 fi
5fafdf24 2321fi
ec530c81 2322
56267b62
PMD
2323if test "$tcg" = "enabled"; then
2324 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
2325 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
2326fi
2327
afb63ebd 2328if test -z "${target_list+xxx}" ; then
fdb75aef 2329 default_targets=yes
d880a3ba 2330 for target in $default_target_list; do
fdb75aef 2331 target_list="$target_list $target"
d880a3ba
PB
2332 done
2333 target_list="${target_list# }"
121afa9e 2334else
fdb75aef 2335 default_targets=no
89138857 2336 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
d880a3ba
PB
2337 for target in $target_list; do
2338 # Check that we recognised the target name; this allows a more
2339 # friendly error message than if we let it fall through.
2340 case " $default_target_list " in
2341 *" $target "*)
2342 ;;
2343 *)
2344 error_exit "Unknown target name '$target'"
2345 ;;
2346 esac
d880a3ba 2347 done
121afa9e 2348fi
25b48338 2349
fdb75aef
PB
2350for target in $target_list; do
2351 # if a deprecated target is enabled we note it here
2352 if echo "$deprecated_targets_list" | grep -q "$target"; then
2353 add_to deprecated_features $target
2354 fi
2355done
2356
f55fe278
PB
2357# see if system emulation was really requested
2358case " $target_list " in
2359 *"-softmmu "*) softmmu=yes
2360 ;;
2361 *) softmmu=no
2362 ;;
2363esac
5327cf48 2364
249247c9
JQ
2365feature_not_found() {
2366 feature=$1
21684af0 2367 remedy=$2
249247c9 2368
76ad07a4 2369 error_exit "User requested feature $feature" \
21684af0
SS
2370 "configure was not able to find it." \
2371 "$remedy"
249247c9
JQ
2372}
2373
7d13299d
FB
2374# ---
2375# big/little endian test
2376cat > $TMPC << EOF
659eb157 2377#include <stdio.h>
61cc919f
MF
2378short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2379short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
659eb157
TH
2380int main(int argc, char *argv[])
2381{
2382 return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
7d13299d
FB
2383}
2384EOF
2385
659eb157
TH
2386if compile_prog ; then
2387 if strings -a $TMPE | grep -q BiGeNdIaN ; then
61cc919f 2388 bigendian="yes"
659eb157 2389 elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
61cc919f
MF
2390 bigendian="no"
2391 else
2392 echo big/little test failed
659eb157 2393 exit 1
21d89f84 2394 fi
61cc919f
MF
2395else
2396 echo big/little test failed
659eb157 2397 exit 1
7d13299d
FB
2398fi
2399
e10ee3f5
PMD
2400##########################################
2401# system tools
2402if test -z "$want_tools"; then
2403 if test "$softmmu" = "no"; then
2404 want_tools=no
2405 else
2406 want_tools=yes
2407 fi
2408fi
2409
90520ee4
PMD
2410##########################################
2411# Disable features only meaningful for system-mode emulation
2412if test "$softmmu" = "no"; then
2413 audio_drv_list=""
2414fi
2415
015a33bd
GA
2416##########################################
2417# L2TPV3 probe
2418
2419cat > $TMPC <<EOF
2420#include <sys/socket.h>
bff6cb72 2421#include <linux/ip.h>
015a33bd
GA
2422int main(void) { return sizeof(struct mmsghdr); }
2423EOF
2424if compile_prog "" "" ; then
2425 l2tpv3=yes
2426else
2427 l2tpv3=no
2428fi
2429
195588cc
DC
2430cat > $TMPC <<EOF
2431#include <sys/mman.h>
2432int main(int argc, char *argv[]) {
2433 return mlockall(MCL_FUTURE);
2434}
2435EOF
2436if compile_prog "" "" ; then
2437 have_mlockall=yes
2438else
2439 have_mlockall=no
2440fi
2441
299e6f19
PB
2442#########################################
2443# vhost interdependencies and host support
2444
2445# vhost backends
d88618f7
SH
2446if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2447 error_exit "vhost-user is only available on Linux"
299e6f19 2448fi
108a6481
CL
2449test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2450if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2451 error_exit "vhost-vdpa is only available on Linux"
2452fi
299e6f19
PB
2453test "$vhost_kernel" = "" && vhost_kernel=$linux
2454if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2455 error_exit "vhost-kernel is only available on Linux"
2456fi
2457
2458# vhost-kernel devices
2459test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2460if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2461 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2462fi
2463test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2464if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2465 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2466fi
2467
2468# vhost-user backends
2469test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2470if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2471 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2472fi
2473test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2474if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2475 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2476fi
98fc1ada
DDAG
2477test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2478if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2479 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2480fi
108a6481
CL
2481#vhost-vdpa backends
2482test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2483if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2484 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2485fi
299e6f19 2486
40bc0ca9 2487# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
299e6f19
PB
2488if test "$vhost_net" = ""; then
2489 test "$vhost_net_user" = "yes" && vhost_net=yes
40bc0ca9 2490 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
299e6f19
PB
2491 test "$vhost_kernel" = "yes" && vhost_net=yes
2492fi
2493
779ab5e3
SW
2494##########################################
2495# pkg-config probe
2496
2497if ! has "$pkg_config_exe"; then
76ad07a4 2498 error_exit "pkg-config binary '$pkg_config_exe' not found"
779ab5e3
SW
2499fi
2500
b0a47e79
JQ
2501##########################################
2502# NPTL probe
2503
24cb36a6 2504if test "$linux_user" = "yes"; then
b0a47e79 2505 cat > $TMPC <<EOF
bd0c5661 2506#include <sched.h>
30813cea 2507#include <linux/futex.h>
182eacc0 2508int main(void) {
bd0c5661
PB
2509#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2510#error bork
2511#endif
182eacc0 2512 return 0;
bd0c5661
PB
2513}
2514EOF
24cb36a6 2515 if ! compile_object ; then
21684af0 2516 feature_not_found "nptl" "Install glibc and linux kernel headers."
b0a47e79 2517 fi
bd0c5661
PB
2518fi
2519
e37630ca
AL
2520##########################################
2521# xen probe
2522
1badb709 2523if test "$xen" != "disabled" ; then
c1cdd9d5
JG
2524 # Check whether Xen library path is specified via --extra-ldflags to avoid
2525 # overriding this setting with pkg-config output. If not, try pkg-config
2526 # to obtain all needed flags.
2527
2528 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2529 $pkg_config --exists xencontrol ; then
2530 xen_ctrl_version="$(printf '%d%02d%02d' \
2531 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
1badb709 2532 xen=enabled
5b6a8f43 2533 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
c1cdd9d5 2534 xen_pc="$xen_pc xenevtchn xendevicemodel"
58ea9a7a
AP
2535 if $pkg_config --exists xentoolcore; then
2536 xen_pc="$xen_pc xentoolcore"
2537 fi
582ea95f
MAL
2538 xen_cflags="$($pkg_config --cflags $xen_pc)"
2539 xen_libs="$($pkg_config --libs $xen_pc)"
c1cdd9d5 2540 else
d5b93ddf 2541
5b6a8f43 2542 xen_libs="-lxenstore -lxenctrl"
d9506cab 2543 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
50ced5b3 2544
c1cdd9d5
JG
2545 # First we test whether Xen headers and libraries are available.
2546 # If no, we are done and there is no Xen support.
2547 # If yes, more tests are run to detect the Xen version.
2548
2549 # Xen (any)
2550 cat > $TMPC <<EOF
e37630ca 2551#include <xenctrl.h>
50ced5b3
SW
2552int main(void) {
2553 return 0;
2554}
2555EOF
c1cdd9d5
JG
2556 if ! compile_prog "" "$xen_libs" ; then
2557 # Xen not found
1badb709 2558 if test "$xen" = "enabled" ; then
c1cdd9d5
JG
2559 feature_not_found "xen" "Install xen devel"
2560 fi
1badb709 2561 xen=disabled
50ced5b3 2562
c1cdd9d5
JG
2563 # Xen unstable
2564 elif
2565 cat > $TMPC <<EOF &&
2cbf8903
RL
2566#undef XC_WANT_COMPAT_DEVICEMODEL_API
2567#define __XEN_TOOLS__
2568#include <xendevicemodel.h>
d3c49ebb 2569#include <xenforeignmemory.h>
2cbf8903
RL
2570int main(void) {
2571 xendevicemodel_handle *xd;
d3c49ebb 2572 xenforeignmemory_handle *xfmem;
2cbf8903
RL
2573
2574 xd = xendevicemodel_open(0, 0);
2575 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2576
d3c49ebb
PD
2577 xfmem = xenforeignmemory_open(0, 0);
2578 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2579
2cbf8903
RL
2580 return 0;
2581}
2582EOF
2583 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2584 then
2585 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2586 xen_ctrl_version=41100
1badb709 2587 xen=enabled
2cbf8903
RL
2588 elif
2589 cat > $TMPC <<EOF &&
5ba3d756
ID
2590#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2591#include <xenforeignmemory.h>
58ea9a7a 2592#include <xentoolcore.h>
5ba3d756
ID
2593int main(void) {
2594 xenforeignmemory_handle *xfmem;
2595
2596 xfmem = xenforeignmemory_open(0, 0);
2597 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
58ea9a7a 2598 xentoolcore_restrict_all(0);
5ba3d756
ID
2599
2600 return 0;
2601}
2602EOF
58ea9a7a 2603 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2604 then
58ea9a7a 2605 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2606 xen_ctrl_version=41000
1badb709 2607 xen=enabled
5ba3d756
ID
2608 elif
2609 cat > $TMPC <<EOF &&
da8090cc
PD
2610#undef XC_WANT_COMPAT_DEVICEMODEL_API
2611#define __XEN_TOOLS__
2612#include <xendevicemodel.h>
2613int main(void) {
2614 xendevicemodel_handle *xd;
2615
2616 xd = xendevicemodel_open(0, 0);
2617 xendevicemodel_close(xd);
50ced5b3 2618
da8090cc
PD
2619 return 0;
2620}
2621EOF
c1cdd9d5
JG
2622 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2623 then
2624 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2625 xen_ctrl_version=40900
1badb709 2626 xen=enabled
c1cdd9d5
JG
2627 elif
2628 cat > $TMPC <<EOF &&
b6eb9b45
PS
2629/*
2630 * If we have stable libs the we don't want the libxc compat
2631 * layers, regardless of what CFLAGS we may have been given.
2632 *
2633 * Also, check if xengnttab_grant_copy_segment_t is defined and
2634 * grant copy operation is implemented.
2635 */
2636#undef XC_WANT_COMPAT_EVTCHN_API
2637#undef XC_WANT_COMPAT_GNTTAB_API
2638#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2639#include <xenctrl.h>
2640#include <xenstore.h>
2641#include <xenevtchn.h>
2642#include <xengnttab.h>
2643#include <xenforeignmemory.h>
2644#include <stdint.h>
2645#include <xen/hvm/hvm_info_table.h>
2646#if !defined(HVM_MAX_VCPUS)
2647# error HVM_MAX_VCPUS not defined
2648#endif
2649int main(void) {
2650 xc_interface *xc = NULL;
2651 xenforeignmemory_handle *xfmem;
2652 xenevtchn_handle *xe;
2653 xengnttab_handle *xg;
b6eb9b45
PS
2654 xengnttab_grant_copy_segment_t* seg = NULL;
2655
2656 xs_daemon_open();
2657
2658 xc = xc_interface_open(0, 0, 0);
2659 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2660 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2661 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2662 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
b6eb9b45
PS
2663
2664 xfmem = xenforeignmemory_open(0, 0);
2665 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2666
2667 xe = xenevtchn_open(0, 0);
2668 xenevtchn_fd(xe);
2669
2670 xg = xengnttab_open(0, 0);
2671 xengnttab_grant_copy(xg, 0, seg);
2672
2673 return 0;
2674}
2675EOF
c1cdd9d5
JG
2676 compile_prog "" "$xen_libs $xen_stable_libs"
2677 then
2678 xen_ctrl_version=40800
1badb709 2679 xen=enabled
c1cdd9d5
JG
2680 elif
2681 cat > $TMPC <<EOF &&
5eeb39c2
IC
2682/*
2683 * If we have stable libs the we don't want the libxc compat
2684 * layers, regardless of what CFLAGS we may have been given.
2685 */
2686#undef XC_WANT_COMPAT_EVTCHN_API
2687#undef XC_WANT_COMPAT_GNTTAB_API
2688#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2689#include <xenctrl.h>
2690#include <xenstore.h>
2691#include <xenevtchn.h>
2692#include <xengnttab.h>
2693#include <xenforeignmemory.h>
2694#include <stdint.h>
2695#include <xen/hvm/hvm_info_table.h>
2696#if !defined(HVM_MAX_VCPUS)
2697# error HVM_MAX_VCPUS not defined
2698#endif
2699int main(void) {
2700 xc_interface *xc = NULL;
2701 xenforeignmemory_handle *xfmem;
2702 xenevtchn_handle *xe;
2703 xengnttab_handle *xg;
5eeb39c2
IC
2704
2705 xs_daemon_open();
2706
2707 xc = xc_interface_open(0, 0, 0);
2708 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2709 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2710 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2711 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
5eeb39c2
IC
2712
2713 xfmem = xenforeignmemory_open(0, 0);
2714 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2715
2716 xe = xenevtchn_open(0, 0);
2717 xenevtchn_fd(xe);
2718
2719 xg = xengnttab_open(0, 0);
2720 xengnttab_map_grant_ref(xg, 0, 0, 0);
2721
2722 return 0;
2723}
2724EOF
c1cdd9d5
JG
2725 compile_prog "" "$xen_libs $xen_stable_libs"
2726 then
2727 xen_ctrl_version=40701
1badb709 2728 xen=enabled
c1cdd9d5
JG
2729
2730 # Xen 4.6
2731 elif
2732 cat > $TMPC <<EOF &&
cdadde39 2733#include <xenctrl.h>
e108a3c1 2734#include <xenstore.h>
d5b93ddf
AP
2735#include <stdint.h>
2736#include <xen/hvm/hvm_info_table.h>
2737#if !defined(HVM_MAX_VCPUS)
2738# error HVM_MAX_VCPUS not defined
2739#endif
d8b441a3
JB
2740int main(void) {
2741 xc_interface *xc;
2742 xs_daemon_open();
2743 xc = xc_interface_open(0, 0, 0);
2744 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2745 xc_gnttab_open(NULL, 0);
2746 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2747 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2748 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 2749 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
2750 return 0;
2751}
2752EOF
c1cdd9d5
JG
2753 compile_prog "" "$xen_libs"
2754 then
2755 xen_ctrl_version=40600
1badb709 2756 xen=enabled
c1cdd9d5
JG
2757
2758 # Xen 4.5
2759 elif
2760 cat > $TMPC <<EOF &&
d8b441a3
JB
2761#include <xenctrl.h>
2762#include <xenstore.h>
2763#include <stdint.h>
2764#include <xen/hvm/hvm_info_table.h>
2765#if !defined(HVM_MAX_VCPUS)
2766# error HVM_MAX_VCPUS not defined
2767#endif
3996e85c
PD
2768int main(void) {
2769 xc_interface *xc;
2770 xs_daemon_open();
2771 xc = xc_interface_open(0, 0, 0);
2772 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2773 xc_gnttab_open(NULL, 0);
2774 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2775 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2776 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2777 return 0;
2778}
2779EOF
c1cdd9d5
JG
2780 compile_prog "" "$xen_libs"
2781 then
2782 xen_ctrl_version=40500
1badb709 2783 xen=enabled
3996e85c 2784
c1cdd9d5
JG
2785 elif
2786 cat > $TMPC <<EOF &&
3996e85c
PD
2787#include <xenctrl.h>
2788#include <xenstore.h>
2789#include <stdint.h>
2790#include <xen/hvm/hvm_info_table.h>
2791#if !defined(HVM_MAX_VCPUS)
2792# error HVM_MAX_VCPUS not defined
2793#endif
8688e065
SS
2794int main(void) {
2795 xc_interface *xc;
2796 xs_daemon_open();
2797 xc = xc_interface_open(0, 0, 0);
2798 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2799 xc_gnttab_open(NULL, 0);
2800 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2801 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2802 return 0;
2803}
2804EOF
c1cdd9d5
JG
2805 compile_prog "" "$xen_libs"
2806 then
2807 xen_ctrl_version=40200
1badb709 2808 xen=enabled
8688e065 2809
c1cdd9d5 2810 else
1badb709 2811 if test "$xen" = "enabled" ; then
c1cdd9d5
JG
2812 feature_not_found "xen (unsupported version)" \
2813 "Install a supported xen (xen 4.2 or newer)"
2814 fi
1badb709 2815 xen=disabled
fc321b4b 2816 fi
d5b93ddf 2817
1badb709 2818 if test "$xen" = enabled; then
c1cdd9d5 2819 if test $xen_ctrl_version -ge 40701 ; then
582ea95f 2820 xen_libs="$xen_libs $xen_stable_libs "
c1cdd9d5 2821 fi
5eeb39c2 2822 fi
d5b93ddf 2823 fi
e37630ca
AL
2824fi
2825
2da776db
MH
2826##########################################
2827# RDMA needs OpenFabrics libraries
2828if test "$rdma" != "no" ; then
2829 cat > $TMPC <<EOF
2830#include <rdma/rdma_cma.h>
2831int main(void) { return 0; }
2832EOF
ef6d4ccd 2833 rdma_libs="-lrdmacm -libverbs -libumad"
2da776db
MH
2834 if compile_prog "" "$rdma_libs" ; then
2835 rdma="yes"
2da776db
MH
2836 else
2837 if test "$rdma" = "yes" ; then
2838 error_exit \
ef6d4ccd 2839 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2da776db 2840 " Your options:" \
ef6d4ccd 2841 " (1) Fast: Install infiniband packages (devel) from your distro." \
2da776db
MH
2842 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2843 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2844 fi
2845 rdma="no"
2846 fi
2847fi
2848
21ab34c9
MA
2849##########################################
2850# PVRDMA detection
2851
2852cat > $TMPC <<EOF &&
2853#include <sys/mman.h>
2854
2855int
2856main(void)
2857{
2858 char buf = 0;
2859 void *addr = &buf;
2860 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2861
2862 return 0;
2863}
2864EOF
2865
2866if test "$rdma" = "yes" ; then
2867 case "$pvrdma" in
2868 "")
2869 if compile_prog "" ""; then
2870 pvrdma="yes"
2871 else
2872 pvrdma="no"
2873 fi
2874 ;;
2875 "yes")
2876 if ! compile_prog "" ""; then
2877 error_exit "PVRDMA is not supported since mremap is not implemented"
2878 fi
2879 pvrdma="yes"
2880 ;;
2881 "no")
2882 pvrdma="no"
2883 ;;
2884 esac
2885else
2886 if test "$pvrdma" = "yes" ; then
2887 error_exit "PVRDMA requires rdma suppport"
2888 fi
2889 pvrdma="no"
2890fi
95c6bff3 2891
ee108585
YS
2892# Let's see if enhanced reg_mr is supported
2893if test "$pvrdma" = "yes" ; then
2894
2895cat > $TMPC <<EOF &&
2896#include <infiniband/verbs.h>
2897
2898int
2899main(void)
2900{
2901 struct ibv_mr *mr;
2902 struct ibv_pd *pd = NULL;
2903 size_t length = 10;
2904 uint64_t iova = 0;
2905 int access = 0;
2906 void *addr = NULL;
2907
2908 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2909
2910 ibv_dereg_mr(mr);
2911
2912 return 0;
2913}
2914EOF
2915 if ! compile_prog "" "-libverbs"; then
2916 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2917 fi
2918fi
2919
ee682d27 2920##########################################
c1bb86cd 2921# xfsctl() probe, used for file-posix.c
dce512de
CH
2922if test "$xfs" != "no" ; then
2923 cat > $TMPC << EOF
ffc41d10 2924#include <stddef.h> /* NULL */
dce512de
CH
2925#include <xfs/xfs.h>
2926int main(void)
2927{
2928 xfsctl(NULL, 0, 0, NULL);
2929 return 0;
2930}
2931EOF
2932 if compile_prog "" "" ; then
2933 xfs="yes"
2934 else
2935 if test "$xfs" = "yes" ; then
e3a6e0da 2936 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
dce512de
CH
2937 fi
2938 xfs=no
2939 fi
2940fi
2941
8a16d273
TS
2942##########################################
2943# vde libraries probe
dfb278bd 2944if test "$vde" != "no" ; then
4baae0ac 2945 vde_libs="-lvdeplug"
8a16d273
TS
2946 cat > $TMPC << EOF
2947#include <libvdeplug.h>
4a7f0e06
PB
2948int main(void)
2949{
2950 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
2951 char s[] = "";
2952 vde_open(s, s, &a);
4a7f0e06
PB
2953 return 0;
2954}
8a16d273 2955EOF
52166aa0 2956 if compile_prog "" "$vde_libs" ; then
4baae0ac 2957 vde=yes
dfb278bd
JQ
2958 else
2959 if test "$vde" = "yes" ; then
21684af0 2960 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
2961 fi
2962 vde=no
4baae0ac 2963 fi
8a16d273
TS
2964fi
2965
58952137 2966##########################################
0a985b37
VM
2967# netmap support probe
2968# Apart from looking for netmap headers, we make sure that the host API version
2969# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2970# a minor/major version number. Minor new features will be marked with values up
2971# to 15, and if something happens that requires a change to the backend we will
2972# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
2973if test "$netmap" != "no" ; then
2974 cat > $TMPC << EOF
2975#include <inttypes.h>
2976#include <net/if.h>
2977#include <net/netmap.h>
2978#include <net/netmap_user.h>
0a985b37
VM
2979#if (NETMAP_API < 11) || (NETMAP_API > 15)
2980#error
2981#endif
58952137
VM
2982int main(void) { return 0; }
2983EOF
2984 if compile_prog "" "" ; then
2985 netmap=yes
2986 else
2987 if test "$netmap" = "yes" ; then
2988 feature_not_found "netmap"
2989 fi
2990 netmap=no
2991 fi
2992fi
2993
422a5fd0
JD
2994##########################################
2995# detect CoreAudio
2996if test "$coreaudio" != "no" ; then
2997 coreaudio_libs="-framework CoreAudio"
2998 cat > $TMPC << EOF
2999#include <CoreAudio/CoreAudio.h>
3000int main(void)
3001{
3002 return (int)AudioGetCurrentHostTime();
3003}
3004EOF
3005 if compile_prog "" "$coreaudio_libs" ; then
3006 coreaudio=yes
3007 else
3008 coreaudio=no
3009 fi
3010fi
3011
8f28f3fb 3012##########################################
c2de5c91 3013# Sound support libraries probe
8f28f3fb 3014
89138857 3015audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
c2de5c91 3016for drv in $audio_drv_list; do
3017 case $drv in
e42975a1 3018 alsa | try-alsa)
c80a867f
GH
3019 if $pkg_config alsa --exists; then
3020 alsa_libs=$($pkg_config alsa --libs)
478e943f
PB
3021 alsa_cflags=$($pkg_config alsa --cflags)
3022 alsa=yes
e42975a1
GH
3023 if test "$drv" = "try-alsa"; then
3024 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3025 fi
c80a867f 3026 else
e42975a1
GH
3027 if test "$drv" = "try-alsa"; then
3028 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3029 else
3030 error_exit "$drv check failed" \
3031 "Make sure to have the $drv libs and headers installed."
3032 fi
c80a867f 3033 fi
c2de5c91 3034 ;;
3035
e42975a1 3036 pa | try-pa)
c80a867f 3037 if $pkg_config libpulse --exists; then
478e943f 3038 libpulse=yes
c80a867f 3039 pulse_libs=$($pkg_config libpulse --libs)
478e943f 3040 pulse_cflags=$($pkg_config libpulse --cflags)
e42975a1
GH
3041 if test "$drv" = "try-pa"; then
3042 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3043 fi
c80a867f 3044 else
e42975a1
GH
3045 if test "$drv" = "try-pa"; then
3046 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3047 else
3048 error_exit "$drv check failed" \
3049 "Make sure to have the $drv libs and headers installed."
3050 fi
c80a867f 3051 fi
b8e59f18 3052 ;;
3053
373967b2
GH
3054 sdl)
3055 if test "$sdl" = "no"; then
3056 error_exit "sdl not found or disabled, can not use sdl audio driver"
3057 fi
3058 ;;
3059
e42975a1
GH
3060 try-sdl)
3061 if test "$sdl" = "no"; then
3062 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3063 else
3064 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3065 fi
3066 ;;
3067
422a5fd0
JD
3068 coreaudio | try-coreaudio)
3069 if test "$coreaudio" = "no"; then
3070 if test "$drv" = "try-coreaudio"; then
3071 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio//')
3072 else
3073 error_exit "$drv check failed" \
3074 "Make sure to have the $drv is available."
3075 fi
3076 else
b1149911 3077 coreaudio_libs="-framework CoreAudio"
422a5fd0
JD
3078 if test "$drv" = "try-coreaudio"; then
3079 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio/coreaudio/')
3080 fi
3081 fi
997e690a
JQ
3082 ;;
3083
a4bf6780 3084 dsound)
b1149911 3085 dsound_libs="-lole32 -ldxguid"
d5631638 3086 audio_win_int="yes"
a4bf6780
JQ
3087 ;;
3088
3089 oss)
b1149911 3090 oss_libs="$oss_lib"
a4bf6780
JQ
3091 ;;
3092
2e445703
GM
3093 jack | try-jack)
3094 if $pkg_config jack --exists; then
478e943f 3095 libjack=yes
2e445703
GM
3096 jack_libs=$($pkg_config jack --libs)
3097 if test "$drv" = "try-jack"; then
3098 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3099 fi
3100 else
3101 if test "$drv" = "try-jack"; then
3102 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3103 else
3104 error_exit "$drv check failed" \
3105 "Make sure to have the $drv libs and headers installed."
3106 fi
3107 fi
3108 ;;
3109
e4c63a6a 3110 *)
1c9b2a52 3111 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
3112 error_exit "Unknown driver '$drv' selected" \
3113 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 3114 }
3115 ;;
c2de5c91 3116 esac
3117done
8f28f3fb 3118
ba4dd2aa
AB
3119##########################################
3120# plugin linker support probe
3121
3122if test "$plugins" != "no"; then
3123
3124 #########################################
3125 # See if --dynamic-list is supported by the linker
3126
3127 ld_dynamic_list="no"
3128 cat > $TMPTXT <<EOF
3129{
3130 foo;
3131};
3132EOF
3133
3134 cat > $TMPC <<EOF
3135#include <stdio.h>
3136void foo(void);
3137
3138void foo(void)
3139{
3140 printf("foo\n");
3141}
3142
3143int main(void)
3144{
3145 foo();
3146 return 0;
3147}
3148EOF
3149
3150 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
3151 ld_dynamic_list="yes"
3152 fi
3153
3154 #########################################
3155 # See if -exported_symbols_list is supported by the linker
3156
3157 ld_exported_symbols_list="no"
3158 cat > $TMPTXT <<EOF
3159 _foo
3160EOF
3161
3162 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
3163 ld_exported_symbols_list="yes"
3164 fi
3165
3166 if test "$ld_dynamic_list" = "no" &&
3167 test "$ld_exported_symbols_list" = "no" ; then
3168 if test "$plugins" = "yes"; then
3169 error_exit \
3170 "Plugin support requires dynamic linking and specifying a set of symbols " \
3171 "that are exported to plugins. Unfortunately your linker doesn't " \
3172 "support the flag (--dynamic-list or -exported_symbols_list) used " \
3173 "for this purpose."
3174 else
3175 plugins="no"
3176 fi
3177 else
3178 plugins="yes"
3179 fi
3180fi
3181
e18df141
AL
3182##########################################
3183# glib support probe
a52d28af 3184
b4c6036f 3185glib_req_ver=2.56
aa0d1f44
PB
3186glib_modules=gthread-2.0
3187if test "$modules" = yes; then
a88afc64 3188 glib_modules="$glib_modules gmodule-export-2.0"
aa0d1f44 3189fi
ba4dd2aa 3190if test "$plugins" = "yes"; then
54cb65d8
EC
3191 glib_modules="$glib_modules gmodule-2.0"
3192fi
e26110cf 3193
aa0d1f44 3194for i in $glib_modules; do
e26110cf 3195 if $pkg_config --atleast-version=$glib_req_ver $i; then
89138857
SW
3196 glib_cflags=$($pkg_config --cflags $i)
3197 glib_libs=$($pkg_config --libs $i)
e26110cf
FZ
3198 else
3199 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3200 fi
3201done
3202
215b0c2f
PB
3203# This workaround is required due to a bug in pkg-config file for glib as it
3204# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3205
3206if test "$static" = yes && test "$mingw32" = yes; then
3207 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3208fi
3209
20cf7b8e
DP
3210if ! test "$gio" = "no"; then
3211 pass=no
3212 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3213 gio_cflags=$($pkg_config --cflags gio-2.0)
3214 gio_libs=$($pkg_config --libs gio-2.0)
3215 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
5ecfb76c 3216 if ! has "$gdbus_codegen"; then
20cf7b8e
DP
3217 gdbus_codegen=
3218 fi
3219 # Check that the libraries actually work -- Ubuntu 18.04 ships
3220 # with pkg-config --static --libs data for gio-2.0 that is missing
3221 # -lblkid and will give a link error.
3222 cat > $TMPC <<EOF
13ceae66
PM
3223#include <gio/gio.h>
3224int main(void)
3225{
3226 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3227 return 0;
3228}
3229EOF
20cf7b8e
DP
3230 if compile_prog "$gio_cflags" "$gio_libs" ; then
3231 pass=yes
3232 else
3233 pass=no
3234 fi
3235
3236 if test "$pass" = "yes" &&
3237 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3238 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3239 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3240 fi
76346b62 3241 fi
f876b765 3242
20cf7b8e
DP
3243 if test "$pass" = "no"; then
3244 if test "$gio" = "yes"; then
3245 feature_not_found "gio" "Install libgio >= 2.0"
3246 else
3247 gio=no
3248 fi
3249 else
3250 gio=yes
3251 fi
25a97a56
MAL
3252fi
3253
977a82ab
DB
3254# Sanity check that the current size_t matches the
3255# size that glib thinks it should be. This catches
3256# problems on multi-arch where people try to build
3257# 32-bit QEMU while pointing at 64-bit glib headers
3258cat > $TMPC <<EOF
3259#include <glib.h>
3260#include <unistd.h>
3261
3262#define QEMU_BUILD_BUG_ON(x) \
3263 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3264
3265int main(void) {
3266 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3267 return 0;
3268}
3269EOF
3270
215b0c2f 3271if ! compile_prog "$glib_cflags" "$glib_libs" ; then
977a82ab
DB
3272 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3273 "You probably need to set PKG_CONFIG_LIBDIR"\
3274 "to point to the right pkg-config files for your"\
3275 "build target"
3276fi
3277
9bda600b
EB
3278# Silence clang warnings triggered by glib < 2.57.2
3279cat > $TMPC << EOF
3280#include <glib.h>
3281typedef struct Foo {
3282 int i;
3283} Foo;
3284static void foo_free(Foo *f)
3285{
3286 g_free(f);
3287}
3288G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3289int main(void) { return 0; }
3290EOF
3291if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3292 if cc_has_warning_flag "-Wno-unused-function"; then
3293 glib_cflags="$glib_cflags -Wno-unused-function"
5770e8af 3294 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
9bda600b
EB
3295 fi
3296fi
3297
e26110cf
FZ
3298##########################################
3299# SHA command probe for modules
3300if test "$modules" = yes; then
3301 shacmd_probe="sha1sum sha1 shasum"
3302 for c in $shacmd_probe; do
8ccefb91 3303 if has $c; then
e26110cf
FZ
3304 shacmd="$c"
3305 break
3306 fi
3307 done
3308 if test "$shacmd" = ""; then
3309 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3310 fi
e18df141
AL
3311fi
3312
414f0dab 3313##########################################
e5d355d1 3314# pthread probe
4b29ec41 3315PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3316
4dd75c70 3317pthread=no
e5d355d1 3318cat > $TMPC << EOF
3c529d93 3319#include <pthread.h>
7a42bbe4
SW
3320static void *f(void *p) { return NULL; }
3321int main(void) {
3322 pthread_t thread;
3323 pthread_create(&thread, 0, f, 0);
3324 return 0;
3325}
414f0dab 3326EOF
bd00d539
AF
3327if compile_prog "" "" ; then
3328 pthread=yes
3329else
3330 for pthread_lib in $PTHREADLIBS_LIST; do
3331 if compile_prog "" "$pthread_lib" ; then
3332 pthread=yes
bd00d539
AF
3333 break
3334 fi
3335 done
3336fi
414f0dab 3337
e633a5c6 3338if test "$mingw32" != yes && test "$pthread" = no; then
76ad07a4
PM
3339 error_exit "pthread check failed" \
3340 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3341fi
3342
479a5747
RB
3343# check for pthread_setname_np with thread id
3344pthread_setname_np_w_tid=no
5c312079
DDAG
3345cat > $TMPC << EOF
3346#include <pthread.h>
3347
3348static void *f(void *p) { return NULL; }
3349int main(void)
3350{
3351 pthread_t thread;
3352 pthread_create(&thread, 0, f, 0);
3353 pthread_setname_np(thread, "QEMU");
3354 return 0;
3355}
3356EOF
3357if compile_prog "" "$pthread_lib" ; then
479a5747
RB
3358 pthread_setname_np_w_tid=yes
3359fi
3360
3361# check for pthread_setname_np without thread id
3362pthread_setname_np_wo_tid=no
3363cat > $TMPC << EOF
3364#include <pthread.h>
3365
12a9b8d8 3366static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
479a5747
RB
3367int main(void)
3368{
3369 pthread_t thread;
3370 pthread_create(&thread, 0, f, 0);
3371 return 0;
3372}
3373EOF
3374if compile_prog "" "$pthread_lib" ; then
3375 pthread_setname_np_wo_tid=yes
5c312079
DDAG
3376fi
3377
0a12ec87 3378##########################################
b10d49d7
PT
3379# libssh probe
3380if test "$libssh" != "no" ; then
b4c10fc6 3381 if $pkg_config --exists "libssh >= 0.8.7"; then
b10d49d7
PT
3382 libssh_cflags=$($pkg_config libssh --cflags)
3383 libssh_libs=$($pkg_config libssh --libs)
3384 libssh=yes
0a12ec87 3385 else
b10d49d7
PT
3386 if test "$libssh" = "yes" ; then
3387 error_exit "libssh required for --enable-libssh"
0a12ec87 3388 fi
b10d49d7 3389 libssh=no
0a12ec87
RJ
3390 fi
3391fi
3392
5c6c3a6c
CH
3393##########################################
3394# linux-aio probe
5c6c3a6c
CH
3395
3396if test "$linux_aio" != "no" ; then
3397 cat > $TMPC <<EOF
3398#include <libaio.h>
3399#include <sys/eventfd.h>
832ce9c2 3400#include <stddef.h>
5c6c3a6c
CH
3401int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3402EOF
3403 if compile_prog "" "-laio" ; then
3404 linux_aio=yes
5c6c3a6c
CH
3405 else
3406 if test "$linux_aio" = "yes" ; then
21684af0 3407 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3408 fi
3cfcae3c 3409 linux_aio=no
5c6c3a6c
CH
3410 fi
3411fi
3412
3b8acc11 3413##########################################
7aaa6a16 3414# TPM emulation is only on POSIX
3b8acc11 3415
7aaa6a16
PB
3416if test "$tpm" = ""; then
3417 if test "$mingw32" = "yes"; then
3418 tpm=no
3419 else
3420 tpm=yes
3421 fi
3422elif test "$tpm" = "yes"; then
3423 if test "$mingw32" = "yes" ; then
3424 error_exit "TPM emulation only available on POSIX systems"
3425 fi
3b8acc11
PB
3426fi
3427
bf9298b9
AL
3428##########################################
3429# iovec probe
3430cat > $TMPC <<EOF
db34f0b3 3431#include <sys/types.h>
bf9298b9 3432#include <sys/uio.h>
db34f0b3 3433#include <unistd.h>
f91f9bee 3434int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3435EOF
3436iovec=no
52166aa0 3437if compile_prog "" "" ; then
bf9298b9
AL
3438 iovec=yes
3439fi
3440
f652e6af
AJ
3441##########################################
3442# fdt probe
d599938a 3443
fbb4121d
PB
3444case "$fdt" in
3445 auto | enabled | internal)
3446 # Simpler to always update submodule, even if not needed.
2d652f24 3447 git_submodules="${git_submodules} dtc"
fbb4121d
PB
3448 ;;
3449esac
f652e6af 3450
20ff075b 3451##########################################
9d49bcf6 3452# opengl probe (for sdl2, gtk)
b1546f32 3453
d52c454a
MAL
3454gbm="no"
3455if $pkg_config gbm; then
3456 gbm_cflags="$($pkg_config --cflags gbm)"
3457 gbm_libs="$($pkg_config --libs gbm)"
3458 gbm="yes"
3459fi
3460
da076ffe 3461if test "$opengl" != "no" ; then
bc6a3565
AO
3462 epoxy=no
3463 if $pkg_config epoxy; then
3464 cat > $TMPC << EOF
3465#include <epoxy/egl.h>
3466int main(void) { return 0; }
3467EOF
3468 if compile_prog "" "" ; then
3469 epoxy=yes
3470 fi
3471 fi
3472
3473 if test "$epoxy" = "yes" ; then
3474 opengl_cflags="$($pkg_config --cflags epoxy)"
3475 opengl_libs="$($pkg_config --libs epoxy)"
da076ffe 3476 opengl=yes
20ff075b 3477 else
da076ffe 3478 if test "$opengl" = "yes" ; then
bc6a3565 3479 feature_not_found "opengl" "Please install epoxy with EGL"
20ff075b 3480 fi
f676c67e 3481 opengl_cflags=""
da076ffe
GH
3482 opengl_libs=""
3483 opengl=no
20ff075b
MW
3484 fi
3485fi
3486
a99d57bb
WG
3487##########################################
3488# libnuma probe
3489
3490if test "$numa" != "no" ; then
3491 cat > $TMPC << EOF
3492#include <numa.h>
3493int main(void) { return numa_available(); }
3494EOF
3495
3496 if compile_prog "" "-lnuma" ; then
3497 numa=yes
ab318051 3498 numa_libs="-lnuma"
a99d57bb
WG
3499 else
3500 if test "$numa" = "yes" ; then
3501 feature_not_found "numa" "install numactl devel"
3502 fi
3503 numa=no
3504 fi
3505fi
3506
aa087962 3507malloc=system
7b01cb97
AD
3508if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3509 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3510 exit 1
aa087962
PB
3511elif test "$tcmalloc" = "yes" ; then
3512 malloc=tcmalloc
3513elif test "$jemalloc" = "yes" ; then
3514 malloc=jemalloc
7b01cb97
AD
3515fi
3516
955727d2
CT
3517# check for usbfs
3518have_usbfs=no
3519if test "$linux_user" = "yes"; then
96566d09
TP
3520 cat > $TMPC << EOF
3521#include <linux/usbdevice_fs.h>
3522
3523#ifndef USBDEVFS_GET_CAPABILITIES
3524#error "USBDEVFS_GET_CAPABILITIES undefined"
3525#endif
3526
3527#ifndef USBDEVFS_DISCONNECT_CLAIM
3528#error "USBDEVFS_DISCONNECT_CLAIM undefined"
3529#endif
3530
3531int main(void)
3532{
3533 return 0;
3534}
3535EOF
3536 if compile_prog "" ""; then
955727d2
CT
3537 have_usbfs=yes
3538 fi
955727d2 3539fi
751bcc39 3540
de5071c5 3541##########################################
cd4ec0b4 3542# spice probe
58d3f3ff
GH
3543if test "$spice_protocol" != "no" ; then
3544 spice_protocol_cflags=$($pkg_config --cflags spice-protocol 2>/dev/null)
3545 if $pkg_config --atleast-version=0.12.3 spice-protocol; then
3546 spice_protocol="yes"
3547 else
3548 if test "$spice_protocol" = "yes" ; then
3549 feature_not_found "spice_protocol" \
3550 "Install spice-protocol(>=0.12.3) devel"
3551 fi
3552 spice_protocol="no"
3553 fi
3554fi
3555
cd4ec0b4
GH
3556if test "$spice" != "no" ; then
3557 cat > $TMPC << EOF
3558#include <spice.h>
3559int main(void) { spice_server_new(); return 0; }
3560EOF
710fc4f5
JD
3561 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3562 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
1b63665c 3563 if $pkg_config --atleast-version=0.12.5 spice-server && \
58d3f3ff 3564 test "$spice_protocol" = "yes" && \
cd4ec0b4
GH
3565 compile_prog "$spice_cflags" "$spice_libs" ; then
3566 spice="yes"
cd4ec0b4
GH
3567 else
3568 if test "$spice" = "yes" ; then
8efc9363 3569 feature_not_found "spice" \
58d3f3ff 3570 "Install spice-server(>=0.12.5) devel"
cd4ec0b4
GH
3571 fi
3572 spice="no"
3573 fi
3574fi
3575
d9840e25
TS
3576##########################################
3577# check if we have VSS SDK headers for win
3578
e633a5c6
EB
3579if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3580 test "$vss_win32_sdk" != "no" ; then
d9840e25 3581 case "$vss_win32_sdk" in
690604f6 3582 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
3583 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3584 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 3585 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
3586 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3587 ;;
690604f6 3588 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
3589 esac
3590 cat > $TMPC << EOF
3591#define __MIDL_user_allocate_free_DEFINED__
3592#include <inc/win2003/vss.h>
3593int main(void) { return VSS_CTX_BACKUP; }
3594EOF
3595 if compile_prog "$vss_win32_include" "" ; then
3596 guest_agent_with_vss="yes"
3597 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 3598 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 3599 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
3600 else
3601 if test "$vss_win32_sdk" != "" ; then
3602 echo "ERROR: Please download and install Microsoft VSS SDK:"
3603 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3604 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3605 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3606 echo "ERROR: The headers are extracted in the directory \`inc'."
3607 feature_not_found "VSS support"
3608 fi
3609 guest_agent_with_vss="no"
3610 fi
3611fi
3612
3613##########################################
3614# lookup Windows platform SDK (if not specified)
3615# The SDK is needed only to build .tlb (type library) file of guest agent
3616# VSS provider from the source. It is usually unnecessary because the
3617# pre-compiled .tlb file is included.
3618
e633a5c6
EB
3619if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3620 test "$guest_agent_with_vss" = "yes" ; then
d9840e25
TS
3621 if test -z "$win_sdk"; then
3622 programfiles="$PROGRAMFILES"
3623 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3624 if test -n "$programfiles"; then
3625 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3626 else
3627 feature_not_found "Windows SDK"
3628 fi
3629 elif test "$win_sdk" = "no"; then
3630 win_sdk=""
3631 fi
3632fi
3633
50cbebb9
MR
3634##########################################
3635# check if mingw environment provides a recent ntddscsi.h
e633a5c6 3636if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
50cbebb9
MR
3637 cat > $TMPC << EOF
3638#include <windows.h>
3639#include <ntddscsi.h>
3640int main(void) {
3641#if !defined(IOCTL_SCSI_GET_ADDRESS)
3642#error Missing required ioctl definitions
3643#endif
3644 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3645 return addr.Lun;
3646}
3647EOF
3648 if compile_prog "" "" ; then
3649 guest_agent_ntddscsi=yes
996b9cdc 3650 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
50cbebb9
MR
3651 fi
3652fi
3653
8ca80760
RH
3654##########################################
3655# capstone
3656
e219c499 3657case "$capstone" in
8b18cdbf
RH
3658 auto | enabled | internal)
3659 # Simpler to always update submodule, even if not needed.
2d652f24 3660 git_submodules="${git_submodules} capstone"
e219c499
RH
3661 ;;
3662esac
8ca80760 3663
0a852417
PD
3664##########################################
3665# check if we have posix_syslog
3666
3667posix_syslog=no
3668cat > $TMPC << EOF
3669#include <syslog.h>
3670int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
3671EOF
3672if compile_prog "" "" ; then
3673 posix_syslog=yes
3674fi
3675
94a420b1
SH
3676##########################################
3677# check if trace backend exists
3678
5b808275 3679$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 3680if test "$?" -ne 0 ; then
5b808275
LV
3681 error_exit "invalid trace backends" \
3682 "Please choose supported trace backends."
94a420b1
SH
3683fi
3684
7e24e92a
SH
3685##########################################
3686# For 'ust' backend, test if ust headers are present
5b808275 3687if have_backend "ust"; then
bbe47ed2
PB
3688 if $pkg_config lttng-ust --exists; then
3689 lttng_ust_libs=$($pkg_config --libs lttng-ust)
7e24e92a 3690 else
bf15f63c 3691 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
3692 fi
3693fi
b3d08c02
DB
3694
3695##########################################
3696# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 3697if have_backend "dtrace"; then
b3d08c02 3698 if ! has 'dtrace' ; then
76ad07a4 3699 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 3700 fi
c276b17d
DB
3701 trace_backend_stap="no"
3702 if has 'stap' ; then
3703 trace_backend_stap="yes"
4b265c79
SH
3704
3705 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
3706 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
3707 # instead. QEMU --enable-modules depends on this because the SystemTap
3708 # semaphores are linked into the main binary and not the module's shared
3709 # object.
3710 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
c276b17d 3711 fi
b3d08c02
DB
3712fi
3713
023367e6 3714##########################################
519175a2 3715# check and set a backend for coroutine
d0e2fce5 3716
7c2acc70 3717# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
3718# is sigcontext. On Windows the only valid backend is the Windows
3719# specific one.
7c2acc70
PM
3720
3721ucontext_works=no
3722if test "$darwin" != "yes"; then
3723 cat > $TMPC << EOF
d0e2fce5 3724#include <ucontext.h>
cdf84806
PM
3725#ifdef __stub_makecontext
3726#error Ignoring glibc stub makecontext which will always fail
3727#endif
75cafad7 3728int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 3729EOF
7c2acc70
PM
3730 if compile_prog "" "" ; then
3731 ucontext_works=yes
3732 fi
3733fi
3734
3735if test "$coroutine" = ""; then
3736 if test "$mingw32" = "yes"; then
3737 coroutine=win32
3738 elif test "$ucontext_works" = "yes"; then
3739 coroutine=ucontext
3740 else
3741 coroutine=sigaltstack
d0e2fce5 3742 fi
519175a2 3743else
7c2acc70
PM
3744 case $coroutine in
3745 windows)
3746 if test "$mingw32" != "yes"; then
3747 error_exit "'windows' coroutine backend only valid for Windows"
3748 fi
3749 # Unfortunately the user visible backend name doesn't match the
3750 # coroutine-*.c filename for this case, so we have to adjust it here.
3751 coroutine=win32
3752 ;;
3753 ucontext)
3754 if test "$ucontext_works" != "yes"; then
3755 feature_not_found "ucontext"
3756 fi
3757 ;;
33c53c54 3758 sigaltstack)
7c2acc70
PM
3759 if test "$mingw32" = "yes"; then
3760 error_exit "only the 'windows' coroutine backend is valid for Windows"
3761 fi
3762 ;;
3763 *)
3764 error_exit "unknown coroutine backend $coroutine"
3765 ;;
3766 esac
d0e2fce5
AK
3767fi
3768
70c60c08 3769if test "$coroutine_pool" = ""; then
33c53c54 3770 coroutine_pool=yes
70c60c08
SH
3771fi
3772
7d992e4d 3773if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
3774 if test "$coroutine_pool" = "yes"; then
3775 echo "WARN: disabling coroutine pool for stack usage debugging"
3776 coroutine_pool=no
3777 fi
3778fi
3779
1e4f6065
DB
3780##################################################
3781# SafeStack
3782
3783
3784if test "$safe_stack" = "yes"; then
3785cat > $TMPC << EOF
3786int main(int argc, char *argv[])
3787{
3788#if ! __has_feature(safe_stack)
3789#error SafeStack Disabled
3790#endif
3791 return 0;
3792}
3793EOF
3794 flag="-fsanitize=safe-stack"
3795 # Check that safe-stack is supported and enabled.
3796 if compile_prog "-Werror $flag" "$flag"; then
3797 # Flag needed both at compilation and at linking
3798 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3799 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3800 else
3801 error_exit "SafeStack not supported by your compiler"
3802 fi
3803 if test "$coroutine" != "ucontext"; then
3804 error_exit "SafeStack is only supported by the coroutine backend ucontext"
3805 fi
3806else
3807cat > $TMPC << EOF
3808int main(int argc, char *argv[])
3809{
3810#if defined(__has_feature)
3811#if __has_feature(safe_stack)
3812#error SafeStack Enabled
3813#endif
3814#endif
3815 return 0;
3816}
3817EOF
3818if test "$safe_stack" = "no"; then
3819 # Make sure that safe-stack is disabled
3820 if ! compile_prog "-Werror" ""; then
3821 # SafeStack was already enabled, try to explicitly remove the feature
3822 flag="-fno-sanitize=safe-stack"
3823 if ! compile_prog "-Werror $flag" "$flag"; then
3824 error_exit "Configure cannot disable SafeStack"
3825 fi
3826 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3827 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3828 fi
3829else # "$safe_stack" = ""
3830 # Set safe_stack to yes or no based on pre-existing flags
3831 if compile_prog "-Werror" ""; then
3832 safe_stack="no"
3833 else
3834 safe_stack="yes"
3835 if test "$coroutine" != "ucontext"; then
3836 error_exit "SafeStack is only supported by the coroutine backend ucontext"
3837 fi
3838 fi
3839fi
3840fi
7d992e4d 3841
76a347e1
RH
3842########################################
3843# check if cpuid.h is usable.
3844
76a347e1
RH
3845cat > $TMPC << EOF
3846#include <cpuid.h>
3847int main(void) {
774d566c
PM
3848 unsigned a, b, c, d;
3849 int max = __get_cpuid_max(0, 0);
3850
3851 if (max >= 1) {
3852 __cpuid(1, a, b, c, d);
3853 }
3854
3855 if (max >= 7) {
3856 __cpuid_count(7, 0, a, b, c, d);
3857 }
3858
3859 return 0;
76a347e1
RH
3860}
3861EOF
3862if compile_prog "" "" ; then
3863 cpuid_h=yes
3864fi
3865
5dd89908
RH
3866##########################################
3867# avx2 optimization requirement check
3868#
3869# There is no point enabling this if cpuid.h is not usable,
3870# since we won't be able to select the new routines.
3871
e633a5c6 3872if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5dd89908
RH
3873 cat > $TMPC << EOF
3874#pragma GCC push_options
3875#pragma GCC target("avx2")
3876#include <cpuid.h>
3877#include <immintrin.h>
3878static int bar(void *a) {
3879 __m256i x = *(__m256i *)a;
3880 return _mm256_testz_si256(x, x);
3881}
3882int main(int argc, char *argv[]) { return bar(argv[0]); }
3883EOF
3884 if compile_object "" ; then
3885 avx2_opt="yes"
86583a07
LM
3886 else
3887 avx2_opt="no"
5dd89908
RH
3888 fi
3889fi
3890
6b8cd447
RH
3891##########################################
3892# avx512f optimization requirement check
3893#
3894# There is no point enabling this if cpuid.h is not usable,
3895# since we won't be able to select the new routines.
3896# by default, it is turned off.
3897# if user explicitly want to enable it, check environment
3898
3899if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
3900 cat > $TMPC << EOF
3901#pragma GCC push_options
3902#pragma GCC target("avx512f")
3903#include <cpuid.h>
3904#include <immintrin.h>
3905static int bar(void *a) {
3906 __m512i x = *(__m512i *)a;
3907 return _mm512_test_epi64_mask(x, x);
3908}
3909int main(int argc, char *argv[])
3910{
3911 return bar(argv[0]);
3912}
3913EOF
3914 if ! compile_object "" ; then
3915 avx512f_opt="no"
3916 fi
3917else
3918 avx512f_opt="no"
3919fi
3920
f540166b
RH
3921########################################
3922# check if __[u]int128_t is usable.
3923
3924int128=no
3925cat > $TMPC << EOF
3926__int128_t a;
3927__uint128_t b;
3928int main (void) {
3929 a = a + b;
3930 b = a * b;
464e3671 3931 a = a * a;
f540166b
RH
3932 return 0;
3933}
3934EOF
3935if compile_prog "" "" ; then
3936 int128=yes
3937fi
76a347e1 3938
7ebee43e
RH
3939#########################################
3940# See if 128-bit atomic operations are supported.
3941
3942atomic128=no
3943if test "$int128" = "yes"; then
3944 cat > $TMPC << EOF
3945int main(void)
3946{
3947 unsigned __int128 x = 0, y = 0;
bceac547
TH
3948 y = __atomic_load(&x, 0);
3949 __atomic_store(&x, y, 0);
3950 __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
7ebee43e
RH
3951 return 0;
3952}
3953EOF
3954 if compile_prog "" "" ; then
3955 atomic128=yes
3956 fi
3957fi
3958
e6cd4bb5 3959cmpxchg128=no
e633a5c6 3960if test "$int128" = yes && test "$atomic128" = no; then
e6cd4bb5
RH
3961 cat > $TMPC << EOF
3962int main(void)
3963{
3964 unsigned __int128 x = 0, y = 0;
3965 __sync_val_compare_and_swap_16(&x, y, x);
3966 return 0;
3967}
3968EOF
3969 if compile_prog "" "" ; then
3970 cmpxchg128=yes
3971 fi
3972fi
3973
df79b996
RH
3974#########################################
3975# See if 64-bit atomic operations are supported.
3976# Note that without __atomic builtins, we can only
3977# assume atomic loads/stores max at pointer size.
3978
3979cat > $TMPC << EOF
3980#include <stdint.h>
3981int main(void)
3982{
3983 uint64_t x = 0, y = 0;
5fe40765
TH
3984 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
3985 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
3986 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
3987 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
3988 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
df79b996
RH
3989 return 0;
3990}
3991EOF
3992if compile_prog "" "" ; then
3993 atomic64=yes
3994fi
3995
1e6e9aca
RH
3996########################################
3997# check if getauxval is available.
3998
3999getauxval=no
4000cat > $TMPC << EOF
4001#include <sys/auxv.h>
4002int main(void) {
4003 return getauxval(AT_HWCAP) == 0;
4004}
4005EOF
4006if compile_prog "" "" ; then
4007 getauxval=yes
4008fi
4009
fd0e6053
JS
4010########################################
4011# check if ccache is interfering with
4012# semantic analysis of macros
4013
5e4dfd3d 4014unset CCACHE_CPP2
fd0e6053
JS
4015ccache_cpp2=no
4016cat > $TMPC << EOF
4017static const int Z = 1;
4018#define fn() ({ Z; })
4019#define TAUT(X) ((X) == Z)
4020#define PAREN(X, Y) (X == Y)
4021#define ID(X) (X)
4022int main(int argc, char *argv[])
4023{
4024 int x = 0, y = 0;
4025 x = ID(x);
4026 x = fn();
4027 fn();
4028 if (PAREN(x, y)) return 0;
4029 if (TAUT(Z)) return 0;
4030 return 0;
4031}
4032EOF
4033
4034if ! compile_object "-Werror"; then
4035 ccache_cpp2=yes
4036fi
4037
b553a042
JS
4038#################################################
4039# clang does not support glibc + FORTIFY_SOURCE.
4040
4041if test "$fortify_source" != "no"; then
4042 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4043 fortify_source="no";
e189091f 4044 elif test -n "$cxx" && has $cxx &&
cfcc7c14 4045 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
4046 fortify_source="no";
4047 else
4048 fortify_source="yes"
4049 fi
4050fi
4051
277abf15
JV
4052##########################################
4053# check if struct fsxattr is available via linux/fs.h
4054
4055have_fsxattr=no
4056cat > $TMPC << EOF
4057#include <linux/fs.h>
4058struct fsxattr foo;
4059int main(void) {
4060 return 0;
4061}
4062EOF
4063if compile_prog "" "" ; then
4064 have_fsxattr=yes
4065fi
4066
a40161cb
PB
4067##########################################
4068# check for usable membarrier system call
4069if test "$membarrier" = "yes"; then
4070 have_membarrier=no
4071 if test "$mingw32" = "yes" ; then
4072 have_membarrier=yes
4073 elif test "$linux" = "yes" ; then
4074 cat > $TMPC << EOF
4075 #include <linux/membarrier.h>
4076 #include <sys/syscall.h>
4077 #include <unistd.h>
4078 #include <stdlib.h>
4079 int main(void) {
4080 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
4081 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
4082 exit(0);
4083 }
4084EOF
4085 if compile_prog "" "" ; then
4086 have_membarrier=yes
4087 fi
4088 fi
4089 if test "$have_membarrier" = "no"; then
4090 feature_not_found "membarrier" "membarrier system call not available"
4091 fi
4092else
4093 # Do not enable it by default even for Mingw32, because it doesn't
4094 # work on Wine.
4095 membarrier=no
4096fi
4097
6a02c806
SH
4098##########################################
4099# check for usable AF_VSOCK environment
4100have_af_vsock=no
4101cat > $TMPC << EOF
4102#include <errno.h>
4103#include <sys/types.h>
4104#include <sys/socket.h>
4105#if !defined(AF_VSOCK)
4106# error missing AF_VSOCK flag
4107#endif
4108#include <linux/vm_sockets.h>
4109int main(void) {
4110 int sock, ret;
4111 struct sockaddr_vm svm;
4112 socklen_t len = sizeof(svm);
4113 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4114 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4115 if ((ret == -1) && (errno == ENOTCONN)) {
4116 return 0;
4117 }
4118 return -1;
4119}
4120EOF
4121if compile_prog "" "" ; then
4122 have_af_vsock=yes
4123fi
4124
f0d92b56
LM
4125##########################################
4126# check for usable AF_ALG environment
4f67366e 4127have_afalg=no
f0d92b56
LM
4128cat > $TMPC << EOF
4129#include <errno.h>
4130#include <sys/types.h>
4131#include <sys/socket.h>
4132#include <linux/if_alg.h>
4133int main(void) {
4134 int sock;
4135 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
4136 return sock;
4137}
4138EOF
4139if compile_prog "" "" ; then
4140 have_afalg=yes
4141fi
4142if test "$crypto_afalg" = "yes"
4143then
4144 if test "$have_afalg" != "yes"
4145 then
4146 error_exit "AF_ALG requested but could not be detected"
4147 fi
4148fi
4149
4150
247724cb
MAL
4151##########################################
4152# checks for sanitizers
4153
247724cb
MAL
4154have_asan=no
4155have_ubsan=no
d83414e1
MAL
4156have_asan_iface_h=no
4157have_asan_iface_fiber=no
247724cb
MAL
4158
4159if test "$sanitizers" = "yes" ; then
b9f44da2 4160 write_c_skeleton
247724cb
MAL
4161 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
4162 have_asan=yes
4163 fi
b9f44da2
MAL
4164
4165 # we could use a simple skeleton for flags checks, but this also
4166 # detect the static linking issue of ubsan, see also:
4167 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
4168 cat > $TMPC << EOF
4169#include <stdlib.h>
4170int main(void) {
4171 void *tmp = malloc(10);
f2dfe54c
LB
4172 if (tmp != NULL) {
4173 return *(int *)(tmp + 2);
4174 }
d1abf3fc 4175 return 1;
b9f44da2
MAL
4176}
4177EOF
247724cb
MAL
4178 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
4179 have_ubsan=yes
4180 fi
d83414e1
MAL
4181
4182 if check_include "sanitizer/asan_interface.h" ; then
4183 have_asan_iface_h=yes
4184 fi
4185
4186 cat > $TMPC << EOF
4187#include <sanitizer/asan_interface.h>
4188int main(void) {
4189 __sanitizer_start_switch_fiber(0, 0, 0);
4190 return 0;
4191}
4192EOF
4193 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
4194 have_asan_iface_fiber=yes
4195 fi
247724cb
MAL
4196fi
4197
adc28027
AB
4198##########################################
4199# checks for fuzzer
54c9e41d 4200if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
adc28027 4201 write_c_fuzzer_skeleton
dd016265 4202 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
64ed6f92
PB
4203 have_fuzzer=yes
4204 else
4205 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
4206 exit 1
adc28027
AB
4207 fi
4208fi
4209
0aebab04
LY
4210# Thread sanitizer is, for now, much noisier than the other sanitizers;
4211# keep it separate until that is not the case.
4212if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
4213 error_exit "TSAN is not supported with other sanitiziers."
4214fi
4215have_tsan=no
4216have_tsan_iface_fiber=no
4217if test "$tsan" = "yes" ; then
4218 write_c_skeleton
4219 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
4220 have_tsan=yes
4221 fi
4222 cat > $TMPC << EOF
4223#include <sanitizer/tsan_interface.h>
4224int main(void) {
4225 __tsan_create_fiber(0);
4226 return 0;
4227}
4228EOF
4229 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
4230 have_tsan_iface_fiber=yes
4231 fi
4232fi
4233
675b9b53
MAL
4234##########################################
4235# check for slirp
4236
4237case "$slirp" in
4d34a86b
PB
4238 auto | enabled | internal)
4239 # Simpler to always update submodule, even if not needed.
2d652f24 4240 git_submodules="${git_submodules} slirp"
675b9b53
MAL
4241 ;;
4242esac
4243
b8e0c493
JD
4244# Check for slirp smbd dupport
4245: ${smbd=${SMBD-/usr/sbin/smbd}}
4246if test "$slirp_smbd" != "no" ; then
4247 if test "$mingw32" = "yes" ; then
4248 if test "$slirp_smbd" = "yes" ; then
4249 error_exit "Host smbd not supported on this platform."
4250 fi
4251 slirp_smbd=no
4252 else
4253 slirp_smbd=yes
4254 fi
4255fi
4256
54e7aac0
AK
4257##########################################
4258# check for usable __NR_keyctl syscall
4259
4260if test "$linux" = "yes" ; then
4261
4262 have_keyring=no
4263 cat > $TMPC << EOF
4264#include <errno.h>
4265#include <asm/unistd.h>
4266#include <linux/keyctl.h>
4267#include <unistd.h>
4268int main(void) {
4269 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
4270}
4271EOF
4272 if compile_prog "" "" ; then
4273 have_keyring=yes
4274 fi
4275fi
4276if test "$secret_keyring" != "no"
4277then
b418d265 4278 if test "$have_keyring" = "yes"
54e7aac0
AK
4279 then
4280 secret_keyring=yes
4281 else
4282 if test "$secret_keyring" = "yes"
4283 then
4284 error_exit "syscall __NR_keyctl requested, \
4285but not implemented on your system"
4286 else
4287 secret_keyring=no
4288 fi
4289 fi
4290fi
4291
7e24e92a 4292##########################################
e86ecd4b
JQ
4293# End of CC checks
4294# After here, no more $cc or $ld runs
4295
d83414e1
MAL
4296write_c_skeleton
4297
1d728c39 4298if test "$gcov" = "yes" ; then
bf0e56a3 4299 :
b553a042 4300elif test "$fortify_source" = "yes" ; then
086d5f75
PB
4301 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
4302 debug=no
4303fi
086d5f75
PB
4304
4305case "$ARCH" in
4306alpha)
4307 # Ensure there's only a single GP
4308 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
4309;;
4310esac
4311
4312if test "$gprof" = "yes" ; then
4313 QEMU_CFLAGS="-p $QEMU_CFLAGS"
4314 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
4315fi
a316e378 4316
247724cb 4317if test "$have_asan" = "yes"; then
db5adeaa
PB
4318 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
4319 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
d83414e1
MAL
4320 if test "$have_asan_iface_h" = "no" ; then
4321 echo "ASAN build enabled, but ASAN header missing." \
4322 "Without code annotation, the report may be inferior."
4323 elif test "$have_asan_iface_fiber" = "no" ; then
4324 echo "ASAN build enabled, but ASAN header is too old." \
4325 "Without code annotation, the report may be inferior."
4326 fi
247724cb 4327fi
0aebab04
LY
4328if test "$have_tsan" = "yes" ; then
4329 if test "$have_tsan_iface_fiber" = "yes" ; then
4330 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
4331 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
4332 else
4333 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
4334 fi
4335elif test "$tsan" = "yes" ; then
4336 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
4337fi
247724cb 4338if test "$have_ubsan" = "yes"; then
db5adeaa
PB
4339 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
4340 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
247724cb
MAL
4341fi
4342
3efac6eb 4343##########################################
3efac6eb 4344
0aebab04
LY
4345# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
4346if test "$solaris" = "no" && test "$tsan" = "no"; then
e86ecd4b 4347 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
db5adeaa 4348 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
e86ecd4b
JQ
4349 fi
4350fi
4351
952afb71
BS
4352# Use ASLR, no-SEH and DEP if available
4353if test "$mingw32" = "yes" ; then
cb8baa77
MCA
4354 flags="--no-seh --nxcompat"
4355
4356 # Disable ASLR for debug builds to allow debugging with gdb
4357 if test "$debug" = "no" ; then
4358 flags="--dynamicbase $flags"
4359 fi
4360
4361 for flag in $flags; do
e9a3591f 4362 if ld_has $flag ; then
db5adeaa 4363 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
952afb71
BS
4364 fi
4365 done
4366fi
4367
9d6bc27b
MR
4368# Probe for guest agent support/options
4369
e8ef31a3 4370if [ "$guest_agent" != "no" ]; then
a5125905
LV
4371 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
4372 guest_agent=no
4373 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
e8ef31a3
MT
4374 guest_agent=yes
4375 elif [ "$guest_agent" != yes ]; then
4376 guest_agent=no
4377 else
4378 error_exit "Guest agent is not supported on this platform"
ca35f780 4379 fi
00c705fb 4380fi
ca35f780 4381
b846ab7c 4382# Guest agent Windows MSI package
9d6bc27b 4383
b846ab7c
PB
4384if test "$QEMU_GA_MANUFACTURER" = ""; then
4385 QEMU_GA_MANUFACTURER=QEMU
9d6bc27b 4386fi
b846ab7c
PB
4387if test "$QEMU_GA_DISTRO" = ""; then
4388 QEMU_GA_DISTRO=Linux
9d6bc27b 4389fi
b846ab7c
PB
4390if test "$QEMU_GA_VERSION" = ""; then
4391 QEMU_GA_VERSION=$(cat $source_path/VERSION)
4392fi
4393
4394QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b 4395
ca35f780
PB
4396# Mac OS X ships with a broken assembler
4397roms=
e633a5c6
EB
4398if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
4399 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
7000a12e 4400 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
e57218b6 4401 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
4402 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
4403 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
4404 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
4405 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4406 ld_i386_emulation="$emu"
4407 roms="optionrom"
4408 break
4409 fi
4410 done
ca35f780 4411fi
ca35f780 4412
2e33c3f8 4413# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
a5b2afd5 4414# or -march=z10 (which is the lowest architecture level that Clang supports)
9933c305 4415if test "$cpu" = "s390x" ; then
2e33c3f8 4416 write_c_skeleton
a5b2afd5
TH
4417 compile_prog "-march=z900" ""
4418 has_z900=$?
3af448b3 4419 if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
a5b2afd5
TH
4420 if [ $has_z900 != 0 ]; then
4421 echo "WARNING: Your compiler does not support the z900!"
4422 echo " The s390-ccw bios will only work with guest CPUs >= z10."
4423 fi
2e33c3f8 4424 roms="$roms s390-ccw"
1ef6bfc2
PMD
4425 # SLOF is required for building the s390-ccw firmware on s390x,
4426 # since it is using the libnet code from SLOF for network booting.
2d652f24 4427 git_submodules="${git_submodules} roms/SLOF"
2e33c3f8 4428 fi
9933c305
CB
4429fi
4430
11cde1c8
BD
4431# Check that the C++ compiler exists and works with the C compiler.
4432# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
4433if has $cxx; then
4434 cat > $TMPC <<EOF
4435int c_function(void);
4436int main(void) { return c_function(); }
4437EOF
4438
4439 compile_object
4440
4441 cat > $TMPCXX <<EOF
4442extern "C" {
4443 int c_function(void);
4444}
4445int c_function(void) { return 42; }
4446EOF
4447
4448 update_cxxflags
4449
5770e8af 4450 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
11cde1c8
BD
4451 # C++ compiler $cxx works ok with C compiler $cc
4452 :
4453 else
4454 echo "C++ compiler $cxx does not work with C compiler $cc"
4455 echo "Disabling C++ specific optional code"
4456 cxx=
4457 fi
4458else
4459 echo "No C++ compiler available; disabling C++ specific optional code"
4460 cxx=
4461fi
4462
7d7dbf9d
DS
4463if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
4464 exit 1
5d91a2ed 4465fi
5d91a2ed 4466
98ec69ac 4467config_host_mak="config-host.mak"
98ec69ac 4468
98ec69ac 4469echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 4470echo >> $config_host_mak
98ec69ac 4471
e6c3b0f7 4472echo all: >> $config_host_mak
cc84d63a 4473echo "GIT=$git" >> $config_host_mak
aef45d51 4474echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
7d7dbf9d 4475echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
804edf29 4476
98ec69ac 4477echo "ARCH=$ARCH" >> $config_host_mak
727e5283 4478
f8393946 4479if test "$debug_tcg" = "yes" ; then
2358a494 4480 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 4481fi
1625af87 4482if test "$strip_opt" = "yes" ; then
52ba784d 4483 echo "STRIP=${strip}" >> $config_host_mak
1625af87 4484fi
7d13299d 4485if test "$bigendian" = "yes" ; then
e2542fe2 4486 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 4487fi
67b915a5 4488if test "$mingw32" = "yes" ; then
98ec69ac 4489 echo "CONFIG_WIN32=y" >> $config_host_mak
d9840e25
TS
4490 if test "$guest_agent_with_vss" = "yes" ; then
4491 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 4492 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
4493 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4494 fi
50cbebb9 4495 if test "$guest_agent_ntddscsi" = "yes" ; then
76dc75ca 4496 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
50cbebb9 4497 fi
b846ab7c
PB
4498 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4499 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4500 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4501 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
210fa556 4502else
35f4df27 4503 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
4504fi
4505
4506if test "$linux" = "yes" ; then
4507 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 4508fi
128ab2ff 4509
83fb7adf 4510if test "$darwin" = "yes" ; then
98ec69ac 4511 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 4512fi
b29fe3ed 4513
ec530c81 4514if test "$solaris" = "yes" ; then
98ec69ac 4515 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 4516fi
179cf400
AF
4517if test "$haiku" = "yes" ; then
4518 echo "CONFIG_HAIKU=y" >> $config_host_mak
4519fi
97a847bc 4520if test "$static" = "yes" ; then
98ec69ac 4521 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 4522fi
1ba16968 4523if test "$profiler" = "yes" ; then
2358a494 4524 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 4525fi
c932ce31
PB
4526if test "$want_tools" = "yes" ; then
4527 echo "CONFIG_TOOLS=y" >> $config_host_mak
4528fi
f15bff25
PB
4529if test "$guest_agent" = "yes" ; then
4530 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
4531fi
b8e0c493
JD
4532if test "$slirp_smbd" = "yes" ; then
4533 echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
4534 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4535fi
8a16d273 4536if test "$vde" = "yes" ; then
98ec69ac 4537 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 4538 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 4539fi
58952137
VM
4540if test "$netmap" = "yes" ; then
4541 echo "CONFIG_NETMAP=y" >> $config_host_mak
4542fi
015a33bd
GA
4543if test "$l2tpv3" = "yes" ; then
4544 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4545fi
4cc600d2
PB
4546if test "$gprof" = "yes" ; then
4547 echo "CONFIG_GPROF=y" >> $config_host_mak
4548fi
2358a494 4549echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 4550for drv in $audio_drv_list; do
1ef1ec2a 4551 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
484e2cc7 4552 echo "$def=y" >> $config_host_mak
0c58ac1c 4553done
478e943f
PB
4554if test "$alsa" = "yes" ; then
4555 echo "CONFIG_ALSA=y" >> $config_host_mak
4556fi
b1149911 4557echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
478e943f
PB
4558echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
4559if test "$libpulse" = "yes" ; then
4560 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
4561fi
b1149911 4562echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
478e943f 4563echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
b1149911
FZ
4564echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
4565echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
4566echo "OSS_LIBS=$oss_libs" >> $config_host_mak
478e943f
PB
4567if test "$libjack" = "yes" ; then
4568 echo "CONFIG_LIBJACK=y" >> $config_host_mak
4569fi
2e445703 4570echo "JACK_LIBS=$jack_libs" >> $config_host_mak
d5631638 4571if test "$audio_win_int" = "yes" ; then
4572 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4573fi
b64ec4e4
FZ
4574echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4575echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
e5f05f8c
KW
4576if test "$block_drv_whitelist_tools" = "yes" ; then
4577 echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
4578fi
dce512de
CH
4579if test "$xfs" = "yes" ; then
4580 echo "CONFIG_XFS=y" >> $config_host_mak
4581fi
89138857 4582qemu_version=$(head $source_path/VERSION)
2358a494 4583echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 4584echo "SRC_PATH=$source_path" >> $config_host_mak
2b1f35b9 4585echo "TARGET_DIRS=$target_list" >> $config_host_mak
17969268 4586if test "$modules" = "yes"; then
e26110cf
FZ
4587 # $shacmd can generate a hash started with digit, which the compiler doesn't
4588 # like as an symbol. So prefix it with an underscore
89138857 4589 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
4590 echo "CONFIG_MODULES=y" >> $config_host_mak
4591fi
bd83c861
CE
4592if test "$module_upgrades" = "yes"; then
4593 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
4594fi
955727d2
CT
4595if test "$have_usbfs" = "yes" ; then
4596 echo "CONFIG_USBFS=y" >> $config_host_mak
4597fi
f876b765
MAL
4598if test "$gio" = "yes" ; then
4599 echo "CONFIG_GIO=y" >> $config_host_mak
4600 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
4601 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
5ecfb76c
PB
4602fi
4603if test "$gdbus_codegen" != "" ; then
25a97a56 4604 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
f876b765 4605fi
a1c5e949 4606echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
277abf15
JV
4607
4608# Work around a system header bug with some kernel/XFS header
4609# versions where they both try to define 'struct fsxattr':
4610# xfs headers will not try to redefine structs from linux headers
4611# if this macro is set.
4612if test "$have_fsxattr" = "yes" ; then
4613 echo "HAVE_FSXATTR=y" >> $config_host_mak
4614fi
1badb709 4615if test "$xen" = "enabled" ; then
6dbd588a 4616 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 4617 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
582ea95f
MAL
4618 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
4619 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
e37630ca 4620fi
5c6c3a6c
CH
4621if test "$linux_aio" = "yes" ; then
4622 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4623fi
5e9be92d
NB
4624if test "$vhost_scsi" = "yes" ; then
4625 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4626fi
af3bba76
PB
4627if test "$vhost_net" = "yes" ; then
4628 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
4629fi
4630if test "$vhost_net_user" = "yes" ; then
56f41de7 4631 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
03ce5744 4632fi
108a6481
CL
4633if test "$vhost_net_vdpa" = "yes" ; then
4634 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
4635fi
042cea27
GA
4636if test "$vhost_crypto" = "yes" ; then
4637 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
4638fi
fc0b9b0e
SH
4639if test "$vhost_vsock" = "yes" ; then
4640 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5fe97d88
SG
4641 if test "$vhost_user" = "yes" ; then
4642 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
4643 fi
fc0b9b0e 4644fi
299e6f19
PB
4645if test "$vhost_kernel" = "yes" ; then
4646 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
4647fi
e6a74868
MAL
4648if test "$vhost_user" = "yes" ; then
4649 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
4650fi
108a6481
CL
4651if test "$vhost_vdpa" = "yes" ; then
4652 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
4653fi
98fc1ada
DDAG
4654if test "$vhost_user_fs" = "yes" ; then
4655 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
4656fi
bf9298b9 4657if test "$iovec" = "yes" ; then
2358a494 4658 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 4659fi
a40161cb
PB
4660if test "$membarrier" = "yes" ; then
4661 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
4662fi
e5b46549
RH
4663if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
4664 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4665fi
58d3f3ff
GH
4666
4667if test "$spice_protocol" = "yes" ; then
4668 echo "CONFIG_SPICE_PROTOCOL=y" >> $config_host_mak
4669 echo "SPICE_PROTOCOL_CFLAGS=$spice_protocol_cflags" >> $config_host_mak
4670fi
cd4ec0b4
GH
4671if test "$spice" = "yes" ; then
4672 echo "CONFIG_SPICE=y" >> $config_host_mak
58d3f3ff 4673 echo "SPICE_CFLAGS=$spice_cflags $spice_protocol_cflags" >> $config_host_mak
2634733c 4674 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
cd4ec0b4 4675fi
36707144 4676
da076ffe
GH
4677if test "$opengl" = "yes" ; then
4678 echo "CONFIG_OPENGL=y" >> $config_host_mak
de2d3005 4679 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
da076ffe 4680 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
20ff075b
MW
4681fi
4682
d52c454a
MAL
4683if test "$gbm" = "yes" ; then
4684 echo "CONFIG_GBM=y" >> $config_host_mak
4685 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
4686 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
4687fi
4688
4689
99f2dbd3
LL
4690if test "$avx2_opt" = "yes" ; then
4691 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
4692fi
4693
6b8cd447
RH
4694if test "$avx512f_opt" = "yes" ; then
4695 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
4696fi
4697
83fb7adf 4698# XXX: suppress that
7d3505c5 4699if [ "$bsd" = "yes" ] ; then
2358a494 4700 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
4701fi
4702
3556c233
PB
4703if test "$qom_cast_debug" = "yes" ; then
4704 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4705fi
d0e2fce5 4706
7c2acc70 4707echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
4708if test "$coroutine_pool" = "yes" ; then
4709 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4710else
4711 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4712fi
20ff6c80 4713
7d992e4d
PL
4714if test "$debug_stack_usage" = "yes" ; then
4715 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
4716fi
4717
f0d92b56
LM
4718if test "$crypto_afalg" = "yes" ; then
4719 echo "CONFIG_AF_ALG=y" >> $config_host_mak
4720fi
4721
d83414e1
MAL
4722if test "$have_asan_iface_fiber" = "yes" ; then
4723 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
4724fi
4725
0aebab04
LY
4726if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
4727 echo "CONFIG_TSAN=y" >> $config_host_mak
4728fi
4729
76a347e1
RH
4730if test "$cpuid_h" = "yes" ; then
4731 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4732fi
4733
f540166b
RH
4734if test "$int128" = "yes" ; then
4735 echo "CONFIG_INT128=y" >> $config_host_mak
4736fi
4737
7ebee43e
RH
4738if test "$atomic128" = "yes" ; then
4739 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
4740fi
4741
e6cd4bb5
RH
4742if test "$cmpxchg128" = "yes" ; then
4743 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
4744fi
4745
df79b996
RH
4746if test "$atomic64" = "yes" ; then
4747 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
4748fi
4749
1e6e9aca
RH
4750if test "$getauxval" = "yes" ; then
4751 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4752fi
4753
b10d49d7 4754if test "$libssh" = "yes" ; then
484e2cc7 4755 echo "CONFIG_LIBSSH=y" >> $config_host_mak
b10d49d7
PT
4756 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
4757 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
0a12ec87
RJ
4758fi
4759
ed1701c6
DDAG
4760if test "$live_block_migration" = "yes" ; then
4761 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
4762fi
4763
3b8acc11 4764if test "$tpm" = "yes"; then
3cae16db 4765 echo 'CONFIG_TPM=y' >> $config_host_mak
3b8acc11
PB
4766fi
4767
5b808275
LV
4768echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
4769if have_backend "nop"; then
6d8a764e 4770 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 4771fi
5b808275 4772if have_backend "simple"; then
6d8a764e
LV
4773 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
4774 # Set the appropriate trace file.
953ffe0f 4775 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 4776fi
ed7f5f1d
PB
4777if have_backend "log"; then
4778 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 4779fi
5b808275 4780if have_backend "ust"; then
6d8a764e 4781 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
a81df1b6 4782 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6d8a764e 4783fi
5b808275 4784if have_backend "dtrace"; then
6d8a764e
LV
4785 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
4786 if test "$trace_backend_stap" = "yes" ; then
4787 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
4788 fi
c276b17d 4789fi
5b808275 4790if have_backend "ftrace"; then
781e9545
ET
4791 if test "$linux" = "yes" ; then
4792 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 4793 else
21684af0 4794 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
4795 fi
4796fi
0a852417
PD
4797if have_backend "syslog"; then
4798 if test "$posix_syslog" = "yes" ; then
4799 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
4800 else
4801 feature_not_found "syslog(trace backend)" "syslog not available"
4802 fi
4803fi
9410b56c
PS
4804echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
4805
2da776db
MH
4806if test "$rdma" = "yes" ; then
4807 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 4808 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
4809fi
4810
21ab34c9
MA
4811if test "$pvrdma" = "yes" ; then
4812 echo "CONFIG_PVRDMA=y" >> $config_host_mak
4813fi
4814
a6b1d4c0
CX
4815if test "$replication" = "yes" ; then
4816 echo "CONFIG_REPLICATION=y" >> $config_host_mak
4817fi
4818
6a02c806
SH
4819if test "$have_af_vsock" = "yes" ; then
4820 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
4821fi
4822
ba59fb77
PB
4823if test "$debug_mutex" = "yes" ; then
4824 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
4825fi
e0580342 4826
5c312079
DDAG
4827# Hold two types of flag:
4828# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
4829# a thread we have a handle to
479a5747 4830# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
5c312079 4831# platform
479a5747
RB
4832if test "$pthread_setname_np_w_tid" = "yes" ; then
4833 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
4834 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
4835elif test "$pthread_setname_np_wo_tid" = "yes" ; then
5c312079 4836 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
479a5747 4837 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
5c312079
DDAG
4838fi
4839
2f740136
JC
4840if test "$bochs" = "yes" ; then
4841 echo "CONFIG_BOCHS=y" >> $config_host_mak
4842fi
4843if test "$cloop" = "yes" ; then
4844 echo "CONFIG_CLOOP=y" >> $config_host_mak
4845fi
4846if test "$dmg" = "yes" ; then
4847 echo "CONFIG_DMG=y" >> $config_host_mak
4848fi
4849if test "$qcow1" = "yes" ; then
4850 echo "CONFIG_QCOW1=y" >> $config_host_mak
4851fi
4852if test "$vdi" = "yes" ; then
4853 echo "CONFIG_VDI=y" >> $config_host_mak
4854fi
4855if test "$vvfat" = "yes" ; then
4856 echo "CONFIG_VVFAT=y" >> $config_host_mak
4857fi
4858if test "$qed" = "yes" ; then
4859 echo "CONFIG_QED=y" >> $config_host_mak
4860fi
4861if test "$parallels" = "yes" ; then
4862 echo "CONFIG_PARALLELS=y" >> $config_host_mak
4863fi
195588cc
DC
4864if test "$have_mlockall" = "yes" ; then
4865 echo "HAVE_MLOCKALL=y" >> $config_host_mak
4866fi
adc28027 4867if test "$fuzzing" = "yes" ; then
54c9e41d
AB
4868 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
4869 # needed CFLAGS have already been provided
4870 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
efce01bc
AB
4871 # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
4872 # compiled code.
54c9e41d 4873 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
efce01bc
AB
4874 # To build non-fuzzer binaries with --enable-fuzzing, link everything with
4875 # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind
4876 # the fuzzer-related callbacks added by instrumentation.
4877 QEMU_LDFLAGS="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link"
4878 # For the actual fuzzer binaries, we need to link against the libfuzzer
4879 # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson
4880 # rule for the fuzzer adds these to the link_args. They need to be
4881 # configurable, to support OSS-Fuzz
54c9e41d
AB
4882 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
4883 else
4884 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
4885 fi
adc28027 4886fi
2f740136 4887
40e8c6f4
AB
4888if test "$plugins" = "yes" ; then
4889 echo "CONFIG_PLUGIN=y" >> $config_host_mak
26fffe29
EC
4890 # Copy the export object list to the build dir
4891 if test "$ld_dynamic_list" = "yes" ; then
4892 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
4893 ld_symbols=qemu-plugins-ld.symbols
4894 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
4895 elif test "$ld_exported_symbols_list" = "yes" ; then
4896 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
4897 ld64_symbols=qemu-plugins-ld64.symbols
4898 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
4899 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
4900 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
4901 else
4902 error_exit \
4903 "If \$plugins=yes, either \$ld_dynamic_list or " \
4904 "\$ld_exported_symbols_list should have been set to 'yes'."
4905 fi
40e8c6f4
AB
4906fi
4907
b1863ccc
AB
4908if test -n "$gdb_bin"; then
4909 gdb_version=$($gdb_bin --version | head -n 1)
d6a66c81 4910 if version_ge ${gdb_version##* } 9.1; then
b1863ccc
AB
4911 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
4912 fi
f48e590a
AB
4913fi
4914
54e7aac0
AK
4915if test "$secret_keyring" = "yes" ; then
4916 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
4917fi
4918
98ec69ac 4919echo "ROMS=$roms" >> $config_host_mak
804edf29 4920echo "MAKE=$make" >> $config_host_mak
c886edfb 4921echo "PYTHON=$python" >> $config_host_mak
39d87c8c 4922echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
a5665051 4923echo "MESON=$meson" >> $config_host_mak
09e93326 4924echo "NINJA=$ninja" >> $config_host_mak
804edf29 4925echo "CC=$cc" >> $config_host_mak
433de74c 4926echo "HOST_CC=$host_cc" >> $config_host_mak
a31a8642 4927if $iasl -h > /dev/null 2>&1; then
859aef02 4928 echo "CONFIG_IASL=$iasl" >> $config_host_mak
a31a8642 4929fi
804edf29 4930echo "AR=$ar" >> $config_host_mak
cdbd727c 4931echo "AS=$as" >> $config_host_mak
5f6f0e27 4932echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 4933echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
4934echo "OBJCOPY=$objcopy" >> $config_host_mak
4935echo "LD=$ld" >> $config_host_mak
46eef33b 4936echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 4937echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 4938echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
a81df1b6
PB
4939echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4940echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
8a99e9a3 4941echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
e57218b6 4942echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
804edf29 4943echo "EXESUF=$EXESUF" >> $config_host_mak
484e2cc7 4944echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
f15bff25 4945echo "LIBS_QGA=$libs_qga" >> $config_host_mak
1d728c39
BS
4946if test "$gcov" = "yes" ; then
4947 echo "CONFIG_GCOV=y" >> $config_host_mak
1d728c39 4948fi
804edf29 4949
adc28027
AB
4950if test "$fuzzing" != "no"; then
4951 echo "CONFIG_FUZZ=y" >> $config_host_mak
adc28027 4952fi
54c9e41d 4953echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
3efac6eb 4954
b767d257
MMG
4955if test "$rng_none" = "yes"; then
4956 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
4957fi
4958
6efd7517
PM
4959# use included Linux headers
4960if test "$linux" = "yes" ; then
a307beb6 4961 mkdir -p linux-headers
6efd7517 4962 case "$cpu" in
c72b26ec 4963 i386|x86_64|x32)
08312a63 4964 linux_arch=x86
6efd7517 4965 ;;
f8378acc 4966 ppc|ppc64|ppc64le)
08312a63 4967 linux_arch=powerpc
6efd7517
PM
4968 ;;
4969 s390x)
08312a63
PM
4970 linux_arch=s390
4971 ;;
1f080313
CF
4972 aarch64)
4973 linux_arch=arm64
4974 ;;
222e7d11
SL
4975 mips64)
4976 linux_arch=mips
4977 ;;
08312a63
PM
4978 *)
4979 # For most CPUs the kernel architecture name and QEMU CPU name match.
4980 linux_arch="$cpu"
6efd7517
PM
4981 ;;
4982 esac
08312a63
PM
4983 # For non-KVM architectures we will not have asm headers
4984 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
4985 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
4986 fi
6efd7517
PM
4987fi
4988
1d14ffa9 4989for target in $target_list; do
fdb75aef
PB
4990 target_dir="$target"
4991 target_name=$(echo $target | cut -d '-' -f 1)
4992 mkdir -p $target_dir
4993 case $target in
4994 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
4995 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
4996 esac
4997done
7d13299d 4998
765686d6 4999echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
fdb75aef
PB
5000if test "$default_targets" = "yes"; then
5001 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
5002fi
a540f158 5003
a99d57bb
WG
5004if test "$numa" = "yes"; then
5005 echo "CONFIG_NUMA=y" >> $config_host_mak
ab318051 5006 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
a99d57bb
WG
5007fi
5008
fd0e6053
JS
5009if test "$ccache_cpp2" = "yes"; then
5010 echo "export CCACHE_CPP2=y" >> $config_host_mak
5011fi
5012
1e4f6065
DB
5013if test "$safe_stack" = "yes"; then
5014 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
5015fi
5016
e29e5c6e
PM
5017# If we're using a separate build tree, set it up now.
5018# DIRS are directories which we simply mkdir in the build tree;
5019# LINKS are things to symlink back into the source tree
5020# (these can be both files and directories).
5021# Caution: do not add files or directories here using wildcards. This
5022# will result in problems later if a new file matching the wildcard is
5023# added to the source tree -- nothing will cause configure to be rerun
5024# so the build tree will be missing the link back to the new file, and
5025# tests might fail. Prefer to keep the relevant files in their own
5026# directory and symlink the directory instead.
09db9b9d
GH
5027# UNLINK is used to remove symlinks from older development versions
5028# that might get into the way when doing "git update" without doing
5029# a "make distclean" in between.
9d49bcf6 5030DIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
1cf4323e 5031DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
b855f8d1 5032DIRS="$DIRS docs docs/interop fsdev scsi"
744a928c 5033DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8db2a4fd 5034DIRS="$DIRS roms/seabios"
c17a386b 5035DIRS="$DIRS contrib/plugins/"
2038f8c8 5036LINKS="Makefile"
3941996b 5037LINKS="$LINKS tests/tcg/Makefile.target"
ddcf607f 5038LINKS="$LINKS pc-bios/optionrom/Makefile"
e29e5c6e 5039LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8db2a4fd 5040LINKS="$LINKS roms/seabios/Makefile"
e29e5c6e
PM
5041LINKS="$LINKS pc-bios/qemu-icon.bmp"
5042LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
39950353
PM
5043LINKS="$LINKS tests/acceptance tests/data"
5044LINKS="$LINKS tests/qemu-iotests/check"
8f8fd9ed 5045LINKS="$LINKS python"
c17a386b 5046LINKS="$LINKS contrib/plugins/Makefile "
09db9b9d 5047UNLINK="pc-bios/keymaps"
753d11f2
RH
5048for bios_file in \
5049 $source_path/pc-bios/*.bin \
3a631b8e 5050 $source_path/pc-bios/*.elf \
225a9ab8 5051 $source_path/pc-bios/*.lid \
753d11f2
RH
5052 $source_path/pc-bios/*.rom \
5053 $source_path/pc-bios/*.dtb \
e89e33e1 5054 $source_path/pc-bios/*.img \
753d11f2 5055 $source_path/pc-bios/openbios-* \
4e73c781 5056 $source_path/pc-bios/u-boot.* \
26ce90fd 5057 $source_path/pc-bios/edk2-*.fd.bz2 \
753d11f2
RH
5058 $source_path/pc-bios/palcode-*
5059do
e29e5c6e 5060 LINKS="$LINKS pc-bios/$(basename $bios_file)"
d1807a4f
PB
5061done
5062mkdir -p $DIRS
e29e5c6e 5063for f in $LINKS ; do
0f4d8894 5064 if [ -e "$source_path/$f" ]; then
f9245e10
PM
5065 symlink "$source_path/$f" "$f"
5066 fi
d1807a4f 5067done
09db9b9d
GH
5068for f in $UNLINK ; do
5069 if [ -L "$f" ]; then
5070 rm -f "$f"
5071 fi
5072done
1ad2134f 5073
2038f8c8
PB
5074(for i in $cross_cc_vars; do
5075 export $i
5076done
de6d7e6b 5077export target_list source_path use_containers ARCH
2038f8c8
PB
5078$source_path/tests/tcg/configure.sh)
5079
c34ebfdc 5080# temporary config to build submodules
8db2a4fd 5081for rom in seabios; do
c34ebfdc 5082 config_mak=roms/$rom/config.mak
37116c89 5083 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 5084 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 5085 echo "AS=$as" >> $config_mak
5f6f0e27 5086 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
5087 echo "CC=$cc" >> $config_mak
5088 echo "BCC=bcc" >> $config_mak
3dd46c78 5089 echo "CPP=$cpp" >> $config_mak
c34ebfdc 5090 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 5091 echo "IASL=$iasl" >> $config_mak
c34ebfdc 5092 echo "LD=$ld" >> $config_mak
9f81aeb5 5093 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
5094done
5095
a5665051 5096if test "$skip_meson" = no; then
d77e90fa
PB
5097 cross="config-meson.cross.new"
5098 meson_quote() {
47b30835 5099 echo "'$(echo $* | sed "s/ /','/g")'"
d77e90fa
PB
5100 }
5101
5102 echo "# Automatically generated by configure - do not modify" > $cross
5103 echo "[properties]" >> $cross
d1d5e9ee
AB
5104
5105 # unroll any custom device configs
11bdcfcd
AB
5106 for a in $device_archs; do
5107 eval "c=\$devices_${a}"
5108 echo "${a}-softmmu = '$c'" >> $cross
5109 done
d1d5e9ee 5110
d77e90fa
PB
5111 test -z "$cxx" && echo "link_language = 'c'" >> $cross
5112 echo "[built-in options]" >> $cross
5113 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
5114 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
5115 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
5116 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
5117 echo "[binaries]" >> $cross
5118 echo "c = [$(meson_quote $cc)]" >> $cross
5119 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
5120 test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross
5121 echo "ar = [$(meson_quote $ar)]" >> $cross
5122 echo "nm = [$(meson_quote $nm)]" >> $cross
5123 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
5124 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
5125 if has $sdl2_config; then
5126 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
5127 fi
5128 echo "strip = [$(meson_quote $strip)]" >> $cross
5129 echo "windres = [$(meson_quote $windres)]" >> $cross
5130 if test "$cross_compile" = "yes"; then
fc929892 5131 cross_arg="--cross-file config-meson.cross"
fc929892
MAL
5132 echo "[host_machine]" >> $cross
5133 if test "$mingw32" = "yes" ; then
5134 echo "system = 'windows'" >> $cross
fc929892 5135 fi
853b4baf
TH
5136 if test "$linux" = "yes" ; then
5137 echo "system = 'linux'" >> $cross
5138 fi
0ca321ea
JD
5139 if test "$darwin" = "yes" ; then
5140 echo "system = 'darwin'" >> $cross
5141 fi
fc929892 5142 case "$ARCH" in
f6bca9df 5143 i386)
fc929892
MAL
5144 echo "cpu_family = 'x86'" >> $cross
5145 ;;
f8bb7e1c 5146 x86_64|x32)
f6bca9df
JD
5147 echo "cpu_family = 'x86_64'" >> $cross
5148 ;;
fc929892
MAL
5149 ppc64le)
5150 echo "cpu_family = 'ppc64'" >> $cross
5151 ;;
5152 *)
5153 echo "cpu_family = '$ARCH'" >> $cross
5154 ;;
5155 esac
5156 echo "cpu = '$cpu'" >> $cross
5157 if test "$bigendian" = "yes" ; then
5158 echo "endian = 'big'" >> $cross
5159 else
5160 echo "endian = 'little'" >> $cross
5161 fi
d77e90fa 5162 else
fc929892 5163 cross_arg="--native-file config-meson.cross"
d77e90fa
PB
5164 fi
5165 mv $cross config-meson.cross
fc929892 5166
d77e90fa
PB
5167 rm -rf meson-private meson-info meson-logs
5168 unset staticpic
5169 if ! version_ge "$($meson --version)" 0.56.0; then
5170 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
5171 fi
5172 NINJA=$ninja $meson setup \
d17f305a
PB
5173 --prefix "$prefix" \
5174 --libdir "$libdir" \
5175 --libexecdir "$libexecdir" \
5176 --bindir "$bindir" \
5177 --includedir "$includedir" \
5178 --datadir "$datadir" \
5179 --mandir "$mandir" \
5180 --sysconfdir "$sysconfdir" \
16bf7a33 5181 --localedir "$localedir" \
d17f305a
PB
5182 --localstatedir "$local_statedir" \
5183 -Ddocdir="$docdir" \
16bf7a33 5184 -Dqemu_firmwarepath="$firmwarepath" \
73f3aa37 5185 -Dqemu_suffix="$qemu_suffix" \
a5665051
PB
5186 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
5187 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
5188 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
5189 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
da6d48b9 5190 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
a5cb7c5a 5191 ${staticpic:+-Db_staticpic=$staticpic} \
bf0e56a3 5192 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
9e62ba48 5193 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \
5f8937d6 5194 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
74a414a1 5195 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
5f8937d6 5196 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
1b695471 5197 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
c23d7b4e 5198 -Dlibusb=$libusb -Dsmartcard=$smartcard -Dusb_redir=$usb_redir -Dvte=$vte \
5f8937d6 5199 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
cece116c 5200 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
8c6d4ff4 5201 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
9db405a3 5202 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
30045c05 5203 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
c5b36c25 5204 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse -Dlibxml2=$libxml2 \
53c22b68 5205 -Dlibdaxctl=$libdaxctl -Dlibpmem=$libpmem -Dlinux_io_uring=$linux_io_uring \
05e391ae 5206 -Dgnutls=$gnutls -Dnettle=$nettle -Dgcrypt=$gcrypt -Dauth_pam=$auth_pam \
727c8bb8 5207 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
587d59d6 5208 -Dattr=$attr -Ddefault_devices=$default_devices -Dvirglrenderer=$virglrenderer \
c8d5450b 5209 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
106ad1f9 5210 -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
46627f41 5211 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
332008e0 5212 $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
c6fbea47 5213 -Dtcg_interpreter=$tcg_interpreter \
fc929892 5214 $cross_arg \
a5665051
PB
5215 "$PWD" "$source_path"
5216
d77e90fa
PB
5217 if test "$?" -ne 0 ; then
5218 error_exit "meson setup failed"
5219 fi
699d3884
PB
5220else
5221 if test -f meson-private/cmd_line.txt; then
5222 # Adjust old command line options whose type was changed
5223 # Avoids having to use "setup --wipe" when Meson is upgraded
5224 perl -i -ne '
5225 s/^gettext = true$/gettext = auto/;
5226 s/^gettext = false$/gettext = disabled/;
5227 print;' meson-private/cmd_line.txt
5228 fi
a5665051
PB
5229fi
5230
2d838d9b
AB
5231if test -n "${deprecated_features}"; then
5232 echo "Warning, deprecated features enabled."
5233 echo "Please see docs/system/deprecated.rst"
5234 echo " features: ${deprecated_features}"
5235fi
5236
e0447a83
TH
5237# Create list of config switches that should be poisoned in common code...
5238# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
54b0306e
TH
5239target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
5240if test -n "$target_configs_h" ; then
5241 sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
5242 -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
5243 $target_configs_h | sort -u > config-poison.h
5244else
5245 :> config-poison.h
5246fi
e0447a83 5247
dc655404
MT
5248# Save the configure command line for later reuse.
5249cat <<EOD >config.status
5250#!/bin/sh
5251# Generated by configure.
5252# Run this file to recreate the current configuration.
5253# Compiler output produced by configure, useful for debugging
5254# configure, is in config.log if it exists.
5255EOD
e811da7f
DB
5256
5257preserve_env() {
5258 envname=$1
5259
5260 eval envval=\$$envname
5261
5262 if test -n "$envval"
5263 then
5264 echo "$envname='$envval'" >> config.status
5265 echo "export $envname" >> config.status
5266 else
5267 echo "unset $envname" >> config.status
5268 fi
5269}
5270
5271# Preserve various env variables that influence what
5272# features/build target configure will detect
5273preserve_env AR
5274preserve_env AS
5275preserve_env CC
5276preserve_env CPP
5277preserve_env CXX
5278preserve_env INSTALL
5279preserve_env LD
5280preserve_env LD_LIBRARY_PATH
5281preserve_env LIBTOOL
5282preserve_env MAKE
5283preserve_env NM
5284preserve_env OBJCOPY
5285preserve_env PATH
5286preserve_env PKG_CONFIG
5287preserve_env PKG_CONFIG_LIBDIR
5288preserve_env PKG_CONFIG_PATH
5289preserve_env PYTHON
e811da7f
DB
5290preserve_env SDL2_CONFIG
5291preserve_env SMBD
5292preserve_env STRIP
5293preserve_env WINDRES
5294
dc655404 5295printf "exec" >>config.status
a5665051 5296for i in "$0" "$@"; do
835af899 5297 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
a5665051 5298done
cf7cc929 5299echo ' "$@"' >>config.status
dc655404
MT
5300chmod +x config.status
5301
8cd05ab6 5302rm -r "$TMPDIR1"