On 04/16/2018 05:53 AM, Alex Bennée wrote: > > Philippe Mathieu-Daudé <f4...@amsat.org> writes: > >> 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? > > Currently it's implied. It would be nice if there was an easy way just > to fish it out of the env of the docker image as they already have it > set there.
What about splitting this out of Dockerfiles into a shell profile, so we can source it from outside/inside of docker images? > > I've been trying quite hard to ensure all the tests can just use LD (see > the hoops I jump in i386 for this). Maybe a prefix config makes more > sense though.... > >> >>> +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" >>> > >