# -*- Mode: makefile -*-
#
# TCG tests (per-target rules)
#
# This Makefile fragment is included from the build-tcg target, once
# for each target 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.
#

include $(SRC_PATH)/rules.mak

# The configure script fills in extra information about
# useful docker images or alternative compiler flags.

CROSS_CC_GUEST:=
DOCKER_IMAGE:=
-include $(BUILD_DIR)/tests/tcg/config-$(TARGET).mak

GUEST_BUILD=
TCG_MAKE=../Makefile.target

# We also need the Docker make rules to depend on
SKIP_DOCKER_BUILD=1
include $(SRC_PATH)/tests/docker/Makefile.include

# Support installed Cross Compilers

ifdef CROSS_CC_GUEST

.PHONY: cross-build-guest-tests
cross-build-guest-tests:
	$(call quiet-command, \
	   (mkdir -p tests/tcg/$(TARGET) && cd tests/tcg/$(TARGET) && \
	    $(MAKE) -f $(TCG_MAKE) TARGET="$(TARGET)" CC="$(CROSS_CC_GUEST)" \
			SRC_PATH="$(SRC_PATH)" BUILD_STATIC=$(CROSS_CC_GUEST_STATIC) \
			EXTRA_CFLAGS="$(CROSS_CC_GUEST_CFLAGS)"), \
	"BUILD","$(TARGET) guest-tests with $(CROSS_CC_GUEST)")

GUEST_BUILD=cross-build-guest-tests

endif

# Support building with Docker

ifneq ($(DOCKER_IMAGE),)

DOCKER_COMPILE_CMD="$(DOCKER_SCRIPT) cc \
		--cc $(DOCKER_CROSS_CC_GUEST) \
		-i qemu:$(DOCKER_IMAGE) \
		-s $(SRC_PATH) -- "

.PHONY: docker-build-guest-tests
docker-build-guest-tests: docker-image-$(DOCKER_IMAGE)
	$(call quiet-command, \
	  (mkdir -p tests/tcg/$(TARGET) && cd tests/tcg/$(TARGET) && \
	   $(MAKE) -f $(TCG_MAKE) TARGET="$(TARGET)" CC=$(DOCKER_COMPILE_CMD) \
			SRC_PATH="$(SRC_PATH)" BUILD_STATIC=y \
			EXTRA_CFLAGS="$(CROSS_CC_GUEST_CFLAGS)"), \
	"BUILD","$(TARGET) guest-tests with docker qemu:$(DOCKER_IMAGE)")

GUEST_BUILD=docker-build-guest-tests

endif

# Final targets
all:
	@echo "Do not invoke this Makefile directly"; exit 1

.PHONY: guest-tests

ifneq ($(GUEST_BUILD),)
guest-tests: $(GUEST_BUILD)

run-guest-tests: guest-tests
	$(call quiet-command, \
	(cd tests/tcg/$(TARGET) && \
	 $(MAKE) -f $(TCG_MAKE) TARGET="$(TARGET)" \
	 		SRC_PATH="$(SRC_PATH)" SPEED=$(SPEED) run), \
	"RUN", "tests for $(TARGET_NAME)")

else
guest-tests:
	$(call quiet-command, /bin/true, "BUILD", \
		"$(TARGET) guest-tests SKIPPED")

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

# It doesn't matter if these don't exits
.PHONY: clean-guest-tests
clean-guest-tests:
	rm -rf tests/tcg/$(TARGET)
