mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00

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>
234 lines
6.3 KiB
Bash
Executable file
234 lines
6.3 KiB
Bash
Executable file
#! /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
|