On 04/10/2018 04:39 PM, 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> > --- > Makefile.target | 5 +++ > tests/tcg/Makefile.include | 79 > ++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 84 insertions(+) > create mode 100644 tests/tcg/Makefile.include > > diff --git a/Makefile.target b/Makefile.target > index d0ec77a307..a30fd40257 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..cb8bb36026 > --- /dev/null > +++ b/tests/tcg/Makefile.include > @@ -0,0 +1,79 @@ > +# -*- 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 it if it > +# exists > + > +ARCH_MAKEFILE=$(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.include > +CHECK_INCLUDE=$(wildcard $(ARCH_MAKEFILE)) > + > +ifeq ($(ARCH_MAKEFILE),$(CHECK_INCLUDE)) > +include $(ARCH_MAKEFILE) > +endif > + > +GUEST_BUILD= > + > +# 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 $(SRC_PATH)/tests/tcg/Makefile ARCH=$(TARGET_NAME) > CC=$(CROSS_CC_GUEST)), \ > + "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 > +
Eventually: DOCKER_CROSS_COMPILER ?= $(DOCKER_CROSS_COMPILER_PREFIX)-gcc > +DOCKER_COMPILE_CMD="$(DOCKER_SCRIPT) cc --user $(shell id -u) \ > + --cc $(DOCKER_CROSS_COMPILER) \ > + -i qemu:$(DOCKER_IMAGE) \ > + -s $(SRC_PATH) -- " Should we check $(DOCKER_CROSS_COMPILER) is set? > +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 $(SRC_PATH)/tests/tcg/Makefile ARCH=$(TARGET_NAME) > CC=$(DOCKER_COMPILE_CMD)), \ > + "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) > +else > +guest-tests: > + $(call quiet-command, /bin/true, "CROSS-BUILD", "$(TARGET_NAME) > guest-tests SKIPPED") > +endif > + > +# It doesn't mater if these don't exits > +.PHONY: clean-guest-tests > +clean-guest-tests: > + rm -rf tests || echo "no $(TARGET_NAME) tests to remove" >