summaryrefslogtreecommitdiffstats
path: root/configure
diff options
context:
space:
mode:
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure238
1 files changed, 94 insertions, 144 deletions
diff --git a/configure b/configure
index 78e7982b44..baa69189f0 100755
--- a/configure
+++ b/configure
@@ -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"