2003-03-07 02:23:54 +03:00
|
|
|
#!/bin/sh
|
|
|
|
#
|
2003-03-23 23:17:16 +03:00
|
|
|
# qemu configure script (c) 2003 Fabrice Bellard
|
2003-03-07 02:23:54 +03:00
|
|
|
#
|
2014-05-23 20:07:24 +04:00
|
|
|
|
2014-05-28 14:39:17 +04:00
|
|
|
# Unset some variables known to interfere with behavior of common tools,
|
|
|
|
# just as autoconf does.
|
|
|
|
CLICOLOR_FORCE= GREP_OPTIONS=
|
|
|
|
unset CLICOLOR_FORCE GREP_OPTIONS
|
|
|
|
|
2015-10-28 20:56:40 +03:00
|
|
|
# Don't allow CCACHE, if present, to use cached results of compile tests!
|
|
|
|
export CCACHE_RECACHE=yes
|
|
|
|
|
2020-08-21 13:22:04 +03:00
|
|
|
# make source path absolute
|
|
|
|
source_path=$(cd "$(dirname -- "$0")"; pwd)
|
|
|
|
|
|
|
|
if test "$PWD" = "$source_path"
|
|
|
|
then
|
|
|
|
echo "Using './build' as the directory for build output"
|
|
|
|
|
|
|
|
MARKER=build/auto-created-by-configure
|
|
|
|
|
|
|
|
if test -e build
|
|
|
|
then
|
|
|
|
if test -f $MARKER
|
|
|
|
then
|
|
|
|
rm -rf build
|
|
|
|
else
|
|
|
|
echo "ERROR: ./build dir already exists and was not previously created by configure"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2023-02-21 14:06:30 +03:00
|
|
|
if ! mkdir build || ! touch $MARKER
|
|
|
|
then
|
|
|
|
echo "ERROR: Could not create ./build directory. Check the permissions on"
|
|
|
|
echo "your source directory, or try doing an out-of-tree build."
|
|
|
|
exit 1
|
|
|
|
fi
|
2020-08-21 13:22:04 +03:00
|
|
|
|
|
|
|
cat > GNUmakefile <<'EOF'
|
|
|
|
# This file is auto-generated by configure to support in-source tree
|
|
|
|
# 'make' command invocation
|
|
|
|
|
|
|
|
ifeq ($(MAKECMDGOALS),)
|
|
|
|
recurse: all
|
|
|
|
endif
|
|
|
|
|
|
|
|
.NOTPARALLEL: %
|
|
|
|
%: force
|
|
|
|
@echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
|
|
|
|
@$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
|
|
|
|
@if test "$(MAKECMDGOALS)" = "distclean" && \
|
|
|
|
test -e build/auto-created-by-configure ; \
|
|
|
|
then \
|
|
|
|
rm -rf build GNUmakefile ; \
|
|
|
|
fi
|
|
|
|
force: ;
|
|
|
|
.PHONY: force
|
|
|
|
GNUmakefile: ;
|
|
|
|
|
|
|
|
EOF
|
|
|
|
cd build
|
2022-08-25 18:06:59 +03:00
|
|
|
exec "$source_path/configure" "$@"
|
2020-08-21 13:22:04 +03:00
|
|
|
fi
|
|
|
|
|
2014-05-23 20:07:24 +04:00
|
|
|
# Temporary directory used for files created while
|
|
|
|
# configure runs. Since it is in the build directory
|
|
|
|
# we can safely blow away any previous version of it
|
|
|
|
# (and we need not jump through hoops to try to delete
|
|
|
|
# it when configure exits.)
|
|
|
|
TMPDIR1="config-temp"
|
|
|
|
rm -rf "${TMPDIR1}"
|
2022-08-25 18:07:02 +03:00
|
|
|
if ! mkdir -p "${TMPDIR1}"; then
|
2014-05-23 20:07:24 +04:00
|
|
|
echo "ERROR: failed to create temporary directory"
|
|
|
|
exit 1
|
2003-03-07 02:23:54 +03:00
|
|
|
fi
|
|
|
|
|
2014-05-23 20:07:24 +04:00
|
|
|
TMPB="qemu-conf"
|
|
|
|
TMPC="${TMPDIR1}/${TMPB}.c"
|
2014-01-03 06:12:46 +04:00
|
|
|
TMPO="${TMPDIR1}/${TMPB}.o"
|
2022-02-15 18:15:13 +03:00
|
|
|
TMPM="${TMPDIR1}/${TMPB}.m"
|
2014-05-23 20:07:24 +04:00
|
|
|
TMPE="${TMPDIR1}/${TMPB}.exe"
|
2003-03-07 02:23:54 +03:00
|
|
|
|
2010-04-23 15:44:10 +04:00
|
|
|
rm -f config.log
|
2008-11-29 23:09:56 +03:00
|
|
|
|
2011-11-23 21:26:44 +04:00
|
|
|
# Print a helpful header at the top of config.log
|
|
|
|
echo "# QEMU configure log $(date)" >> config.log
|
2012-03-07 16:16:29 +04:00
|
|
|
printf "# Configured with:" >> config.log
|
2022-12-21 12:04:08 +03:00
|
|
|
# repeat the invocation to log and stdout for CI
|
|
|
|
invoke=$(printf " '%s'" "$0" "$@")
|
|
|
|
test -n "$GITLAB_CI" && echo "configuring with: $invoke"
|
|
|
|
{ echo "$invoke"; echo; echo "#"; } >> config.log
|
2011-11-23 21:26:44 +04:00
|
|
|
|
2020-09-08 14:20:45 +03:00
|
|
|
quote_sh() {
|
|
|
|
printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
|
|
|
|
}
|
|
|
|
|
2017-07-03 17:58:28 +03:00
|
|
|
print_error() {
|
|
|
|
(echo
|
2013-04-08 15:11:26 +04:00
|
|
|
echo "ERROR: $1"
|
|
|
|
while test -n "$2"; do
|
|
|
|
echo " $2"
|
|
|
|
shift
|
|
|
|
done
|
2017-07-03 17:58:28 +03:00
|
|
|
echo) >&2
|
|
|
|
}
|
|
|
|
|
|
|
|
error_exit() {
|
|
|
|
print_error "$@"
|
2013-04-08 15:11:26 +04:00
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2014-02-25 22:27:49 +04:00
|
|
|
do_compiler() {
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
# Run the compiler, capturing its output to the log. First argument
|
|
|
|
# is compiler binary to execute.
|
2022-08-25 18:07:03 +03:00
|
|
|
compiler="$1"
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
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 $?
|
|
|
|
}
|
|
|
|
|
|
|
|
do_compiler_werror() {
|
2014-02-25 22:27:49 +04:00
|
|
|
# Run the compiler, capturing its output to the log. First argument
|
|
|
|
# is compiler binary to execute.
|
2020-07-18 16:19:10 +03:00
|
|
|
compiler="$1"
|
2014-02-25 22:27:49 +04:00
|
|
|
shift
|
2017-09-25 18:41:03 +03:00
|
|
|
if test -n "$BASH_VERSION"; then eval '
|
|
|
|
echo >>config.log "
|
|
|
|
funcs: ${FUNCNAME[*]}
|
|
|
|
lines: ${BASH_LINENO[*]}"
|
|
|
|
'; fi
|
2014-02-25 22:27:49 +04:00
|
|
|
echo $compiler "$@" >> config.log
|
|
|
|
$compiler "$@" >> config.log 2>&1 || return $?
|
2012-07-18 18:10:28 +04:00
|
|
|
# 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
|
2014-02-25 22:27:49 +04:00
|
|
|
echo $compiler -Werror "$@" >> config.log
|
|
|
|
$compiler -Werror "$@" >> config.log 2>&1 && return $?
|
2013-04-08 15:11:26 +04:00
|
|
|
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."
|
2012-07-18 18:10:28 +04:00
|
|
|
}
|
|
|
|
|
2014-02-25 22:27:49 +04:00
|
|
|
do_cc() {
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
do_compiler_werror "$cc" $CPU_CFLAGS "$@"
|
2014-02-25 22:27:49 +04:00
|
|
|
}
|
|
|
|
|
2022-02-15 18:15:13 +03:00
|
|
|
do_objc() {
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
do_compiler_werror "$objcc" $CPU_CFLAGS "$@"
|
2022-02-15 18:15:13 +03:00
|
|
|
}
|
|
|
|
|
2020-06-17 23:13:06 +03:00
|
|
|
# Append $2 to the variable named $1, with space separation
|
|
|
|
add_to() {
|
|
|
|
eval $1=\${$1:+\"\$$1 \"}\$2
|
|
|
|
}
|
|
|
|
|
2009-08-03 16:46:03 +04:00
|
|
|
compile_object() {
|
2015-03-26 01:57:39 +03:00
|
|
|
local_cflags="$1"
|
2021-11-05 12:09:26 +03:00
|
|
|
do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
|
2009-08-03 16:46:03 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
compile_prog() {
|
|
|
|
local_cflags="$1"
|
|
|
|
local_ldflags="$2"
|
2021-11-05 12:09:26 +03:00
|
|
|
do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
|
|
|
|
$LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
|
2009-08-03 16:46:03 +04:00
|
|
|
}
|
|
|
|
|
2010-12-23 13:43:58 +03:00
|
|
|
# symbolically link $1 to $2. Portable version of "ln -sf".
|
|
|
|
symlink() {
|
2012-03-19 16:20:47 +04:00
|
|
|
rm -rf "$2"
|
2012-06-06 12:57:00 +04:00
|
|
|
mkdir -p "$(dirname "$2")"
|
2012-03-19 16:20:47 +04:00
|
|
|
ln -s "$1" "$2"
|
2010-12-23 13:43:58 +03:00
|
|
|
}
|
|
|
|
|
2010-01-29 00:26:51 +03:00
|
|
|
# check whether a command is available to this shell (may be either an
|
|
|
|
# executable or a builtin)
|
|
|
|
has() {
|
|
|
|
type "$1" >/dev/null 2>&1
|
|
|
|
}
|
|
|
|
|
2019-08-21 10:21:16 +03:00
|
|
|
version_ge () {
|
2021-02-02 16:39:52 +03:00
|
|
|
local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
|
|
|
|
local_ver2=$(echo "$2" | tr . ' ')
|
2019-08-21 10:21:16 +03:00
|
|
|
while true; do
|
|
|
|
set x $local_ver1
|
|
|
|
local_first=${2-0}
|
2020-08-21 23:35:58 +03:00
|
|
|
# 'shift 2' if $2 is set, or 'shift' if $2 is not set
|
|
|
|
shift ${2:+2}
|
2019-08-21 10:21:16 +03:00
|
|
|
local_ver1=$*
|
|
|
|
set x $local_ver2
|
|
|
|
# the second argument finished, the first must be greater or equal
|
|
|
|
test $# = 1 && return 0
|
|
|
|
test $local_first -lt $2 && return 1
|
|
|
|
test $local_first -gt $2 && return 0
|
2020-08-21 23:35:58 +03:00
|
|
|
shift ${2:+2}
|
2019-08-21 10:21:16 +03:00
|
|
|
local_ver2=$*
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2019-05-26 17:47:47 +03:00
|
|
|
if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
|
|
|
|
then
|
|
|
|
error_exit "main directory cannot contain spaces nor colons"
|
|
|
|
fi
|
|
|
|
|
2019-05-26 17:47:46 +03:00
|
|
|
# default parameters
|
2009-08-03 16:45:55 +04:00
|
|
|
cpu=""
|
2003-06-09 23:53:12 +04:00
|
|
|
static="no"
|
2021-01-26 04:24:48 +03:00
|
|
|
cross_compile="no"
|
2003-03-07 02:23:54 +03:00
|
|
|
cross_prefix=""
|
2012-12-07 19:39:13 +04:00
|
|
|
host_cc="cc"
|
2014-03-28 20:19:02 +04:00
|
|
|
stack_protector=""
|
2020-05-29 23:51:21 +03:00
|
|
|
safe_stack=""
|
2019-11-28 18:35:24 +03:00
|
|
|
use_containers="yes"
|
2020-04-30 22:01:14 +03:00
|
|
|
gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
|
2023-03-03 05:57:59 +03:00
|
|
|
gdb_arches=""
|
2023-02-05 19:37:57 +03:00
|
|
|
glib_has_gslice="no"
|
2008-12-29 20:14:15 +03:00
|
|
|
|
2017-09-29 13:11:58 +03:00
|
|
|
if test -e "$source_path/.git"
|
|
|
|
then
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-19 20:20:46 +03:00
|
|
|
git_submodules_action="update"
|
2017-09-29 13:11:58 +03:00
|
|
|
else
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-19 20:20:46 +03:00
|
|
|
git_submodules_action="ignore"
|
2017-09-29 13:11:58 +03:00
|
|
|
fi
|
2021-05-12 10:21:56 +03:00
|
|
|
|
|
|
|
git_submodules="ui/keycodemapdb"
|
2017-10-20 17:02:43 +03:00
|
|
|
git="git"
|
2008-12-29 20:14:15 +03:00
|
|
|
|
2012-09-27 00:04:38 +04:00
|
|
|
# Don't accept a target_list environment variable.
|
|
|
|
unset target_list
|
2019-03-19 14:59:12 +03:00
|
|
|
unset target_list_exclude
|
2010-12-23 13:43:50 +03:00
|
|
|
|
|
|
|
# Default value for a variable defining feature "foo".
|
|
|
|
# * foo="no" feature will only be used if --enable-foo arg is given
|
|
|
|
# * foo="" feature will be searched for, and if found, will be used
|
|
|
|
# unless --disable-foo is given
|
|
|
|
# * foo="yes" this value will only be set by --enable-foo flag.
|
|
|
|
# feature will searched for,
|
|
|
|
# if not found, configure exits with error
|
|
|
|
#
|
|
|
|
# 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.
|
|
|
|
|
2020-12-10 22:04:13 +03:00
|
|
|
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
|
|
|
|
|
2021-11-05 12:09:26 +03:00
|
|
|
EXTRA_CFLAGS=""
|
|
|
|
EXTRA_CXXFLAGS=""
|
2022-01-09 00:38:55 +03:00
|
|
|
EXTRA_OBJCFLAGS=""
|
2021-11-05 12:09:26 +03:00
|
|
|
EXTRA_LDFLAGS=""
|
|
|
|
|
2010-12-23 13:43:50 +03:00
|
|
|
debug_tcg="no"
|
2018-01-16 18:11:51 +03:00
|
|
|
sanitizers="no"
|
2020-06-12 22:02:23 +03:00
|
|
|
tsan="no"
|
2022-04-22 13:08:25 +03:00
|
|
|
fortify_source="yes"
|
2023-05-11 06:54:28 +03:00
|
|
|
docs="auto"
|
2021-03-31 11:18:45 +03:00
|
|
|
EXESUF=""
|
2014-02-10 10:48:56 +04:00
|
|
|
modules="no"
|
2010-12-23 13:43:50 +03:00
|
|
|
prefix="/usr/local"
|
2020-08-26 14:04:13 +03:00
|
|
|
qemu_suffix="qemu"
|
2010-12-23 13:43:50 +03:00
|
|
|
softmmu="yes"
|
2021-11-09 12:10:41 +03:00
|
|
|
linux_user=""
|
|
|
|
bsd_user=""
|
2011-11-15 22:12:17 +04:00
|
|
|
pie=""
|
2012-02-28 15:25:50 +04:00
|
|
|
coroutine=""
|
2021-07-09 17:29:57 +03:00
|
|
|
plugins="$default_feature"
|
2020-08-26 09:04:15 +03:00
|
|
|
ninja=""
|
2022-04-20 18:33:57 +03:00
|
|
|
bindir="bin"
|
2019-06-10 13:05:14 +03:00
|
|
|
skip_meson=no
|
2022-06-13 23:26:24 +03:00
|
|
|
vfio_user_server="disabled"
|
2010-12-23 13:43:50 +03:00
|
|
|
|
2021-10-07 16:08:29 +03:00
|
|
|
# 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"
|
|
|
|
|
2022-04-20 18:33:58 +03:00
|
|
|
# 2. Automatically enable/disable other options
|
2022-02-04 17:54:47 +03:00
|
|
|
tcg="auto"
|
2021-10-07 16:08:29 +03:00
|
|
|
cfi="false"
|
|
|
|
|
2020-12-10 22:04:13 +03:00
|
|
|
# parse CC options second
|
2008-12-29 20:14:15 +03:00
|
|
|
for opt do
|
2016-05-16 16:10:20 +03:00
|
|
|
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
|
2008-12-29 20:14:15 +03:00
|
|
|
case "$opt" in
|
|
|
|
--cross-prefix=*) cross_prefix="$optarg"
|
2021-01-26 04:24:48 +03:00
|
|
|
cross_compile="yes"
|
2008-12-29 20:14:15 +03:00
|
|
|
;;
|
2010-12-23 13:43:48 +03:00
|
|
|
--cc=*) CC="$optarg"
|
2008-12-29 20:14:15 +03:00
|
|
|
;;
|
2013-08-07 19:39:36 +04:00
|
|
|
--cxx=*) CXX="$optarg"
|
|
|
|
;;
|
2023-04-18 19:15:54 +03:00
|
|
|
--objcc=*) objcc="$optarg"
|
|
|
|
;;
|
2009-08-03 16:45:55 +04:00
|
|
|
--cpu=*) cpu="$optarg"
|
|
|
|
;;
|
2021-11-05 12:09:26 +03:00
|
|
|
--extra-cflags=*)
|
|
|
|
EXTRA_CFLAGS="$EXTRA_CFLAGS $optarg"
|
|
|
|
EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
|
2022-01-09 00:38:55 +03:00
|
|
|
EXTRA_OBJCFLAGS="$EXTRA_OBJCFLAGS $optarg"
|
2021-11-05 12:09:26 +03:00
|
|
|
;;
|
|
|
|
--extra-cxxflags=*) EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
|
2017-06-06 16:07:47 +03:00
|
|
|
;;
|
2022-01-09 00:38:55 +03:00
|
|
|
--extra-objcflags=*) EXTRA_OBJCFLAGS="$EXTRA_OBJCFLAGS $optarg"
|
|
|
|
;;
|
2021-11-05 12:09:26 +03:00
|
|
|
--extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg"
|
2009-08-03 16:46:02 +04:00
|
|
|
;;
|
2018-04-04 22:27:05 +03:00
|
|
|
--cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
|
|
|
|
;;
|
2022-01-20 20:31:41 +03:00
|
|
|
--cross-cc-cflags-*) cc_arch=${opt#--cross-cc-cflags-}; cc_arch=${cc_arch%%=*}
|
2018-04-13 13:07:58 +03:00
|
|
|
eval "cross_cc_cflags_${cc_arch}=\$optarg"
|
|
|
|
;;
|
2018-04-04 22:27:05 +03:00
|
|
|
--cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
|
|
|
|
eval "cross_cc_${cc_arch}=\$optarg"
|
|
|
|
;;
|
2022-05-27 18:35:51 +03:00
|
|
|
--cross-prefix-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-prefix-FOO option"
|
|
|
|
;;
|
|
|
|
--cross-prefix-*) cc_arch=${opt#--cross-prefix-}; cc_arch=${cc_arch%%=*}
|
|
|
|
eval "cross_prefix_${cc_arch}=\$optarg"
|
|
|
|
;;
|
2008-12-29 20:14:15 +03:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2012-12-07 19:39:13 +04:00
|
|
|
# Preferred compiler:
|
|
|
|
# ${CC} (if set)
|
|
|
|
# ${cross_prefix}gcc (if cross-prefix specified)
|
|
|
|
# system compiler
|
|
|
|
if test -z "${CC}${cross_prefix}"; then
|
|
|
|
cc="$host_cc"
|
|
|
|
else
|
|
|
|
cc="${CC-${cross_prefix}gcc}"
|
|
|
|
fi
|
|
|
|
|
2013-08-07 19:39:36 +04:00
|
|
|
if test -z "${CXX}${cross_prefix}"; then
|
|
|
|
cxx="c++"
|
|
|
|
else
|
|
|
|
cxx="${CXX-${cross_prefix}g++}"
|
|
|
|
fi
|
|
|
|
|
2023-04-18 19:15:54 +03:00
|
|
|
# Preferred ObjC compiler:
|
|
|
|
# $objcc (if set, i.e. via --objcc option)
|
|
|
|
# ${cross_prefix}clang (if cross-prefix specified)
|
|
|
|
# clang (if available)
|
|
|
|
# $cc
|
|
|
|
if test -z "${objcc}${cross_prefix}"; then
|
|
|
|
if has clang; then
|
|
|
|
objcc=clang
|
|
|
|
else
|
|
|
|
objcc="$cc"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
objcc="${objcc-${cross_prefix}clang}"
|
|
|
|
fi
|
|
|
|
|
2011-08-05 02:10:08 +04:00
|
|
|
ar="${AR-${cross_prefix}ar}"
|
2016-07-08 07:49:36 +03:00
|
|
|
as="${AS-${cross_prefix}as}"
|
2016-06-23 20:39:18 +03:00
|
|
|
ccas="${CCAS-$cc}"
|
2011-08-05 02:10:08 +04:00
|
|
|
objcopy="${OBJCOPY-${cross_prefix}objcopy}"
|
|
|
|
ld="${LD-${cross_prefix}ld}"
|
2017-11-08 04:10:46 +03:00
|
|
|
ranlib="${RANLIB-${cross_prefix}ranlib}"
|
2014-09-18 23:55:08 +04:00
|
|
|
nm="${NM-${cross_prefix}nm}"
|
2021-10-13 14:43:36 +03:00
|
|
|
smbd="$SMBD"
|
2011-08-05 02:10:08 +04:00
|
|
|
strip="${STRIP-${cross_prefix}strip}"
|
2022-04-28 21:15:25 +03:00
|
|
|
widl="${WIDL-${cross_prefix}widl}"
|
2011-08-05 02:10:08 +04:00
|
|
|
windres="${WINDRES-${cross_prefix}windres}"
|
2022-11-29 20:38:08 +03:00
|
|
|
windmc="${WINDMC-${cross_prefix}windmc}"
|
2012-01-31 23:03:45 +04:00
|
|
|
pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
|
|
|
|
query_pkg_config() {
|
|
|
|
"${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
|
|
|
|
}
|
|
|
|
pkg_config=query_pkg_config
|
ui/sdl2 : initial port to SDL 2.0 (v2.0)
I've ported the SDL1.2 code over, and rewritten it to use the SDL2 interface.
The biggest changes were in the input handling, where SDL2 has done a major
overhaul, and I've had to include a generated translation file to get from
SDL2 codes back to qemu compatible ones. I'm still not sure how the keyboard
layout code works in qemu, so there may be further work if someone can point
me a test case that works with SDL1.2 and doesn't with SDL2.
Some SDL env vars we used to set are no longer used by SDL2,
Windows, OSX support is untested,
I don't think we can link to SDL1.2 and SDL2 at the same time, so I felt
using --with-sdlabi=2.0 to select the new code should be fine, like how
gtk does it.
v1.1: fix keys in text console
v1.2: fix shutdown, cleanups a bit of code, support ARGB cursor
v2.0: merge the SDL multihead patch into this, g_new the number of consoles
needed, wrap DCL inside per-console structure.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Fixes & improvements by kraxel:
* baum build fix
* remove text console logic
* adapt to new input core
* codestyle fixups
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2013-12-10 08:05:51 +04:00
|
|
|
sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
|
2008-12-29 20:14:15 +03:00
|
|
|
|
2009-11-11 14:50:09 +03:00
|
|
|
# default flags for all hosts
|
2016-09-12 16:10:08 +03:00
|
|
|
# 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.)
|
2021-11-08 10:58:23 +03:00
|
|
|
QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv"
|
2009-11-11 14:50:09 +03:00
|
|
|
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
|
2020-09-23 12:26:15 +03:00
|
|
|
|
2021-11-08 10:58:23 +03:00
|
|
|
QEMU_LDFLAGS=
|
|
|
|
|
2020-09-23 12:26:15 +03:00
|
|
|
# Flags that are needed during configure but later taken care of by Meson
|
2021-06-15 02:31:36 +03:00
|
|
|
CONFIGURE_CFLAGS="-std=gnu11 -Wall"
|
2020-09-23 12:26:15 +03:00
|
|
|
CONFIGURE_LDFLAGS=
|
2020-02-03 17:22:17 +03:00
|
|
|
|
2009-11-11 14:50:09 +03:00
|
|
|
|
2008-12-29 20:14:15 +03:00
|
|
|
check_define() {
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#if !defined($1)
|
2011-11-23 21:26:43 +04:00
|
|
|
#error $1 not defined
|
2008-12-29 20:14:15 +03:00
|
|
|
#endif
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
2009-08-03 16:46:03 +04:00
|
|
|
compile_object
|
2008-12-29 20:14:15 +03:00
|
|
|
}
|
|
|
|
|
2015-06-10 10:07:35 +03:00
|
|
|
check_include() {
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <$1>
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
compile_object
|
|
|
|
}
|
|
|
|
|
2015-03-26 01:57:37 +03:00
|
|
|
write_c_skeleton() {
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
2012-08-14 18:35:34 +04:00
|
|
|
if check_define __linux__ ; then
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=linux
|
2012-08-14 18:35:34 +04:00
|
|
|
elif check_define _WIN32 ; then
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=windows
|
2012-08-14 18:35:34 +04:00
|
|
|
elif check_define __OpenBSD__ ; then
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=openbsd
|
2012-08-14 18:35:34 +04:00
|
|
|
elif check_define __sun__ ; then
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=sunos
|
2012-08-14 18:35:34 +04:00
|
|
|
elif check_define __HAIKU__ ; then
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=haiku
|
2017-07-13 18:15:32 +03:00
|
|
|
elif check_define __FreeBSD__ ; then
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=freebsd
|
2017-07-13 18:15:32 +03:00
|
|
|
elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=gnu/kfreebsd
|
2017-07-13 18:15:32 +03:00
|
|
|
elif check_define __DragonFly__ ; then
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=dragonfly
|
2017-07-13 18:15:32 +03:00
|
|
|
elif check_define __NetBSD__; then
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=netbsd
|
2017-07-13 18:15:32 +03:00
|
|
|
elif check_define __APPLE__; then
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=darwin
|
2012-08-14 18:35:34 +04:00
|
|
|
else
|
2017-07-13 18:15:32 +03:00
|
|
|
# This is a fatal error, but don't report it yet, because we
|
|
|
|
# might be going to just print the --help text, or it might
|
|
|
|
# be the result of a missing compiler.
|
2021-11-08 16:47:54 +03:00
|
|
|
targetos=bogus
|
2012-08-14 18:35:34 +04:00
|
|
|
fi
|
|
|
|
|
2021-11-09 00:52:35 +03:00
|
|
|
# OS specific
|
|
|
|
|
2021-10-13 15:14:53 +03:00
|
|
|
mingw32="no"
|
|
|
|
bsd="no"
|
|
|
|
linux="no"
|
|
|
|
solaris="no"
|
2012-08-14 18:35:34 +04:00
|
|
|
case $targetos in
|
2021-11-09 00:52:35 +03:00
|
|
|
windows)
|
|
|
|
mingw32="yes"
|
|
|
|
plugins="no"
|
|
|
|
pie="no"
|
|
|
|
;;
|
|
|
|
gnu/kfreebsd)
|
|
|
|
bsd="yes"
|
|
|
|
;;
|
|
|
|
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"
|
|
|
|
;;
|
2021-11-08 16:47:54 +03:00
|
|
|
sunos)
|
2021-11-09 00:52:35 +03:00
|
|
|
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"
|
|
|
|
;;
|
2012-08-14 18:35:34 +04:00
|
|
|
esac
|
|
|
|
|
2009-08-03 16:45:55 +04:00
|
|
|
if test ! -z "$cpu" ; then
|
|
|
|
# command line argument
|
|
|
|
:
|
|
|
|
elif check_define __i386__ ; then
|
2008-12-29 20:14:15 +03:00
|
|
|
cpu="i386"
|
|
|
|
elif check_define __x86_64__ ; then
|
2013-08-20 23:20:05 +04:00
|
|
|
if check_define __ILP32__ ; then
|
|
|
|
cpu="x32"
|
|
|
|
else
|
|
|
|
cpu="x86_64"
|
|
|
|
fi
|
2008-12-31 19:55:26 +03:00
|
|
|
elif check_define __sparc__ ; then
|
|
|
|
if check_define __arch64__ ; then
|
|
|
|
cpu="sparc64"
|
|
|
|
else
|
|
|
|
cpu="sparc"
|
|
|
|
fi
|
2009-01-14 21:39:52 +03:00
|
|
|
elif check_define _ARCH_PPC ; then
|
|
|
|
if check_define _ARCH_PPC64 ; then
|
2019-05-02 01:38:18 +03:00
|
|
|
if check_define _LITTLE_ENDIAN ; then
|
|
|
|
cpu="ppc64le"
|
|
|
|
else
|
|
|
|
cpu="ppc64"
|
|
|
|
fi
|
2009-01-14 21:39:52 +03:00
|
|
|
else
|
|
|
|
cpu="ppc"
|
|
|
|
fi
|
2009-10-17 16:17:47 +04:00
|
|
|
elif check_define __mips__ ; then
|
|
|
|
cpu="mips"
|
2010-06-13 14:28:21 +04:00
|
|
|
elif check_define __s390__ ; then
|
|
|
|
if check_define __s390x__ ; then
|
|
|
|
cpu="s390x"
|
|
|
|
else
|
|
|
|
cpu="s390"
|
|
|
|
fi
|
2018-12-19 22:20:19 +03:00
|
|
|
elif check_define __riscv ; then
|
2021-09-17 21:08:09 +03:00
|
|
|
cpu="riscv"
|
2011-11-30 13:57:48 +04:00
|
|
|
elif check_define __arm__ ; then
|
|
|
|
cpu="arm"
|
2013-06-12 19:20:23 +04:00
|
|
|
elif check_define __aarch64__ ; then
|
|
|
|
cpu="aarch64"
|
2021-12-21 08:41:04 +03:00
|
|
|
elif check_define __loongarch64 ; then
|
|
|
|
cpu="loongarch64"
|
2008-12-29 20:14:15 +03:00
|
|
|
else
|
2022-10-12 16:27:03 +03:00
|
|
|
# Using uname is really broken, but it is just a fallback for architectures
|
|
|
|
# that are going to use TCI anyway
|
2016-05-16 16:10:20 +03:00
|
|
|
cpu=$(uname -m)
|
2022-10-12 16:27:03 +03:00
|
|
|
echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
|
2008-12-29 20:14:15 +03:00
|
|
|
fi
|
|
|
|
|
2022-10-12 16:27:03 +03:00
|
|
|
# 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.
|
2011-12-24 17:07:25 +04:00
|
|
|
# Note that this case should only have supported host CPUs, not guests.
|
2003-03-07 02:23:54 +03:00
|
|
|
case "$cpu" in
|
2021-11-09 11:23:56 +03:00
|
|
|
armv*b|armv*l|arm)
|
|
|
|
cpu="arm" ;;
|
|
|
|
|
2022-10-12 16:27:03 +03:00
|
|
|
i386|i486|i586|i686)
|
2003-08-11 01:36:04 +04:00
|
|
|
cpu="i386"
|
2021-11-09 11:23:56 +03:00
|
|
|
CPU_CFLAGS="-m32" ;;
|
|
|
|
x32)
|
2021-11-09 11:36:10 +03:00
|
|
|
cpu="x86_64"
|
2021-11-09 11:23:56 +03:00
|
|
|
CPU_CFLAGS="-mx32" ;;
|
2008-04-12 02:04:22 +04:00
|
|
|
x86_64|amd64)
|
|
|
|
cpu="x86_64"
|
2021-11-09 11:23:56 +03:00
|
|
|
# ??? 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" ;;
|
|
|
|
|
2009-10-17 16:17:47 +04:00
|
|
|
mips*)
|
2021-11-09 11:23:56 +03:00
|
|
|
cpu="mips" ;;
|
|
|
|
|
|
|
|
ppc)
|
|
|
|
CPU_CFLAGS="-m32" ;;
|
|
|
|
ppc64)
|
2022-03-05 09:16:46 +03:00
|
|
|
CPU_CFLAGS="-m64 -mbig-endian" ;;
|
2021-11-09 11:23:56 +03:00
|
|
|
ppc64le)
|
2021-11-09 11:18:20 +03:00
|
|
|
cpu="ppc64"
|
2022-03-05 09:16:46 +03:00
|
|
|
CPU_CFLAGS="-m64 -mlittle-endian" ;;
|
2021-11-09 11:23:56 +03:00
|
|
|
|
|
|
|
s390)
|
2021-11-08 16:18:17 +03:00
|
|
|
CPU_CFLAGS="-m31" ;;
|
2021-11-09 11:23:56 +03:00
|
|
|
s390x)
|
|
|
|
CPU_CFLAGS="-m64" ;;
|
|
|
|
|
2007-04-16 22:27:06 +04:00
|
|
|
sparc|sun4[cdmuv])
|
2003-05-13 22:59:59 +04:00
|
|
|
cpu="sparc"
|
2021-11-09 11:23:56 +03:00
|
|
|
CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" ;;
|
|
|
|
sparc64)
|
|
|
|
CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;;
|
2003-03-07 02:23:54 +03:00
|
|
|
esac
|
2009-08-12 20:20:24 +04:00
|
|
|
|
2010-12-23 13:43:49 +03:00
|
|
|
: ${make=${MAKE-make}}
|
2020-09-01 13:38:04 +03:00
|
|
|
|
configure: Look for auxiliary Python installations
At the moment, we look for just "python3" and "python", which is good
enough almost all of the time. But ... if you are on a platform that
uses an older Python by default and only offers a newer Python as an
option, you'll have to specify --python=/usr/bin/foo every time.
We can be kind and instead make a cursory attempt to locate a suitable
Python binary ourselves, looking for the remaining well-known binaries.
This configure loop will prefer, in order:
1. Whatever is specified in $PYTHON
2. python3
3. python
4. python3.11 down through python3.6
Notes:
- Python virtual environment provides binaries for "python3", "python",
and whichever version you used to create the venv,
e.g. "python3.8". If configure is invoked from inside of a venv, this
configure loop will not "break out" of that venv unless that venv is
created using an explicitly non-suitable version of Python that we
cannot use.
- In the event that no suitable python is found, the first python found
is the version used to generate the human-readable error message.
- The error message isn't printed right away to allow later
configuration code to pick up an explicitly configured python.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2023-02-10 03:31:43 +03:00
|
|
|
|
|
|
|
check_py_version() {
|
|
|
|
# We require python >= 3.6.
|
|
|
|
# NB: a True python conditional creates a non-zero return code (Failure)
|
|
|
|
"$1" -c 'import sys; sys.exit(sys.version_info < (3,6))'
|
|
|
|
}
|
|
|
|
|
2019-03-27 20:07:01 +03:00
|
|
|
python=
|
configure: Look for auxiliary Python installations
At the moment, we look for just "python3" and "python", which is good
enough almost all of the time. But ... if you are on a platform that
uses an older Python by default and only offers a newer Python as an
option, you'll have to specify --python=/usr/bin/foo every time.
We can be kind and instead make a cursory attempt to locate a suitable
Python binary ourselves, looking for the remaining well-known binaries.
This configure loop will prefer, in order:
1. Whatever is specified in $PYTHON
2. python3
3. python
4. python3.11 down through python3.6
Notes:
- Python virtual environment provides binaries for "python3", "python",
and whichever version you used to create the venv,
e.g. "python3.8". If configure is invoked from inside of a venv, this
configure loop will not "break out" of that venv unless that venv is
created using an explicitly non-suitable version of Python that we
cannot use.
- In the event that no suitable python is found, the first python found
is the version used to generate the human-readable error message.
- The error message isn't printed right away to allow later
configuration code to pick up an explicitly configured python.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2023-02-10 03:31:43 +03:00
|
|
|
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 python3.6; do
|
|
|
|
if has "$binary"; then
|
|
|
|
python=$(command -v "$binary")
|
|
|
|
if check_py_version "$python"; then
|
|
|
|
# This one is good.
|
|
|
|
first_python=
|
|
|
|
break
|
|
|
|
else
|
|
|
|
first_python=$python
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
else
|
|
|
|
# Same as above, but only check the environment variable.
|
|
|
|
has "${PYTHON}" || error_exit "The PYTHON environment variable does not point to an executable"
|
|
|
|
python=$(command -v "$PYTHON")
|
|
|
|
if check_py_version "$python"; then
|
|
|
|
# This one is good.
|
|
|
|
first_python=
|
|
|
|
else
|
|
|
|
first_python=$first_python
|
2019-03-27 20:07:01 +03:00
|
|
|
fi
|
configure: Look for auxiliary Python installations
At the moment, we look for just "python3" and "python", which is good
enough almost all of the time. But ... if you are on a platform that
uses an older Python by default and only offers a newer Python as an
option, you'll have to specify --python=/usr/bin/foo every time.
We can be kind and instead make a cursory attempt to locate a suitable
Python binary ourselves, looking for the remaining well-known binaries.
This configure loop will prefer, in order:
1. Whatever is specified in $PYTHON
2. python3
3. python
4. python3.11 down through python3.6
Notes:
- Python virtual environment provides binaries for "python3", "python",
and whichever version you used to create the venv,
e.g. "python3.8". If configure is invoked from inside of a venv, this
configure loop will not "break out" of that venv unless that venv is
created using an explicitly non-suitable version of Python that we
cannot use.
- In the event that no suitable python is found, the first python found
is the version used to generate the human-readable error message.
- The error message isn't printed right away to allow later
configuration code to pick up an explicitly configured python.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2023-02-10 03:31:43 +03:00
|
|
|
fi
|
2020-02-14 20:18:41 +03:00
|
|
|
|
2020-03-03 18:06:20 +03:00
|
|
|
# Check for ancillary tools used in testing
|
|
|
|
genisoimage=
|
2020-05-19 16:22:48 +03:00
|
|
|
for binary in genisoimage mkisofs
|
2020-03-03 18:06:20 +03:00
|
|
|
do
|
|
|
|
if has $binary
|
|
|
|
then
|
|
|
|
genisoimage=$(command -v "$binary")
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2009-08-03 16:46:07 +04:00
|
|
|
if test "$mingw32" = "yes" ; then
|
|
|
|
EXESUF=".exe"
|
2015-11-26 14:13:12 +03:00
|
|
|
# MinGW needs -mthreads for TLS and macro _MT.
|
2020-09-23 12:26:15 +03:00
|
|
|
CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
|
2020-08-18 13:17:01 +03:00
|
|
|
prefix="/qemu"
|
2022-04-20 18:33:57 +03:00
|
|
|
bindir=""
|
2020-08-26 14:04:12 +03:00
|
|
|
qemu_suffix=""
|
2009-08-03 16:46:07 +04:00
|
|
|
fi
|
|
|
|
|
2009-06-11 22:28:25 +04:00
|
|
|
werror=""
|
2007-11-11 23:17:03 +03:00
|
|
|
|
2022-06-24 18:40:42 +03:00
|
|
|
meson_option_build_array() {
|
|
|
|
printf '['
|
2022-07-20 18:26:31 +03:00
|
|
|
(if test "$targetos" = windows; then
|
2022-06-24 18:40:42 +03:00
|
|
|
IFS=\;
|
|
|
|
else
|
|
|
|
IFS=:
|
|
|
|
fi
|
|
|
|
for e in $1; do
|
2022-07-20 18:26:29 +03:00
|
|
|
printf '"""'
|
|
|
|
# backslash escape any '\' and '"' characters
|
|
|
|
printf "%s" "$e" | sed -e 's/\([\"]\)/\\\1/g'
|
|
|
|
printf '""",'
|
2022-06-24 18:40:42 +03:00
|
|
|
done)
|
|
|
|
printf ']\n'
|
|
|
|
}
|
|
|
|
|
2022-08-25 18:06:59 +03:00
|
|
|
. "$source_path/scripts/meson-buildoptions.sh"
|
2021-10-07 16:08:28 +03:00
|
|
|
|
|
|
|
meson_options=
|
2022-04-20 18:33:58 +03:00
|
|
|
meson_option_add() {
|
|
|
|
meson_options="$meson_options $(quote_sh "$1")"
|
|
|
|
}
|
2021-10-07 16:08:28 +03:00
|
|
|
meson_option_parse() {
|
|
|
|
meson_options="$meson_options $(_meson_option_parse "$@")"
|
|
|
|
if test $? -eq 1; then
|
|
|
|
echo "ERROR: unknown option $1"
|
|
|
|
echo "Try '$0 --help' for more information"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2003-03-07 02:23:54 +03:00
|
|
|
for opt do
|
2016-05-16 16:10:20 +03:00
|
|
|
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
|
2003-03-07 02:23:54 +03:00
|
|
|
case "$opt" in
|
2005-12-18 22:14:49 +03:00
|
|
|
--help|-h) show_help=yes
|
|
|
|
;;
|
2022-08-25 18:06:59 +03:00
|
|
|
--version|-V) exec cat "$source_path/VERSION"
|
2011-04-07 09:12:28 +04:00
|
|
|
;;
|
2006-04-16 17:28:56 +04:00
|
|
|
--prefix=*) prefix="$optarg"
|
2003-03-07 02:23:54 +03:00
|
|
|
;;
|
2008-12-29 20:14:15 +03:00
|
|
|
--cross-prefix=*)
|
2003-03-07 02:23:54 +03:00
|
|
|
;;
|
2008-12-29 20:14:15 +03:00
|
|
|
--cc=*)
|
2003-03-07 02:23:54 +03:00
|
|
|
;;
|
2006-04-16 17:28:56 +04:00
|
|
|
--host-cc=*) host_cc="$optarg"
|
2005-07-23 18:27:54 +04:00
|
|
|
;;
|
2013-08-07 19:39:36 +04:00
|
|
|
--cxx=*)
|
|
|
|
;;
|
2023-04-18 19:15:54 +03:00
|
|
|
--objcc=*)
|
2012-08-12 01:34:40 +04:00
|
|
|
;;
|
2006-04-16 17:28:56 +04:00
|
|
|
--make=*) make="$optarg"
|
2003-03-07 02:23:54 +03:00
|
|
|
;;
|
2020-09-01 13:38:04 +03:00
|
|
|
--install=*)
|
2006-04-17 17:57:12 +04:00
|
|
|
;;
|
2023-05-11 06:54:23 +03:00
|
|
|
--python=*) python="$optarg"
|
2011-07-23 01:08:09 +04:00
|
|
|
;;
|
2019-06-10 13:05:14 +03:00
|
|
|
--skip-meson) skip_meson=yes
|
|
|
|
;;
|
2020-08-26 09:04:15 +03:00
|
|
|
--ninja=*) ninja="$optarg"
|
|
|
|
;;
|
2011-09-03 00:53:28 +04:00
|
|
|
--smbd=*) smbd="$optarg"
|
|
|
|
;;
|
2009-08-03 16:46:02 +04:00
|
|
|
--extra-cflags=*)
|
2003-03-07 02:23:54 +03:00
|
|
|
;;
|
2017-06-06 16:07:47 +03:00
|
|
|
--extra-cxxflags=*)
|
|
|
|
;;
|
2022-01-09 00:38:55 +03:00
|
|
|
--extra-objcflags=*)
|
|
|
|
;;
|
2009-08-03 16:46:02 +04:00
|
|
|
--extra-ldflags=*)
|
2003-03-07 02:23:54 +03:00
|
|
|
;;
|
2022-04-20 18:33:39 +03:00
|
|
|
--cross-cc-*)
|
2012-02-08 16:54:13 +04:00
|
|
|
;;
|
2022-05-27 18:35:51 +03:00
|
|
|
--cross-prefix-*)
|
|
|
|
;;
|
2022-04-20 18:33:58 +03:00
|
|
|
--enable-debug-info) meson_option_add -Ddebug=true
|
2012-02-08 16:54:13 +04:00
|
|
|
;;
|
2022-04-20 18:33:58 +03:00
|
|
|
--disable-debug-info) meson_option_add -Ddebug=false
|
2018-04-04 22:27:05 +03:00
|
|
|
;;
|
2023-05-11 06:54:28 +03:00
|
|
|
--enable-docs) docs=enabled
|
|
|
|
;;
|
|
|
|
--disable-docs) docs=disabled
|
|
|
|
;;
|
2014-02-10 10:48:56 +04:00
|
|
|
--enable-modules)
|
|
|
|
modules="yes"
|
2015-11-02 17:06:23 +03:00
|
|
|
;;
|
|
|
|
--disable-modules)
|
|
|
|
modules="no"
|
2014-02-10 10:48:56 +04:00
|
|
|
;;
|
2009-08-03 16:45:55 +04:00
|
|
|
--cpu=*)
|
2003-03-07 02:23:54 +03:00
|
|
|
;;
|
2006-04-16 17:28:56 +04:00
|
|
|
--target-list=*) target_list="$optarg"
|
2019-03-19 14:59:12 +03:00
|
|
|
if test "$target_list_exclude"; then
|
|
|
|
error_exit "Can't mix --target-list with --target-list-exclude"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
--target-list-exclude=*) target_list_exclude="$optarg"
|
|
|
|
if test "$target_list"; then
|
|
|
|
error_exit "Can't mix --target-list-exclude with --target-list"
|
|
|
|
fi
|
2003-06-16 00:25:43 +04:00
|
|
|
;;
|
2022-04-20 18:33:58 +03:00
|
|
|
--with-default-devices) meson_option_add -Ddefault_devices=true
|
2019-01-23 09:56:17 +03:00
|
|
|
;;
|
2022-04-20 18:33:58 +03:00
|
|
|
--without-default-devices) meson_option_add -Ddefault_devices=false
|
2019-01-23 09:56:17 +03:00
|
|
|
;;
|
2021-07-07 16:17:44 +03:00
|
|
|
--with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
|
|
|
|
;;
|
|
|
|
--with-devices-*) device_arch=${opt#--with-devices-};
|
|
|
|
device_arch=${device_arch%%=*}
|
|
|
|
cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
|
|
|
|
if test -f "$cf"; then
|
|
|
|
device_archs="$device_archs $device_arch"
|
|
|
|
eval "devices_${device_arch}=\$optarg"
|
|
|
|
else
|
|
|
|
error_exit "File $cf does not exist"
|
|
|
|
fi
|
|
|
|
;;
|
2020-12-10 22:04:13 +03:00
|
|
|
--without-default-features) # processed above
|
|
|
|
;;
|
2010-01-31 14:23:45 +03:00
|
|
|
--static)
|
|
|
|
static="yes"
|
2012-01-31 23:03:45 +04:00
|
|
|
QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
|
2003-06-09 23:53:12 +04:00
|
|
|
;;
|
2010-05-26 18:08:26 +04:00
|
|
|
--bindir=*) bindir="$optarg"
|
|
|
|
;;
|
2020-08-26 14:04:12 +03:00
|
|
|
--with-suffix=*) qemu_suffix="$optarg"
|
2012-04-18 23:55:50 +04:00
|
|
|
;;
|
2018-04-18 10:50:44 +03:00
|
|
|
--host=*|--build=*|\
|
|
|
|
--disable-dependency-tracking|\
|
2012-10-04 01:35:57 +04:00
|
|
|
--sbindir=*|--sharedstatedir=*|\
|
2020-10-16 11:35:10 +03:00
|
|
|
--oldincludedir=*|--datarootdir=*|--infodir=*|\
|
2011-11-24 16:11:31 +04:00
|
|
|
--htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
|
|
|
|
# These switches are silently ignored, for compatibility with
|
|
|
|
# autoconf-generated configure scripts. This allows QEMU's
|
|
|
|
# configure to be used by RPM and similar macros that set
|
|
|
|
# lots of directory switches by default.
|
|
|
|
;;
|
2009-04-13 22:45:38 +04:00
|
|
|
--enable-debug-tcg) debug_tcg="yes"
|
|
|
|
;;
|
|
|
|
--disable-debug-tcg) debug_tcg="no"
|
|
|
|
;;
|
2009-06-04 14:39:04 +04:00
|
|
|
--enable-debug)
|
|
|
|
# Enable debugging options that aren't excessively noisy
|
|
|
|
debug_tcg="yes"
|
2023-05-01 20:34:43 +03:00
|
|
|
meson_option_parse --enable-debug-graph-lock ""
|
2021-10-13 12:46:09 +03:00
|
|
|
meson_option_parse --enable-debug-mutex ""
|
2022-04-20 18:33:58 +03:00
|
|
|
meson_option_add -Doptimization=0
|
2015-11-03 23:43:42 +03:00
|
|
|
fortify_source="no"
|
2009-06-04 14:39:04 +04:00
|
|
|
;;
|
2018-01-16 18:11:51 +03:00
|
|
|
--enable-sanitizers) sanitizers="yes"
|
|
|
|
;;
|
|
|
|
--disable-sanitizers) sanitizers="no"
|
|
|
|
;;
|
2020-06-12 22:02:23 +03:00
|
|
|
--enable-tsan) tsan="yes"
|
|
|
|
;;
|
|
|
|
--disable-tsan) tsan="no"
|
|
|
|
;;
|
2020-09-18 11:57:25 +03:00
|
|
|
--disable-tcg) tcg="disabled"
|
2021-07-09 17:29:54 +03:00
|
|
|
plugins="no"
|
2017-07-03 17:59:07 +03:00
|
|
|
;;
|
2020-09-18 11:57:25 +03:00
|
|
|
--enable-tcg) tcg="enabled"
|
2017-07-03 17:59:07 +03:00
|
|
|
;;
|
2006-03-19 19:31:11 +03:00
|
|
|
--disable-system) softmmu="no"
|
2006-03-19 17:54:16 +03:00
|
|
|
;;
|
2006-03-19 19:31:11 +03:00
|
|
|
--enable-system) softmmu="yes"
|
2006-03-19 17:54:16 +03:00
|
|
|
;;
|
2009-07-30 14:14:59 +04:00
|
|
|
--disable-user)
|
|
|
|
linux_user="no" ;
|
|
|
|
bsd_user="no" ;
|
|
|
|
;;
|
|
|
|
--enable-user) ;;
|
2007-01-18 23:06:33 +03:00
|
|
|
--disable-linux-user) linux_user="no"
|
2006-03-19 17:54:16 +03:00
|
|
|
;;
|
2007-01-18 23:06:33 +03:00
|
|
|
--enable-linux-user) linux_user="yes"
|
|
|
|
;;
|
2008-10-26 23:33:16 +03:00
|
|
|
--disable-bsd-user) bsd_user="no"
|
|
|
|
;;
|
|
|
|
--enable-bsd-user) bsd_user="yes"
|
|
|
|
;;
|
2011-11-15 22:12:17 +04:00
|
|
|
--enable-pie) pie="yes"
|
2009-09-12 03:17:55 +04:00
|
|
|
;;
|
2011-11-15 22:12:17 +04:00
|
|
|
--disable-pie) pie="no"
|
2009-09-12 03:17:55 +04:00
|
|
|
;;
|
2007-11-11 23:17:03 +03:00
|
|
|
--enable-werror) werror="yes"
|
|
|
|
;;
|
|
|
|
--disable-werror) werror="no"
|
|
|
|
;;
|
2014-03-28 20:19:02 +04:00
|
|
|
--enable-stack-protector) stack_protector="yes"
|
|
|
|
;;
|
|
|
|
--disable-stack-protector) stack_protector="no"
|
|
|
|
;;
|
2020-05-29 23:51:21 +03:00
|
|
|
--enable-safe-stack) safe_stack="yes"
|
|
|
|
;;
|
|
|
|
--disable-safe-stack) safe_stack="no"
|
|
|
|
;;
|
2020-12-05 02:06:14 +03:00
|
|
|
--enable-cfi)
|
|
|
|
cfi="true";
|
2022-04-20 18:33:58 +03:00
|
|
|
meson_option_add -Db_lto=true
|
2020-12-05 02:06:14 +03:00
|
|
|
;;
|
|
|
|
--disable-cfi) cfi="false"
|
|
|
|
;;
|
2020-10-05 12:31:15 +03:00
|
|
|
--disable-fdt) fdt="disabled"
|
2009-08-12 20:29:54 +04:00
|
|
|
;;
|
2020-10-05 12:31:15 +03:00
|
|
|
--enable-fdt) fdt="enabled"
|
|
|
|
;;
|
|
|
|
--enable-fdt=git) fdt="internal"
|
|
|
|
;;
|
2021-10-07 16:08:27 +03:00
|
|
|
--enable-fdt=*) fdt="$optarg"
|
2009-08-12 20:29:54 +04:00
|
|
|
;;
|
2012-02-28 15:25:50 +04:00
|
|
|
--with-coroutine=*) coroutine="$optarg"
|
|
|
|
;;
|
2017-10-20 17:02:43 +03:00
|
|
|
--with-git=*) git="$optarg"
|
|
|
|
;;
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-19 20:20:46 +03:00
|
|
|
--with-git-submodules=*)
|
|
|
|
git_submodules_action="$optarg"
|
2017-10-26 15:52:26 +03:00
|
|
|
;;
|
2021-07-09 17:29:56 +03:00
|
|
|
--enable-plugins) if test "$mingw32" = "yes"; then
|
|
|
|
error_exit "TCG plugins not currently supported on Windows platforms"
|
|
|
|
else
|
|
|
|
plugins="yes"
|
|
|
|
fi
|
2019-06-13 16:52:25 +03:00
|
|
|
;;
|
|
|
|
--disable-plugins) plugins="no"
|
|
|
|
;;
|
2019-11-28 18:35:24 +03:00
|
|
|
--enable-containers) use_containers="yes"
|
|
|
|
;;
|
|
|
|
--disable-containers) use_containers="no"
|
|
|
|
;;
|
2020-03-16 20:21:48 +03:00
|
|
|
--gdb=*) gdb_bin="$optarg"
|
|
|
|
;;
|
2022-06-13 23:26:24 +03:00
|
|
|
--enable-vfio-user-server) vfio_user_server="enabled"
|
|
|
|
;;
|
|
|
|
--disable-vfio-user-server) vfio_user_server="disabled"
|
|
|
|
;;
|
2021-10-07 16:08:29 +03:00
|
|
|
# everything else has the same name in configure and meson
|
2022-04-20 18:33:51 +03:00
|
|
|
--*) meson_option_parse "$opt" "$optarg"
|
2007-11-17 13:24:32 +03:00
|
|
|
;;
|
2003-03-07 02:23:54 +03:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2021-07-09 17:29:54 +03:00
|
|
|
# test for any invalid configuration combinations
|
|
|
|
if test "$plugins" = "yes" -a "$tcg" = "disabled"; then
|
|
|
|
error_exit "Can't enable plugins on non-TCG builds"
|
|
|
|
fi
|
|
|
|
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-19 20:20:46 +03:00
|
|
|
case $git_submodules_action in
|
|
|
|
update|validate)
|
|
|
|
if test ! -e "$source_path/.git"; then
|
|
|
|
echo "ERROR: cannot $git_submodules_action git submodules without .git"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
ignore)
|
2021-05-12 10:18:55 +03:00
|
|
|
if ! test -f "$source_path/ui/keycodemapdb/README"
|
|
|
|
then
|
|
|
|
echo
|
|
|
|
echo "ERROR: missing GIT submodules"
|
|
|
|
echo
|
|
|
|
if test -e "$source_path/.git"; then
|
|
|
|
echo "--with-git-submodules=ignore specified but submodules were not"
|
|
|
|
echo "checked out. Please initialize and update submodules."
|
|
|
|
else
|
|
|
|
echo "This is not a GIT checkout but module content appears to"
|
|
|
|
echo "be missing. Do not use 'git archive' or GitHub download links"
|
|
|
|
echo "to acquire QEMU source archives. Non-GIT builds are only"
|
|
|
|
echo "supported with source archives linked from:"
|
|
|
|
echo
|
|
|
|
echo " https://www.qemu.org/download/#source"
|
|
|
|
echo
|
|
|
|
echo "Developers working with GIT can use scripts/archive-source.sh"
|
|
|
|
echo "if they need to create valid source archives."
|
|
|
|
fi
|
|
|
|
echo
|
|
|
|
exit 1
|
|
|
|
fi
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-19 20:20:46 +03:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2011-05-03 17:50:13 +04:00
|
|
|
default_target_list=""
|
2013-05-20 19:16:15 +04:00
|
|
|
mak_wilds=""
|
|
|
|
|
2021-11-09 12:10:41 +03:00
|
|
|
if [ "$linux_user" != no ]; then
|
2022-08-25 18:06:59 +03:00
|
|
|
if [ "$targetos" = linux ] && [ -d "$source_path/linux-user/include/host/$cpu" ]; then
|
2021-11-09 12:10:41 +03:00
|
|
|
linux_user=yes
|
|
|
|
elif [ "$linux_user" = yes ]; then
|
|
|
|
error_exit "linux-user not supported on this architecture"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
if [ "$bsd_user" != no ]; then
|
|
|
|
if [ "$bsd_user" = "" ]; then
|
|
|
|
test $targetos = freebsd && bsd_user=yes
|
|
|
|
fi
|
2022-08-25 18:06:59 +03:00
|
|
|
if [ "$bsd_user" = yes ] && ! [ -d "$source_path/bsd-user/$targetos" ]; then
|
2021-11-09 12:10:41 +03:00
|
|
|
error_exit "bsd-user not supported on this host OS"
|
|
|
|
fi
|
|
|
|
fi
|
2013-05-20 19:16:15 +04:00
|
|
|
if [ "$softmmu" = "yes" ]; then
|
2021-07-07 16:17:43 +03:00
|
|
|
mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
|
2011-05-03 17:50:13 +04:00
|
|
|
fi
|
2013-05-20 19:16:15 +04:00
|
|
|
if [ "$linux_user" = "yes" ]; then
|
2021-07-07 16:17:43 +03:00
|
|
|
mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
|
2011-05-03 17:50:13 +04:00
|
|
|
fi
|
2013-05-20 19:16:15 +04:00
|
|
|
if [ "$bsd_user" = "yes" ]; then
|
2021-07-07 16:17:43 +03:00
|
|
|
mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
|
2011-05-03 17:50:13 +04:00
|
|
|
fi
|
|
|
|
|
2020-09-09 14:27:37 +03:00
|
|
|
for config in $mak_wilds; do
|
|
|
|
target="$(basename "$config" .mak)"
|
2020-09-15 16:43:14 +03:00
|
|
|
if echo "$target_list_exclude" | grep -vq "$target"; then
|
2020-09-09 14:27:37 +03:00
|
|
|
default_target_list="${default_target_list} $target"
|
|
|
|
fi
|
|
|
|
done
|
2013-05-20 19:16:15 +04:00
|
|
|
|
2006-04-08 18:26:41 +04:00
|
|
|
if test x"$show_help" = x"yes" ; then
|
|
|
|
cat << EOF
|
|
|
|
|
|
|
|
Usage: configure [options]
|
|
|
|
Options: [defaults in brackets after descriptions]
|
|
|
|
|
2013-12-19 01:09:39 +04:00
|
|
|
Standard options:
|
|
|
|
--help print this message
|
|
|
|
--prefix=PREFIX install in PREFIX [$prefix]
|
2022-01-12 14:27:22 +03:00
|
|
|
--target-list=LIST set target list (default: build all)
|
2013-12-19 01:09:39 +04:00
|
|
|
$(echo Available targets: $default_target_list | \
|
|
|
|
fold -s -w 53 | sed -e 's/^/ /')
|
2019-03-19 14:59:12 +03:00
|
|
|
--target-list-exclude=LIST exclude a set of targets from the default target-list
|
2013-12-19 01:09:39 +04:00
|
|
|
|
|
|
|
Advanced options (experts only):
|
2021-01-26 04:24:48 +03:00
|
|
|
--cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
|
2013-12-19 01:09:39 +04:00
|
|
|
--cc=CC use C compiler CC [$cc]
|
|
|
|
--host-cc=CC use C compiler CC [$host_cc] for code run at
|
|
|
|
build time
|
|
|
|
--cxx=CXX use C++ compiler CXX [$cxx]
|
|
|
|
--objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
|
2021-11-05 12:09:26 +03:00
|
|
|
--extra-cflags=CFLAGS append extra C compiler flags CFLAGS
|
|
|
|
--extra-cxxflags=CXXFLAGS append extra C++ compiler flags CXXFLAGS
|
2022-01-09 00:38:55 +03:00
|
|
|
--extra-objcflags=OBJCFLAGS append extra Objective C compiler flags OBJCFLAGS
|
2013-12-19 01:09:39 +04:00
|
|
|
--extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
|
2018-04-04 22:27:05 +03:00
|
|
|
--cross-cc-ARCH=CC use compiler when building ARCH guest test cases
|
2022-01-20 20:31:41 +03:00
|
|
|
--cross-cc-cflags-ARCH= use compiler flags when building ARCH guest tests
|
2022-05-27 18:35:51 +03:00
|
|
|
--cross-prefix-ARCH=PREFIX cross compiler prefix when building ARCH guest test cases
|
2013-12-19 01:09:39 +04:00
|
|
|
--make=MAKE use specified make [$make]
|
|
|
|
--python=PYTHON use specified python [$python]
|
2020-08-26 09:04:15 +03:00
|
|
|
--ninja=NINJA use specified ninja [$ninja]
|
2013-12-19 01:09:39 +04:00
|
|
|
--smbd=SMBD use specified smbd [$smbd]
|
2018-03-27 18:09:30 +03:00
|
|
|
--with-git=GIT use specified git [$git]
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-19 20:20:46 +03:00
|
|
|
--with-git-submodules=update update git submodules (default if .git dir exists)
|
|
|
|
--with-git-submodules=validate fail if git submodules are not up to date
|
|
|
|
--with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
|
2013-12-19 01:09:39 +04:00
|
|
|
--static enable static build [$static]
|
|
|
|
--bindir=PATH install binaries in PATH
|
2020-08-26 14:04:14 +03:00
|
|
|
--with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
|
2020-12-14 13:34:47 +03:00
|
|
|
--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
|
2021-07-07 16:17:44 +03:00
|
|
|
desired devices in configs/devices/)
|
|
|
|
--with-devices-ARCH=NAME override default configs/devices
|
2013-12-19 01:09:39 +04:00
|
|
|
--enable-debug enable common debug build options
|
2018-01-16 18:11:51 +03:00
|
|
|
--enable-sanitizers enable default sanitizers
|
2020-06-12 22:02:23 +03:00
|
|
|
--enable-tsan enable thread sanitizer
|
2013-12-19 01:09:39 +04:00
|
|
|
--disable-werror disable compilation abort on warning
|
2014-03-28 20:19:02 +04:00
|
|
|
--disable-stack-protector disable compiler-provided stack protection
|
2015-06-17 22:19:26 +03:00
|
|
|
--cpu=CPU Build for host CPU [$cpu]
|
2013-12-19 01:09:39 +04:00
|
|
|
--with-coroutine=BACKEND coroutine backend. Supported options:
|
2017-04-28 15:24:44 +03:00
|
|
|
ucontext, sigaltstack, windows
|
2019-06-13 16:52:25 +03:00
|
|
|
--enable-plugins
|
|
|
|
enable plugins via shared library loading
|
2019-11-28 18:35:24 +03:00
|
|
|
--disable-containers don't use containers for cross-building
|
2020-03-16 20:21:48 +03:00
|
|
|
--gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
|
2021-10-07 16:08:28 +03:00
|
|
|
EOF
|
|
|
|
meson_options_help
|
|
|
|
cat << EOF
|
2015-06-17 22:19:26 +03:00
|
|
|
system all system emulation targets
|
|
|
|
user supported user emulation targets
|
|
|
|
linux-user all linux usermode emulation targets
|
|
|
|
bsd-user all BSD usermode emulation targets
|
|
|
|
pie Position Independent Executables
|
2019-07-18 15:04:13 +03:00
|
|
|
modules modules support (non-Windows)
|
2015-06-17 22:19:26 +03:00
|
|
|
debug-tcg TCG debugging (default is disabled)
|
|
|
|
debug-info debugging information
|
2020-05-29 23:51:21 +03:00
|
|
|
safe-stack SafeStack Stack Smash Protection. Depends on
|
2023-01-31 21:02:39 +03:00
|
|
|
clang/llvm and requires coroutine backend ucontext.
|
2013-12-19 01:09:39 +04:00
|
|
|
|
|
|
|
NOTE: The object files are built at the place where configure is launched
|
2006-04-08 18:26:41 +04:00
|
|
|
EOF
|
2014-04-18 10:55:36 +04:00
|
|
|
exit 0
|
2006-04-08 18:26:41 +04:00
|
|
|
fi
|
|
|
|
|
2019-03-11 13:20:34 +03:00
|
|
|
# Remove old dependency files to make sure that they get properly regenerated
|
2022-08-25 18:07:00 +03:00
|
|
|
rm -f ./*/config-devices.mak.d
|
2019-03-11 13:20:34 +03:00
|
|
|
|
2019-03-27 20:07:01 +03:00
|
|
|
if test -z "$python"
|
|
|
|
then
|
configure: Look for auxiliary Python installations
At the moment, we look for just "python3" and "python", which is good
enough almost all of the time. But ... if you are on a platform that
uses an older Python by default and only offers a newer Python as an
option, you'll have to specify --python=/usr/bin/foo every time.
We can be kind and instead make a cursory attempt to locate a suitable
Python binary ourselves, looking for the remaining well-known binaries.
This configure loop will prefer, in order:
1. Whatever is specified in $PYTHON
2. python3
3. python
4. python3.11 down through python3.6
Notes:
- Python virtual environment provides binaries for "python3", "python",
and whichever version you used to create the venv,
e.g. "python3.8". If configure is invoked from inside of a venv, this
configure loop will not "break out" of that venv unless that venv is
created using an explicitly non-suitable version of Python that we
cannot use.
- In the event that no suitable python is found, the first python found
is the version used to generate the human-readable error message.
- The error message isn't printed right away to allow later
configuration code to pick up an explicitly configured python.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2023-02-10 03:31:43 +03:00
|
|
|
# If first_python is set, there was a binary somewhere even though
|
|
|
|
# it was not suitable. Use it for the error message.
|
|
|
|
if test -n "$first_python"; then
|
|
|
|
error_exit "Cannot use '$first_python', Python >= 3.6 is required." \
|
|
|
|
"Use --python=/path/to/python to specify a supported Python."
|
|
|
|
else
|
|
|
|
error_exit "Python not found. Use --python=/path/to/python"
|
|
|
|
fi
|
2017-03-28 16:44:18 +03:00
|
|
|
fi
|
configure: Look for auxiliary Python installations
At the moment, we look for just "python3" and "python", which is good
enough almost all of the time. But ... if you are on a platform that
uses an older Python by default and only offers a newer Python as an
option, you'll have to specify --python=/usr/bin/foo every time.
We can be kind and instead make a cursory attempt to locate a suitable
Python binary ourselves, looking for the remaining well-known binaries.
This configure loop will prefer, in order:
1. Whatever is specified in $PYTHON
2. python3
3. python
4. python3.11 down through python3.6
Notes:
- Python virtual environment provides binaries for "python3", "python",
and whichever version you used to create the venv,
e.g. "python3.8". If configure is invoked from inside of a venv, this
configure loop will not "break out" of that venv unless that venv is
created using an explicitly non-suitable version of Python that we
cannot use.
- In the event that no suitable python is found, the first python found
is the version used to generate the human-readable error message.
- The error message isn't printed right away to allow later
configuration code to pick up an explicitly configured python.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2023-02-10 03:31:43 +03:00
|
|
|
|
2020-08-25 23:27:55 +03:00
|
|
|
if ! has "$make"
|
|
|
|
then
|
|
|
|
error_exit "GNU make ($make) not found"
|
|
|
|
fi
|
2017-03-28 16:44:18 +03:00
|
|
|
|
configure: Look for auxiliary Python installations
At the moment, we look for just "python3" and "python", which is good
enough almost all of the time. But ... if you are on a platform that
uses an older Python by default and only offers a newer Python as an
option, you'll have to specify --python=/usr/bin/foo every time.
We can be kind and instead make a cursory attempt to locate a suitable
Python binary ourselves, looking for the remaining well-known binaries.
This configure loop will prefer, in order:
1. Whatever is specified in $PYTHON
2. python3
3. python
4. python3.11 down through python3.6
Notes:
- Python virtual environment provides binaries for "python3", "python",
and whichever version you used to create the venv,
e.g. "python3.8". If configure is invoked from inside of a venv, this
configure loop will not "break out" of that venv unless that venv is
created using an explicitly non-suitable version of Python that we
cannot use.
- In the event that no suitable python is found, the first python found
is the version used to generate the human-readable error message.
- The error message isn't printed right away to allow later
configuration code to pick up an explicitly configured python.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2023-02-10 03:31:43 +03:00
|
|
|
if ! check_py_version "$python"; then
|
2020-09-25 18:40:27 +03:00
|
|
|
error_exit "Cannot use '$python', Python >= 3.6 is required." \
|
2017-03-28 16:44:18 +03:00
|
|
|
"Use --python=/path/to/python to specify a supported Python."
|
|
|
|
fi
|
|
|
|
|
2023-05-11 06:54:23 +03:00
|
|
|
# Resolve PATH
|
|
|
|
python="$(command -v "$python")"
|
|
|
|
|
|
|
|
# Create a Python virtual environment using our configured python.
|
|
|
|
# The stdout of this script will be the location of a symlink that
|
|
|
|
# points to the configured Python.
|
|
|
|
# Entry point scripts for pip, meson, and sphinx are generated if those
|
|
|
|
# packages are present.
|
|
|
|
|
|
|
|
# Defaults assumed for now:
|
|
|
|
# - venv is cleared if it exists already;
|
|
|
|
# - venv is allowed to use system packages;
|
|
|
|
# - all setup is performed **offline**;
|
|
|
|
# - pip is not installed into the venv when possible,
|
|
|
|
# but ensurepip is called as a fallback when necessary.
|
|
|
|
|
|
|
|
echo "python determined to be '$python'"
|
|
|
|
echo "python version: $($python --version)"
|
|
|
|
|
|
|
|
python="$($python -B "${source_path}/python/scripts/mkvenv.py" create pyvenv)"
|
|
|
|
if test "$?" -ne 0 ; then
|
|
|
|
error_exit "python venv creation failed"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Suppress writing compiled files
|
|
|
|
python="$python -B"
|
2023-02-10 19:18:54 +03:00
|
|
|
|
2017-03-28 16:44:18 +03:00
|
|
|
|
configure: use 'mkvenv ensure meson' to bootstrap meson
This commit changes how we detect and install meson. It notably removes
'--meson='.
Currently, configure creates a lightweight Python virtual environment
unconditionally using the user's configured $python that inherits system
packages. Temporarily, we forced the use of meson source present via git
submodule or in the release tarball.
With this patch, we restore the ability to use a system-provided meson:
If Meson is installed in the build venv and meets our minimum version
requirements, we will use that Meson. This includes a system provided
meson, which would be visible via system-site packages inside the venv.
In the event that Meson is installed but *not for the chosen Python
interpreter*, not found, or of insufficient version, we will attempt to
install Meson from vendored source into the newly created Python virtual
environment. This vendored installation replaces both the git submodule
and tarball source mechanisms for sourcing meson.
As a result of this patch, the Python interpreter we use for both our
own build scripts *and* Meson extensions are always known to be the
exact same Python. As a further benefit, there will also be a symlink
available in the build directory that points to the correct, configured
python and can be used by e.g. manual tests to invoke the correct,
configured Python unambiguously.
Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20230511035435.734312-18-jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2023-05-11 06:54:25 +03:00
|
|
|
if ! $python "${source_path}/python/scripts/mkvenv.py" ensure \
|
|
|
|
--dir "${source_path}/python/wheels" \
|
|
|
|
--diagnose "meson" \
|
|
|
|
"meson>=0.61.5" ;
|
|
|
|
then
|
|
|
|
exit 1
|
2019-06-10 13:05:14 +03:00
|
|
|
fi
|
|
|
|
|
configure: use 'mkvenv ensure meson' to bootstrap meson
This commit changes how we detect and install meson. It notably removes
'--meson='.
Currently, configure creates a lightweight Python virtual environment
unconditionally using the user's configured $python that inherits system
packages. Temporarily, we forced the use of meson source present via git
submodule or in the release tarball.
With this patch, we restore the ability to use a system-provided meson:
If Meson is installed in the build venv and meets our minimum version
requirements, we will use that Meson. This includes a system provided
meson, which would be visible via system-site packages inside the venv.
In the event that Meson is installed but *not for the chosen Python
interpreter*, not found, or of insufficient version, we will attempt to
install Meson from vendored source into the newly created Python virtual
environment. This vendored installation replaces both the git submodule
and tarball source mechanisms for sourcing meson.
As a result of this patch, the Python interpreter we use for both our
own build scripts *and* Meson extensions are always known to be the
exact same Python. As a further benefit, there will also be a symlink
available in the build directory that points to the correct, configured
python and can be used by e.g. manual tests to invoke the correct,
configured Python unambiguously.
Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20230511035435.734312-18-jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2023-05-11 06:54:25 +03:00
|
|
|
# At this point, we expect Meson to be installed and available.
|
|
|
|
# We expect mkvenv or pip to have created pyvenv/bin/meson for us.
|
|
|
|
# We ignore PATH completely here: we want to use the venv's Meson
|
|
|
|
# *exclusively*.
|
2019-08-21 10:21:16 +03:00
|
|
|
|
configure: use 'mkvenv ensure meson' to bootstrap meson
This commit changes how we detect and install meson. It notably removes
'--meson='.
Currently, configure creates a lightweight Python virtual environment
unconditionally using the user's configured $python that inherits system
packages. Temporarily, we forced the use of meson source present via git
submodule or in the release tarball.
With this patch, we restore the ability to use a system-provided meson:
If Meson is installed in the build venv and meets our minimum version
requirements, we will use that Meson. This includes a system provided
meson, which would be visible via system-site packages inside the venv.
In the event that Meson is installed but *not for the chosen Python
interpreter*, not found, or of insufficient version, we will attempt to
install Meson from vendored source into the newly created Python virtual
environment. This vendored installation replaces both the git submodule
and tarball source mechanisms for sourcing meson.
As a result of this patch, the Python interpreter we use for both our
own build scripts *and* Meson extensions are always known to be the
exact same Python. As a further benefit, there will also be a symlink
available in the build directory that points to the correct, configured
python and can be used by e.g. manual tests to invoke the correct,
configured Python unambiguously.
Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20230511035435.734312-18-jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2023-05-11 06:54:25 +03:00
|
|
|
meson="$(cd pyvenv/bin; pwd)/meson"
|
2019-08-21 10:21:16 +03:00
|
|
|
|
2020-08-13 16:28:11 +03:00
|
|
|
# Probe for ninja
|
2020-08-26 09:04:15 +03:00
|
|
|
|
|
|
|
if test -z "$ninja"; then
|
|
|
|
for c in ninja ninja-build samu; do
|
|
|
|
if has $c; then
|
|
|
|
ninja=$(command -v "$c")
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
2020-08-13 16:28:11 +03:00
|
|
|
if test -z "$ninja"; then
|
|
|
|
error_exit "Cannot find Ninja"
|
|
|
|
fi
|
2020-08-26 09:04:15 +03:00
|
|
|
fi
|
2019-06-10 13:05:14 +03:00
|
|
|
|
2017-11-02 12:09:06 +03:00
|
|
|
# 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
|
|
|
|
|
2014-02-25 22:27:49 +04:00
|
|
|
# Consult white-list to determine whether to enable werror
|
|
|
|
# by default. Only enable by default for git builds
|
|
|
|
if test -z "$werror" ; then
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-19 20:20:46 +03:00
|
|
|
if test "$git_submodules_action" != "ignore" && \
|
2019-02-05 05:39:37 +03:00
|
|
|
{ test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
|
2014-02-25 22:27:49 +04:00
|
|
|
werror="yes"
|
|
|
|
else
|
|
|
|
werror="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2020-11-20 12:34:10 +03:00
|
|
|
if test "$targetos" = "bogus"; then
|
2017-03-28 16:01:52 +03:00
|
|
|
# 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
|
|
|
|
# to identify the OS are reliable), if we didn't recognize the
|
|
|
|
# host OS we should stop now.
|
2017-07-13 18:15:32 +03:00
|
|
|
error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
|
2017-03-28 16:01:52 +03:00
|
|
|
fi
|
|
|
|
|
configure: Add a test for the minimum compiler version
So far we only had implicit requirements for the minimum compiler version,
e.g. we require at least GCC 4.1 for the support of atomics. However,
such old compiler versions are not tested anymore by the developers, so
they are not really supported anymore. Since we recently declared explicitly
what platforms we intend to support, we can also get more explicit on the
compiler version now. The supported distributions use the following version
of GCC:
RHEL-7: 4.8.5
Debian (Stretch): 6.3.0
Debian (Jessie): 4.8.4
OpenBSD (ports): 4.9.4
FreeBSD (ports): 8.2.0
OpenSUSE Leap 15: 7.3.1
Ubuntu (Xenial): 5.3.1
macOS (Homebrew): 8.2.0
So we can safely assume GCC 4.8 these days. For Clang, the situation is
a little bit more ambiguous, since it is sometimes not available in the
main distros but rather third party repositories. At least Debian Jessie
uses version 3.5, and EPEL7 for RHEL7 uses 3.4, so let's use 3.4 as
minimum Clang version now - we still can adjust this later if necessary.
Unfortunately Apple uses different version numbers for the Clang that is
included in their Xcode suite, so we need to check the version numbers
for Xcode separately. Xcode 5.1 seems to be the first one that has been
shipped with LLVM 3.4, so use this version as the minimum there.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2018-12-03 12:12:32 +03:00
|
|
|
# Check whether the compiler matches our minimum requirements:
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#if defined(__clang_major__) && defined(__clang_minor__)
|
|
|
|
# ifdef __apple_build_version__
|
2023-01-31 21:02:39 +03:00
|
|
|
# if __clang_major__ < 12 || (__clang_major__ == 12 && __clang_minor__ < 0)
|
|
|
|
# error You need at least XCode Clang v12.0 to compile QEMU
|
configure: Add a test for the minimum compiler version
So far we only had implicit requirements for the minimum compiler version,
e.g. we require at least GCC 4.1 for the support of atomics. However,
such old compiler versions are not tested anymore by the developers, so
they are not really supported anymore. Since we recently declared explicitly
what platforms we intend to support, we can also get more explicit on the
compiler version now. The supported distributions use the following version
of GCC:
RHEL-7: 4.8.5
Debian (Stretch): 6.3.0
Debian (Jessie): 4.8.4
OpenBSD (ports): 4.9.4
FreeBSD (ports): 8.2.0
OpenSUSE Leap 15: 7.3.1
Ubuntu (Xenial): 5.3.1
macOS (Homebrew): 8.2.0
So we can safely assume GCC 4.8 these days. For Clang, the situation is
a little bit more ambiguous, since it is sometimes not available in the
main distros but rather third party repositories. At least Debian Jessie
uses version 3.5, and EPEL7 for RHEL7 uses 3.4, so let's use 3.4 as
minimum Clang version now - we still can adjust this later if necessary.
Unfortunately Apple uses different version numbers for the Clang that is
included in their Xcode suite, so we need to check the version numbers
for Xcode separately. Xcode 5.1 seems to be the first one that has been
shipped with LLVM 3.4, so use this version as the minimum there.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2018-12-03 12:12:32 +03:00
|
|
|
# endif
|
|
|
|
# else
|
2023-01-31 21:02:39 +03:00
|
|
|
# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
|
|
|
|
# error You need at least Clang v10.0 to compile QEMU
|
configure: Add a test for the minimum compiler version
So far we only had implicit requirements for the minimum compiler version,
e.g. we require at least GCC 4.1 for the support of atomics. However,
such old compiler versions are not tested anymore by the developers, so
they are not really supported anymore. Since we recently declared explicitly
what platforms we intend to support, we can also get more explicit on the
compiler version now. The supported distributions use the following version
of GCC:
RHEL-7: 4.8.5
Debian (Stretch): 6.3.0
Debian (Jessie): 4.8.4
OpenBSD (ports): 4.9.4
FreeBSD (ports): 8.2.0
OpenSUSE Leap 15: 7.3.1
Ubuntu (Xenial): 5.3.1
macOS (Homebrew): 8.2.0
So we can safely assume GCC 4.8 these days. For Clang, the situation is
a little bit more ambiguous, since it is sometimes not available in the
main distros but rather third party repositories. At least Debian Jessie
uses version 3.5, and EPEL7 for RHEL7 uses 3.4, so let's use 3.4 as
minimum Clang version now - we still can adjust this later if necessary.
Unfortunately Apple uses different version numbers for the Clang that is
included in their Xcode suite, so we need to check the version numbers
for Xcode separately. Xcode 5.1 seems to be the first one that has been
shipped with LLVM 3.4, so use this version as the minimum there.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2018-12-03 12:12:32 +03:00
|
|
|
# endif
|
|
|
|
# endif
|
|
|
|
#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
|
2021-10-01 18:30:03 +03:00
|
|
|
# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
|
|
|
|
# error You need at least GCC v7.4.0 to compile QEMU
|
configure: Add a test for the minimum compiler version
So far we only had implicit requirements for the minimum compiler version,
e.g. we require at least GCC 4.1 for the support of atomics. However,
such old compiler versions are not tested anymore by the developers, so
they are not really supported anymore. Since we recently declared explicitly
what platforms we intend to support, we can also get more explicit on the
compiler version now. The supported distributions use the following version
of GCC:
RHEL-7: 4.8.5
Debian (Stretch): 6.3.0
Debian (Jessie): 4.8.4
OpenBSD (ports): 4.9.4
FreeBSD (ports): 8.2.0
OpenSUSE Leap 15: 7.3.1
Ubuntu (Xenial): 5.3.1
macOS (Homebrew): 8.2.0
So we can safely assume GCC 4.8 these days. For Clang, the situation is
a little bit more ambiguous, since it is sometimes not available in the
main distros but rather third party repositories. At least Debian Jessie
uses version 3.5, and EPEL7 for RHEL7 uses 3.4, so let's use 3.4 as
minimum Clang version now - we still can adjust this later if necessary.
Unfortunately Apple uses different version numbers for the Clang that is
included in their Xcode suite, so we need to check the version numbers
for Xcode separately. Xcode 5.1 seems to be the first one that has been
shipped with LLVM 3.4, so use this version as the minimum there.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2018-12-03 12:12:32 +03:00
|
|
|
# endif
|
|
|
|
#else
|
|
|
|
# error You either need GCC or Clang to compiler QEMU
|
|
|
|
#endif
|
|
|
|
int main (void) { return 0; }
|
|
|
|
EOF
|
|
|
|
if ! compile_prog "" "" ; then
|
2023-01-31 21:02:39 +03:00
|
|
|
error_exit "You need at least GCC v7.4 or Clang v10.0 (or XCode Clang v12.0)"
|
configure: Add a test for the minimum compiler version
So far we only had implicit requirements for the minimum compiler version,
e.g. we require at least GCC 4.1 for the support of atomics. However,
such old compiler versions are not tested anymore by the developers, so
they are not really supported anymore. Since we recently declared explicitly
what platforms we intend to support, we can also get more explicit on the
compiler version now. The supported distributions use the following version
of GCC:
RHEL-7: 4.8.5
Debian (Stretch): 6.3.0
Debian (Jessie): 4.8.4
OpenBSD (ports): 4.9.4
FreeBSD (ports): 8.2.0
OpenSUSE Leap 15: 7.3.1
Ubuntu (Xenial): 5.3.1
macOS (Homebrew): 8.2.0
So we can safely assume GCC 4.8 these days. For Clang, the situation is
a little bit more ambiguous, since it is sometimes not available in the
main distros but rather third party repositories. At least Debian Jessie
uses version 3.5, and EPEL7 for RHEL7 uses 3.4, so let's use 3.4 as
minimum Clang version now - we still can adjust this later if necessary.
Unfortunately Apple uses different version numbers for the Clang that is
included in their Xcode suite, so we need to check the version numbers
for Xcode separately. Xcode 5.1 seems to be the first one that has been
shipped with LLVM 3.4, so use this version as the minimum there.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2018-12-03 12:12:32 +03:00
|
|
|
fi
|
|
|
|
|
2020-06-17 23:13:06 +03:00
|
|
|
# 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=
|
2022-10-12 15:21:22 +03:00
|
|
|
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
|
2020-06-17 23:13:06 +03:00
|
|
|
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
|
2020-12-11 18:24:26 +03:00
|
|
|
add_to warn_flags -Wimplicit-fallthrough=2
|
2022-12-19 16:02:05 +03:00
|
|
|
add_to warn_flags -Wmissing-format-attribute
|
2023-03-01 14:34:25 +03:00
|
|
|
|
|
|
|
if test "$targetos" != "darwin"; then
|
|
|
|
add_to warn_flags -Wthread-safety
|
|
|
|
fi
|
2020-06-17 23:13:06 +03:00
|
|
|
|
|
|
|
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
|
2020-06-17 23:13:07 +03:00
|
|
|
add_to nowarn_flags -Wno-tautological-type-limit-compare
|
2020-06-17 23:13:08 +03:00
|
|
|
add_to nowarn_flags -Wno-psabi
|
2022-09-15 12:10:34 +03:00
|
|
|
add_to nowarn_flags -Wno-gnu-variable-sized-type-not-at-end
|
2020-06-17 23:13:06 +03:00
|
|
|
|
|
|
|
gcc_flags="$warn_flags $nowarn_flags"
|
2015-03-26 01:57:37 +03:00
|
|
|
|
|
|
|
cc_has_warning_flag() {
|
|
|
|
write_c_skeleton;
|
|
|
|
|
2012-10-28 01:19:07 +04:00
|
|
|
# Use the positive sense of the flag when testing for -Wno-wombat
|
|
|
|
# support (gcc will happily accept the -Wno- form of unknown
|
|
|
|
# warning options).
|
2015-03-26 01:57:37 +03:00
|
|
|
optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
|
|
|
|
compile_prog "-Werror $optflag" ""
|
|
|
|
}
|
|
|
|
|
2022-02-15 18:15:13 +03:00
|
|
|
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 $QEMU_LDFLAGS
|
|
|
|
}
|
|
|
|
|
2015-03-26 01:57:37 +03:00
|
|
|
for flag in $gcc_flags; do
|
|
|
|
if cc_has_warning_flag $flag ; then
|
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $flag"
|
2010-12-23 13:43:52 +03:00
|
|
|
fi
|
2022-02-15 18:15:13 +03:00
|
|
|
if objcc_has_warning_flag $flag ; then
|
|
|
|
QEMU_OBJCFLAGS="$QEMU_OBJCFLAGS $flag"
|
|
|
|
fi
|
2010-12-23 13:43:52 +03:00
|
|
|
done
|
|
|
|
|
2014-07-02 12:05:24 +04:00
|
|
|
if test "$stack_protector" != "no"; then
|
2015-11-12 17:04:28 +03:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
2022-11-02 23:22:58 +03:00
|
|
|
char arr[64], *p = arr, *c = argv[argc - 1];
|
2015-11-12 17:04:28 +03:00
|
|
|
while (*c) {
|
|
|
|
*p++ = *c++;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2014-03-28 20:19:02 +04:00
|
|
|
gcc_flags="-fstack-protector-strong -fstack-protector-all"
|
2014-07-02 12:05:24 +04:00
|
|
|
sp_on=0
|
2014-03-28 20:19:02 +04:00
|
|
|
for flag in $gcc_flags; do
|
2014-04-11 20:13:52 +04:00
|
|
|
# We need to check both a compile and a link, since some compiler
|
|
|
|
# setups fail only on a .c->.o compile and some only at link time
|
2020-02-03 17:22:17 +03:00
|
|
|
if compile_object "-Werror $flag" &&
|
2014-04-11 20:13:52 +04:00
|
|
|
compile_prog "-Werror $flag" ""; then
|
2014-03-28 20:19:02 +04:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $flag"
|
build-sys: clean up flags included in the linker command line
Some of the CFLAGS that are discovered during configure, for example
compiler warnings, are being included on the linker command line because
QEMU_CFLAGS is added to it. Other flags, such as the -m32, appear twice
because they are included in both QEMU_CFLAGS and LDFLAGS. All this
leads to confusion with respect to what goes in which Makefile variables
(and we have plenty).
So, introduce QEMU_LDFLAGS for flags discovered by configure, following
the lead of QEMU_CFLAGS, and stop adding to it:
1) options that are already in CFLAGS, for example "-g"
2) duplicate options
At the same time, options that _are_ needed by both compiler and linker
must now be added to both QEMU_CFLAGS and QEMU_LDFLAGS, which is clearer.
This is mostly -fsanitize options. For now, --extra-cflags has this behavior
(but --extra-cxxflags does not).
Meson will not include CFLAGS on the linker command line, do the same in our
build system as well.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-12-11 17:34:27 +03:00
|
|
|
QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
|
2014-07-02 12:05:24 +04:00
|
|
|
sp_on=1
|
2014-03-28 20:19:02 +04:00
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
2014-07-02 12:05:24 +04:00
|
|
|
if test "$stack_protector" = yes; then
|
|
|
|
if test $sp_on = 0; then
|
|
|
|
error_exit "Stack protector not supported"
|
|
|
|
fi
|
|
|
|
fi
|
2013-02-26 02:31:12 +04:00
|
|
|
fi
|
|
|
|
|
2019-07-18 15:04:13 +03:00
|
|
|
# Our module code doesn't support Windows
|
|
|
|
if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
|
|
|
|
error_exit "Modules are not available for Windows"
|
|
|
|
fi
|
|
|
|
|
2021-07-09 17:29:55 +03:00
|
|
|
# Static linking is not possible with plugins, modules or PIE
|
2011-11-15 22:12:17 +04:00
|
|
|
if test "$static" = "yes" ; then
|
2014-02-25 20:36:55 +04:00
|
|
|
if test "$modules" = "yes" ; then
|
|
|
|
error_exit "static and modules are mutually incompatible"
|
|
|
|
fi
|
2021-07-09 17:29:55 +03:00
|
|
|
if test "$plugins" = "yes"; then
|
|
|
|
error_exit "static and plugins are mutually incompatible"
|
2021-07-09 17:29:57 +03:00
|
|
|
else
|
|
|
|
plugins="no"
|
2021-07-09 17:29:55 +03:00
|
|
|
fi
|
2011-11-15 22:12:17 +04:00
|
|
|
fi
|
2021-12-10 11:55:15 +03:00
|
|
|
test "$plugins" = "" && plugins=yes
|
2011-11-15 22:12:17 +04:00
|
|
|
|
2019-12-18 02:54:56 +03:00
|
|
|
cat > $TMPC << EOF
|
2011-11-23 13:24:25 +04:00
|
|
|
|
|
|
|
#ifdef __linux__
|
|
|
|
# define THREAD __thread
|
|
|
|
#else
|
|
|
|
# define THREAD
|
|
|
|
#endif
|
|
|
|
static THREAD int tls_var;
|
|
|
|
int main(void) { return tls_var; }
|
2011-11-15 22:12:17 +04:00
|
|
|
EOF
|
2019-08-15 22:41:51 +03:00
|
|
|
|
2022-10-27 21:36:11 +03:00
|
|
|
# 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.
|
2019-12-18 04:30:14 +03:00
|
|
|
if test "$static" = "yes"; then
|
2020-04-03 22:11:50 +03:00
|
|
|
if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
|
2020-09-23 12:26:15 +03:00
|
|
|
CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
|
2019-12-18 04:30:14 +03:00
|
|
|
pie="yes"
|
|
|
|
elif test "$pie" = "yes"; then
|
|
|
|
error_exit "-static-pie not available due to missing toolchain support"
|
|
|
|
else
|
|
|
|
pie="no"
|
2023-02-10 21:12:46 +03:00
|
|
|
QEMU_CFLAGS="-fno-pie $QEMU_CFLAGS"
|
2019-12-18 04:30:14 +03:00
|
|
|
fi
|
|
|
|
elif test "$pie" = "no"; then
|
2022-03-29 14:07:25 +03:00
|
|
|
if compile_prog "-Werror -fno-pie" "-no-pie"; then
|
|
|
|
CONFIGURE_CFLAGS="-fno-pie $CONFIGURE_CFLAGS"
|
|
|
|
CONFIGURE_LDFLAGS="-no-pie $CONFIGURE_LDFLAGS"
|
2022-09-14 18:59:38 +03:00
|
|
|
QEMU_CFLAGS="-fno-pie -no-pie $QEMU_CFLAGS"
|
2022-03-29 14:07:25 +03:00
|
|
|
fi
|
2020-04-03 22:11:50 +03:00
|
|
|
elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
|
2020-09-23 12:26:15 +03:00
|
|
|
CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
|
|
|
|
CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
|
2019-12-18 04:15:01 +03:00
|
|
|
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"
|
2011-11-15 22:12:17 +04:00
|
|
|
fi
|
|
|
|
|
2013-04-17 18:26:47 +04:00
|
|
|
##########################################
|
|
|
|
# __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;
|
2013-05-11 23:46:58 +04:00
|
|
|
val = __sync_val_compare_and_swap(&val, 0, 1);
|
2013-04-17 18:26:47 +04:00
|
|
|
sfaa(&val);
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if ! compile_prog "" "" ; then
|
|
|
|
QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2012-09-27 00:04:38 +04:00
|
|
|
if test -z "${target_list+xxx}" ; then
|
2020-09-21 11:37:49 +03:00
|
|
|
default_targets=yes
|
2017-07-03 17:58:28 +03:00
|
|
|
for target in $default_target_list; do
|
2020-09-21 11:37:49 +03:00
|
|
|
target_list="$target_list $target"
|
2017-07-03 17:58:28 +03:00
|
|
|
done
|
|
|
|
target_list="${target_list# }"
|
2012-09-14 17:17:03 +04:00
|
|
|
else
|
2020-09-21 11:37:49 +03:00
|
|
|
default_targets=no
|
2016-05-16 16:10:20 +03:00
|
|
|
target_list=$(echo "$target_list" | sed -e 's/,/ /g')
|
2017-07-03 17:58:28 +03:00
|
|
|
for target in $target_list; do
|
|
|
|
# Check that we recognised the target name; this allows a more
|
|
|
|
# friendly error message than if we let it fall through.
|
|
|
|
case " $default_target_list " in
|
|
|
|
*" $target "*)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
error_exit "Unknown target name '$target'"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
2012-09-14 17:17:03 +04:00
|
|
|
fi
|
2013-05-20 19:16:16 +04:00
|
|
|
|
2010-05-26 18:08:17 +04:00
|
|
|
# see if system emulation was really requested
|
|
|
|
case " $target_list " in
|
|
|
|
*"-softmmu "*) softmmu=yes
|
|
|
|
;;
|
|
|
|
*) softmmu=no
|
|
|
|
;;
|
|
|
|
esac
|
2005-01-11 02:18:50 +03:00
|
|
|
|
2022-02-04 17:54:47 +03:00
|
|
|
if test "$tcg" = "auto"; then
|
|
|
|
if test -z "$target_list"; then
|
|
|
|
tcg="disabled"
|
|
|
|
else
|
|
|
|
tcg="enabled"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$tcg" = "enabled"; then
|
|
|
|
git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
|
|
|
|
git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
|
|
|
|
fi
|
|
|
|
|
2022-10-14 10:30:15 +03:00
|
|
|
##########################################
|
2003-03-07 02:23:54 +03:00
|
|
|
# big/little endian test
|
|
|
|
cat > $TMPC << EOF
|
2022-10-14 10:30:15 +03:00
|
|
|
#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
|
|
# error LITTLE
|
|
|
|
#endif
|
|
|
|
int main(void) { return 0; }
|
2003-03-07 02:23:54 +03:00
|
|
|
EOF
|
|
|
|
|
2022-10-14 10:30:15 +03:00
|
|
|
if ! compile_prog ; then
|
|
|
|
bigendian="no"
|
2013-07-01 07:30:18 +04:00
|
|
|
else
|
2022-10-14 10:30:15 +03:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
|
|
|
# error BIG
|
|
|
|
#endif
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
|
|
|
|
if ! compile_prog ; then
|
|
|
|
bigendian="yes"
|
|
|
|
else
|
2013-07-01 07:30:18 +04:00
|
|
|
echo big/little test failed
|
2021-07-15 11:39:28 +03:00
|
|
|
exit 1
|
2022-10-14 10:30:15 +03:00
|
|
|
fi
|
2003-03-07 02:23:54 +03:00
|
|
|
fi
|
|
|
|
|
2012-12-16 14:29:45 +04:00
|
|
|
##########################################
|
|
|
|
# pkg-config probe
|
|
|
|
|
|
|
|
if ! has "$pkg_config_exe"; then
|
2013-04-08 15:11:26 +04:00
|
|
|
error_exit "pkg-config binary '$pkg_config_exe' not found"
|
2012-12-16 14:29:45 +04:00
|
|
|
fi
|
|
|
|
|
2011-07-19 23:50:29 +04:00
|
|
|
##########################################
|
|
|
|
# glib support probe
|
2012-04-05 15:01:54 +04:00
|
|
|
|
2022-05-13 09:39:58 +03:00
|
|
|
# When bumping glib_req_ver, please check also whether we should increase
|
|
|
|
# the _WIN32_WINNT setting in osdep.h according to the value from glib
|
2021-05-14 15:04:13 +03:00
|
|
|
glib_req_ver=2.56
|
2014-02-25 20:36:55 +04:00
|
|
|
glib_modules=gthread-2.0
|
|
|
|
if test "$modules" = yes; then
|
2018-03-08 11:53:00 +03:00
|
|
|
glib_modules="$glib_modules gmodule-export-2.0"
|
plugins: do not limit exported symbols if modules are active
On Mac --enable-modules and --enable-plugins are currently incompatible, because the
Apple -Wl,-exported_symbols_list command line options prevents the export of any
symbols needed by the modules. On x86 -Wl,--dynamic-list does not have this effect,
but only because the -Wl,--export-dynamic option provided by gmodule-2.0.pc overrides
it. On Apple there is no -Wl,--export-dynamic, because it is the default, and thus
no override.
Either way, when modules are active there is no reason to include the plugin_ldflags.
While at it, avoid the useless -Wl,--export-dynamic when --enable-plugins is
specified but --enable-modules is not; this way, the GNU and Apple configurations
are more similar.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/516
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
[AJB: fix noexport to no-export]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20210811100550.54714-1-pbonzini@redhat.com>
Cc: qemu-stable@nongnu.org
2021-08-11 13:05:50 +03:00
|
|
|
elif test "$plugins" = "yes"; then
|
|
|
|
glib_modules="$glib_modules gmodule-no-export-2.0"
|
2017-08-31 01:39:53 +03:00
|
|
|
fi
|
2014-02-10 10:48:57 +04:00
|
|
|
|
2014-02-25 20:36:55 +04:00
|
|
|
for i in $glib_modules; do
|
2014-02-10 10:48:57 +04:00
|
|
|
if $pkg_config --atleast-version=$glib_req_ver $i; then
|
2016-05-16 16:10:20 +03:00
|
|
|
glib_cflags=$($pkg_config --cflags $i)
|
|
|
|
glib_libs=$($pkg_config --libs $i)
|
2014-02-10 10:48:57 +04:00
|
|
|
else
|
|
|
|
error_exit "glib-$glib_req_ver $i is required to compile QEMU"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2023-02-05 19:37:57 +03:00
|
|
|
# Check whether glib has gslice, which we have to avoid for correctness.
|
|
|
|
# TODO: remove this check and the corresponding workaround (qtree) when
|
|
|
|
# the minimum supported glib is >= $glib_dropped_gslice_version.
|
|
|
|
glib_dropped_gslice_version=2.75.3
|
|
|
|
for i in $glib_modules; do
|
|
|
|
if ! $pkg_config --atleast-version=$glib_dropped_gslice_version $i; then
|
|
|
|
glib_has_gslice="yes"
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2022-05-25 17:41:39 +03:00
|
|
|
glib_bindir="$($pkg_config --variable=bindir glib-2.0)"
|
|
|
|
if test -z "$glib_bindir" ; then
|
|
|
|
glib_bindir="$($pkg_config --variable=prefix glib-2.0)"/bin
|
|
|
|
fi
|
|
|
|
|
2020-09-01 15:41:17 +03:00
|
|
|
# This workaround is required due to a bug in pkg-config file for glib as it
|
|
|
|
# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
|
|
|
|
|
|
|
|
if test "$static" = yes && test "$mingw32" = yes; then
|
|
|
|
glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
|
|
|
|
fi
|
|
|
|
|
2016-01-27 12:00:45 +03:00
|
|
|
# Sanity check that the current size_t matches the
|
|
|
|
# size that glib thinks it should be. This catches
|
|
|
|
# problems on multi-arch where people try to build
|
|
|
|
# 32-bit QEMU while pointing at 64-bit glib headers
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <glib.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#define QEMU_BUILD_BUG_ON(x) \
|
|
|
|
typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
2020-09-01 15:41:17 +03:00
|
|
|
if ! compile_prog "$glib_cflags" "$glib_libs" ; then
|
2016-01-27 12:00:45 +03:00
|
|
|
error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
|
|
|
|
"You probably need to set PKG_CONFIG_LIBDIR"\
|
|
|
|
"to point to the right pkg-config files for your"\
|
|
|
|
"build target"
|
|
|
|
fi
|
|
|
|
|
2020-03-17 20:55:34 +03:00
|
|
|
# Silence clang warnings triggered by glib < 2.57.2
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <glib.h>
|
|
|
|
typedef struct Foo {
|
|
|
|
int i;
|
|
|
|
} Foo;
|
|
|
|
static void foo_free(Foo *f)
|
|
|
|
{
|
|
|
|
g_free(f);
|
|
|
|
}
|
2022-03-12 01:22:02 +03:00
|
|
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free)
|
2020-03-17 20:55:34 +03:00
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
|
|
|
|
if cc_has_warning_flag "-Wno-unused-function"; then
|
|
|
|
glib_cflags="$glib_cflags -Wno-unused-function"
|
2020-09-23 12:26:15 +03:00
|
|
|
CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
|
2020-03-17 20:55:34 +03:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2008-12-16 13:43:48 +03:00
|
|
|
##########################################
|
|
|
|
# fdt probe
|
2019-06-21 16:05:44 +03:00
|
|
|
|
2020-10-05 12:31:15 +03:00
|
|
|
case "$fdt" in
|
|
|
|
auto | enabled | internal)
|
|
|
|
# Simpler to always update submodule, even if not needed.
|
2021-05-12 10:21:56 +03:00
|
|
|
git_submodules="${git_submodules} dtc"
|
2020-10-05 12:31:15 +03:00
|
|
|
;;
|
|
|
|
esac
|
2008-12-16 13:43:48 +03:00
|
|
|
|
2011-07-11 16:57:43 +04:00
|
|
|
##########################################
|
2012-02-28 15:25:50 +04:00
|
|
|
# check and set a backend for coroutine
|
2011-06-09 21:41:06 +04:00
|
|
|
|
2013-04-08 15:11:27 +04:00
|
|
|
# We prefer ucontext, but it's not always possible. The fallback
|
2017-04-28 15:24:44 +03:00
|
|
|
# is sigcontext. On Windows the only valid backend is the Windows
|
|
|
|
# specific one.
|
2013-04-08 15:11:27 +04:00
|
|
|
|
|
|
|
ucontext_works=no
|
|
|
|
if test "$darwin" != "yes"; then
|
|
|
|
cat > $TMPC << EOF
|
2011-06-09 21:41:06 +04:00
|
|
|
#include <ucontext.h>
|
2012-02-23 20:20:05 +04:00
|
|
|
#ifdef __stub_makecontext
|
|
|
|
#error Ignoring glibc stub makecontext which will always fail
|
|
|
|
#endif
|
2011-12-17 12:27:29 +04:00
|
|
|
int main(void) { makecontext(0, 0, 0); return 0; }
|
2011-06-09 21:41:06 +04:00
|
|
|
EOF
|
2013-04-08 15:11:27 +04:00
|
|
|
if compile_prog "" "" ; then
|
|
|
|
ucontext_works=yes
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$coroutine" = ""; then
|
|
|
|
if test "$mingw32" = "yes"; then
|
|
|
|
coroutine=win32
|
|
|
|
elif test "$ucontext_works" = "yes"; then
|
|
|
|
coroutine=ucontext
|
|
|
|
else
|
|
|
|
coroutine=sigaltstack
|
2011-06-09 21:41:06 +04:00
|
|
|
fi
|
2012-02-28 15:25:50 +04:00
|
|
|
else
|
2013-04-08 15:11:27 +04:00
|
|
|
case $coroutine in
|
|
|
|
windows)
|
|
|
|
if test "$mingw32" != "yes"; then
|
|
|
|
error_exit "'windows' coroutine backend only valid for Windows"
|
|
|
|
fi
|
|
|
|
# Unfortunately the user visible backend name doesn't match the
|
|
|
|
# coroutine-*.c filename for this case, so we have to adjust it here.
|
|
|
|
coroutine=win32
|
|
|
|
;;
|
|
|
|
ucontext)
|
|
|
|
if test "$ucontext_works" != "yes"; then
|
2022-08-19 19:40:46 +03:00
|
|
|
error_exit "'ucontext' backend requested but makecontext not available"
|
2013-04-08 15:11:27 +04:00
|
|
|
fi
|
|
|
|
;;
|
2017-04-28 15:24:44 +03:00
|
|
|
sigaltstack)
|
2013-04-08 15:11:27 +04:00
|
|
|
if test "$mingw32" = "yes"; then
|
|
|
|
error_exit "only the 'windows' coroutine backend is valid for Windows"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
error_exit "unknown coroutine backend $coroutine"
|
|
|
|
;;
|
|
|
|
esac
|
2011-06-09 21:41:06 +04:00
|
|
|
fi
|
|
|
|
|
2020-05-29 23:51:21 +03:00
|
|
|
##################################################
|
|
|
|
# SafeStack
|
|
|
|
|
|
|
|
|
|
|
|
if test "$safe_stack" = "yes"; then
|
|
|
|
cat > $TMPC << EOF
|
2022-11-02 23:22:58 +03:00
|
|
|
int main(void)
|
2020-05-29 23:51:21 +03:00
|
|
|
{
|
|
|
|
#if ! __has_feature(safe_stack)
|
|
|
|
#error SafeStack Disabled
|
|
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
flag="-fsanitize=safe-stack"
|
|
|
|
# Check that safe-stack is supported and enabled.
|
|
|
|
if compile_prog "-Werror $flag" "$flag"; then
|
|
|
|
# Flag needed both at compilation and at linking
|
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $flag"
|
|
|
|
QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
|
|
|
|
else
|
|
|
|
error_exit "SafeStack not supported by your compiler"
|
|
|
|
fi
|
|
|
|
if test "$coroutine" != "ucontext"; then
|
|
|
|
error_exit "SafeStack is only supported by the coroutine backend ucontext"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
cat > $TMPC << EOF
|
2022-11-02 23:22:58 +03:00
|
|
|
int main(void)
|
2020-05-29 23:51:21 +03:00
|
|
|
{
|
|
|
|
#if defined(__has_feature)
|
|
|
|
#if __has_feature(safe_stack)
|
|
|
|
#error SafeStack Enabled
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if test "$safe_stack" = "no"; then
|
|
|
|
# Make sure that safe-stack is disabled
|
|
|
|
if ! compile_prog "-Werror" ""; then
|
|
|
|
# SafeStack was already enabled, try to explicitly remove the feature
|
|
|
|
flag="-fno-sanitize=safe-stack"
|
|
|
|
if ! compile_prog "-Werror $flag" "$flag"; then
|
|
|
|
error_exit "Configure cannot disable SafeStack"
|
|
|
|
fi
|
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $flag"
|
|
|
|
QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
|
|
|
|
fi
|
|
|
|
else # "$safe_stack" = ""
|
|
|
|
# Set safe_stack to yes or no based on pre-existing flags
|
|
|
|
if compile_prog "-Werror" ""; then
|
|
|
|
safe_stack="no"
|
|
|
|
else
|
|
|
|
safe_stack="yes"
|
|
|
|
if test "$coroutine" != "ucontext"; then
|
|
|
|
error_exit "SafeStack is only supported by the coroutine backend ucontext"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
2016-09-27 12:58:45 +03:00
|
|
|
|
2015-03-26 01:57:39 +03:00
|
|
|
########################################
|
|
|
|
# check if ccache is interfering with
|
|
|
|
# semantic analysis of macros
|
|
|
|
|
2015-10-28 20:56:40 +03:00
|
|
|
unset CCACHE_CPP2
|
2015-03-26 01:57:39 +03:00
|
|
|
ccache_cpp2=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
static const int Z = 1;
|
|
|
|
#define fn() ({ Z; })
|
|
|
|
#define TAUT(X) ((X) == Z)
|
|
|
|
#define PAREN(X, Y) (X == Y)
|
|
|
|
#define ID(X) (X)
|
2022-11-02 23:22:58 +03:00
|
|
|
int main(void)
|
2015-03-26 01:57:39 +03:00
|
|
|
{
|
|
|
|
int x = 0, y = 0;
|
|
|
|
x = ID(x);
|
|
|
|
x = fn();
|
|
|
|
fn();
|
|
|
|
if (PAREN(x, y)) return 0;
|
|
|
|
if (TAUT(Z)) return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
if ! compile_object "-Werror"; then
|
|
|
|
ccache_cpp2=yes
|
|
|
|
fi
|
|
|
|
|
2015-11-03 23:43:42 +03:00
|
|
|
#################################################
|
|
|
|
# clang does not support glibc + FORTIFY_SOURCE.
|
|
|
|
|
|
|
|
if test "$fortify_source" != "no"; then
|
|
|
|
if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
|
|
|
|
fortify_source="no";
|
2017-06-26 18:25:24 +03:00
|
|
|
elif test -n "$cxx" && has $cxx &&
|
2015-11-12 19:29:49 +03:00
|
|
|
echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
|
2015-11-03 23:43:42 +03:00
|
|
|
fortify_source="no";
|
|
|
|
else
|
|
|
|
fortify_source="yes"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-01-16 18:11:51 +03:00
|
|
|
##########################################
|
|
|
|
# checks for sanitizers
|
|
|
|
|
|
|
|
have_asan=no
|
|
|
|
have_ubsan=no
|
2018-01-16 18:11:52 +03:00
|
|
|
have_asan_iface_h=no
|
|
|
|
have_asan_iface_fiber=no
|
2018-01-16 18:11:51 +03:00
|
|
|
|
|
|
|
if test "$sanitizers" = "yes" ; then
|
2018-02-16 00:25:47 +03:00
|
|
|
write_c_skeleton
|
2018-01-16 18:11:51 +03:00
|
|
|
if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
|
|
|
|
have_asan=yes
|
|
|
|
fi
|
2018-02-16 00:25:47 +03:00
|
|
|
|
|
|
|
# we could use a simple skeleton for flags checks, but this also
|
|
|
|
# detect the static linking issue of ubsan, see also:
|
|
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
|
|
|
|
cat > $TMPC << EOF
|
2023-04-05 10:00:30 +03:00
|
|
|
int main(int argc, char **argv)
|
|
|
|
{
|
|
|
|
return argc + 1;
|
2018-02-16 00:25:47 +03:00
|
|
|
}
|
|
|
|
EOF
|
2018-01-16 18:11:51 +03:00
|
|
|
if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
|
|
|
|
have_ubsan=yes
|
|
|
|
fi
|
2018-01-16 18:11:52 +03:00
|
|
|
|
|
|
|
if check_include "sanitizer/asan_interface.h" ; then
|
|
|
|
have_asan_iface_h=yes
|
|
|
|
fi
|
|
|
|
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sanitizer/asan_interface.h>
|
|
|
|
int main(void) {
|
|
|
|
__sanitizer_start_switch_fiber(0, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
|
|
|
|
have_asan_iface_fiber=yes
|
|
|
|
fi
|
2018-01-16 18:11:51 +03:00
|
|
|
fi
|
|
|
|
|
2020-06-12 22:02:23 +03:00
|
|
|
# Thread sanitizer is, for now, much noisier than the other sanitizers;
|
|
|
|
# keep it separate until that is not the case.
|
|
|
|
if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
|
|
|
|
error_exit "TSAN is not supported with other sanitiziers."
|
|
|
|
fi
|
|
|
|
have_tsan=no
|
|
|
|
have_tsan_iface_fiber=no
|
|
|
|
if test "$tsan" = "yes" ; then
|
|
|
|
write_c_skeleton
|
|
|
|
if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
|
|
|
|
have_tsan=yes
|
|
|
|
fi
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sanitizer/tsan_interface.h>
|
|
|
|
int main(void) {
|
|
|
|
__tsan_create_fiber(0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
|
|
|
|
have_tsan_iface_fiber=yes
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
##########################################
|
|
|
|
# functions to probe cross compilers
|
|
|
|
|
|
|
|
container="no"
|
2023-02-28 22:06:46 +03:00
|
|
|
runc=""
|
2022-11-17 20:25:20 +03:00
|
|
|
if test $use_containers = "yes" && (has "docker" || has "podman"); then
|
2022-09-29 14:41:58 +03:00
|
|
|
case $($python "$source_path"/tests/docker/docker.py probe) in
|
|
|
|
*docker) container=docker ;;
|
|
|
|
podman) container=podman ;;
|
|
|
|
no) container=no ;;
|
|
|
|
esac
|
2022-09-29 14:41:59 +03:00
|
|
|
if test "$container" != "no"; then
|
|
|
|
docker_py="$python $source_path/tests/docker/docker.py --engine $container"
|
2023-02-28 22:06:46 +03:00
|
|
|
runc=$($python "$source_path"/tests/docker/docker.py probe)
|
2022-09-29 14:41:59 +03:00
|
|
|
fi
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
fi
|
|
|
|
|
|
|
|
# cross compilers defaults, can be overridden with --cross-cc-ARCH
|
2022-05-27 18:35:51 +03:00
|
|
|
: ${cross_prefix_aarch64="aarch64-linux-gnu-"}
|
|
|
|
: ${cross_prefix_aarch64_be="$cross_prefix_aarch64"}
|
|
|
|
: ${cross_prefix_alpha="alpha-linux-gnu-"}
|
|
|
|
: ${cross_prefix_arm="arm-linux-gnueabihf-"}
|
|
|
|
: ${cross_prefix_armeb="$cross_prefix_arm"}
|
|
|
|
: ${cross_prefix_hexagon="hexagon-unknown-linux-musl-"}
|
2022-06-06 15:43:33 +03:00
|
|
|
: ${cross_prefix_loongarch64="loongarch64-unknown-linux-gnu-"}
|
2022-05-27 18:35:51 +03:00
|
|
|
: ${cross_prefix_hppa="hppa-linux-gnu-"}
|
|
|
|
: ${cross_prefix_i386="i686-linux-gnu-"}
|
|
|
|
: ${cross_prefix_m68k="m68k-linux-gnu-"}
|
|
|
|
: ${cross_prefix_microblaze="microblaze-linux-musl-"}
|
|
|
|
: ${cross_prefix_mips64el="mips64el-linux-gnuabi64-"}
|
|
|
|
: ${cross_prefix_mips64="mips64-linux-gnuabi64-"}
|
|
|
|
: ${cross_prefix_mipsel="mipsel-linux-gnu-"}
|
|
|
|
: ${cross_prefix_mips="mips-linux-gnu-"}
|
|
|
|
: ${cross_prefix_nios2="nios2-linux-gnu-"}
|
|
|
|
: ${cross_prefix_ppc="powerpc-linux-gnu-"}
|
|
|
|
: ${cross_prefix_ppc64="powerpc64-linux-gnu-"}
|
|
|
|
: ${cross_prefix_ppc64le="$cross_prefix_ppc64"}
|
|
|
|
: ${cross_prefix_riscv64="riscv64-linux-gnu-"}
|
|
|
|
: ${cross_prefix_s390x="s390x-linux-gnu-"}
|
|
|
|
: ${cross_prefix_sh4="sh4-linux-gnu-"}
|
|
|
|
: ${cross_prefix_sparc64="sparc64-linux-gnu-"}
|
|
|
|
: ${cross_prefix_sparc="$cross_prefix_sparc64"}
|
|
|
|
: ${cross_prefix_x86_64="x86_64-linux-gnu-"}
|
|
|
|
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
: ${cross_cc_aarch64_be="$cross_cc_aarch64"}
|
|
|
|
: ${cross_cc_cflags_aarch64_be="-mbig-endian"}
|
2022-05-27 18:35:49 +03:00
|
|
|
: ${cross_cc_armeb="$cross_cc_arm"}
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
: ${cross_cc_cflags_armeb="-mbig-endian"}
|
|
|
|
: ${cross_cc_hexagon="hexagon-unknown-linux-musl-clang"}
|
|
|
|
: ${cross_cc_cflags_hexagon="-mv67 -O2 -static"}
|
|
|
|
: ${cross_cc_cflags_i386="-m32"}
|
2022-06-15 12:42:01 +03:00
|
|
|
: ${cross_cc_cflags_ppc="-m32 -mbig-endian"}
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
: ${cross_cc_cflags_ppc64="-m64 -mbig-endian"}
|
|
|
|
: ${cross_cc_ppc64le="$cross_cc_ppc64"}
|
|
|
|
: ${cross_cc_cflags_ppc64le="-m64 -mlittle-endian"}
|
|
|
|
: ${cross_cc_cflags_sparc64="-m64 -mcpu=ultrasparc"}
|
2022-05-27 18:35:49 +03:00
|
|
|
: ${cross_cc_sparc="$cross_cc_sparc64"}
|
|
|
|
: ${cross_cc_cflags_sparc="-m32 -mcpu=supersparc"}
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
: ${cross_cc_cflags_x86_64="-m64"}
|
|
|
|
|
2022-05-27 18:35:51 +03:00
|
|
|
compute_target_variable() {
|
build: try both native and cross compilers
Configure is trying to fall back on cross compilers for targets that
can have bi-arch or bi-endian toolchains, but there are many corner
cases where just checking the name can go wrong. For example, the RHEL
ppc64le compiler is bi-arch and bi-endian, but multilibs are disabled.
Therefore it cannot be used to build 32-bit hosted binaries like the
linux-user TCG tests.
Trying the cross compiler first also does not work, and an example for
this is also ppc64le. The powerpc64-linux-gnu-gcc binary from the
cross-gcc package is theoretically multilib-friendly, but it cannot
find the CRT files on a ppc64le host, because they are not in the .../le
multilib subdirectory.
This can be fixed by testing both the native compiler and the cross
compiler, and proceeding with the first one that works. To do this,
move the compiler usability check from the tests/tcg snippet to inside
probe_target_compiler and, while at it, restrict the softmmu emulation
target to basically a test for the presence of libgcc.
Tested-by: Matheus Kowalczuk Ferst <matheus.ferst@eldorado.org.br>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2022-06-22 11:42:58 +03:00
|
|
|
eval "$2="
|
2022-05-27 18:35:51 +03:00
|
|
|
if eval test -n "\"\${cross_prefix_$1}\""; then
|
|
|
|
if eval has "\"\${cross_prefix_$1}\$3\""; then
|
|
|
|
eval "$2=\"\${cross_prefix_$1}\$3\""
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
|
2022-10-12 17:33:03 +03:00
|
|
|
have_target() {
|
|
|
|
for i; do
|
|
|
|
case " $target_list " in
|
|
|
|
*" $i "*) return 0;;
|
|
|
|
*) ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
2022-07-02 16:59:02 +03:00
|
|
|
# probe_target_compiler TARGET
|
|
|
|
#
|
|
|
|
# Look for a compiler for the given target, either native or cross.
|
|
|
|
# Set variables target_* if a compiler is found, and container_cross_*
|
|
|
|
# if a Docker-based cross-compiler image is known for the target.
|
|
|
|
# Set got_cross_cc to yes/no depending on whether a non-container-based
|
|
|
|
# compiler was found.
|
|
|
|
#
|
|
|
|
# If TARGET is a user-mode emulation target, also set build_static to
|
|
|
|
# "y" if static linking is possible.
|
|
|
|
#
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
probe_target_compiler() {
|
|
|
|
# reset all output variables
|
build: try both native and cross compilers
Configure is trying to fall back on cross compilers for targets that
can have bi-arch or bi-endian toolchains, but there are many corner
cases where just checking the name can go wrong. For example, the RHEL
ppc64le compiler is bi-arch and bi-endian, but multilibs are disabled.
Therefore it cannot be used to build 32-bit hosted binaries like the
linux-user TCG tests.
Trying the cross compiler first also does not work, and an example for
this is also ppc64le. The powerpc64-linux-gnu-gcc binary from the
cross-gcc package is theoretically multilib-friendly, but it cannot
find the CRT files on a ppc64le host, because they are not in the .../le
multilib subdirectory.
This can be fixed by testing both the native compiler and the cross
compiler, and proceeding with the first one that works. To do this,
move the compiler usability check from the tests/tcg snippet to inside
probe_target_compiler and, while at it, restrict the softmmu emulation
target to basically a test for the presence of libgcc.
Tested-by: Matheus Kowalczuk Ferst <matheus.ferst@eldorado.org.br>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2022-06-22 11:42:58 +03:00
|
|
|
got_cross_cc=no
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
container_image=
|
|
|
|
container_hosts=
|
|
|
|
container_cross_cc=
|
2022-05-27 18:35:52 +03:00
|
|
|
container_cross_ar=
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
container_cross_as=
|
|
|
|
container_cross_ld=
|
2022-05-27 18:35:52 +03:00
|
|
|
container_cross_nm=
|
|
|
|
container_cross_objcopy=
|
|
|
|
container_cross_ranlib=
|
|
|
|
container_cross_strip=
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
|
2022-10-27 21:36:10 +03:00
|
|
|
# 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.
|
2022-12-21 12:04:06 +03:00
|
|
|
if test "${target_list#*$1}" = "$1"; then
|
2022-10-27 21:36:10 +03:00
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
2022-07-02 16:59:02 +03:00
|
|
|
target_arch=${1%%-*}
|
|
|
|
case $target_arch in
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
aarch64) container_hosts="x86_64 aarch64" ;;
|
|
|
|
alpha) container_hosts=x86_64 ;;
|
|
|
|
arm) container_hosts="x86_64 aarch64" ;;
|
|
|
|
cris) container_hosts=x86_64 ;;
|
|
|
|
hexagon) container_hosts=x86_64 ;;
|
|
|
|
hppa) container_hosts=x86_64 ;;
|
|
|
|
i386) container_hosts=x86_64 ;;
|
2022-07-04 10:06:29 +03:00
|
|
|
loongarch64) container_hosts=x86_64 ;;
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
m68k) container_hosts=x86_64 ;;
|
|
|
|
microblaze) container_hosts=x86_64 ;;
|
|
|
|
mips64el) container_hosts=x86_64 ;;
|
|
|
|
mips64) container_hosts=x86_64 ;;
|
|
|
|
mipsel) container_hosts=x86_64 ;;
|
|
|
|
mips) container_hosts=x86_64 ;;
|
|
|
|
nios2) container_hosts=x86_64 ;;
|
|
|
|
ppc) container_hosts=x86_64 ;;
|
|
|
|
ppc64|ppc64le) container_hosts=x86_64 ;;
|
|
|
|
riscv64) container_hosts=x86_64 ;;
|
|
|
|
s390x) container_hosts=x86_64 ;;
|
|
|
|
sh4) container_hosts=x86_64 ;;
|
|
|
|
sparc64) container_hosts=x86_64 ;;
|
|
|
|
tricore) container_hosts=x86_64 ;;
|
|
|
|
x86_64) container_hosts="aarch64 ppc64el x86_64" ;;
|
|
|
|
xtensa*) container_hosts=x86_64 ;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
for host in $container_hosts; do
|
|
|
|
test "$container" != no || continue
|
|
|
|
test "$host" = "$cpu" || continue
|
2022-07-02 16:59:02 +03:00
|
|
|
case $target_arch in
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
aarch64)
|
|
|
|
# We don't have any bigendian build tools so we only use this for AArch64
|
|
|
|
container_image=debian-arm64-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=aarch64-linux-gnu-
|
|
|
|
container_cross_cc=${container_cross_prefix}gcc-10
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
alpha)
|
|
|
|
container_image=debian-alpha-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=alpha-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
arm)
|
|
|
|
# We don't have any bigendian build tools so we only use this for ARM
|
|
|
|
container_image=debian-armhf-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=arm-linux-gnueabihf-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
cris)
|
|
|
|
container_image=fedora-cris-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=cris-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
hexagon)
|
|
|
|
container_image=debian-hexagon-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=hexagon-unknown-linux-musl-
|
|
|
|
container_cross_cc=${container_cross_prefix}clang
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
hppa)
|
|
|
|
container_image=debian-hppa-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=hppa-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
i386)
|
|
|
|
container_image=fedora-i386-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
2022-07-04 10:06:29 +03:00
|
|
|
loongarch64)
|
|
|
|
container_image=debian-loongarch-cross
|
|
|
|
container_cross_prefix=loongarch64-unknown-linux-gnu-
|
|
|
|
;;
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
m68k)
|
|
|
|
container_image=debian-m68k-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=m68k-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
microblaze)
|
|
|
|
container_image=debian-microblaze-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=microblaze-linux-musl-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
mips64el)
|
|
|
|
container_image=debian-mips64el-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=mips64el-linux-gnuabi64-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
mips64)
|
|
|
|
container_image=debian-mips64-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=mips64-linux-gnuabi64-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
mipsel)
|
|
|
|
container_image=debian-mipsel-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=mipsel-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
mips)
|
|
|
|
container_image=debian-mips-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=mips-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
nios2)
|
|
|
|
container_image=debian-nios2-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=nios2-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
ppc)
|
|
|
|
container_image=debian-powerpc-test-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=powerpc-linux-gnu-
|
|
|
|
container_cross_cc=${container_cross_prefix}gcc-10
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
ppc64|ppc64le)
|
|
|
|
container_image=debian-powerpc-test-cross
|
2022-07-28 21:39:01 +03:00
|
|
|
container_cross_prefix=powerpc${target_arch#ppc}-linux-gnu-
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_cc=${container_cross_prefix}gcc-10
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
riscv64)
|
|
|
|
container_image=debian-riscv64-test-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=riscv64-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
s390x)
|
|
|
|
container_image=debian-s390x-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=s390x-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
sh4)
|
|
|
|
container_image=debian-sh4-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=sh4-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
sparc64)
|
|
|
|
container_image=debian-sparc64-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=sparc64-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
tricore)
|
|
|
|
container_image=debian-tricore-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=tricore-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
container_cross_as=tricore-as
|
|
|
|
container_cross_ld=tricore-ld
|
2022-05-27 18:35:51 +03:00
|
|
|
break
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
x86_64)
|
|
|
|
container_image=debian-amd64-cross
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=x86_64-linux-gnu-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
xtensa*)
|
|
|
|
container_hosts=x86_64
|
|
|
|
container_image=debian-xtensa-cross
|
|
|
|
|
|
|
|
# default to the dc232b cpu
|
2022-05-27 18:35:51 +03:00
|
|
|
container_cross_prefix=/opt/2020.07/xtensa-dc232b-elf/bin/xtensa-dc232b-elf-
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
;;
|
|
|
|
esac
|
2022-05-27 18:35:51 +03:00
|
|
|
: ${container_cross_cc:=${container_cross_prefix}gcc}
|
2022-05-27 18:35:52 +03:00
|
|
|
: ${container_cross_ar:=${container_cross_prefix}ar}
|
2022-05-27 18:35:51 +03:00
|
|
|
: ${container_cross_as:=${container_cross_prefix}as}
|
|
|
|
: ${container_cross_ld:=${container_cross_prefix}ld}
|
2022-05-27 18:35:52 +03:00
|
|
|
: ${container_cross_nm:=${container_cross_prefix}nm}
|
|
|
|
: ${container_cross_objcopy:=${container_cross_prefix}objcopy}
|
|
|
|
: ${container_cross_ranlib:=${container_cross_prefix}ranlib}
|
|
|
|
: ${container_cross_strip:=${container_cross_prefix}strip}
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
done
|
|
|
|
|
build: try both native and cross compilers
Configure is trying to fall back on cross compilers for targets that
can have bi-arch or bi-endian toolchains, but there are many corner
cases where just checking the name can go wrong. For example, the RHEL
ppc64le compiler is bi-arch and bi-endian, but multilibs are disabled.
Therefore it cannot be used to build 32-bit hosted binaries like the
linux-user TCG tests.
Trying the cross compiler first also does not work, and an example for
this is also ppc64le. The powerpc64-linux-gnu-gcc binary from the
cross-gcc package is theoretically multilib-friendly, but it cannot
find the CRT files on a ppc64le host, because they are not in the .../le
multilib subdirectory.
This can be fixed by testing both the native compiler and the cross
compiler, and proceeding with the first one that works. To do this,
move the compiler usability check from the tests/tcg snippet to inside
probe_target_compiler and, while at it, restrict the softmmu emulation
target to basically a test for the presence of libgcc.
Tested-by: Matheus Kowalczuk Ferst <matheus.ferst@eldorado.org.br>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2022-06-22 11:42:58 +03:00
|
|
|
try=cross
|
2022-07-02 16:59:02 +03:00
|
|
|
case "$target_arch:$cpu" in
|
2022-06-06 11:47:45 +03:00
|
|
|
aarch64_be:aarch64 | \
|
|
|
|
armeb:arm | \
|
2022-06-15 12:42:01 +03:00
|
|
|
i386:x86_64 | \
|
2022-06-06 11:47:45 +03:00
|
|
|
mips*:mips64 | \
|
2022-06-15 12:42:01 +03:00
|
|
|
ppc*:ppc64 | \
|
2022-06-06 11:47:45 +03:00
|
|
|
sparc:sparc64 | \
|
2022-06-15 12:42:01 +03:00
|
|
|
"$cpu:$cpu")
|
build: try both native and cross compilers
Configure is trying to fall back on cross compilers for targets that
can have bi-arch or bi-endian toolchains, but there are many corner
cases where just checking the name can go wrong. For example, the RHEL
ppc64le compiler is bi-arch and bi-endian, but multilibs are disabled.
Therefore it cannot be used to build 32-bit hosted binaries like the
linux-user TCG tests.
Trying the cross compiler first also does not work, and an example for
this is also ppc64le. The powerpc64-linux-gnu-gcc binary from the
cross-gcc package is theoretically multilib-friendly, but it cannot
find the CRT files on a ppc64le host, because they are not in the .../le
multilib subdirectory.
This can be fixed by testing both the native compiler and the cross
compiler, and proceeding with the first one that works. To do this,
move the compiler usability check from the tests/tcg snippet to inside
probe_target_compiler and, while at it, restrict the softmmu emulation
target to basically a test for the presence of libgcc.
Tested-by: Matheus Kowalczuk Ferst <matheus.ferst@eldorado.org.br>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2022-06-22 11:42:58 +03:00
|
|
|
try='native cross' ;;
|
2022-06-15 12:42:01 +03:00
|
|
|
esac
|
build: try both native and cross compilers
Configure is trying to fall back on cross compilers for targets that
can have bi-arch or bi-endian toolchains, but there are many corner
cases where just checking the name can go wrong. For example, the RHEL
ppc64le compiler is bi-arch and bi-endian, but multilibs are disabled.
Therefore it cannot be used to build 32-bit hosted binaries like the
linux-user TCG tests.
Trying the cross compiler first also does not work, and an example for
this is also ppc64le. The powerpc64-linux-gnu-gcc binary from the
cross-gcc package is theoretically multilib-friendly, but it cannot
find the CRT files on a ppc64le host, because they are not in the .../le
multilib subdirectory.
This can be fixed by testing both the native compiler and the cross
compiler, and proceeding with the first one that works. To do this,
move the compiler usability check from the tests/tcg snippet to inside
probe_target_compiler and, while at it, restrict the softmmu emulation
target to basically a test for the presence of libgcc.
Tested-by: Matheus Kowalczuk Ferst <matheus.ferst@eldorado.org.br>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2022-06-22 11:42:58 +03:00
|
|
|
eval "target_cflags=\${cross_cc_cflags_$target_arch}"
|
2022-08-25 18:07:03 +03:00
|
|
|
for thistry in $try; do
|
|
|
|
case $thistry in
|
build: try both native and cross compilers
Configure is trying to fall back on cross compilers for targets that
can have bi-arch or bi-endian toolchains, but there are many corner
cases where just checking the name can go wrong. For example, the RHEL
ppc64le compiler is bi-arch and bi-endian, but multilibs are disabled.
Therefore it cannot be used to build 32-bit hosted binaries like the
linux-user TCG tests.
Trying the cross compiler first also does not work, and an example for
this is also ppc64le. The powerpc64-linux-gnu-gcc binary from the
cross-gcc package is theoretically multilib-friendly, but it cannot
find the CRT files on a ppc64le host, because they are not in the .../le
multilib subdirectory.
This can be fixed by testing both the native compiler and the cross
compiler, and proceeding with the first one that works. To do this,
move the compiler usability check from the tests/tcg snippet to inside
probe_target_compiler and, while at it, restrict the softmmu emulation
target to basically a test for the presence of libgcc.
Tested-by: Matheus Kowalczuk Ferst <matheus.ferst@eldorado.org.br>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2022-06-22 11:42:58 +03:00
|
|
|
native)
|
|
|
|
target_cc=$cc
|
|
|
|
target_ccas=$ccas
|
|
|
|
target_ar=$ar
|
|
|
|
target_as=$as
|
|
|
|
target_ld=$ld
|
|
|
|
target_nm=$nm
|
|
|
|
target_objcopy=$objcopy
|
|
|
|
target_ranlib=$ranlib
|
|
|
|
target_strip=$strip
|
|
|
|
;;
|
|
|
|
cross)
|
|
|
|
target_cc=
|
|
|
|
if eval test -n "\"\${cross_cc_$target_arch}\""; then
|
|
|
|
if eval has "\"\${cross_cc_$target_arch}\""; then
|
|
|
|
eval "target_cc=\"\${cross_cc_$target_arch}\""
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
compute_target_variable $target_arch target_cc gcc
|
|
|
|
fi
|
|
|
|
target_ccas=$target_cc
|
|
|
|
compute_target_variable $target_arch target_ar ar
|
|
|
|
compute_target_variable $target_arch target_as as
|
|
|
|
compute_target_variable $target_arch target_ld ld
|
|
|
|
compute_target_variable $target_arch target_nm nm
|
|
|
|
compute_target_variable $target_arch target_objcopy objcopy
|
|
|
|
compute_target_variable $target_arch target_ranlib ranlib
|
|
|
|
compute_target_variable $target_arch target_strip strip
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
if test -n "$target_cc"; then
|
|
|
|
case $target_arch in
|
|
|
|
i386|x86_64)
|
|
|
|
if $target_cc --version | grep -qi "clang"; then
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
elif test -n "$target_as" && test -n "$target_ld"; then
|
|
|
|
# Special handling for assembler only targets
|
|
|
|
case $target in
|
|
|
|
tricore-softmmu)
|
|
|
|
build_static=
|
|
|
|
got_cross_cc=yes
|
|
|
|
break
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
continue
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
else
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
write_c_skeleton
|
|
|
|
case $1 in
|
|
|
|
*-softmmu)
|
|
|
|
if do_compiler "$target_cc" $target_cflags -o $TMPO -c $TMPC &&
|
|
|
|
do_compiler "$target_cc" $target_cflags -r -nostdlib -o "${TMPDIR1}/${TMPB}2.o" "$TMPO" -lgcc; then
|
|
|
|
got_cross_cc=yes
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
if do_compiler "$target_cc" $target_cflags -o $TMPE $TMPC -static ; then
|
|
|
|
build_static=y
|
|
|
|
got_cross_cc=yes
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
if do_compiler "$target_cc" $target_cflags -o $TMPE $TMPC ; then
|
|
|
|
build_static=
|
|
|
|
got_cross_cc=yes
|
|
|
|
break
|
2022-05-27 18:35:50 +03:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
build: try both native and cross compilers
Configure is trying to fall back on cross compilers for targets that
can have bi-arch or bi-endian toolchains, but there are many corner
cases where just checking the name can go wrong. For example, the RHEL
ppc64le compiler is bi-arch and bi-endian, but multilibs are disabled.
Therefore it cannot be used to build 32-bit hosted binaries like the
linux-user TCG tests.
Trying the cross compiler first also does not work, and an example for
this is also ppc64le. The powerpc64-linux-gnu-gcc binary from the
cross-gcc package is theoretically multilib-friendly, but it cannot
find the CRT files on a ppc64le host, because they are not in the .../le
multilib subdirectory.
This can be fixed by testing both the native compiler and the cross
compiler, and proceeding with the first one that works. To do this,
move the compiler usability check from the tests/tcg snippet to inside
probe_target_compiler and, while at it, restrict the softmmu emulation
target to basically a test for the presence of libgcc.
Tested-by: Matheus Kowalczuk Ferst <matheus.ferst@eldorado.org.br>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2022-06-22 11:42:58 +03:00
|
|
|
done
|
|
|
|
if test $got_cross_cc != yes; then
|
|
|
|
build_static=
|
|
|
|
target_cc=
|
|
|
|
target_ccas=
|
|
|
|
target_ar=
|
|
|
|
target_as=
|
|
|
|
target_ld=
|
|
|
|
target_nm=
|
|
|
|
target_objcopy=
|
|
|
|
target_ranlib=
|
|
|
|
target_strip=
|
2022-05-27 18:35:50 +03:00
|
|
|
fi
|
2022-10-11 14:34:16 +03:00
|
|
|
test -n "$target_cc"
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
write_target_makefile() {
|
2022-06-15 12:45:55 +03:00
|
|
|
echo "EXTRA_CFLAGS=$target_cflags"
|
2022-09-29 14:42:06 +03:00
|
|
|
if test -z "$target_cc" && test -z "$target_as"; then
|
|
|
|
test -z "$container_image" && error_exit "Internal error: could not find cross compiler for $1?"
|
|
|
|
echo "$1: docker-image-$container_image" >> Makefile.prereqs
|
|
|
|
if test -n "$container_cross_cc"; then
|
|
|
|
echo "CC=$docker_py cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
|
|
|
|
echo "CCAS=$docker_py cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
|
|
|
|
fi
|
|
|
|
echo "AR=$docker_py cc --cc $container_cross_ar -i qemu/$container_image -s $source_path --"
|
|
|
|
echo "AS=$docker_py cc --cc $container_cross_as -i qemu/$container_image -s $source_path --"
|
|
|
|
echo "LD=$docker_py cc --cc $container_cross_ld -i qemu/$container_image -s $source_path --"
|
|
|
|
echo "NM=$docker_py cc --cc $container_cross_nm -i qemu/$container_image -s $source_path --"
|
|
|
|
echo "OBJCOPY=$docker_py cc --cc $container_cross_objcopy -i qemu/$container_image -s $source_path --"
|
|
|
|
echo "RANLIB=$docker_py cc --cc $container_cross_ranlib -i qemu/$container_image -s $source_path --"
|
|
|
|
echo "STRIP=$docker_py cc --cc $container_cross_strip -i qemu/$container_image -s $source_path --"
|
|
|
|
else
|
|
|
|
if test -n "$target_cc"; then
|
|
|
|
echo "CC=$target_cc"
|
|
|
|
echo "CCAS=$target_ccas"
|
|
|
|
fi
|
|
|
|
if test -n "$target_ar"; then
|
|
|
|
echo "AR=$target_ar"
|
|
|
|
fi
|
|
|
|
if test -n "$target_as"; then
|
|
|
|
echo "AS=$target_as"
|
|
|
|
fi
|
|
|
|
if test -n "$target_ld"; then
|
|
|
|
echo "LD=$target_ld"
|
|
|
|
fi
|
|
|
|
if test -n "$target_nm"; then
|
|
|
|
echo "NM=$target_nm"
|
|
|
|
fi
|
|
|
|
if test -n "$target_objcopy"; then
|
|
|
|
echo "OBJCOPY=$target_objcopy"
|
|
|
|
fi
|
|
|
|
if test -n "$target_ranlib"; then
|
|
|
|
echo "RANLIB=$target_ranlib"
|
|
|
|
fi
|
|
|
|
if test -n "$target_strip"; then
|
|
|
|
echo "STRIP=$target_strip"
|
|
|
|
fi
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2022-06-13 23:26:24 +03:00
|
|
|
##########################################
|
|
|
|
# check for vfio_user_server
|
|
|
|
|
|
|
|
case "$vfio_user_server" in
|
|
|
|
enabled )
|
|
|
|
if test "$git_submodules_action" != "ignore"; then
|
|
|
|
git_submodules="${git_submodules} subprojects/libvfio-user"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2010-05-23 00:11:33 +04:00
|
|
|
##########################################
|
2009-08-03 16:45:59 +04:00
|
|
|
# End of CC checks
|
|
|
|
# After here, no more $cc or $ld runs
|
|
|
|
|
2018-01-16 18:11:52 +03:00
|
|
|
write_c_skeleton
|
|
|
|
|
2022-04-20 18:33:38 +03:00
|
|
|
if test "$fortify_source" = "yes" ; then
|
2020-02-03 17:22:17 +03:00
|
|
|
QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
|
|
|
|
fi
|
|
|
|
|
2018-01-16 18:11:51 +03:00
|
|
|
if test "$have_asan" = "yes"; then
|
build-sys: clean up flags included in the linker command line
Some of the CFLAGS that are discovered during configure, for example
compiler warnings, are being included on the linker command line because
QEMU_CFLAGS is added to it. Other flags, such as the -m32, appear twice
because they are included in both QEMU_CFLAGS and LDFLAGS. All this
leads to confusion with respect to what goes in which Makefile variables
(and we have plenty).
So, introduce QEMU_LDFLAGS for flags discovered by configure, following
the lead of QEMU_CFLAGS, and stop adding to it:
1) options that are already in CFLAGS, for example "-g"
2) duplicate options
At the same time, options that _are_ needed by both compiler and linker
must now be added to both QEMU_CFLAGS and QEMU_LDFLAGS, which is clearer.
This is mostly -fsanitize options. For now, --extra-cflags has this behavior
(but --extra-cxxflags does not).
Meson will not include CFLAGS on the linker command line, do the same in our
build system as well.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-12-11 17:34:27 +03:00
|
|
|
QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
|
|
|
|
QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
|
2018-01-16 18:11:52 +03:00
|
|
|
if test "$have_asan_iface_h" = "no" ; then
|
|
|
|
echo "ASAN build enabled, but ASAN header missing." \
|
|
|
|
"Without code annotation, the report may be inferior."
|
|
|
|
elif test "$have_asan_iface_fiber" = "no" ; then
|
|
|
|
echo "ASAN build enabled, but ASAN header is too old." \
|
|
|
|
"Without code annotation, the report may be inferior."
|
|
|
|
fi
|
2018-01-16 18:11:51 +03:00
|
|
|
fi
|
2020-06-12 22:02:23 +03:00
|
|
|
if test "$have_tsan" = "yes" ; then
|
|
|
|
if test "$have_tsan_iface_fiber" = "yes" ; then
|
|
|
|
QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
|
|
|
|
QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
|
|
|
|
else
|
|
|
|
error_exit "Cannot enable TSAN due to missing fiber annotation interface."
|
|
|
|
fi
|
|
|
|
elif test "$tsan" = "yes" ; then
|
|
|
|
error_exit "Cannot enable TSAN due to missing sanitize thread interface."
|
|
|
|
fi
|
2018-01-16 18:11:51 +03:00
|
|
|
if test "$have_ubsan" = "yes"; then
|
build-sys: clean up flags included in the linker command line
Some of the CFLAGS that are discovered during configure, for example
compiler warnings, are being included on the linker command line because
QEMU_CFLAGS is added to it. Other flags, such as the -m32, appear twice
because they are included in both QEMU_CFLAGS and LDFLAGS. All this
leads to confusion with respect to what goes in which Makefile variables
(and we have plenty).
So, introduce QEMU_LDFLAGS for flags discovered by configure, following
the lead of QEMU_CFLAGS, and stop adding to it:
1) options that are already in CFLAGS, for example "-g"
2) duplicate options
At the same time, options that _are_ needed by both compiler and linker
must now be added to both QEMU_CFLAGS and QEMU_LDFLAGS, which is clearer.
This is mostly -fsanitize options. For now, --extra-cflags has this behavior
(but --extra-cxxflags does not).
Meson will not include CFLAGS on the linker command line, do the same in our
build system as well.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-12-11 17:34:27 +03:00
|
|
|
QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
|
|
|
|
QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
|
2018-01-16 18:11:51 +03:00
|
|
|
fi
|
|
|
|
|
2022-05-27 18:35:55 +03:00
|
|
|
#######################################
|
|
|
|
# cross-compiled firmware targets
|
|
|
|
|
2022-05-27 18:35:53 +03:00
|
|
|
# Set up build tree symlinks that point back into the source tree
|
|
|
|
# (these can be both files and directories).
|
|
|
|
# Caution: avoid adding files or directories here using wildcards. This
|
|
|
|
# will result in problems later if a new file matching the wildcard is
|
|
|
|
# added to the source tree -- nothing will cause configure to be rerun
|
|
|
|
# so the build tree will be missing the link back to the new file, and
|
|
|
|
# tests might fail. Prefer to keep the relevant files in their own
|
|
|
|
# directory and symlink the directory instead.
|
|
|
|
LINKS="Makefile"
|
2023-03-01 00:15:29 +03:00
|
|
|
LINKS="$LINKS docs/config"
|
2022-05-27 18:35:53 +03:00
|
|
|
LINKS="$LINKS pc-bios/optionrom/Makefile"
|
|
|
|
LINKS="$LINKS pc-bios/s390-ccw/Makefile"
|
2022-05-27 18:35:56 +03:00
|
|
|
LINKS="$LINKS pc-bios/vof/Makefile"
|
2022-05-27 18:35:53 +03:00
|
|
|
LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
|
|
|
|
LINKS="$LINKS tests/avocado tests/data"
|
|
|
|
LINKS="$LINKS tests/qemu-iotests/check"
|
|
|
|
LINKS="$LINKS python"
|
|
|
|
LINKS="$LINKS contrib/plugins/Makefile "
|
|
|
|
for f in $LINKS ; do
|
|
|
|
if [ -e "$source_path/$f" ]; then
|
2022-08-25 18:07:01 +03:00
|
|
|
mkdir -p "$(dirname ./"$f")"
|
2022-05-27 18:35:53 +03:00
|
|
|
symlink "$source_path/$f" "$f"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2022-09-29 14:42:05 +03:00
|
|
|
echo "# Automatically generated by configure - do not modify" > Makefile.prereqs
|
|
|
|
|
2010-05-26 18:08:29 +04:00
|
|
|
# Mac OS X ships with a broken assembler
|
|
|
|
roms=
|
2022-10-12 17:33:03 +03:00
|
|
|
if have_target i386-softmmu x86_64-softmmu && \
|
|
|
|
test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
|
|
|
|
test "$targetos" != "haiku" && \
|
2022-09-29 14:41:57 +03:00
|
|
|
probe_target_compiler i386-softmmu; then
|
2022-06-06 12:35:41 +03:00
|
|
|
roms="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
|
2022-10-11 14:34:16 +03:00
|
|
|
write_target_makefile >> $config_mak
|
2010-05-26 18:08:29 +04:00
|
|
|
fi
|
|
|
|
|
2022-10-12 17:33:03 +03:00
|
|
|
if have_target ppc-softmmu ppc64-softmmu && \
|
|
|
|
probe_target_compiler ppc-softmmu; then
|
2022-04-13 16:22:01 +03:00
|
|
|
roms="$roms pc-bios/vof"
|
2022-05-27 18:35:56 +03:00
|
|
|
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
|
2022-10-11 14:34:16 +03:00
|
|
|
write_target_makefile >> $config_mak
|
2022-05-27 18:35:56 +03:00
|
|
|
fi
|
|
|
|
|
2022-05-27 18:35:54 +03:00
|
|
|
# Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
|
|
|
|
# (which is the lowest architecture level that Clang supports)
|
2022-10-12 17:33:03 +03:00
|
|
|
if have_target s390x-softmmu && probe_target_compiler s390x-softmmu; then
|
2022-10-11 14:34:16 +03:00
|
|
|
write_c_skeleton
|
|
|
|
do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
|
|
|
|
has_z900=$?
|
|
|
|
if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
|
|
|
|
if [ $has_z900 != 0 ]; then
|
|
|
|
echo "WARNING: Your compiler does not support the z900!"
|
|
|
|
echo " The s390-ccw bios will only work with guest CPUs >= z10."
|
2021-05-02 14:22:21 +03:00
|
|
|
fi
|
2022-04-13 16:22:01 +03:00
|
|
|
roms="$roms pc-bios/s390-ccw"
|
2022-05-27 18:35:54 +03:00
|
|
|
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
|
2022-10-11 14:34:16 +03:00
|
|
|
write_target_makefile >> $config_mak
|
2020-06-15 10:49:19 +03:00
|
|
|
# SLOF is required for building the s390-ccw firmware on s390x,
|
|
|
|
# since it is using the libnet code from SLOF for network booting.
|
2021-05-12 10:21:56 +03:00
|
|
|
git_submodules="${git_submodules} roms/SLOF"
|
2019-01-14 15:52:26 +03:00
|
|
|
fi
|
2013-04-23 05:23:03 +04:00
|
|
|
fi
|
|
|
|
|
2022-05-27 18:35:54 +03:00
|
|
|
#######################################
|
|
|
|
# generate config-host.mak
|
|
|
|
|
2022-07-20 18:26:27 +03:00
|
|
|
if ! (GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-19 20:20:46 +03:00
|
|
|
exit 1
|
2020-09-02 20:00:49 +03:00
|
|
|
fi
|
|
|
|
|
2009-07-16 20:34:18 +04:00
|
|
|
config_host_mak="config-host.mak"
|
|
|
|
|
|
|
|
echo "# Automatically generated by configure - do not modify" > $config_host_mak
|
|
|
|
echo >> $config_host_mak
|
|
|
|
|
2010-10-21 12:18:35 +04:00
|
|
|
echo all: >> $config_host_mak
|
2017-10-20 17:02:43 +03:00
|
|
|
echo "GIT=$git" >> $config_host_mak
|
2017-09-29 13:11:56 +03:00
|
|
|
echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-19 20:20:46 +03:00
|
|
|
echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
|
2009-07-27 18:12:49 +04:00
|
|
|
|
2009-04-13 22:45:38 +04:00
|
|
|
if test "$debug_tcg" = "yes" ; then
|
2009-07-27 18:13:25 +04:00
|
|
|
echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
|
2009-04-13 22:45:38 +04:00
|
|
|
fi
|
2004-04-01 03:37:16 +04:00
|
|
|
if test "$mingw32" = "yes" ; then
|
2009-07-16 20:34:18 +04:00
|
|
|
echo "CONFIG_WIN32=y" >> $config_host_mak
|
2022-10-12 12:35:17 +03:00
|
|
|
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
|
2007-02-28 00:04:49 +03:00
|
|
|
else
|
2009-07-27 18:13:07 +04:00
|
|
|
echo "CONFIG_POSIX=y" >> $config_host_mak
|
2009-10-22 20:49:11 +04:00
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$linux" = "yes" ; then
|
|
|
|
echo "CONFIG_LINUX=y" >> $config_host_mak
|
2004-04-01 03:37:16 +04:00
|
|
|
fi
|
2008-08-15 22:33:42 +04:00
|
|
|
|
2004-07-06 01:25:26 +04:00
|
|
|
if test "$darwin" = "yes" ; then
|
2009-07-16 20:34:18 +04:00
|
|
|
echo "CONFIG_DARWIN=y" >> $config_host_mak
|
2004-07-06 01:25:26 +04:00
|
|
|
fi
|
2008-11-18 04:42:22 +03:00
|
|
|
|
2006-04-26 02:36:06 +04:00
|
|
|
if test "$solaris" = "yes" ; then
|
2009-07-16 20:34:18 +04:00
|
|
|
echo "CONFIG_SOLARIS=y" >> $config_host_mak
|
2006-04-26 02:36:06 +04:00
|
|
|
fi
|
2003-08-11 01:36:04 +04:00
|
|
|
if test "$static" = "yes" ; then
|
2009-07-16 20:34:18 +04:00
|
|
|
echo "CONFIG_STATIC=y" >> $config_host_mak
|
2003-03-07 02:23:54 +03:00
|
|
|
fi
|
2009-07-16 20:34:18 +04:00
|
|
|
echo "SRC_PATH=$source_path" >> $config_host_mak
|
2018-07-04 09:30:11 +03:00
|
|
|
echo "TARGET_DIRS=$target_list" >> $config_host_mak
|
2014-02-10 10:48:56 +04:00
|
|
|
if test "$modules" = "yes"; then
|
|
|
|
echo "CONFIG_MODULES=y" >> $config_host_mak
|
|
|
|
fi
|
2016-04-29 20:15:23 +03:00
|
|
|
|
2004-07-06 01:25:26 +04:00
|
|
|
# XXX: suppress that
|
2004-05-12 23:32:15 +04:00
|
|
|
if [ "$bsd" = "yes" ] ; then
|
2009-07-27 18:13:25 +04:00
|
|
|
echo "CONFIG_BSD=y" >> $config_host_mak
|
2004-05-12 23:32:15 +04:00
|
|
|
fi
|
|
|
|
|
2013-04-08 15:11:27 +04:00
|
|
|
echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
|
2016-09-27 12:58:45 +03:00
|
|
|
|
2018-01-16 18:11:52 +03:00
|
|
|
if test "$have_asan_iface_fiber" = "yes" ; then
|
|
|
|
echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2020-06-12 22:02:23 +03:00
|
|
|
if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
|
|
|
|
echo "CONFIG_TSAN=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2019-06-13 16:52:25 +03:00
|
|
|
if test "$plugins" = "yes" ; then
|
|
|
|
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2021-01-09 01:42:39 +03:00
|
|
|
if test -n "$gdb_bin"; then
|
|
|
|
gdb_version=$($gdb_bin --version | head -n 1)
|
2021-02-02 16:39:53 +03:00
|
|
|
if version_ge ${gdb_version##* } 9.1; then
|
2021-01-09 01:42:39 +03:00
|
|
|
echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
|
2023-03-03 05:57:59 +03:00
|
|
|
gdb_arches=$("$source_path/scripts/probe-gdb-support.py" $gdb_bin)
|
2022-09-29 14:41:45 +03:00
|
|
|
else
|
|
|
|
gdb_bin=""
|
2021-01-09 01:42:39 +03:00
|
|
|
fi
|
2020-03-16 20:21:48 +03:00
|
|
|
fi
|
|
|
|
|
2022-09-29 14:41:58 +03:00
|
|
|
if test "$container" != no; then
|
|
|
|
echo "ENGINE=$container" >> $config_host_mak
|
2023-02-28 22:06:46 +03:00
|
|
|
echo "RUNC=$runc" >> $config_host_mak
|
2022-09-29 14:41:58 +03:00
|
|
|
fi
|
2009-07-16 20:34:18 +04:00
|
|
|
echo "ROMS=$roms" >> $config_host_mak
|
2009-07-27 18:12:49 +04:00
|
|
|
echo "MAKE=$make" >> $config_host_mak
|
2011-07-23 01:08:09 +04:00
|
|
|
echo "PYTHON=$python" >> $config_host_mak
|
2020-03-03 18:06:20 +03:00
|
|
|
echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
|
2019-06-10 13:05:14 +03:00
|
|
|
echo "MESON=$meson" >> $config_host_mak
|
2020-08-13 16:28:11 +03:00
|
|
|
echo "NINJA=$ninja" >> $config_host_mak
|
2009-07-27 18:12:49 +04:00
|
|
|
echo "CC=$cc" >> $config_host_mak
|
2009-08-03 16:46:21 +04:00
|
|
|
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
|
2022-02-15 18:15:13 +03:00
|
|
|
echo "QEMU_OBJCFLAGS=$QEMU_OBJCFLAGS" >> $config_host_mak
|
2020-08-19 15:44:56 +03:00
|
|
|
echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
|
|
|
|
echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
|
2022-05-25 17:41:39 +03:00
|
|
|
echo "GLIB_BINDIR=$glib_bindir" >> $config_host_mak
|
2023-01-07 16:32:41 +03:00
|
|
|
echo "GLIB_VERSION=$($pkg_config --modversion glib-2.0)" >> $config_host_mak
|
2023-02-05 19:37:57 +03:00
|
|
|
if test "$glib_has_gslice" = "yes" ; then
|
|
|
|
echo "HAVE_GLIB_WITH_SLICE_ALLOCATOR=y" >> $config_host_mak
|
|
|
|
fi
|
2018-04-16 02:05:19 +03:00
|
|
|
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
|
2009-07-27 18:12:49 +04:00
|
|
|
echo "EXESUF=$EXESUF" >> $config_host_mak
|
|
|
|
|
2011-11-30 15:59:04 +04:00
|
|
|
# use included Linux headers
|
|
|
|
if test "$linux" = "yes" ; then
|
2012-06-14 19:14:33 +04:00
|
|
|
mkdir -p linux-headers
|
2011-11-30 15:59:04 +04:00
|
|
|
case "$cpu" in
|
2021-11-09 11:36:10 +03:00
|
|
|
i386|x86_64)
|
2012-08-03 16:51:25 +04:00
|
|
|
linux_arch=x86
|
2011-11-30 15:59:04 +04:00
|
|
|
;;
|
2021-11-09 11:18:20 +03:00
|
|
|
ppc|ppc64)
|
2012-08-03 16:51:25 +04:00
|
|
|
linux_arch=powerpc
|
2011-11-30 15:59:04 +04:00
|
|
|
;;
|
|
|
|
s390x)
|
2012-08-03 16:51:25 +04:00
|
|
|
linux_arch=s390
|
|
|
|
;;
|
2013-06-12 19:20:23 +04:00
|
|
|
aarch64)
|
|
|
|
linux_arch=arm64
|
|
|
|
;;
|
2021-12-21 08:41:04 +03:00
|
|
|
loongarch*)
|
|
|
|
linux_arch=loongarch
|
|
|
|
;;
|
2014-06-18 02:10:36 +04:00
|
|
|
mips64)
|
|
|
|
linux_arch=mips
|
|
|
|
;;
|
2012-08-03 16:51:25 +04:00
|
|
|
*)
|
|
|
|
# For most CPUs the kernel architecture name and QEMU CPU name match.
|
|
|
|
linux_arch="$cpu"
|
2011-11-30 15:59:04 +04:00
|
|
|
;;
|
|
|
|
esac
|
2012-08-03 16:51:25 +04:00
|
|
|
# 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
|
2011-11-30 15:59:04 +04:00
|
|
|
fi
|
|
|
|
|
2005-10-30 21:58:22 +03:00
|
|
|
for target in $target_list; do
|
2020-09-21 11:37:49 +03:00
|
|
|
target_dir="$target"
|
2021-11-09 17:45:04 +03:00
|
|
|
target_name=$(echo $target | cut -d '-' -f 1)$EXESUF
|
2022-08-25 18:06:59 +03:00
|
|
|
mkdir -p "$target_dir"
|
2020-09-21 11:37:49 +03:00
|
|
|
case $target in
|
|
|
|
*-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
|
|
|
|
*) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
|
|
|
|
esac
|
|
|
|
done
|
2003-03-07 02:23:54 +03:00
|
|
|
|
2020-09-21 11:37:49 +03:00
|
|
|
if test "$default_targets" = "yes"; then
|
|
|
|
echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
|
|
|
|
fi
|
2013-04-18 08:47:31 +04:00
|
|
|
|
2015-03-26 01:57:39 +03:00
|
|
|
if test "$ccache_cpp2" = "yes"; then
|
|
|
|
echo "export CCACHE_CPP2=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2020-05-29 23:51:21 +03:00
|
|
|
if test "$safe_stack" = "yes"; then
|
|
|
|
echo "CONFIG_SAFESTACK=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
# tests/tcg configuration
|
2022-09-29 14:42:05 +03:00
|
|
|
(config_host_mak=tests/tcg/config-host.mak
|
2022-09-29 14:42:00 +03:00
|
|
|
mkdir -p tests/tcg
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
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
|
|
|
|
|
2022-09-29 14:41:45 +03:00
|
|
|
# versioned checked in the main config_host.mak above
|
|
|
|
if test -n "$gdb_bin"; then
|
|
|
|
echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
|
|
|
|
fi
|
2022-10-27 21:36:32 +03:00
|
|
|
if test "$plugins" = "yes" ; then
|
|
|
|
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
|
|
|
fi
|
2022-09-29 14:41:45 +03:00
|
|
|
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
tcg_tests_targets=
|
|
|
|
for target in $target_list; do
|
|
|
|
arch=${target%%-*}
|
|
|
|
|
|
|
|
case $target in
|
2022-06-13 20:12:56 +03:00
|
|
|
xtensa*-linux-user)
|
|
|
|
# the toolchain is not complete with headers, only build softmmu tests
|
|
|
|
continue
|
|
|
|
;;
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
*-softmmu)
|
2022-08-25 18:06:59 +03:00
|
|
|
test -f "$source_path/tests/tcg/$arch/Makefile.softmmu-target" || continue
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
qemu="qemu-system-$arch"
|
|
|
|
;;
|
|
|
|
*-linux-user|*-bsd-user)
|
|
|
|
qemu="qemu-$arch"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2022-10-11 14:34:16 +03:00
|
|
|
if probe_target_compiler $target || test -n "$container_image"; then
|
2022-09-29 14:42:06 +03:00
|
|
|
test -n "$container_image" && build_static=y
|
2022-09-29 14:42:00 +03:00
|
|
|
mkdir -p "tests/tcg/$target"
|
2022-09-29 14:42:07 +03:00
|
|
|
config_target_mak=tests/tcg/$target/config-target.mak
|
2022-09-29 14:42:00 +03:00
|
|
|
ln -sf "$source_path/tests/tcg/Makefile.target" "tests/tcg/$target/Makefile"
|
2022-09-29 14:42:07 +03:00
|
|
|
echo "# Automatically generated by configure - do not modify" > "$config_target_mak"
|
|
|
|
echo "TARGET_NAME=$arch" >> "$config_target_mak"
|
2022-09-29 14:41:59 +03:00
|
|
|
echo "TARGET=$target" >> "$config_target_mak"
|
2022-09-29 14:42:07 +03:00
|
|
|
write_target_makefile "build-tcg-tests-$target" >> "$config_target_mak"
|
2022-09-29 14:42:04 +03:00
|
|
|
echo "BUILD_STATIC=$build_static" >> "$config_target_mak"
|
2022-09-29 14:42:07 +03:00
|
|
|
echo "QEMU=$PWD/$qemu" >> "$config_target_mak"
|
2023-03-03 05:57:59 +03:00
|
|
|
|
|
|
|
# will GDB work with these binaries?
|
|
|
|
if test "${gdb_arches#*$arch}" != "$gdb_arches"; then
|
|
|
|
echo "HOST_GDB_SUPPORTS_ARCH=y" >> "$config_target_mak"
|
|
|
|
fi
|
|
|
|
|
2022-09-29 14:42:05 +03:00
|
|
|
echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> Makefile.prereqs
|
tests/tcg: merge configure.sh back into main configure script
tests/tcg/configure.sh has a complicated story.
In the beginning its code ran as part of the creation of config-target.mak
files, and that is where it placed the information on the target compiler.
However, probing for the buildability of TCG tests required multiple
inclusions of config-target.mak in the _main_ Makefile (not in
Makefile.target, which took care of building the QEMU executables in
the pre-Meson era), which polluted the namespace.
Thus, it was moved to a separate directory. It created small config-*.mak
files in $(BUILD_DIR)/tests/tcg. Those were also included multiple
times, but at least they were small and manageable; this was also an
important step in disentangling the TCG tests from Makefile.target.
Since then, Meson has allowed the configure script to go on a diet.
A few compilation tests survive (mostly for sanitizers) but these days
it mostly takes care of command line parsing, looking for tools, and
setting up the environment for Meson to do its stuff.
It's time to extend configure with the capability to build for more
than just one target: not just tests, but also firmware. As a first
step, integrate all the logic to find cross compilers in the configure
script, and move tests/tcg/configure.sh back there (though as a
separate loop, not integrated in the one that generates target
configurations for Meson).
tests/tcg is actually very close to being buildable as a standalone
project, so I actually expect the compiler tests to move back to
tests/tcg, as a "configure" script of sorts which would run at Make
time after the docker images are built. The GCC tree has a similar idea
of doing only bare-bones tree-wide configuration and leaving the rest
for Make time.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220517092616.1272238-8-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220527153603.887929-19-alex.bennee@linaro.org>
2022-05-27 18:35:48 +03:00
|
|
|
tcg_tests_targets="$tcg_tests_targets $target"
|
|
|
|
fi
|
2019-08-07 17:35:23 +03:00
|
|
|
done
|
2023-01-20 21:48:22 +03:00
|
|
|
|
|
|
|
if test "$tcg" = "enabled"; then
|
|
|
|
echo "TCG_TESTS_TARGETS=$tcg_tests_targets" >> config-host.mak
|
|
|
|
fi
|
|
|
|
)
|
2019-08-07 17:35:23 +03:00
|
|
|
|
2019-06-10 13:05:14 +03:00
|
|
|
if test "$skip_meson" = no; then
|
2021-03-16 10:19:34 +03:00
|
|
|
cross="config-meson.cross.new"
|
|
|
|
meson_quote() {
|
2021-11-05 12:07:37 +03:00
|
|
|
test $# = 0 && return
|
2020-09-23 12:26:17 +03:00
|
|
|
echo "'$(echo $* | sed "s/ /','/g")'"
|
2021-03-16 10:19:34 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
echo "# Automatically generated by configure - do not modify" > $cross
|
|
|
|
echo "[properties]" >> $cross
|
2021-07-07 16:17:44 +03:00
|
|
|
|
|
|
|
# unroll any custom device configs
|
2021-07-21 02:26:38 +03:00
|
|
|
for a in $device_archs; do
|
|
|
|
eval "c=\$devices_${a}"
|
|
|
|
echo "${a}-softmmu = '$c'" >> $cross
|
|
|
|
done
|
2021-07-07 16:17:44 +03:00
|
|
|
|
2021-03-16 10:19:34 +03:00
|
|
|
echo "[built-in options]" >> $cross
|
2021-11-05 12:09:26 +03:00
|
|
|
echo "c_args = [$(meson_quote $CFLAGS $EXTRA_CFLAGS)]" >> $cross
|
|
|
|
echo "cpp_args = [$(meson_quote $CXXFLAGS $EXTRA_CXXFLAGS)]" >> $cross
|
2022-01-09 00:38:55 +03:00
|
|
|
test -n "$objcc" && echo "objc_args = [$(meson_quote $OBJCFLAGS $EXTRA_OBJCFLAGS)]" >> $cross
|
2021-11-05 12:09:26 +03:00
|
|
|
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
|
2021-03-16 10:19:34 +03:00
|
|
|
echo "[binaries]" >> $cross
|
2021-09-29 18:14:43 +03:00
|
|
|
echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
|
|
|
|
test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
|
|
|
|
test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
|
2021-03-16 10:19:34 +03:00
|
|
|
echo "ar = [$(meson_quote $ar)]" >> $cross
|
|
|
|
echo "nm = [$(meson_quote $nm)]" >> $cross
|
|
|
|
echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
|
|
|
|
echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
|
|
|
|
if has $sdl2_config; then
|
|
|
|
echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
|
|
|
|
fi
|
|
|
|
echo "strip = [$(meson_quote $strip)]" >> $cross
|
2022-04-28 21:15:25 +03:00
|
|
|
echo "widl = [$(meson_quote $widl)]" >> $cross
|
2021-03-16 10:19:34 +03:00
|
|
|
echo "windres = [$(meson_quote $windres)]" >> $cross
|
2022-11-29 20:38:08 +03:00
|
|
|
echo "windmc = [$(meson_quote $windmc)]" >> $cross
|
2021-03-16 10:19:34 +03:00
|
|
|
if test "$cross_compile" = "yes"; then
|
2019-07-13 00:47:54 +03:00
|
|
|
cross_arg="--cross-file config-meson.cross"
|
|
|
|
echo "[host_machine]" >> $cross
|
2021-11-08 16:47:54 +03:00
|
|
|
echo "system = '$targetos'" >> $cross
|
2021-11-08 16:18:17 +03:00
|
|
|
case "$cpu" in
|
2021-01-26 04:24:54 +03:00
|
|
|
i386)
|
2019-07-13 00:47:54 +03:00
|
|
|
echo "cpu_family = 'x86'" >> $cross
|
|
|
|
;;
|
|
|
|
*)
|
2021-11-08 16:18:17 +03:00
|
|
|
echo "cpu_family = '$cpu'" >> $cross
|
2019-07-13 00:47:54 +03:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
echo "cpu = '$cpu'" >> $cross
|
|
|
|
if test "$bigendian" = "yes" ; then
|
|
|
|
echo "endian = 'big'" >> $cross
|
|
|
|
else
|
|
|
|
echo "endian = 'little'" >> $cross
|
|
|
|
fi
|
2021-03-16 10:19:34 +03:00
|
|
|
else
|
2019-07-13 00:47:54 +03:00
|
|
|
cross_arg="--native-file config-meson.cross"
|
2021-03-16 10:19:34 +03:00
|
|
|
fi
|
|
|
|
mv $cross config-meson.cross
|
2019-07-13 00:47:54 +03:00
|
|
|
|
2021-03-16 10:19:34 +03:00
|
|
|
rm -rf meson-private meson-info meson-logs
|
2022-04-20 18:33:59 +03:00
|
|
|
|
2023-03-02 16:18:46 +03:00
|
|
|
# Prevent meson from automatically downloading wrapped subprojects when missing.
|
|
|
|
# You can use 'meson subprojects download' before running configure.
|
|
|
|
meson_option_add "--wrap-mode=nodownload"
|
|
|
|
|
2022-04-20 18:33:59 +03:00
|
|
|
# Built-in options
|
|
|
|
test "$bindir" != "bin" && meson_option_add "-Dbindir=$bindir"
|
|
|
|
test "$default_feature" = no && meson_option_add -Dauto_features=disabled
|
|
|
|
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"
|
2023-05-11 06:54:28 +03:00
|
|
|
test "$docs" != auto && meson_option_add "-Ddocs=$docs"
|
2022-04-20 18:33:59 +03:00
|
|
|
test "$fdt" != auto && meson_option_add "-Dfdt=$fdt"
|
|
|
|
test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
|
|
|
|
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"
|
2022-06-13 23:26:24 +03:00
|
|
|
test "$vfio_user_server" != auto && meson_option_add "-Dvfio_user_server=$vfio_user_server"
|
2021-10-07 16:08:28 +03:00
|
|
|
run_meson() {
|
2022-04-20 18:33:59 +03:00
|
|
|
NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path"
|
2021-10-07 16:08:28 +03:00
|
|
|
}
|
|
|
|
eval run_meson $meson_options
|
2021-03-16 10:19:34 +03:00
|
|
|
if test "$?" -ne 0 ; then
|
|
|
|
error_exit "meson setup failed"
|
|
|
|
fi
|
2019-06-10 13:05:14 +03:00
|
|
|
fi
|
|
|
|
|
2014-03-09 19:37:49 +04:00
|
|
|
# Save the configure command line for later reuse.
|
|
|
|
cat <<EOD >config.status
|
|
|
|
#!/bin/sh
|
|
|
|
# Generated by configure.
|
|
|
|
# Run this file to recreate the current configuration.
|
|
|
|
# Compiler output produced by configure, useful for debugging
|
|
|
|
# configure, is in config.log if it exists.
|
|
|
|
EOD
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 15:36:03 +03:00
|
|
|
|
|
|
|
preserve_env() {
|
|
|
|
envname=$1
|
|
|
|
|
|
|
|
eval envval=\$$envname
|
|
|
|
|
|
|
|
if test -n "$envval"
|
|
|
|
then
|
|
|
|
echo "$envname='$envval'" >> config.status
|
|
|
|
echo "export $envname" >> config.status
|
|
|
|
else
|
|
|
|
echo "unset $envname" >> config.status
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# Preserve various env variables that influence what
|
|
|
|
# features/build target configure will detect
|
|
|
|
preserve_env AR
|
|
|
|
preserve_env AS
|
|
|
|
preserve_env CC
|
2021-11-05 12:08:43 +03:00
|
|
|
preserve_env CFLAGS
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 15:36:03 +03:00
|
|
|
preserve_env CXX
|
2021-11-05 12:08:43 +03:00
|
|
|
preserve_env CXXFLAGS
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 15:36:03 +03:00
|
|
|
preserve_env LD
|
2021-11-05 12:08:43 +03:00
|
|
|
preserve_env LDFLAGS
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 15:36:03 +03:00
|
|
|
preserve_env LD_LIBRARY_PATH
|
|
|
|
preserve_env MAKE
|
|
|
|
preserve_env NM
|
2022-06-07 13:14:47 +03:00
|
|
|
preserve_env OBJCFLAGS
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 15:36:03 +03:00
|
|
|
preserve_env OBJCOPY
|
|
|
|
preserve_env PATH
|
|
|
|
preserve_env PKG_CONFIG
|
|
|
|
preserve_env PKG_CONFIG_LIBDIR
|
|
|
|
preserve_env PKG_CONFIG_PATH
|
|
|
|
preserve_env PYTHON
|
2022-10-12 12:35:17 +03:00
|
|
|
preserve_env QEMU_GA_MANUFACTURER
|
|
|
|
preserve_env QEMU_GA_DISTRO
|
|
|
|
preserve_env QEMU_GA_VERSION
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 15:36:03 +03:00
|
|
|
preserve_env SDL2_CONFIG
|
|
|
|
preserve_env SMBD
|
|
|
|
preserve_env STRIP
|
2022-04-28 21:15:25 +03:00
|
|
|
preserve_env WIDL
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 15:36:03 +03:00
|
|
|
preserve_env WINDRES
|
2022-11-29 20:38:08 +03:00
|
|
|
preserve_env WINDMC
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 15:36:03 +03:00
|
|
|
|
2014-03-09 19:37:49 +04:00
|
|
|
printf "exec" >>config.status
|
2019-06-10 13:05:14 +03:00
|
|
|
for i in "$0" "$@"; do
|
2020-09-08 14:20:45 +03:00
|
|
|
test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
|
2019-06-10 13:05:14 +03:00
|
|
|
done
|
2016-01-12 14:58:48 +03:00
|
|
|
echo ' "$@"' >>config.status
|
2014-03-09 19:37:49 +04:00
|
|
|
chmod +x config.status
|
|
|
|
|
2014-05-23 20:07:24 +04:00
|
|
|
rm -r "$TMPDIR1"
|