# -*- 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"
