|
@@ -1779,8 +1779,13 @@ fi
|
|
|
|
|
|
container="no"
|
|
|
if test $use_containers = "yes"; then
|
|
|
- if has "docker" || has "podman"; then
|
|
|
- container=$($python "$source_path"/tests/docker/docker.py probe)
|
|
|
+ case $($python "$source_path"/tests/docker/docker.py probe) in
|
|
|
+ *docker) container=docker ;;
|
|
|
+ podman) container=podman ;;
|
|
|
+ no) container=no ;;
|
|
|
+ esac
|
|
|
+ if test "$container" != "no"; then
|
|
|
+ docker_py="$python $source_path/tests/docker/docker.py --engine $container"
|
|
|
fi
|
|
|
fi
|
|
|
|
|
@@ -2116,54 +2121,54 @@ probe_target_compiler() {
|
|
|
target_ranlib=
|
|
|
target_strip=
|
|
|
fi
|
|
|
+ test -n "$target_cc" || test -n "$container_image"
|
|
|
}
|
|
|
|
|
|
write_target_makefile() {
|
|
|
echo "EXTRA_CFLAGS=$target_cflags"
|
|
|
- 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
|
|
|
-}
|
|
|
-
|
|
|
-write_container_target_makefile() {
|
|
|
- echo "EXTRA_CFLAGS=$target_cflags"
|
|
|
- if test -n "$container_cross_cc"; then
|
|
|
- echo "CC=\$(DOCKER_SCRIPT) cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
|
|
|
- echo "CCAS=\$(DOCKER_SCRIPT) cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
|
|
|
+ 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
|
|
|
fi
|
|
|
- echo "AR=\$(DOCKER_SCRIPT) cc --cc $container_cross_ar -i qemu/$container_image -s $source_path --"
|
|
|
- echo "AS=\$(DOCKER_SCRIPT) cc --cc $container_cross_as -i qemu/$container_image -s $source_path --"
|
|
|
- echo "LD=\$(DOCKER_SCRIPT) cc --cc $container_cross_ld -i qemu/$container_image -s $source_path --"
|
|
|
- echo "NM=\$(DOCKER_SCRIPT) cc --cc $container_cross_nm -i qemu/$container_image -s $source_path --"
|
|
|
- echo "OBJCOPY=\$(DOCKER_SCRIPT) cc --cc $container_cross_objcopy -i qemu/$container_image -s $source_path --"
|
|
|
- echo "RANLIB=\$(DOCKER_SCRIPT) cc --cc $container_cross_ranlib -i qemu/$container_image -s $source_path --"
|
|
|
- echo "STRIP=\$(DOCKER_SCRIPT) cc --cc $container_cross_strip -i qemu/$container_image -s $source_path --"
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
##########################################
|
|
|
# check for vfio_user_server
|
|
|
|
|
@@ -2237,7 +2242,6 @@ fi
|
|
|
# tests might fail. Prefer to keep the relevant files in their own
|
|
|
# directory and symlink the directory instead.
|
|
|
LINKS="Makefile"
|
|
|
-LINKS="$LINKS tests/tcg/Makefile.target"
|
|
|
LINKS="$LINKS pc-bios/optionrom/Makefile"
|
|
|
LINKS="$LINKS pc-bios/s390-ccw/Makefile"
|
|
|
LINKS="$LINKS pc-bios/vof/Makefile"
|
|
@@ -2253,45 +2257,50 @@ for f in $LINKS ; do
|
|
|
fi
|
|
|
done
|
|
|
|
|
|
+echo "# Automatically generated by configure - do not modify" > Makefile.prereqs
|
|
|
+
|
|
|
# Mac OS X ships with a broken assembler
|
|
|
roms=
|
|
|
-probe_target_compiler i386-softmmu
|
|
|
-if test -n "$target_cc" &&
|
|
|
- test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
|
|
|
- test "$targetos" != "haiku" && test "$softmmu" = yes ; then
|
|
|
+if test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
|
|
|
+ test "$targetos" != "haiku" && test "$softmmu" = yes && \
|
|
|
+ probe_target_compiler i386-softmmu; then
|
|
|
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
|
|
|
- write_target_makefile >> $config_mak
|
|
|
+ write_target_makefile pc-bios/optionrom/all >> $config_mak
|
|
|
fi
|
|
|
|
|
|
-probe_target_compiler ppc-softmmu
|
|
|
-if test -n "$target_cc" && test "$softmmu" = yes; then
|
|
|
+if test "$softmmu" = yes && probe_target_compiler ppc-softmmu; then
|
|
|
roms="$roms pc-bios/vof"
|
|
|
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
|
|
|
- write_target_makefile >> $config_mak
|
|
|
+ write_target_makefile pc-bios/vof/all >> $config_mak
|
|
|
fi
|
|
|
|
|
|
# Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
|
|
|
# (which is the lowest architecture level that Clang supports)
|
|
|
-probe_target_compiler s390x-softmmu
|
|
|
-if test -n "$target_cc" && test "$softmmu" = yes; then
|
|
|
- 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."
|
|
|
+if test "$softmmu" = yes && probe_target_compiler s390x-softmmu; then
|
|
|
+ got_cross_cc=no
|
|
|
+ if test -n "$target_cc"; then
|
|
|
+ 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."
|
|
|
+ fi
|
|
|
+ got_cross_cc=yes
|
|
|
fi
|
|
|
+ fi
|
|
|
+ if test "$got_cross_cc" = yes || test -n "$container_image"; then
|
|
|
roms="$roms pc-bios/s390-ccw"
|
|
|
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
|
|
|
- write_target_makefile >> $config_mak
|
|
|
+ write_target_makefile pc-bios/s390-ccw/all >> $config_mak
|
|
|
# SLOF is required for building the s390-ccw firmware on s390x,
|
|
|
# since it is using the libnet code from SLOF for network booting.
|
|
|
git_submodules="${git_submodules} roms/SLOF"
|
|
@@ -2370,9 +2379,14 @@ if test -n "$gdb_bin"; then
|
|
|
gdb_version=$($gdb_bin --version | head -n 1)
|
|
|
if version_ge ${gdb_version##* } 9.1; then
|
|
|
echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
|
|
|
+ else
|
|
|
+ gdb_bin=""
|
|
|
fi
|
|
|
fi
|
|
|
|
|
|
+if test "$container" != no; then
|
|
|
+ echo "ENGINE=$container" >> $config_host_mak
|
|
|
+fi
|
|
|
echo "ROMS=$roms" >> $config_host_mak
|
|
|
echo "MAKE=$make" >> $config_host_mak
|
|
|
echo "PYTHON=$python" >> $config_host_mak
|
|
@@ -2445,22 +2459,21 @@ if test "$safe_stack" = "yes"; then
|
|
|
fi
|
|
|
|
|
|
# tests/tcg configuration
|
|
|
-(makefile=tests/tcg/Makefile.prereqs
|
|
|
-echo "# Automatically generated by configure - do not modify" > $makefile
|
|
|
-
|
|
|
-config_host_mak=tests/tcg/config-host.mak
|
|
|
+(config_host_mak=tests/tcg/config-host.mak
|
|
|
+mkdir -p tests/tcg
|
|
|
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
|
|
|
|
|
|
+# 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
|
|
|
+
|
|
|
tcg_tests_targets=
|
|
|
for target in $target_list; do
|
|
|
arch=${target%%-*}
|
|
|
|
|
|
- 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
|
|
|
xtensa*-linux-user)
|
|
|
# the toolchain is not complete with headers, only build softmmu tests
|
|
@@ -2475,85 +2488,22 @@ for target in $target_list; do
|
|
|
;;
|
|
|
esac
|
|
|
|
|
|
- probe_target_compiler $target
|
|
|
- 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.
|
|
|
-
|
|
|
+ if probe_target_compiler $target; then
|
|
|
+ test -n "$container_image" && build_static=y
|
|
|
+ mkdir -p "tests/tcg/$target"
|
|
|
+ config_target_mak=tests/tcg/$target/config-target.mak
|
|
|
+ ln -sf "$source_path/tests/tcg/Makefile.target" "tests/tcg/$target/Makefile"
|
|
|
+ echo "# Automatically generated by configure - do not modify" > "$config_target_mak"
|
|
|
+ echo "TARGET_NAME=$arch" >> "$config_target_mak"
|
|
|
+ echo "TARGET=$target" >> "$config_target_mak"
|
|
|
+ write_target_makefile "build-tcg-tests-$target" >> "$config_target_mak"
|
|
|
echo "BUILD_STATIC=$build_static" >> "$config_target_mak"
|
|
|
- write_target_makefile >> "$config_target_mak"
|
|
|
- case $target in
|
|
|
- aarch64-*)
|
|
|
- if do_compiler "$target_cc" $target_cflags \
|
|
|
- -march=armv8.1-a+sve -o $TMPE $TMPC; then
|
|
|
- echo "CROSS_CC_HAS_SVE=y" >> "$config_target_mak"
|
|
|
- fi
|
|
|
- if do_compiler "$target_cc" $target_cflags \
|
|
|
- -march=armv8.1-a+sve2 -o $TMPE $TMPC; then
|
|
|
- echo "CROSS_CC_HAS_SVE2=y" >> "$config_target_mak"
|
|
|
- fi
|
|
|
- if do_compiler "$target_cc" $target_cflags \
|
|
|
- -march=armv8.3-a -o $TMPE $TMPC; then
|
|
|
- echo "CROSS_CC_HAS_ARMV8_3=y" >> "$config_target_mak"
|
|
|
- fi
|
|
|
- if do_compiler "$target_cc" $target_cflags \
|
|
|
- -mbranch-protection=standard -o $TMPE $TMPC; then
|
|
|
- echo "CROSS_CC_HAS_ARMV8_BTI=y" >> "$config_target_mak"
|
|
|
- fi
|
|
|
- if do_compiler "$target_cc" $target_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_cc" $target_cflags \
|
|
|
- -mpower8-vector -o $TMPE $TMPC; then
|
|
|
- echo "CROSS_CC_HAS_POWER8_VECTOR=y" >> "$config_target_mak"
|
|
|
- fi
|
|
|
- if do_compiler "$target_cc" $target_cflags \
|
|
|
- -mpower10 -o $TMPE $TMPC; then
|
|
|
- echo "CROSS_CC_HAS_POWER10=y" >> "$config_target_mak"
|
|
|
- fi
|
|
|
- ;;
|
|
|
- i386-linux-user)
|
|
|
- if do_compiler "$target_cc" $target_cflags \
|
|
|
- -Werror -fno-pie -o $TMPE $TMPC; then
|
|
|
- echo "CROSS_CC_HAS_I386_NOPIE=y" >> "$config_target_mak"
|
|
|
- fi
|
|
|
- ;;
|
|
|
- esac
|
|
|
- elif test -n "$container_image"; then
|
|
|
- echo "build-tcg-tests-$target: docker-image-$container_image" >> $makefile
|
|
|
- echo "BUILD_STATIC=y" >> "$config_target_mak"
|
|
|
- write_container_target_makefile >> "$config_target_mak"
|
|
|
- case $target in
|
|
|
- aarch64-*)
|
|
|
- echo "CROSS_CC_HAS_SVE=y" >> "$config_target_mak"
|
|
|
- echo "CROSS_CC_HAS_SVE2=y" >> "$config_target_mak"
|
|
|
- echo "CROSS_CC_HAS_ARMV8_3=y" >> "$config_target_mak"
|
|
|
- echo "CROSS_CC_HAS_ARMV8_BTI=y" >> "$config_target_mak"
|
|
|
- echo "CROSS_CC_HAS_ARMV8_MTE=y" >> "$config_target_mak"
|
|
|
- ;;
|
|
|
- ppc*)
|
|
|
- echo "CROSS_CC_HAS_POWER8_VECTOR=y" >> "$config_target_mak"
|
|
|
- echo "CROSS_CC_HAS_POWER10=y" >> "$config_target_mak"
|
|
|
- ;;
|
|
|
- i386-linux-user)
|
|
|
- echo "CROSS_CC_HAS_I386_NOPIE=y" >> "$config_target_mak"
|
|
|
- ;;
|
|
|
- esac
|
|
|
- got_cross_cc=yes
|
|
|
- fi
|
|
|
- if test $got_cross_cc = yes; then
|
|
|
- mkdir -p tests/tcg/$target
|
|
|
echo "QEMU=$PWD/$qemu" >> "$config_target_mak"
|
|
|
- echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> $makefile
|
|
|
+ echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> Makefile.prereqs
|
|
|
tcg_tests_targets="$tcg_tests_targets $target"
|
|
|
fi
|
|
|
done
|
|
|
-echo "TCG_TESTS_TARGETS=$tcg_tests_targets" >> $makefile)
|
|
|
+echo "TCG_TESTS_TARGETS=$tcg_tests_targets" >> config-host.mak)
|
|
|
|
|
|
if test "$skip_meson" = no; then
|
|
|
cross="config-meson.cross.new"
|