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