mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
tests/tcg: move configuration to a sub-shell script
Avoid the repeated inclusions of config-target.mak, which have risks of namespace pollution, and instead build minimal configuration files in a configuration script. The same configuration files can also be included in Makefile and Makefile.qemu [AJB 10/09/19] In the original PR this had inadvertently enabled tests for ppc64abi32. However as the rest of the multiarch tests work rather than disabling the otherwise correctly functioning build I've just skipped the failing linux-test test. For some reason I can't debug it with TCG so I'm leaving that to the PPC maintainers to look at. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20190807143523.15917-4-pbonzini@redhat.com> [AJB: s/docker/container/, rm last bits from configure, ppc6432abi hack] Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Cc: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
fc76c56d3f
commit
2038f8c877
22 changed files with 288 additions and 292 deletions
234
tests/tcg/configure.sh
Executable file
234
tests/tcg/configure.sh
Executable file
|
@ -0,0 +1,234 @@
|
|||
#! /bin/sh
|
||||
|
||||
if test -z "$source_path"; then
|
||||
echo Do not invoke this script directly. It is called
|
||||
echo automatically by configure.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
write_c_skeleton() {
|
||||
cat > $TMPC <<EOF
|
||||
int main(void) { return 0; }
|
||||
EOF
|
||||
}
|
||||
|
||||
has() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
do_compiler() {
|
||||
# Run the compiler, capturing its output to the log. First argument
|
||||
# is compiler binary to execute.
|
||||
local compiler="$1"
|
||||
shift
|
||||
if test -n "$BASH_VERSION"; then eval '
|
||||
echo >>config.log "
|
||||
funcs: ${FUNCNAME[*]}
|
||||
lines: ${BASH_LINENO[*]}"
|
||||
'; fi
|
||||
echo $compiler "$@" >> config.log
|
||||
$compiler "$@" >> config.log 2>&1 || return $?
|
||||
}
|
||||
|
||||
|
||||
TMPDIR1="config-temp"
|
||||
TMPC="${TMPDIR1}/qemu-conf.c"
|
||||
TMPE="${TMPDIR1}/qemu-conf.exe"
|
||||
|
||||
container="no"
|
||||
if has "docker" || has "podman"; then
|
||||
container=$($python $source_path/tests/docker/docker.py probe)
|
||||
fi
|
||||
|
||||
# cross compilers defaults, can be overridden with --cross-cc-ARCH
|
||||
: ${cross_cc_aarch64="aarch64-linux-gnu-gcc"}
|
||||
: ${cross_cc_aarch64_be="$cross_cc_aarch64"}
|
||||
: ${cross_cc_cflags_aarch64_be="-mbig-endian"}
|
||||
: ${cross_cc_arm="arm-linux-gnueabihf-gcc"}
|
||||
: ${cross_cc_cflags_armeb="-mbig-endian"}
|
||||
: ${cross_cc_i386="i386-pc-linux-gnu-gcc"}
|
||||
: ${cross_cc_cflags_i386="-m32"}
|
||||
: ${cross_cc_x86_64="x86_64-pc-linux-gnu-gcc"}
|
||||
: ${cross_cc_cflags_x86_64="-m64"}
|
||||
: ${cross_cc_ppc="powerpc-linux-gnu-gcc"}
|
||||
: ${cross_cc_cflags_ppc="-m32"}
|
||||
: ${cross_cc_ppc64="powerpc-linux-gnu-gcc"}
|
||||
: ${cross_cc_cflags_ppc64="-m64"}
|
||||
: ${cross_cc_ppc64le="powerpc64le-linux-gnu-gcc"}
|
||||
: ${cross_cc_cflags_s390x="-m64"}
|
||||
: ${cross_cc_cflags_sparc="-m32 -mv8plus -mcpu=ultrasparc"}
|
||||
: ${cross_cc_cflags_sparc64="-m64 -mcpu=ultrasparc"}
|
||||
|
||||
for target in $target_list; do
|
||||
arch=${target%%-*}
|
||||
case $arch in
|
||||
arm|armeb)
|
||||
arches=arm
|
||||
;;
|
||||
aarch64|aarch64_be)
|
||||
arches="aarch64 arm"
|
||||
;;
|
||||
mips*)
|
||||
arches=mips
|
||||
;;
|
||||
ppc*)
|
||||
arches=ppc
|
||||
;;
|
||||
sh4|sh4eb)
|
||||
arches=sh4
|
||||
;;
|
||||
x86_64)
|
||||
arches="x86_64 i386"
|
||||
;;
|
||||
xtensa|xtensaeb)
|
||||
arches=xtensa
|
||||
;;
|
||||
alpha|cris|hppa|i386|lm32|m68k|openrisc|riscv64|s390x|sh4|sparc64)
|
||||
arches=$target
|
||||
;;
|
||||
*)
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
container_image=
|
||||
case $target in
|
||||
aarch64-*)
|
||||
# We don't have any bigendian build tools so we only use this for AArch64
|
||||
container_image=debian-buster-arm64-cross
|
||||
container_cross_cc=aarch64-linux-gnu-gcc
|
||||
;;
|
||||
alpha-*)
|
||||
container_image=debian-alpha-cross
|
||||
container_cross_cc=alpha-linux-gnu-gcc
|
||||
;;
|
||||
arm-*)
|
||||
# We don't have any bigendian build tools so we only use this for ARM
|
||||
container_image=debian-armhf-cross
|
||||
container_cross_cc=arm-linux-gnueabihf-gcc
|
||||
;;
|
||||
cris-*)
|
||||
container_image=fedora-cris-cross
|
||||
container_cross_cc=cris-linux-gnu-gcc
|
||||
;;
|
||||
hppa-*)
|
||||
container_image=debian-hppa-cross
|
||||
container_cross_cc=hppa-linux-gnu-gcc
|
||||
;;
|
||||
i386-*)
|
||||
container_image=fedora-i386-cross
|
||||
container_cross_cc=gcc
|
||||
;;
|
||||
m68k-*)
|
||||
container_image=debian-m68k-cross
|
||||
container_cross_cc=m68k-linux-gnu-gcc
|
||||
;;
|
||||
mips64el-*)
|
||||
container_image=debian-mips64el-cross
|
||||
container_cross_cc=mips64el-linux-gnuabi64-gcc
|
||||
;;
|
||||
mips64-*)
|
||||
container_image=debian-mips64-cross
|
||||
container_cross_cc=mips64-linux-gnuabi64-gcc
|
||||
;;
|
||||
mipsel-*)
|
||||
container_image=debian-mipsel-cross
|
||||
container_cross_cc=mipsel-linux-gnu-gcc
|
||||
;;
|
||||
mips-*)
|
||||
container_image=debian-mips-cross
|
||||
container_cross_cc=mips-linux-gnu-gcc
|
||||
;;
|
||||
ppc-*|ppc64abi32-*)
|
||||
container_image=debian-powerpc-cross
|
||||
container_cross_cc=powerpc-linux-gnu-gcc
|
||||
;;
|
||||
ppc64-*)
|
||||
container_image=debian-ppc64-cross
|
||||
container_cross_cc=powerpc64-linux-gnu-gcc
|
||||
;;
|
||||
ppc64le-*)
|
||||
container_image=debian-ppc64el-cross
|
||||
container_cross_cc=powerpc64le-linux-gnu-gcc
|
||||
;;
|
||||
riscv64-*)
|
||||
container_image=debian-riscv64-cross
|
||||
container_cross_cc=riscv64-linux-gnu-gcc
|
||||
;;
|
||||
s390x-*)
|
||||
container_image=debian-s390x-cross
|
||||
container_cross_cc=s390x-linux-gnu-gcc
|
||||
;;
|
||||
sh4-*)
|
||||
container_image=debian-sh4-cross
|
||||
container_cross_cc=sh4-linux-gnu-gcc
|
||||
;;
|
||||
sparc64-*)
|
||||
container_image=debian-sparc64-cross
|
||||
container_cross_cc=sparc64-linux-gnu-gcc
|
||||
;;
|
||||
xtensa*-softmmu)
|
||||
container_image=debian-xtensa-cross
|
||||
|
||||
# default to the dc232b cpu
|
||||
container_cross_cc=/opt/2018.02/xtensa-dc232b-elf/bin/xtensa-dc232b-elf-gcc
|
||||
;;
|
||||
esac
|
||||
|
||||
config_target_mak=tests/tcg/config-$target.mak
|
||||
|
||||
echo "# Automatically generated by configure - do not modify" > $config_target_mak
|
||||
echo "TARGET_NAME=$arch" >> $config_target_mak
|
||||
case $target in
|
||||
*-linux-user | *-bsd-user)
|
||||
echo "CONFIG_USER_ONLY=y" >> $config_target_mak
|
||||
echo "QEMU=\$(BUILD_DIR)/$target/qemu-$arch" >> $config_target_mak
|
||||
;;
|
||||
*-softmmu)
|
||||
echo "CONFIG_SOFTMMU=y" >> $config_target_mak
|
||||
echo "QEMU=\$(BUILD_DIR)/$target/qemu-system-$arch" >> $config_target_mak
|
||||
;;
|
||||
esac
|
||||
|
||||
eval "target_compiler_cflags=\${cross_cc_cflags_$arch}"
|
||||
echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
|
||||
|
||||
got_cross_cc=no
|
||||
for i in $arch $arches; do
|
||||
if eval test "x\${cross_cc_$i+yes}" != xyes; then
|
||||
continue
|
||||
fi
|
||||
|
||||
eval "target_compiler=\${cross_cc_$i}"
|
||||
if ! has $target_compiler; then
|
||||
continue
|
||||
fi
|
||||
write_c_skeleton
|
||||
if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
|
||||
# For host systems we might get away with building without -static
|
||||
if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
|
||||
continue
|
||||
fi
|
||||
echo "CROSS_CC_GUEST_STATIC=y" >> $config_target_mak
|
||||
else
|
||||
echo "CROSS_CC_GUEST_STATIC=y" >> $config_target_mak
|
||||
fi
|
||||
echo "CROSS_CC_GUEST=$target_compiler" >> $config_target_mak
|
||||
enabled_cross_compilers="$enabled_cross_compilers $target_compiler"
|
||||
got_cross_cc=yes
|
||||
break
|
||||
done
|
||||
|
||||
if test $got_cross_cc = no && test "$container" != no && test -n "$container_image"; then
|
||||
echo "DOCKER_IMAGE=$container_image" >> $config_target_mak
|
||||
echo "DOCKER_CROSS_CC_GUEST=$container_cross_cc" >> $config_target_mak
|
||||
fi
|
||||
done
|
||||
|
||||
# report container support state
|
||||
echo "cross containers $container"
|
||||
|
||||
if test -n "$enabled_cross_compilers"; then
|
||||
echo
|
||||
echo "NOTE: guest cross-compilers enabled:$enabled_cross_compilers"
|
||||
fi
|
Loading…
Add table
Add a link
Reference in a new issue