From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: fam@euphon.net, berrange@redhat.com, f4bug@amsat.org,
stefanha@redhat.com, crosa@redhat.com, pbonzini@redhat.com,
"Alex Bennée" <alex.bennee@linaro.org>,
aurelien@aurel32.net
Subject: [PATCH v1 17/25] tests/tcg: invoke Makefile.target directly from QEMU's makefile
Date: Tue, 19 Apr 2022 10:10:12 +0100 [thread overview]
Message-ID: <20220419091020.3008144-18-alex.bennee@linaro.org> (raw)
In-Reply-To: <20220419091020.3008144-1-alex.bennee@linaro.org>
From: Paolo Bonzini <pbonzini@redhat.com>
Build the "docker.py cc" invocation directly in tests/tcg/configure.sh, and
remove the Makefile.qemu wrapper around Makefile.target. The config-*.mak
files now include the actual variables used when building the tests, rather
than the CROSS_* variables that Makefile.qemu used to "translate".
This is a first step towards generalizing the cross-compilation infrastructure
so that it can be used for firmware as well.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20220401141326.1244422-15-pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/Makefile.include | 40 +++++++-------
tests/tcg/Makefile.qemu | 110 --------------------------------------
tests/tcg/Makefile.target | 3 +-
tests/tcg/configure.sh | 28 +++++-----
4 files changed, 35 insertions(+), 146 deletions(-)
delete mode 100644 tests/tcg/Makefile.qemu
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 091ca8513f..ec84b2ebc0 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -48,25 +48,27 @@ RUN_TCG_TARGET_RULES=$(patsubst %,run-tcg-tests-%, $(TCG_TESTS_TARGETS))
$(foreach TARGET,$(TCG_TESTS_TARGETS), \
$(eval $(BUILD_DIR)/tests/tcg/config-$(TARGET).mak: config-host.mak))
-$(BUILD_TCG_TARGET_RULES): build-tcg-tests-%: $(if $(CONFIG_PLUGIN),test-plugins)
- $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) \
- -f $(SRC_PATH)/tests/tcg/Makefile.qemu \
- SRC_PATH=$(SRC_PATH) \
- V="$(V)" TARGET="$*" guest-tests, \
- "BUILD", "TCG tests for $*")
-
-$(RUN_TCG_TARGET_RULES): run-tcg-tests-%: build-tcg-tests-% all
- $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) \
- -f $(SRC_PATH)/tests/tcg/Makefile.qemu \
- SRC_PATH=$(SRC_PATH) SPEED="$(SPEED)" \
- V="$(V)" TARGET="$*" run-guest-tests, \
- "RUN", "TCG tests for $*")
-
-$(CLEAN_TCG_TARGET_RULES): clean-tcg-tests-%:
- $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) \
- -f $(SRC_PATH)/tests/tcg/Makefile.qemu \
- SRC_PATH=$(SRC_PATH) TARGET="$*" clean-guest-tests, \
- "CLEAN", "TCG tests for $*")
+.PHONY: $(TCG_TESTS_TARGETS:%=build-tcg-tests-%)
+$(TCG_TESTS_TARGETS:%=build-tcg-tests-%): build-tcg-tests-%: $(BUILD_DIR)/tests/tcg/config-%.mak
+ $(call quiet-command, \
+ $(MAKE) -C tests/tcg/$* -f ../Makefile.target $(SUBDIR_MAKEFLAGS) \
+ DOCKER_SCRIPT="$(DOCKER_SCRIPT)" \
+ TARGET="$*" SRC_PATH="$(SRC_PATH)", \
+ "BUILD","$* guest-tests")
+
+.PHONY: $(TCG_TESTS_TARGETS:%=run-tcg-tests-%)
+$(TCG_TESTS_TARGETS:%=run-tcg-tests-%): run-tcg-tests-%: build-tcg-tests-% $(if $(CONFIG_PLUGIN),test-plugins)
+ $(call quiet-command, \
+ $(MAKE) -C tests/tcg/$* -f ../Makefile.target $(SUBDIR_MAKEFLAGS) \
+ TARGET="$*" SRC_PATH="$(SRC_PATH)" SPEED=$(SPEED) run, \
+ "RUN", "$* guest-tests")
+
+.PHONY: $(TCG_TESTS_TARGETS:%=clean-tcg-tests-%)
+$(TCG_TESTS_TARGETS:%=clean-tcg-tests-%): clean-tcg-tests-%:
+ $(call quiet-command, \
+ $(MAKE) -C tests/tcg/$* -f ../Makefile.target $(SUBDIR_MAKEFLAGS) \
+ TARGET="$*" SRC_PATH="$(SRC_PATH)" clean, \
+ "CLEAN", "$* guest-tests")
.PHONY: build-tcg
build-tcg: $(BUILD_TCG_TARGET_RULES)
diff --git a/tests/tcg/Makefile.qemu b/tests/tcg/Makefile.qemu
deleted file mode 100644
index cda5e5a33e..0000000000
--- a/tests/tcg/Makefile.qemu
+++ /dev/null
@@ -1,110 +0,0 @@
-# -*- Mode: makefile -*-
-#
-# TCG tests (per-target rules)
-#
-# This Makefile fragment is included from the build-tcg target, once
-# for each target we build. We have two options for compiling, either
-# using a configured guest compiler or calling one of our docker images
-# to do it for us.
-#
-
-# The configure script fills in extra information about
-# useful docker images or alternative compiler flags.
-
-# Usage: $(call quiet-command,command and args,"NAME","args to print")
-# This will run "command and args", and either:
-# if V=1 just print the whole command and args
-# otherwise print the 'quiet' output in the format " NAME args to print"
-# NAME should be a short name of the command, 7 letters or fewer.
-# If called with only a single argument, will print nothing in quiet mode.
-quiet-command-run = $(if $(V),,$(if $2,printf " %-7s %s\n" $2 $3 && ))$1
-quiet-@ = $(if $(V),,@)
-quiet-command = $(quiet-@)$(call quiet-command-run,$1,$2,$3)
-
-CROSS_CC_GUEST:=
-CROSS_AS_GUEST:=
-CROSS_LD_GUEST:=
-DOCKER_IMAGE:=
-
--include tests/tcg/config-$(TARGET).mak
-
-GUEST_BUILD=
-TCG_MAKE=../Makefile.target
-
-# We also need the Docker make rules to depend on
-SKIP_DOCKER_BUILD=1
-include $(SRC_PATH)/tests/docker/Makefile.include
-
-# Support installed Cross Compilers
-
-ifdef CROSS_CC_GUEST
-
-.PHONY: cross-build-guest-tests
-cross-build-guest-tests:
- $(call quiet-command, \
- (mkdir -p tests/tcg/$(TARGET) && cd tests/tcg/$(TARGET) && \
- $(MAKE) -f $(TCG_MAKE) TARGET="$(TARGET)" CC="$(CROSS_CC_GUEST)" \
- $(if $(CROSS_AS_GUEST),AS="$(CROSS_AS_GUEST)") \
- $(if $(CROSS_LD_GUEST),LD="$(CROSS_LD_GUEST)") \
- SRC_PATH="$(SRC_PATH)" BUILD_STATIC=$(CROSS_CC_GUEST_STATIC) \
- EXTRA_CFLAGS="$(CROSS_CC_GUEST_CFLAGS)"), \
- "BUILD","$(TARGET) guest-tests with $(CROSS_CC_GUEST)")
-
-GUEST_BUILD=cross-build-guest-tests
-
-endif
-
-# Support building with Docker
-
-ifneq ($(DOCKER_IMAGE),)
-
-DOCKER_COMPILE_CMD="$(DOCKER_SCRIPT) cc \
- --cc $(DOCKER_CROSS_CC_GUEST) \
- -i qemu/$(DOCKER_IMAGE) \
- -s $(SRC_PATH) -- "
-
-DOCKER_AS_CMD=$(if $(DOCKER_CROSS_AS_GUEST),"$(DOCKER_SCRIPT) cc \
- --cc $(DOCKER_CROSS_AS_GUEST) \
- -i qemu/$(DOCKER_IMAGE) \
- -s $(SRC_PATH) -- ")
-
-DOCKER_LD_CMD=$(if $(DOCKER_CROSS_LD_GUEST),"$(DOCKER_SCRIPT) cc \
- --cc $(DOCKER_CROSS_LD_GUEST) \
- -i qemu/$(DOCKER_IMAGE) \
- -s $(SRC_PATH) -- ")
-
-
-.PHONY: docker-build-guest-tests
-docker-build-guest-tests: docker-image-$(DOCKER_IMAGE)
- $(call quiet-command, \
- (mkdir -p tests/tcg/$(TARGET) && cd tests/tcg/$(TARGET) && \
- $(MAKE) -f $(TCG_MAKE) TARGET="$(TARGET)" CC=$(DOCKER_COMPILE_CMD) \
- $(if $(DOCKER_AS_CMD),AS=$(DOCKER_AS_CMD)) \
- $(if $(DOCKER_LD_CMD),LD=$(DOCKER_LD_CMD)) \
- SRC_PATH="$(SRC_PATH)" BUILD_STATIC=y \
- EXTRA_CFLAGS="$(CROSS_CC_GUEST_CFLAGS)"), \
- "BUILD","$(TARGET) guest-tests with docker qemu/$(DOCKER_IMAGE)")
-
-GUEST_BUILD=docker-build-guest-tests
-
-endif
-
-# Final targets
-all:
- @echo "Do not invoke this Makefile directly"; exit 1
-
-.PHONY: guest-tests
-
-guest-tests: $(GUEST_BUILD)
-
-run-guest-tests: guest-tests
- $(call quiet-command, \
- (cd tests/tcg/$(TARGET) && \
- $(MAKE) -f $(TCG_MAKE) TARGET="$(TARGET)" \
- SRC_PATH="$(SRC_PATH)" SPEED=$(SPEED) run), \
- "RUN", "tests for $(TARGET_NAME)")
-
-# It doesn't matter if these don't exits
-.PHONY: clean-guest-tests
-clean-guest-tests:
- rm -rf tests/tcg/$(TARGET)
diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
index c75e8d983f..95499d8c9b 100644
--- a/tests/tcg/Makefile.target
+++ b/tests/tcg/Makefile.target
@@ -187,4 +187,5 @@ gdb-%: %
.PHONY: run
run: $(RUN_TESTS)
-# There is no clean target, the calling make just rm's the tests build dir
+clean:
+ rm -f $(TESTS) *.o
diff --git a/tests/tcg/configure.sh b/tests/tcg/configure.sh
index e51cd56b60..a577dd7ece 100755
--- a/tests/tcg/configure.sh
+++ b/tests/tcg/configure.sh
@@ -227,7 +227,6 @@ for target in $target_list; do
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
*-softmmu)
test -f $source_path/tests/tcg/$arch/Makefile.softmmu-target || continue
@@ -257,13 +256,13 @@ for target in $target_list; do
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
+ echo "BUILD_STATIC=y" >> $config_target_mak
+ echo "CC=$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
+ echo "BUILD_STATIC=y" >> $config_target_mak
+ echo "CC=$target_compiler" >> $config_target_mak
fi
fi
fi
@@ -274,9 +273,8 @@ for target in $target_list; do
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
+ echo "AS=$target_as" >> $config_target_mak
+ echo "LD=$target_ld" >> $config_target_mak
got_cross_cc=yes
;;
esac
@@ -334,16 +332,13 @@ for target in $target_list; do
for host in $container_hosts; do
if test "$host" = "$cpu"; then
echo "build-tcg-tests-$target: docker-image-$container_image" >> $makefile
- echo "DOCKER_IMAGE=$container_image" >> $config_target_mak
- echo "DOCKER_CROSS_CC_GUEST=$container_cross_cc" >> \
- $config_target_mak
+ echo "BUILD_STATIC=y" >> $config_target_mak
+ echo "CC=\$(DOCKER_SCRIPT) cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --" >> $config_target_mak
if test -n "$container_cross_as"; then
- echo "DOCKER_CROSS_AS_GUEST=$container_cross_as" >> \
- $config_target_mak
+ echo "AS=\$(DOCKER_SCRIPT) cc --cc $container_cross_as -i qemu/$container_image -s $source_path --" >> $config_target_mak
fi
if test -n "$container_cross_ld"; then
- echo "DOCKER_CROSS_LD_GUEST=$container_cross_ld" >> \
- $config_target_mak
+ echo "LD=\$(DOCKER_SCRIPT) cc --cc $container_cross_ld -i qemu/$container_image -s $source_path --" >> $config_target_mak
fi
case $target in
aarch64-*)
@@ -367,8 +362,9 @@ for target in $target_list; do
done
fi
if test $got_cross_cc = yes; then
+ mkdir -p tests/tcg/$target
echo "QEMU=$PWD/$qemu" >> $config_target_mak
- echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
+ echo "EXTRA_CFLAGS=$target_compiler_cflags" >> $config_target_mak
echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> $makefile
tcg_tests_targets="$tcg_tests_targets $target"
fi
--
2.30.2
next prev parent reply other threads:[~2022-04-19 9:28 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-19 9:09 [PATCH v1 for 7.1 00/25] testing, docs and gdbstub pre-PR Alex Bennée
2022-04-19 9:09 ` [PATCH v1 01/25] tests/avocado: update aarch64_virt test to exercise -cpu max Alex Bennée
2022-04-19 9:09 ` [PATCH v1 02/25] docs/devel: add some notes on the binfmt-image-debian targets Alex Bennée
2022-04-19 18:30 ` Richard Henderson
2022-04-19 9:09 ` [PATCH v1 03/25] docs/devel: drop :hidden: and :includehidden: tags Alex Bennée
2022-04-19 18:33 ` Richard Henderson
2022-04-19 9:09 ` [PATCH v1 04/25] tests/docker: remove dead code for linux-user containers Alex Bennée
2022-04-19 18:34 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 05/25] tests/docker: remove test targets Alex Bennée
2022-04-19 18:35 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 06/25] tests/docker: remove dead variable Alex Bennée
2022-04-19 18:36 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 07/25] tests/docker: remove unnecessary default definitions Alex Bennée
2022-04-19 18:37 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 08/25] tests/docker: inline variable definitions or move close to use Alex Bennée
2022-04-19 18:42 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 09/25] tests/docker: remove unnecessary filtering of $(DOCKER_IMAGES) Alex Bennée
2022-04-19 18:44 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 10/25] tests/docker: simplify docker-TEST@IMAGE targets Alex Bennée
2022-04-19 18:46 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 11/25] tests/docker: do not duplicate rules for hexagon-cross Alex Bennée
2022-04-19 18:47 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 12/25] tests/tcg: add compiler test variables when using containers Alex Bennée
2022-04-19 18:48 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 13/25] tests/tcg: remove CONFIG_LINUX_USER from config-target.mak Alex Bennée
2022-04-19 18:49 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 14/25] tests/tcg: remove CONFIG_USER_ONLY " Alex Bennée
2022-04-19 18:53 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 15/25] tests/tcg: prepare Makefile.prereqs at configure time Alex Bennée
2022-04-19 18:57 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 16/25] tests/tcg: list test targets in Makefile.prereqs Alex Bennée
2022-04-19 18:58 ` Richard Henderson
2022-04-19 9:10 ` Alex Bennée [this message]
2022-04-19 19:04 ` [PATCH v1 17/25] tests/tcg: invoke Makefile.target directly from QEMU's makefile Richard Henderson
2022-04-19 9:10 ` [PATCH v1 18/25] tests/tcg: isolate from QEMU's config-host.mak Alex Bennée
2022-04-19 19:05 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 19/25] tests/docker: remove SKIP_DOCKER_BUILD Alex Bennée
2022-04-19 19:06 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 20/25] tests/tcg: fix non-static build Alex Bennée
2022-04-19 19:10 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 21/25] tests/tcg: remove duplicate sha512-sse case Alex Bennée
2022-04-19 19:11 ` Richard Henderson
2022-04-19 9:10 ` [PATCH v1 22/25] tests/tcg: add float_convd test Alex Bennée
2022-04-19 19:14 ` Richard Henderson
2022-04-20 14:55 ` Alex Bennée
2022-04-19 9:10 ` [PATCH v1 23/25] tests/tcg: add missing reference files for float_convs Alex Bennée
2022-04-19 19:17 ` Richard Henderson
2022-04-20 14:59 ` Alex Bennée
2022-04-19 9:10 ` [PATCH v1 24/25] target/i386: fix byte swap issue with XMM register access Alex Bennée
2022-04-19 9:10 ` [PATCH v1 25/25] tests/guest-debug: better handle gdb crashes Alex Bennée
2022-04-19 19:19 ` Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220419091020.3008144-18-alex.bennee@linaro.org \
--to=alex.bennee@linaro.org \
--cc=aurelien@aurel32.net \
--cc=berrange@redhat.com \
--cc=crosa@redhat.com \
--cc=f4bug@amsat.org \
--cc=fam@euphon.net \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.