esac
done
-
+default_cflags='-O2 -g'
git_submodules_action="update"
git="git"
-debug_tcg="no"
docs="auto"
EXESUF=""
prefix="/usr/local"
linux_user=""
bsd_user=""
plugins="$default_feature"
+subdirs=""
ninja=""
python=
download="enabled"
# ${cross_prefix}gcc (if cross-prefix specified)
# system compiler
if test -z "${CC}${cross_prefix}"; then
- cc="$host_cc"
+ cc="cc"
else
cc="${CC-${cross_prefix}gcc}"
fi
# OS specific
-mingw32="no"
-bsd="no"
-linux="no"
-solaris="no"
case $targetos in
windows)
- mingw32="yes"
plugins="no"
pie="no"
;;
-gnu/kfreebsd)
- bsd="yes"
-;;
-freebsd)
- bsd="yes"
- # needed for kinfo_getvmmap(3) in libutil.h
-;;
-dragonfly)
- bsd="yes"
-;;
-netbsd)
- bsd="yes"
-;;
-openbsd)
- bsd="yes"
-;;
-darwin)
- bsd="yes"
- darwin="yes"
-;;
-sunos)
- solaris="yes"
-;;
haiku)
pie="no"
;;
-linux)
- linux="yes"
-;;
esac
if test ! -z "$cpu" ; then
echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
fi
-# Normalise host CPU name and set multilib cflags. The canonicalization
-# isn't really necessary, because the architectures that we check for
-# should not hit the 'uname -m' case, but better safe than sorry.
+# Normalise host CPU name to the values used by Meson cross files and in source
+# directories, and set multilib cflags. The canonicalization isn't really
+# necessary, because the architectures that we check for should not hit the
+# 'uname -m' case, but better safe than sorry in case --cpu= is used.
+#
# Note that this case should only have supported host CPUs, not guests.
+# Please keep it sorted and synchronized with meson.build's host_arch.
+host_arch=
+linux_arch=
case "$cpu" in
+ aarch64)
+ host_arch=aarch64
+ linux_arch=arm64
+ ;;
+
armv*b|armv*l|arm)
- cpu="arm" ;;
+ cpu=arm
+ host_arch=arm
+ linux_arch=arm
+ ;;
i386|i486|i586|i686)
cpu="i386"
- CPU_CFLAGS="-m32" ;;
- x32)
- cpu="x86_64"
- CPU_CFLAGS="-mx32" ;;
- x86_64|amd64)
- cpu="x86_64"
- # ??? Only extremely old AMD cpus do not have cmpxchg16b.
- # If we truly care, we should simply detect this case at
- # runtime and generate the fallback to serial emulation.
- CPU_CFLAGS="-m64 -mcx16" ;;
+ host_arch=i386
+ linux_arch=x86
+ CPU_CFLAGS="-m32"
+ ;;
+ loongarch*)
+ cpu=loongarch64
+ host_arch=loongarch64
+ ;;
+
+ mips64*)
+ cpu=mips64
+ host_arch=mips
+ linux_arch=mips
+ ;;
mips*)
- cpu="mips" ;;
+ cpu=mips
+ host_arch=mips
+ linux_arch=mips
+ ;;
ppc)
- CPU_CFLAGS="-m32" ;;
+ host_arch=ppc
+ linux_arch=powerpc
+ CPU_CFLAGS="-m32"
+ ;;
ppc64)
- CPU_CFLAGS="-m64 -mbig-endian" ;;
+ host_arch=ppc64
+ linux_arch=powerpc
+ CPU_CFLAGS="-m64 -mbig-endian"
+ ;;
ppc64le)
- cpu="ppc64"
- CPU_CFLAGS="-m64 -mlittle-endian" ;;
+ cpu=ppc64
+ host_arch=ppc64
+ linux_arch=powerpc
+ CPU_CFLAGS="-m64 -mlittle-endian"
+ ;;
+
+ riscv32 | riscv64)
+ host_arch=riscv
+ linux_arch=riscv
+ ;;
s390)
- CPU_CFLAGS="-m31" ;;
+ linux_arch=s390
+ CPU_CFLAGS="-m31"
+ ;;
s390x)
- CPU_CFLAGS="-m64" ;;
+ host_arch=s390x
+ linux_arch=s390
+ CPU_CFLAGS="-m64"
+ ;;
sparc|sun4[cdmuv])
- cpu="sparc"
- CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" ;;
+ cpu=sparc
+ CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
+ ;;
sparc64)
- CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;;
+ host_arch=sparc64
+ CPU_CFLAGS="-m64 -mcpu=ultrasparc"
+ ;;
+
+ x32)
+ cpu="x86_64"
+ host_arch=x86_64
+ linux_arch=x86
+ CPU_CFLAGS="-mx32"
+ ;;
+ x86_64|amd64)
+ cpu="x86_64"
+ host_arch=x86_64
+ linux_arch=x86
+ # ??? Only extremely old AMD cpus do not have cmpxchg16b.
+ # If we truly care, we should simply detect this case at
+ # runtime and generate the fallback to serial emulation.
+ CPU_CFLAGS="-m64 -mcx16"
+ ;;
esac
+if test -n "$host_arch" && {
+ ! test -d "$source_path/linux-user/include/host/$host_arch" ||
+ ! test -d "$source_path/common-user/host/$host_arch"; }; then
+ error_exit "linux-user/include/host/$host_arch does not exist." \
+ "This is a bug in the configure script, please report it."
+fi
+if test -n "$linux_arch" && ! test -d "$source_path/linux-headers/asm-$linux_arch"; then
+ error_exit "linux-headers/asm-$linux_arch does not exist." \
+ "This is a bug in the configure script, please report it."
+fi
+
check_py_version() {
- # We require python >= 3.7.
+ # We require python >= 3.8.
# NB: a True python conditional creates a non-zero return code (Failure)
- "$1" -c 'import sys; sys.exit(sys.version_info < (3,7))'
+ "$1" -c 'import sys; sys.exit(sys.version_info < (3,8))'
}
first_python=
if test -z "${PYTHON}"; then
# A bare 'python' is traditionally python 2.x, but some distros
# have it as python 3.x, so check in both places.
- for binary in python3 python python3.11 python3.10 python3.9 python3.8 python3.7; do
+ for binary in python3 python python3.11 python3.10 python3.9 python3.8; do
if has "$binary"; then
python=$(command -v "$binary")
if check_py_version "$python"; then
fi
done
-if test "$mingw32" = "yes" ; then
+if test "$targetos" = "windows" ; then
EXESUF=".exe"
prefix="/qemu"
bindir=""
# configure to be used by RPM and similar macros that set
# lots of directory switches by default.
;;
- --enable-debug-tcg) debug_tcg="yes"
- ;;
- --disable-debug-tcg) debug_tcg="no"
- ;;
--enable-debug)
# Enable debugging options that aren't excessively noisy
- debug_tcg="yes"
+ meson_option_parse --enable-debug-tcg ""
meson_option_parse --enable-debug-graph-lock ""
meson_option_parse --enable-debug-mutex ""
meson_option_add -Doptimization=0
+ default_cflags='-O0 -g'
;;
--disable-tcg) tcg="disabled"
plugins="no"
;;
--enable-download) download="enabled"; git_submodules_action=update;
;;
- --enable-plugins) if test "$mingw32" = "yes"; then
+ --enable-plugins) if test "$targetos" = "windows"; then
error_exit "TCG plugins not currently supported on Windows platforms"
else
plugins="yes"
default_target_list=""
mak_wilds=""
-if [ "$linux_user" != no ]; then
- if [ "$targetos" = linux ] && [ -d "$source_path/linux-user/include/host/$cpu" ]; then
- linux_user=yes
- elif [ "$linux_user" = yes ]; then
- error_exit "linux-user not supported on this architecture"
+if [ -n "$host_arch" ] && [ -d "$source_path/common-user/host/$host_arch" ]; then
+ if [ "$linux_user" != no ]; then
+ if [ "$targetos" = linux ]; then
+ linux_user=yes
+ elif [ "$linux_user" = yes ]; then
+ error_exit "linux-user not supported on this architecture"
+ fi
+ if [ "$linux_user" = "yes" ]; then
+ mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
+ fi
fi
-fi
-if [ "$bsd_user" != no ]; then
- if [ "$bsd_user" = "" ]; then
- test $targetos = freebsd && bsd_user=yes
+ if [ "$bsd_user" != no ]; then
+ if [ "$bsd_user" = "" ]; then
+ test $targetos = freebsd && bsd_user=yes
+ fi
+ if [ "$bsd_user" = yes ] && ! [ -d "$source_path/bsd-user/$targetos" ]; then
+ error_exit "bsd-user not supported on this host OS"
+ fi
+ if [ "$bsd_user" = "yes" ]; then
+ mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
+ fi
fi
- if [ "$bsd_user" = yes ] && ! [ -d "$source_path/bsd-user/$targetos" ]; then
- error_exit "bsd-user not supported on this host OS"
+else
+ if [ "$linux_user" = yes ] || [ "$bsd_user" = yes ]; then
+ error_exit "user mode emulation not supported on this architecture"
fi
fi
if [ "$softmmu" = "yes" ]; then
mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
fi
-if [ "$linux_user" = "yes" ]; then
- mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
-fi
-if [ "$bsd_user" = "yes" ]; then
- mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
-fi
for config in $mak_wilds; do
target="$(basename "$config" .mak)"
-Dmesonoptname=val passthrough option to meson unmodified
--cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
--cc=CC use C compiler CC [$cc]
- --host-cc=CC use C compiler CC [$host_cc] for code run at
- build time
+ --host-cc=CC when cross compiling, use C compiler CC for code run
+ at build time [$host_cc]
--cxx=CXX use C++ compiler CXX [$cxx]
--objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
--extra-cflags=CFLAGS append extra C compiler flags CFLAGS
linux-user all linux usermode emulation targets
bsd-user all BSD usermode emulation targets
pie Position Independent Executables
- debug-tcg TCG debugging (default is disabled)
NOTE: The object files are built at the place where configure is launched
EOF
fi
if ! check_py_version "$python"; then
- error_exit "Cannot use '$python', Python >= 3.7 is required." \
+ error_exit "Cannot use '$python', Python >= 3.8 is required." \
"Use --python=/path/to/python to specify a supported Python." \
"Maybe try:" \
" openSUSE Leap 15.3+: zypper install python39" \
python="$python -B"
mkvenv="$python ${source_path}/python/scripts/mkvenv.py"
-mkvenv_flags=""
-if test "$download" = "enabled" ; then
- mkvenv_flags="--online"
-fi
+# Finish preparing the virtual environment using vendored .whl files
-if ! $mkvenv ensure \
- $mkvenv_flags \
- --dir "${source_path}/python/wheels" \
- --diagnose "meson" \
- "meson>=0.63.0" ;
-then
- exit 1
+if $python -c 'import sys; sys.exit(sys.version_info >= (3,11))'; then
+ $mkvenv ensure --dir "${source_path}/python/wheels" \
+ 'tomli>=1.2.0' || exit 1
fi
+$mkvenv ensuregroup --dir "${source_path}/python/wheels" \
+ ${source_path}/pythondeps.toml meson || exit 1
# At this point, we expect Meson to be installed and available.
# We expect mkvenv or pip to have created pyvenv/bin/meson for us.
fi
if test "$docs" != "disabled" ; then
- if ! $mkvenv ensure \
+ if ! $mkvenv ensuregroup \
$mkvenv_flags \
- --diagnose "sphinx-build" \
- "sphinx>=1.6.0" "sphinx-rtd-theme>=0.5.0";
+ ${source_path}/pythondeps.toml docs;
then
if test "$docs" = "enabled" ; then
exit 1
# by default. Only enable by default for git builds
if test -z "$werror" ; then
if test -e "$source_path/.git" && \
- { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
+ { test "$targetos" = linux || test "$targetos" = "windows"; }; then
werror="yes"
else
werror="no"
fi
fi
test "$plugins" = "" && plugins=yes
+if test "$plugins" = "yes"; then
+ subdirs="$subdirs contrib/plugins"
+fi
cat > $TMPC << EOF
done
fi
-# see if system emulation was really requested
-case " $target_list " in
- *"-softmmu "*) softmmu=yes
- ;;
- *) softmmu=no
- ;;
-esac
-
if test "$tcg" = "auto"; then
if test -z "$target_list"; then
tcg="disabled"
: ${cross_prefix_sh4="sh4-linux-gnu-"}
: ${cross_prefix_sparc64="sparc64-linux-gnu-"}
: ${cross_prefix_sparc="$cross_prefix_sparc64"}
+: ${cross_prefix_tricore="tricore-"}
: ${cross_prefix_x86_64="x86_64-linux-gnu-"}
: ${cross_cc_aarch64_be="$cross_cc_aarch64"}
sh4) container_hosts=x86_64 ;;
sparc64) container_hosts=x86_64 ;;
tricore) container_hosts=x86_64 ;;
- x86_64) container_hosts="aarch64 ppc64el x86_64" ;;
+ x86_64) container_hosts="aarch64 ppc64le x86_64" ;;
xtensa*) container_hosts=x86_64 ;;
esac
tricore)
container_image=debian-tricore-cross
container_cross_prefix=tricore-
- container_cross_as=tricore-as
- container_cross_ld=tricore-ld
- container_cross_cc=tricore-gcc
- break
;;
x86_64)
container_image=debian-amd64-cross
container_cross_prefix=x86_64-linux-gnu-
;;
xtensa*)
- container_hosts=x86_64
container_image=debian-xtensa-cross
# default to the dc232b cpu
echo "# Automatically generated by configure - do not modify" > Makefile.prereqs
# Mac OS X ships with a broken assembler
-roms=
if have_target i386-softmmu x86_64-softmmu && \
test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
test "$targetos" != "haiku" && \
probe_target_compiler i386-softmmu; then
- roms="pc-bios/optionrom"
+ subdirs="$subdirs pc-bios/optionrom"
config_mak=pc-bios/optionrom/config.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "TOPSRC_DIR=$source_path" >> $config_mak
if have_target ppc-softmmu ppc64-softmmu && \
probe_target_compiler ppc-softmmu; then
- roms="$roms pc-bios/vof"
+ subdirs="$subdirs pc-bios/vof"
config_mak=pc-bios/vof/config.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
echo "WARNING: Your compiler does not support the z900!"
echo " The s390-ccw bios will only work with guest CPUs >= z10."
fi
- roms="$roms pc-bios/s390-ccw"
+ subdirs="$subdirs pc-bios/s390-ccw"
config_mak=pc-bios/s390-ccw/config-host.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
echo all: >> $config_host_mak
-if test "$debug_tcg" = "yes" ; then
- echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
-fi
-if test "$mingw32" = "yes" ; then
- echo "CONFIG_WIN32=y" >> $config_host_mak
+if test "$targetos" = "windows"; then
echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER-QEMU}" >> $config_host_mak
echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO-Linux}" >> $config_host_mak
echo "QEMU_GA_VERSION=${QEMU_GA_VERSION-$(cat "$source_path"/VERSION)}" >> $config_host_mak
-else
- echo "CONFIG_POSIX=y" >> $config_host_mak
-fi
-
-if test "$linux" = "yes" ; then
- echo "CONFIG_LINUX=y" >> $config_host_mak
fi
-if test "$darwin" = "yes" ; then
- echo "CONFIG_DARWIN=y" >> $config_host_mak
-fi
-
-if test "$solaris" = "yes" ; then
- echo "CONFIG_SOLARIS=y" >> $config_host_mak
-fi
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "TARGET_DIRS=$target_list" >> $config_host_mak
-# XXX: suppress that
-if [ "$bsd" = "yes" ] ; then
- echo "CONFIG_BSD=y" >> $config_host_mak
-fi
-
-if test "$plugins" = "yes" ; then
- echo "CONFIG_PLUGIN=y" >> $config_host_mak
-fi
-
if test -n "$gdb_bin"; then
gdb_version=$($gdb_bin --version | head -n 1)
if version_ge ${gdb_version##* } 9.1; then
echo "ENGINE=$container" >> $config_host_mak
echo "RUNC=$runc" >> $config_host_mak
fi
-echo "ROMS=$roms" >> $config_host_mak
+echo "SUBDIRS=$subdirs" >> $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 "EXESUF=$EXESUF" >> $config_host_mak
-# use included Linux headers
-if test "$linux" = "yes" ; then
- mkdir -p linux-headers
- case "$cpu" in
- i386|x86_64)
- linux_arch=x86
- ;;
- ppc|ppc64)
- linux_arch=powerpc
- ;;
- s390x)
- linux_arch=s390
- ;;
- aarch64)
- linux_arch=arm64
- ;;
- loongarch*)
- linux_arch=loongarch
- ;;
- mips64)
- linux_arch=mips
- ;;
- riscv32|riscv64)
- linux_arch=riscv
- ;;
- *)
- # For most CPUs the kernel architecture name and QEMU CPU name match.
- linux_arch="$cpu"
- ;;
- esac
- # For non-KVM architectures we will not have asm headers
- if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
- symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
- fi
+# use included Linux headers for KVM architectures
+if test "$targetos" = "linux" && test -n "$linux_arch"; then
+ symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
fi
for target in $target_list; do
target_dir="$target"
target_name=$(echo $target | cut -d '-' -f 1)$EXESUF
- mkdir -p "$target_dir"
case $target in
*-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
*) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
echo "export CCACHE_CPP2=y" >> $config_host_mak
fi
+# contrib/plugins configuration
+echo "# Automatically generated by configure - do not modify" > contrib/plugins/$config_host_mak
+echo "SRC_PATH=$source_path/contrib/plugins" >> contrib/plugins/$config_host_mak
+echo "PKG_CONFIG=${pkg_config}" >> contrib/plugins/$config_host_mak
+echo "CC=$cc $CPU_CFLAGS" >> contrib/plugins/$config_host_mak
+echo "CFLAGS=${CFLAGS-$default_cflags} $EXTRA_CFLAGS" >> contrib/plugins/$config_host_mak
+if test "$targetos" = darwin; then
+ echo "CONFIG_DARWIN=y" >> contrib/plugins/$config_host_mak
+fi
+
# tests/tcg configuration
(config_host_mak=tests/tcg/config-host.mak
mkdir -p tests/tcg
echo "# Automatically generated by configure - do not modify" > $config_host_mak
echo "SRC_PATH=$source_path" >> $config_host_mak
-echo "HOST_CC=$host_cc" >> $config_host_mak
# versioned checked in the main config_host.mak above
if test -n "$gdb_bin"; then
echo "windres = [$(meson_quote $windres)]" >> $cross
echo "windmc = [$(meson_quote $windmc)]" >> $cross
if test "$cross_compile" = "yes"; then
- cross_arg="--cross-file config-meson.cross"
echo "[host_machine]" >> $cross
echo "system = '$targetos'" >> $cross
case "$cpu" in
else
echo "endian = 'little'" >> $cross
fi
+ cross_arg="--cross-file config-meson.cross"
+
+ native="config-meson.native.new"
+ echo "# Automatically generated by configure - do not modify" > $native
+ echo "[binaries]" >> $native
+ echo "c = [$(meson_quote $host_cc)]" >> $native
+ mv $native config-meson.native
+ cross_arg="$cross_arg --native-file config-meson.native"
else
cross_arg="--native-file config-meson.cross"
fi
test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
test "$docs" != auto && meson_option_add "-Ddocs=$docs"
test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
+ test "$plugins" = yes && meson_option_add "-Dplugins=true"
test "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix"
test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"