#
# Unset some variables known to interfere with behavior of common tools,
-# just as autoconf does.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
+# just as autoconf does. Unlike autoconf, we assume that unset exists.
+unset CLICOLOR_FORCE GREP_OPTIONS BASH_ENV ENV MAIL MAILPATH CDPATH
# Don't allow CCACHE, if present, to use cached results of compile tests!
export CCACHE_RECACHE=yes
TMPB="qemu-conf"
TMPC="${TMPDIR1}/${TMPB}.c"
TMPO="${TMPDIR1}/${TMPB}.o"
-TMPM="${TMPDIR1}/${TMPB}.m"
TMPE="${TMPDIR1}/${TMPB}.exe"
rm -f config.log
$compiler "$@" >> config.log 2>&1 || return $?
}
-do_compiler_werror() {
- # Run the compiler, capturing its output to the log. First argument
- # is compiler binary to execute.
- compiler="$1"
- shift
- if test -n "$BASH_VERSION"; then eval '
- echo >>config.log "
-funcs: ${FUNCNAME[*]}
-lines: ${BASH_LINENO[*]}"
- '; fi
- echo $compiler "$@" >> config.log
- $compiler "$@" >> config.log 2>&1 || return $?
- # Test passed. If this is an --enable-werror build, rerun
- # the test with -Werror and bail out if it fails. This
- # makes warning-generating-errors in configure test code
- # obvious to developers.
- if test "$werror" != "yes"; then
- return 0
- fi
- # Don't bother rerunning the compile if we were already using -Werror
- case "$*" in
- *-Werror*)
- return 0
- ;;
- esac
- echo $compiler -Werror "$@" >> config.log
- $compiler -Werror "$@" >> config.log 2>&1 && return $?
- error_exit "configure test passed without -Werror but failed with -Werror." \
- "This is probably a bug in the configure script. The failing command" \
- "will be at the bottom of config.log." \
- "You can run configure with --disable-werror to bypass this check."
-}
-
do_cc() {
- do_compiler_werror "$cc" $CPU_CFLAGS "$@"
-}
-
-do_objc() {
- do_compiler_werror "$objcc" $CPU_CFLAGS "$@"
-}
-
-# Append $2 to the variable named $1, with space separation
-add_to() {
- eval $1=\${$1:+\"\$$1 \"}\$2
+ do_compiler "$cc" $CPU_CFLAGS "$@"
}
compile_object() {
local_cflags="$1"
- do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
+ do_cc $CFLAGS $EXTRA_CFLAGS $local_cflags -c -o $TMPO $TMPC
}
compile_prog() {
local_cflags="$1"
local_ldflags="$2"
- do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
- $LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $local_ldflags
+ do_cc $CFLAGS $EXTRA_CFLAGS $local_cflags -o $TMPE $TMPC \
+ $LDFLAGS $EXTRA_LDFLAGS $local_ldflags
}
# symbolically link $1 to $2. Portable version of "ln -sf".
error_exit "main directory cannot contain spaces nor colons"
fi
+# parse CC options first; some compiler tests are used to establish
+# some defaults, based on the host environment
+
# default parameters
cpu=""
-static="no"
cross_compile="no"
cross_prefix=""
host_cc="cc"
-use_containers="yes"
-gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
-gdb_arches=""
-
-if test -e "$source_path/.git"
-then
- git_submodules_action="update"
-else
- git_submodules_action="ignore"
-fi
-
-git_submodules="ui/keycodemapdb"
-git="git"
-
-# Don't accept a target_list environment variable.
-unset target_list
-unset target_list_exclude
+EXTRA_CFLAGS=""
+EXTRA_CXXFLAGS=""
+EXTRA_OBJCFLAGS=""
+EXTRA_LDFLAGS=""
# Default value for a variable defining feature "foo".
# * foo="no" feature will only be used if --enable-foo arg is given
# Always add --enable-foo and --disable-foo command line args.
# Distributions want to ensure that several features are compiled in, and it
# is impossible without a --enable-foo that exits if a feature is not found.
-
default_feature=""
-# parse CC options second
-for opt do
- optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
- case "$opt" in
- --without-default-features)
- default_feature="no"
- ;;
- esac
-done
-
-EXTRA_CFLAGS=""
-EXTRA_CXXFLAGS=""
-EXTRA_OBJCFLAGS=""
-EXTRA_LDFLAGS=""
-
-debug_tcg="no"
-docs="auto"
-EXESUF=""
-prefix="/usr/local"
-qemu_suffix="qemu"
-softmmu="yes"
-linux_user=""
-bsd_user=""
-pie=""
-plugins="$default_feature"
-ninja=""
-bindir="bin"
-skip_meson=no
-vfio_user_server="disabled"
-
-# The following Meson options are handled manually (still they
-# are included in the automatically generated help message)
-
-# 1. Track which submodules are needed
-fdt="auto"
-# 2. Automatically enable/disable other options
-tcg="auto"
-cfi="false"
-
-# parse CC options second
for opt do
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
case "$opt" in
--cross-prefix-*) cc_arch=${opt#--cross-prefix-}; cc_arch=${cc_arch%%=*}
eval "cross_prefix_${cc_arch}=\$optarg"
;;
+ --without-default-features) default_feature="no"
+ ;;
esac
done
+
+if test -e "$source_path/.git"
+then
+ git_submodules_action="update"
+else
+ git_submodules_action="ignore"
+fi
+
+git_submodules="subprojects/keycodemapdb"
+git="git"
+debug_tcg="no"
+docs="auto"
+EXESUF=""
+prefix="/usr/local"
+qemu_suffix="qemu"
+softmmu="yes"
+linux_user=""
+bsd_user=""
+plugins="$default_feature"
+ninja=""
+python=
+pypi="enabled"
+bindir="bin"
+skip_meson=no
+vfio_user_server="disabled"
+use_containers="yes"
+gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
+gdb_arches=""
+werror=""
+
+# Don't accept a target_list environment variable.
+unset target_list
+unset target_list_exclude
+
+# The following Meson options are handled manually (still they
+# are included in the automatically generated help message)
+
+# 1. Track which submodules are needed
+fdt="auto"
+
+# 2. Automatically enable/disable other options
+tcg="auto"
+cfi="false"
+
+# 3. Need to check for -static-pie before Meson runs. Also,
+# Meson has PIE as a boolean rather than enabled/disabled/auto.
+pie=""
+static="no"
+
# Preferred compiler:
# ${CC} (if set)
# ${cross_prefix}gcc (if cross-prefix specified)
pkg_config="${PKG_CONFIG-${cross_prefix}pkg-config}"
sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
-# default flags for all hosts
-# We use -fwrapv to tell the compiler that we require a C dialect where
-# left shift of signed integers is well defined and has the expected
-# 2s-complement style results. (Both clang and gcc agree that it
-# provides these semantics.)
-QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv"
-QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
-
-# Flags that are needed during configure but later taken care of by Meson
-CONFIGURE_CFLAGS="-std=gnu11 -Wall"
-CONFIGURE_LDFLAGS=
-
-
check_define() {
cat > $TMPC <<EOF
#if !defined($1)
;;
freebsd)
bsd="yes"
- make="${MAKE-gmake}"
# needed for kinfo_getvmmap(3) in libutil.h
;;
dragonfly)
bsd="yes"
- make="${MAKE-gmake}"
;;
netbsd)
bsd="yes"
- make="${MAKE-gmake}"
;;
openbsd)
bsd="yes"
- make="${MAKE-gmake}"
;;
darwin)
bsd="yes"
darwin="yes"
- # Disable attempts to use ObjectiveC features in os/object.h since they
- # won't work when we're compiling with gcc as a C compiler.
- QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
;;
sunos)
solaris="yes"
- make="${MAKE-gmake}"
-# needed for CMSG_ macros in sys/socket.h
- QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
-# needed for TIOCWIN* defines in termios.h
- QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
;;
haiku)
pie="no"
- QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
;;
linux)
linux="yes"
CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;;
esac
-: ${make=${MAKE-make}}
-
-
check_py_version() {
# We require python >= 3.7.
# NB: a True python conditional creates a non-zero return code (Failure)
"$1" -c 'import sys; sys.exit(sys.version_info < (3,7))'
}
-python=
-pypi="enabled"
first_python=
if test -z "${PYTHON}"; then
# A bare 'python' is traditionally python 2.x, but some distros
if test "$mingw32" = "yes" ; then
EXESUF=".exe"
- # MinGW needs -mthreads for TLS and macro _MT.
- CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
prefix="/qemu"
bindir=""
qemu_suffix=""
fi
-werror=""
-
meson_option_build_array() {
printf '['
(if test "$targetos" = windows; then
;;
--objcc=*)
;;
- --make=*) make="$optarg"
+ --make=*)
;;
--install=*)
;;
;;
--cross-prefix-*)
;;
- --enable-debug-info) meson_option_add -Ddebug=true
- ;;
- --disable-debug-info) meson_option_add -Ddebug=false
- ;;
--enable-docs) docs=enabled
;;
--disable-docs) docs=disabled
fi
;;
ignore)
- if ! test -f "$source_path/ui/keycodemapdb/README"
+ if ! test -f "$source_path/subprojects/keycodemapdb/README"
then
echo
echo "ERROR: missing GIT submodules"
--cross-cc-ARCH=CC use compiler when building ARCH guest test cases
--cross-cc-cflags-ARCH= use compiler flags when building ARCH guest tests
--cross-prefix-ARCH=PREFIX cross compiler prefix when building ARCH guest test cases
- --make=MAKE use specified make [$make]
--python=PYTHON use specified python [$python]
--ninja=NINJA use specified ninja [$ninja]
--smbd=SMBD use specified smbd [$smbd]
bsd-user all BSD usermode emulation targets
pie Position Independent Executables
debug-tcg TCG debugging (default is disabled)
- debug-info debugging information
NOTE: The object files are built at the place where configure is launched
EOF
fi
fi
-if ! has "$make"
-then
- error_exit "GNU make ($make) not found"
-fi
-
if ! check_py_version "$python"; then
error_exit "Cannot use '$python', Python >= 3.7 is required." \
"Use --python=/path/to/python to specify a supported Python." \
fi
fi
-# Check that the C compiler works. Doing this here before testing
-# the host CPU ensures that we had a valid CC to autodetect the
-# $cpu var (and we should bail right here if that's not the case).
-# It also allows the help message to be printed without a CC.
-write_c_skeleton;
-if compile_object ; then
- : C compiler works ok
-else
- error_exit "\"$cc\" either does not exist or does not work"
-fi
-if ! compile_prog ; then
- error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
-fi
-
# Consult white-list to determine whether to enable werror
# by default. Only enable by default for git builds
if test -z "$werror" ; then
error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
fi
-# Check whether the compiler matches our minimum requirements:
-cat > $TMPC << EOF
-#if defined(__clang_major__) && defined(__clang_minor__)
-# ifdef __apple_build_version__
-# if __clang_major__ < 12 || (__clang_major__ == 12 && __clang_minor__ < 0)
-# error You need at least XCode Clang v12.0 to compile QEMU
-# endif
-# else
-# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
-# error You need at least Clang v10.0 to compile QEMU
-# endif
-# endif
-#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
-# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
-# error You need at least GCC v7.4.0 to compile QEMU
-# endif
-#else
-# error You either need GCC or Clang to compiler QEMU
-#endif
-int main (void) { return 0; }
-EOF
-if ! compile_prog "" "" ; then
- error_exit "You need at least GCC v7.4 or Clang v10.0 (or XCode Clang v12.0)"
-fi
-
-# Accumulate -Wfoo and -Wno-bar separately.
-# We will list all of the enable flags first, and the disable flags second.
-# Note that we do not add -Werror, because that would enable it for all
-# configure tests. If a configure test failed due to -Werror this would
-# just silently disable some features, so it's too error prone.
-
-warn_flags=
-add_to warn_flags -Wundef
-add_to warn_flags -Wwrite-strings
-add_to warn_flags -Wmissing-prototypes
-add_to warn_flags -Wstrict-prototypes
-add_to warn_flags -Wredundant-decls
-add_to warn_flags -Wold-style-declaration
-add_to warn_flags -Wold-style-definition
-add_to warn_flags -Wtype-limits
-add_to warn_flags -Wformat-security
-add_to warn_flags -Wformat-y2k
-add_to warn_flags -Winit-self
-add_to warn_flags -Wignored-qualifiers
-add_to warn_flags -Wempty-body
-add_to warn_flags -Wnested-externs
-add_to warn_flags -Wendif-labels
-add_to warn_flags -Wexpansion-to-defined
-add_to warn_flags -Wimplicit-fallthrough=2
-add_to warn_flags -Wmissing-format-attribute
-
-if test "$targetos" != "darwin"; then
- add_to warn_flags -Wthread-safety
-fi
-
-nowarn_flags=
-add_to nowarn_flags -Wno-initializer-overrides
-add_to nowarn_flags -Wno-missing-include-dirs
-add_to nowarn_flags -Wno-shift-negative-value
-add_to nowarn_flags -Wno-string-plus-int
-add_to nowarn_flags -Wno-typedef-redefinition
-add_to nowarn_flags -Wno-tautological-type-limit-compare
-add_to nowarn_flags -Wno-psabi
-add_to nowarn_flags -Wno-gnu-variable-sized-type-not-at-end
-
-gcc_flags="$warn_flags $nowarn_flags"
-
-cc_has_warning_flag() {
- write_c_skeleton;
-
- # Use the positive sense of the flag when testing for -Wno-wombat
- # support (gcc will happily accept the -Wno- form of unknown
- # warning options).
- optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
- compile_prog "-Werror $optflag" ""
-}
-
-objcc_has_warning_flag() {
- cat > $TMPM <<EOF
-int main(void) { return 0; }
-EOF
-
- # Use the positive sense of the flag when testing for -Wno-wombat
- # support (gcc will happily accept the -Wno- form of unknown
- # warning options).
- optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
- do_objc -Werror $optflag \
- $OBJCFLAGS $EXTRA_OBJCFLAGS $CONFIGURE_OBJCFLAGS $QEMU_OBJCFLAGS \
- -o $TMPE $TMPM
-}
-
-for flag in $gcc_flags; do
- if cc_has_warning_flag $flag ; then
- QEMU_CFLAGS="$QEMU_CFLAGS $flag"
- fi
- if objcc_has_warning_flag $flag ; then
- QEMU_OBJCFLAGS="$QEMU_OBJCFLAGS $flag"
- fi
-done
-
if test "$static" = "yes" ; then
if test "$plugins" = "yes"; then
error_exit "static and plugins are mutually incompatible"
int main(void) { return tls_var; }
EOF
-# Meson currently only handles pie as a boolean for now so if we have
-# explicitly disabled PIE we need to extend our cflags because it wont.
if test "$static" = "yes"; then
if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
- CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
pie="yes"
elif test "$pie" = "yes"; then
error_exit "-static-pie not available due to missing toolchain support"
else
pie="no"
- QEMU_CFLAGS="-fno-pie $QEMU_CFLAGS"
fi
-elif test "$pie" = "no"; then
- if compile_prog "-Werror -fno-pie" "-no-pie"; then
- CONFIGURE_CFLAGS="-fno-pie $CONFIGURE_CFLAGS"
- CONFIGURE_LDFLAGS="-no-pie $CONFIGURE_LDFLAGS"
- QEMU_CFLAGS="-fno-pie -no-pie $QEMU_CFLAGS"
+elif test "$pie" != "no"; then
+ if compile_prog "-Werror -fPIE -DPIE" "-pie"; then
+ pie="yes"
+ elif test "$pie" = "yes"; then
+ error_exit "PIE not available due to missing toolchain support"
+ else
+ echo "Disabling PIE due to missing toolchain support"
+ pie="no"
fi
-elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
- CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
- CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
- pie="yes"
-elif test "$pie" = "yes"; then
- error_exit "PIE not available due to missing toolchain support"
-else
- echo "Disabling PIE due to missing toolchain support"
- pie="no"
fi
##########################################
-# __sync_fetch_and_and requires at least -march=i486. Many toolchains
-# use i686 as default anyway, but for those that don't, an explicit
-# specification is necessary
-
-if test "$cpu" = "i386"; then
- cat > $TMPC << EOF
-static int sfaa(int *ptr)
-{
- return __sync_fetch_and_and(ptr, 0);
-}
-
-int main(void)
-{
- int val = 42;
- val = __sync_val_compare_and_swap(&val, 0, 1);
- sfaa(&val);
- return val;
-}
-EOF
- if ! compile_prog "" "" ; then
- QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
- fi
-fi
if test -z "${target_list+xxx}" ; then
default_targets=yes
case "$fdt" in
auto | enabled | internal)
# Simpler to always update submodule, even if not needed.
- git_submodules="${git_submodules} dtc"
+ git_submodules="${git_submodules} subprojects/dtc"
;;
esac
: ${cross_cc_armeb="$cross_cc_arm"}
: ${cross_cc_cflags_armeb="-mbig-endian"}
: ${cross_cc_hexagon="hexagon-unknown-linux-musl-clang"}
-: ${cross_cc_cflags_hexagon="-mv67 -O2 -static"}
+: ${cross_cc_cflags_hexagon="-mv73 -O2 -static"}
: ${cross_cc_cflags_i386="-m32"}
: ${cross_cc_cflags_ppc="-m32 -mbig-endian"}
: ${cross_cc_cflags_ppc64="-m64 -mbig-endian"}
container_cross_ranlib=
container_cross_strip=
- # We shall skip configuring the target compiler if the user didn't
- # bother enabling an appropriate guest. This avoids building
- # extraneous firmware images and tests.
- if test "${target_list#*$1}" = "$1"; then
- return 1
- fi
-
target_arch=${1%%-*}
case $target_arch in
aarch64) container_hosts="x86_64 aarch64" ;;
LINKS="$LINKS contrib/plugins/Makefile "
for f in $LINKS ; do
if [ -e "$source_path/$f" ]; then
- mkdir -p "$(dirname ./"$f")"
symlink "$source_path/$f" "$f"
fi
done
gdb_version=$($gdb_bin --version | head -n 1)
if version_ge ${gdb_version##* } 9.1; then
echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
- gdb_arches=$("$source_path/scripts/probe-gdb-support.py" $gdb_bin)
+ gdb_arches=$($python "$source_path/scripts/probe-gdb-support.py" $gdb_bin)
else
gdb_bin=""
fi
echo "RUNC=$runc" >> $config_host_mak
fi
echo "ROMS=$roms" >> $config_host_mak
-echo "MAKE=$make" >> $config_host_mak
echo "PYTHON=$python" >> $config_host_mak
echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
echo "MESON=$meson" >> $config_host_mak
echo "NINJA=$ninja" >> $config_host_mak
echo "PKG_CONFIG=${pkg_config}" >> $config_host_mak
echo "CC=$cc" >> $config_host_mak
-echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
-echo "QEMU_OBJCFLAGS=$QEMU_OBJCFLAGS" >> $config_host_mak
echo "EXESUF=$EXESUF" >> $config_host_mak
# use included Linux headers
if test "$?" -ne 0 ; then
error_exit "meson setup failed"
fi
+else
+ if test -f meson-private/cmd_line.txt; then
+ # Adjust old command line options that were removed
+ # sed -i is not portable
+ perl -i -ne '
+ /^sphinx_build/ && next;
+ print;' meson-private/cmd_line.txt
+ fi
fi
# Save the configure command line for later reuse.
preserve_env LD
preserve_env LDFLAGS
preserve_env LD_LIBRARY_PATH
-preserve_env MAKE
preserve_env NM
preserve_env OBJCFLAGS
preserve_env OBJCOPY