ced5cfffee
GCC options pairs -mlittle/-mlittle-endian and -mbig/-mbig-endian are equivalent on ppc64 architecture. However, Clang supports only long version of the options. Use longer form in configure to properly support both GCC and Clang compiler. In addition, fix this issue in tcg test configure. Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> Reviewed-by: Greg Kurz <groug@kaod.org> Message-Id: <20220131091714.4825-1-mrezanin@redhat.com> Signed-off-by: Cédric Le Goater <clg@kaod.org>
351 lines
12 KiB
Bash
Executable File
351 lines
12 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 test $use_containers = "yes"; then
|
|
if has "docker" || has "podman"; then
|
|
container=$($python $source_path/tests/docker/docker.py probe)
|
|
fi
|
|
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_alpha="alpha-linux-gnu-gcc"}
|
|
: ${cross_cc_arm="arm-linux-gnueabihf-gcc"}
|
|
: ${cross_cc_cflags_armeb="-mbig-endian"}
|
|
: ${cross_cc_hexagon="hexagon-unknown-linux-musl-clang"}
|
|
: ${cross_cc_cflags_hexagon="-mv67 -O2 -static"}
|
|
: ${cross_cc_hppa="hppa-linux-gnu-gcc"}
|
|
: ${cross_cc_i386="i686-linux-gnu-gcc"}
|
|
: ${cross_cc_cflags_i386="-m32"}
|
|
: ${cross_cc_m68k="m68k-linux-gnu-gcc"}
|
|
: ${cross_cc_microblaze="microblaze-linux-musl-gcc"}
|
|
: ${cross_cc_mips64el="mips64el-linux-gnuabi64-gcc"}
|
|
: ${cross_cc_mips64="mips64-linux-gnuabi64-gcc"}
|
|
: ${cross_cc_mipsel="mipsel-linux-gnu-gcc"}
|
|
: ${cross_cc_mips="mips-linux-gnu-gcc"}
|
|
: ${cross_cc_nios2="nios2-linux-gnu-gcc"}
|
|
: ${cross_cc_ppc="powerpc-linux-gnu-gcc"}
|
|
: ${cross_cc_cflags_ppc="-m32"}
|
|
: ${cross_cc_ppc64="powerpc64-linux-gnu-gcc"}
|
|
: ${cross_cc_cflags_ppc64="-m64 -mbig-endian"}
|
|
: ${cross_cc_ppc64le="$cross_cc_ppc64"}
|
|
: ${cross_cc_cflags_ppc64le="-m64 -mlittle-endian"}
|
|
: ${cross_cc_riscv64="riscv64-linux-gnu-gcc"}
|
|
: ${cross_cc_s390x="s390x-linux-gnu-gcc"}
|
|
: ${cross_cc_sh4="sh4-linux-gnu-gcc"}
|
|
: ${cross_cc_cflags_sparc="-m32 -mv8plus -mcpu=ultrasparc"}
|
|
: ${cross_cc_sparc64="sparc64-linux-gnu-gcc"}
|
|
: ${cross_cc_cflags_sparc64="-m64 -mcpu=ultrasparc"}
|
|
: ${cross_cc_x86_64="x86_64-linux-gnu-gcc"}
|
|
: ${cross_cc_cflags_x86_64="-m64"}
|
|
|
|
# tricore is special as it doesn't have a compiler
|
|
: ${cross_as_tricore="tricore-as"}
|
|
: ${cross_ld_tricore="tricore-ld"}
|
|
|
|
for target in $target_list; do
|
|
arch=${target%%-*}
|
|
|
|
# reset all container fields
|
|
container_image=
|
|
container_hosts=
|
|
container_cross_cc=
|
|
container_cross_as=
|
|
container_cross_ld=
|
|
|
|
# suppress clang
|
|
supress_clang=
|
|
|
|
case $target in
|
|
aarch64-*)
|
|
# We don't have any bigendian build tools so we only use this for AArch64
|
|
container_hosts="x86_64 aarch64"
|
|
container_image=debian-arm64-cross
|
|
container_cross_cc=aarch64-linux-gnu-gcc-10
|
|
;;
|
|
alpha-*)
|
|
container_hosts=x86_64
|
|
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_hosts="x86_64 aarch64"
|
|
container_image=debian-armhf-cross
|
|
container_cross_cc=arm-linux-gnueabihf-gcc
|
|
;;
|
|
cris-*)
|
|
container_hosts=x86_64
|
|
container_image=fedora-cris-cross
|
|
container_cross_cc=cris-linux-gnu-gcc
|
|
;;
|
|
hexagon-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-hexagon-cross
|
|
container_cross_cc=hexagon-unknown-linux-musl-clang
|
|
;;
|
|
hppa-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-hppa-cross
|
|
container_cross_cc=hppa-linux-gnu-gcc
|
|
;;
|
|
i386-*)
|
|
container_hosts=x86_64
|
|
container_image=fedora-i386-cross
|
|
container_cross_cc=gcc
|
|
supress_clang=yes
|
|
;;
|
|
m68k-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-m68k-cross
|
|
container_cross_cc=m68k-linux-gnu-gcc
|
|
;;
|
|
microblaze-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-microblaze-cross
|
|
container_cross_cc=microblaze-linux-musl-gcc
|
|
;;
|
|
mips64el-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-mips64el-cross
|
|
container_cross_cc=mips64el-linux-gnuabi64-gcc
|
|
;;
|
|
mips64-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-mips64-cross
|
|
container_cross_cc=mips64-linux-gnuabi64-gcc
|
|
;;
|
|
mipsel-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-mipsel-cross
|
|
container_cross_cc=mipsel-linux-gnu-gcc
|
|
;;
|
|
mips-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-mips-cross
|
|
container_cross_cc=mips-linux-gnu-gcc
|
|
;;
|
|
nios2-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-nios2-cross
|
|
container_cross_cc=nios2-linux-gnu-gcc
|
|
;;
|
|
ppc-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-powerpc-test-cross
|
|
container_cross_cc=powerpc-linux-gnu-gcc-10
|
|
;;
|
|
ppc64-*|ppc64le-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-powerpc-test-cross
|
|
container_cross_cc=${target%%-*}-linux-gnu-gcc-10
|
|
container_cross_cc=powerpc${container_cross_cc#ppc}
|
|
;;
|
|
riscv64-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-riscv64-test-cross
|
|
container_cross_cc=riscv64-linux-gnu-gcc
|
|
;;
|
|
s390x-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-s390x-cross
|
|
container_cross_cc=s390x-linux-gnu-gcc
|
|
;;
|
|
sh4-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-sh4-cross
|
|
container_cross_cc=sh4-linux-gnu-gcc
|
|
;;
|
|
sparc64-*)
|
|
container_hosts=x86_64
|
|
container_image=debian-sparc64-cross
|
|
container_cross_cc=sparc64-linux-gnu-gcc
|
|
;;
|
|
tricore-softmmu)
|
|
container_hosts=x86_64
|
|
container_image=debian-tricore-cross
|
|
container_cross_as=tricore-as
|
|
container_cross_ld=tricore-ld
|
|
;;
|
|
x86_64-*)
|
|
container_hosts="aarch64 ppc64el x86_64"
|
|
container_image=debian-amd64-cross
|
|
container_cross_cc=x86_64-linux-gnu-gcc
|
|
supress_clang=yes
|
|
;;
|
|
xtensa*-softmmu)
|
|
container_hosts=x86_64
|
|
container_image=debian-xtensa-cross
|
|
|
|
# default to the dc232b cpu
|
|
container_cross_cc=/opt/2020.07/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
|
|
echo "target=$target" >> $config_target_mak
|
|
case $target in
|
|
*-linux-user)
|
|
echo "CONFIG_USER_ONLY=y" >> $config_target_mak
|
|
echo "CONFIG_LINUX_USER=y" >> $config_target_mak
|
|
echo "QEMU=$PWD/qemu-$arch" >> $config_target_mak
|
|
;;
|
|
*-bsd-user)
|
|
echo "CONFIG_USER_ONLY=y" >> $config_target_mak
|
|
echo "CONFIG_BSD_USER=y" >> $config_target_mak
|
|
echo "QEMU=$PWD/qemu-$arch" >> $config_target_mak
|
|
;;
|
|
*-softmmu)
|
|
echo "CONFIG_SOFTMMU=y" >> $config_target_mak
|
|
echo "QEMU=$PWD/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
|
|
|
|
if eval test "x\"\${cross_cc_$arch}\"" != xyes; then
|
|
eval "target_compiler=\"\${cross_cc_$arch}\""
|
|
|
|
if has $target_compiler; then
|
|
if test "$supress_clang" = yes &&
|
|
$target_compiler --version | grep -qi "clang"; then
|
|
got_cross_cc=no
|
|
else
|
|
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
|
|
got_cross_cc=yes
|
|
echo "CROSS_CC_GUEST_STATIC=y" >> $config_target_mak
|
|
echo "CROSS_CC_GUEST=$target_compiler" >> $config_target_mak
|
|
fi
|
|
else
|
|
got_cross_cc=yes
|
|
echo "CROSS_CC_GUEST_STATIC=y" >> $config_target_mak
|
|
echo "CROSS_CC_GUEST=$target_compiler" >> $config_target_mak
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Special handling for assembler only tests
|
|
eval "target_as=\"\${cross_as_$arch}\""
|
|
eval "target_ld=\"\${cross_ld_$arch}\""
|
|
if has $target_as && has $target_ld; then
|
|
case $target in
|
|
tricore-softmmu)
|
|
echo "CROSS_CC_GUEST=$target_as" >> $config_target_mak
|
|
echo "CROSS_AS_GUEST=$target_as" >> $config_target_mak
|
|
echo "CROSS_LD_GUEST=$target_ld" >> $config_target_mak
|
|
got_cross_cc=yes
|
|
;;
|
|
esac
|
|
fi
|
|
fi
|
|
|
|
if test $got_cross_cc = yes; then
|
|
# Test for compiler features for optional tests. We only do this
|
|
# for cross compilers because ensuring the docker containers based
|
|
# compilers is a requirememt for adding a new test that needs a
|
|
# compiler feature.
|
|
|
|
case $target in
|
|
aarch64-*)
|
|
if do_compiler "$target_compiler" $target_compiler_cflags \
|
|
-march=armv8.1-a+sve -o $TMPE $TMPC; then
|
|
echo "CROSS_CC_HAS_SVE=y" >> $config_target_mak
|
|
fi
|
|
if do_compiler "$target_compiler" $target_compiler_cflags \
|
|
-march=armv8.3-a -o $TMPE $TMPC; then
|
|
echo "CROSS_CC_HAS_ARMV8_3=y" >> $config_target_mak
|
|
fi
|
|
if do_compiler "$target_compiler" $target_compiler_cflags \
|
|
-mbranch-protection=standard -o $TMPE $TMPC; then
|
|
echo "CROSS_CC_HAS_ARMV8_BTI=y" >> $config_target_mak
|
|
fi
|
|
if do_compiler "$target_compiler" $target_compiler_cflags \
|
|
-march=armv8.5-a+memtag -o $TMPE $TMPC; then
|
|
echo "CROSS_CC_HAS_ARMV8_MTE=y" >> $config_target_mak
|
|
fi
|
|
;;
|
|
ppc*)
|
|
if do_compiler "$target_compiler" $target_compiler_cflags \
|
|
-mpower8-vector -o $TMPE $TMPC; then
|
|
echo "CROSS_CC_HAS_POWER8_VECTOR=y" >> $config_target_mak
|
|
fi
|
|
if do_compiler "$target_compiler" $target_compiler_cflags \
|
|
-mpower10 -o $TMPE $TMPC; then
|
|
echo "CROSS_CC_HAS_POWER10=y" >> $config_target_mak
|
|
fi
|
|
;;
|
|
i386-linux-user)
|
|
if do_compiler "$target_compiler" $target_compiler_cflags \
|
|
-Werror -fno-pie -o $TMPE $TMPC; then
|
|
echo "CROSS_CC_HAS_I386_NOPIE=y" >> $config_target_mak
|
|
fi
|
|
;;
|
|
esac
|
|
elif test $got_cross_cc = no && test "$container" != no && \
|
|
test -n "$container_image"; then
|
|
for host in $container_hosts; do
|
|
if test "$host" = "$cpu"; then
|
|
echo "DOCKER_IMAGE=$container_image" >> $config_target_mak
|
|
echo "DOCKER_CROSS_CC_GUEST=$container_cross_cc" >> \
|
|
$config_target_mak
|
|
if test -n "$container_cross_as"; then
|
|
echo "DOCKER_CROSS_AS_GUEST=$container_cross_as" >> \
|
|
$config_target_mak
|
|
fi
|
|
if test -n "$container_cross_ld"; then
|
|
echo "DOCKER_CROSS_LD_GUEST=$container_cross_ld" >> \
|
|
$config_target_mak
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
done
|