Commit c722a9e4 authored by Alex Bennée's avatar Alex Bennée
Browse files

Makefile.target: add (clean-/build-)guest-tests targets



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: default avatarAlex Bennée <alex.bennee@linaro.org>
Reviewed-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
parent 7e97017e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2160,6 +2160,7 @@ Guest Test Compilation Support
M: Alex Bennée <alex.bennee@linaro.org>
R: Philippe Mathieu-Daudé <f4bug@amsat.org>
F: tests/tcg/Makefile
F: tests/tcg/Makefile.include
L: qemu-devel@nongnu.org

Documentation
+5 −0
Original line number Diff line number Diff line
@@ -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

+88 −0
Original line number Diff line number Diff line
# -*- 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)), \
	"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)), \
	"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, "BUILD", \
		"$(TARGET_NAME) guest-tests SKIPPED")

run-guest-tests:
	$(call quiet-command, /bin/true, "RUN", \
		"tests for $(TARGET_NAME) SKIPPED")
endif

# It doesn't matter if these don't exits
.PHONY: clean-guest-tests
clean-guest-tests:
	rm -rf tests || echo "no $(TARGET_NAME) tests to remove"