# -*- Mode: makefile -*- # # TCG tests (per-target rules) # # This Makefile fragment 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-$(subst y,system-,$(CONFIG_SOFTMMU))$(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"