On 06/08/2018 09:33 AM, Alex Bennée wrote: > Now all the build infrastructure is in place we can build tests for > each guest that we support. That support mainly depends on having > cross compilers installed or docker setup. To keep all the logic for > that together we put the rules in tests/tcg/Makefile.include and > include it from the main Makefile.target. > > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > > --- > v4 > - pulled Makefile.include bits from next patch > - added qemu-$(TARGET_NAME) dependency for running tests > - accept SPEED parameter to run slow tests > - pass BUILD_STATIC > - update MAINTAINERS > v6 > - bare make -> $(MAKE) for sub-makes > --- > MAINTAINERS | 1 + > Makefile.target | 5 +++ > tests/tcg/Makefile.include | 88 ++++++++++++++++++++++++++++++++++++++ > 3 files changed, 94 insertions(+) > create mode 100644 tests/tcg/Makefile.include > > diff --git a/MAINTAINERS b/MAINTAINERS > index 4761f8cab4..6c1eca3a1c 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -2147,6 +2147,7 @@ W: http://patchew.org/QEMU/ > Guest Test Compilation Support > M: Alex Bennée <alex.ben...@linaro.org> > F: tests/tcg/Makefile > +F: tests/tcg/Makefile.include > L: qemu-devel@nongnu.org > > Documentation > diff --git a/Makefile.target b/Makefile.target > index dad2cf8778..a9d8928f96 100644 > --- a/Makefile.target > +++ b/Makefile.target > @@ -36,6 +36,11 @@ endif > PROGS=$(QEMU_PROG) $(QEMU_PROGW) > STPFILES= > > +# Makefile Tests > +ifdef CONFIG_USER_ONLY > +include $(SRC_PATH)/tests/tcg/Makefile.include > +endif > + > config-target.h: config-target.h-timestamp > config-target.h-timestamp: config-target.mak > > diff --git a/tests/tcg/Makefile.include b/tests/tcg/Makefile.include > new file mode 100644 > index 0000000000..4851df0951 > --- /dev/null > +++ b/tests/tcg/Makefile.include > @@ -0,0 +1,88 @@ > +# -*- Mode: makefile -*- > +# > +# TCG tests (per-target rules) > +# > +# This Makefile fragement is included from the per-target > +# Makefile.target so will be invoked for each linux-user program 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 per ARCH makefile, if it exists, holds extra information about > +# useful docker images or alternative compiler flags. > + > +-include $(SRC_PATH)/tests/tcg/$(TARGET_BASE_ARCH)/Makefile.include > +-include $(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.include > + > +GUEST_BUILD= > +TCG_MAKE=$(SRC_PATH)/tests/tcg/Makefile > +# Support installed Cross Compilers > + > +ifdef CROSS_CC_GUEST > + > +.PHONY: cross-build-guest-tests > +cross-build-guest-tests: > + $(call quiet-command, \ > + (mkdir -p tests && cd tests && \ > + $(MAKE) -f $(TCG_MAKE) CC=$(CROSS_CC_GUEST) \ > + BUILD_STATIC=$(CROSS_CC_GUEST_STATIC) \ > + EXTRA_CFLAGS=$(CROSS_CC_GUEST_CFLAGS)), \ > + "CROSS-BUILD","$(TARGET_NAME) guest-tests with $(CROSS_CC_GUEST)") > + > +GUEST_BUILD=cross-build-guest-tests > + > +endif > + > +# Support building with Docker > + > +ifeq ($(HAVE_USER_DOCKER)$(GUEST_BUILD),y) > +ifneq ($(DOCKER_IMAGE),) > + > +# We also need the Docker make rules to depend on > +include $(SRC_PATH)/tests/docker/Makefile.include > + > +DOCKER_COMPILE_CMD="$(DOCKER_SCRIPT) cc --user $(shell id -u) \ > + --cc $(DOCKER_CROSS_COMPILER) \ > + -i qemu:$(DOCKER_IMAGE) \ > + -s $(SRC_PATH) -- " > +DOCKER_PREREQ=docker-image-$(DOCKER_IMAGE) > + > +.PHONY: docker-build-guest-tests > +docker-build-guest-tests: $(DOCKER_PREREQ) > + $(call quiet-command, \ > + (mkdir -p tests && cd tests && \ > + $(MAKE) -f $(TCG_MAKE) CC=$(DOCKER_COMPILE_CMD) \ > + BUILD_STATIC=y \ > + EXTRA_CFLAGS=$(DOCKER_CROSS_COMPILER_CFLAGS)), \ > + "CROSS-BUILD","$(TARGET_NAME) guest-tests with docker > qemu:$(DOCKER_IMAGE)") > + > +GUEST_BUILD=docker-build-guest-tests > + > +endif > +endif > + > +# Final targets > +.PHONY: guest-tests > + > +ifneq ($(GUEST_BUILD),) > +guest-tests: $(GUEST_BUILD) > + > +run-guest-tests: guest-tests qemu-$(TARGET_NAME) > + $(call quiet-command, \ > + (cd tests && $(MAKE) -f $(TCG_MAKE) SPEED=$(SPEED) run), \ > + "RUN-TESTS", "for $(TARGET_NAME)") > + > +else > +guest-tests: > + $(call quiet-command, /bin/true, "CROSS-BUILD", \ > + "$(TARGET_NAME) guest-tests SKIPPED") > + > +run-guest-tests: > + $(call quiet-command, /bin/true, "RUN-TESTS", \ > + "for $(TARGET_NAME) SKIPPED") > +endif > + > +# It doesn't mater if these don't exits
"matter"? > +.PHONY: clean-guest-tests > +clean-guest-tests: > + rm -rf tests || echo "no $(TARGET_NAME) tests to remove" > Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> Tested-by: Philippe Mathieu-Daudé <f4...@amsat.org>