printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
}
-print_error() {
+error_exit() {
(echo
echo "ERROR: $1"
while test -n "$2"; do
shift
done
echo) >&2
-}
-
-error_exit() {
- print_error "$@"
exit 1
}
default_cflags='-O2 -g'
git_submodules_action="update"
-git="git"
docs="auto"
EXESUF=""
-prefix="/usr/local"
-qemu_suffix="qemu"
system="yes"
linux_user=""
bsd_user=""
ninja=""
python=
download="enabled"
-bindir="bin"
skip_meson=no
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
ld="${LD-${cross_prefix}ld}"
ranlib="${RANLIB-${cross_prefix}ranlib}"
nm="${NM-${cross_prefix}nm}"
-smbd="$SMBD"
strip="${STRIP-${cross_prefix}strip}"
widl="${WIDL-${cross_prefix}widl}"
windres="${WINDRES-${cross_prefix}windres}"
if test "$targetos" = "windows" ; then
EXESUF=".exe"
- prefix="/qemu"
- bindir=""
- qemu_suffix=""
fi
meson_option_build_array() {
fi
}
+meson_add_machine_file() {
+ if test "$cross_compile" = "yes"; then
+ meson_option_add --cross-file "$1"
+ else
+ meson_option_add --native-file "$1"
+ fi
+}
+
for opt do
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
case "$opt" in
;;
--version|-V) exec cat "$source_path/VERSION"
;;
- --prefix=*) prefix="$optarg"
- ;;
--cross-prefix=*)
;;
--cc=*)
;;
--ninja=*) ninja="$optarg"
;;
- --smbd=*) smbd="$optarg"
- ;;
--extra-cflags=*)
;;
--extra-cxxflags=*)
;;
--static) static="yes"
;;
- --bindir=*) bindir="$optarg"
- ;;
- --with-suffix=*) qemu_suffix="$optarg"
- ;;
--host=*|--build=*|\
--disable-dependency-tracking|\
--sbindir=*|--sharedstatedir=*|\
;;
--disable-pie) pie="no"
;;
- --enable-werror) werror="yes"
- ;;
- --disable-werror) werror="no"
- ;;
--enable-cfi) cfi=true
;;
--disable-cfi) cfi=false
Standard options:
--help print this message
- --prefix=PREFIX install in PREFIX [$prefix]
--target-list=LIST set target list (default: build all)
$(echo Available targets: $default_target_list | \
fold -s -w 53 | sed -e 's/^/ /')
--cross-prefix-ARCH=PREFIX cross compiler prefix when building ARCH guest test cases
--python=PYTHON use specified python [$python]
--ninja=NINJA use specified ninja [$ninja]
- --smbd=SMBD use specified smbd [$smbd]
--static enable static build [$static]
- --bindir=PATH install binaries in PATH
- --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
--without-default-features default all --enable-* options to "disabled"
--without-default-devices do not include any device that is not needed to
start the emulator (only use if you are including
desired devices in configs/devices/)
--with-devices-ARCH=NAME override default configs/devices
--enable-debug enable common debug build options
- --disable-werror disable compilation abort on warning
--cpu=CPU Build for host CPU [$cpu]
--disable-containers don't use containers for cross-building
--container-engine=TYPE which container engine to use [$container_engine]
fi
fi
-# Consult white-list to determine whether to enable werror
-# by default. Only enable by default for git builds
-if test -z "$werror" ; then
- if test -e "$source_path/.git" && \
- { test "$targetos" = linux || test "$targetos" = "windows"; }; then
- werror="yes"
- else
- werror="no"
- fi
-fi
-
if test "$targetos" = "bogus"; then
# Now that we know that we're not printing the help and that
# the compiler works (so the results of the check_defines we used
container_cross_prefix=aarch64-linux-gnu-
container_cross_cc=${container_cross_prefix}gcc
;;
- alpha)
- container_image=debian-alpha-cross
- container_cross_prefix=alpha-linux-gnu-
- ;;
arm)
# We don't have any bigendian build tools so we only use this for ARM
container_image=debian-armhf-cross
container_cross_prefix=hexagon-unknown-linux-musl-
container_cross_cc=${container_cross_prefix}clang
;;
- hppa)
- container_image=debian-hppa-cross
- container_cross_prefix=hppa-linux-gnu-
- ;;
i386)
container_image=fedora-i386-cross
container_cross_prefix=
container_image=debian-loongarch-cross
container_cross_prefix=loongarch64-unknown-linux-gnu-
;;
- m68k)
- container_image=debian-m68k-cross
- container_cross_prefix=m68k-linux-gnu-
- ;;
microblaze)
container_image=debian-microblaze-cross
container_cross_prefix=microblaze-linux-musl-
container_image=debian-mips64-cross
container_cross_prefix=mips64-linux-gnuabi64-
;;
- mipsel)
- container_image=debian-mipsel-cross
- container_cross_prefix=mipsel-linux-gnu-
- ;;
- mips)
- container_image=debian-mips-cross
- container_cross_prefix=mips-linux-gnu-
- ;;
nios2)
container_image=debian-nios2-cross
container_cross_prefix=nios2-linux-gnu-
container_cross_prefix=powerpc${target_arch#ppc}-linux-gnu-
container_cross_cc=${container_cross_prefix}gcc-10
;;
- riscv64)
- container_image=debian-riscv64-test-cross
- container_cross_prefix=riscv64-linux-gnu-
- ;;
- s390x)
- container_image=debian-s390x-cross
- container_cross_prefix=s390x-linux-gnu-
- ;;
- sh4)
- container_image=debian-sh4-cross
- container_cross_prefix=sh4-linux-gnu-
- ;;
- sparc64)
- container_image=debian-sparc64-cross
- container_cross_prefix=sparc64-linux-gnu-
- ;;
tricore)
container_image=debian-tricore-cross
container_cross_prefix=tricore-
# default to the dc232b cpu
container_cross_prefix=/opt/2020.07/xtensa-dc232b-elf/bin/xtensa-dc232b-elf-
;;
+ *)
+ # Debian and GNU architecture names usually match
+ container_image=debian-$target_arch-cross
+ container_cross_prefix=$target_arch-linux-gnu-
+ ;;
esac
: ${container_cross_cc:=${container_cross_prefix}gcc}
: ${container_cross_ar:=${container_cross_prefix}ar}
echo all: >> $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
-fi
-
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "TARGET_DIRS=$target_list" >> $config_host_mak
echo "GDB=$gdb_bin" >> $config_host_mak
test -n "$objcc" && echo "objc_args = [$(meson_quote $OBJCFLAGS $EXTRA_OBJCFLAGS)]" >> $cross
echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross
echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross
+
+ # Only enable by default for git builds and on select OSes
+ echo "# environment defaults, can still be overridden on " >> $cross
+ echo "# the command line" >> $cross
+ if test -e "$source_path/.git" && \
+ { test "$targetos" = linux || test "$targetos" = "windows"; }; then
+ echo 'werror = true' >> $cross
+ fi
+ echo "[project options]" >> $cross
+ if test "$SMBD" != ''; then
+ echo "smbd = $(meson_quote "$SMBD")" >> $cross
+ fi
+ if test "${QEMU_GA_MANUFACTURER}" != ''; then
+ echo "qemu_ga_manufacturer = $(meson_quote "${QEMU_GA_MANUFACTURER}")" >> $cross
+ fi
+ if test "${QEMU_GA_DISTRO}" != ''; then
+ echo "qemu_ga_distro = $(meson_quote "${QEMU_GA_DISTRO}")" >> $cross
+ fi
+ if test "${QEMU_GA_VERSION}" != ''; then
+ echo "qemu_ga_version = $(meson_quote "${QEMU_GA_VERSION}")" >> $cross
+ fi
+
+ echo >> $cross
echo "[binaries]" >> $cross
echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
echo "ar = [$(meson_quote $ar)]" >> $cross
echo "nm = [$(meson_quote $nm)]" >> $cross
echo "pkgconfig = [$(meson_quote $pkg_config)]" >> $cross
+ echo "pkg-config = [$(meson_quote $pkg_config)]" >> $cross
echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
if has $sdl2_config; then
echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
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"
+ meson_option_add --native-file
+ meson_option_add config-meson.native
fi
mv $cross config-meson.cross
+ meson_add_machine_file config-meson.cross
+ if test -f "$source_path/configs/meson/$targetos.txt"; then
+ meson_add_machine_file $source_path/configs/meson/$targetos.txt
+ fi
rm -rf meson-private meson-info meson-logs
- # Built-in options
test "$download" = "disabled" && meson_option_add "--wrap-mode=nodownload"
- test "$bindir" != "bin" && meson_option_add "-Dbindir=$bindir"
test "$default_feature" = no && meson_option_add -Dauto_features=disabled
test "$static" = yes && meson_option_add -Dprefer_static=true
test "$pie" = no && meson_option_add -Db_pie=false
- test "$werror" = yes && meson_option_add -Dwerror=true
# QEMU options
test "$cfi" != false && meson_option_add "-Dcfi=$cfi" "-Db_lto=$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"
run_meson() {
- NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path"
+ NINJA=$ninja $meson setup "$@" "$PWD" "$source_path"
}
eval run_meson $meson_options
if test "$?" -ne 0 ; then