diff options
Diffstat (limited to 'tests/tcg/Makefile.qemu')
-rw-r--r-- | tests/tcg/Makefile.qemu | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/tests/tcg/Makefile.qemu b/tests/tcg/Makefile.qemu new file mode 100644 index 000000000..84c854387 --- /dev/null +++ b/tests/tcg/Makefile.qemu @@ -0,0 +1,121 @@ +# -*- 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. +# + +# The configure script fills in extra information about +# useful docker images or alternative compiler flags. + +# Usage: $(call quiet-command,command and args,"NAME","args to print") +# This will run "command and args", and either: +# if V=1 just print the whole command and args +# otherwise print the 'quiet' output in the format " NAME args to print" +# NAME should be a short name of the command, 7 letters or fewer. +# If called with only a single argument, will print nothing in quiet mode. +quiet-command-run = $(if $(V),,$(if $2,printf " %-7s %s\n" $2 $3 && ))$1 +quiet-@ = $(if $(V),,@) +quiet-command = $(quiet-@)$(call quiet-command-run,$1,$2,$3) + +CROSS_CC_GUEST:= +CROSS_AS_GUEST:= +CROSS_LD_GUEST:= +DOCKER_IMAGE:= + +-include 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)" \ + $(if $(CROSS_AS_GUEST),AS="$(CROSS_AS_GUEST)") \ + $(if $(CROSS_LD_GUEST),LD="$(CROSS_LD_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) -- " + +DOCKER_AS_CMD=$(if $(DOCKER_CROSS_AS_GUEST),"$(DOCKER_SCRIPT) cc \ + --cc $(DOCKER_CROSS_AS_GUEST) \ + -i qemu/$(DOCKER_IMAGE) \ + -s $(SRC_PATH) -- ") + +DOCKER_LD_CMD=$(if $(DOCKER_CROSS_LD_GUEST),"$(DOCKER_SCRIPT) cc \ + --cc $(DOCKER_CROSS_LD_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) \ + $(if $(DOCKER_AS_CMD),AS=$(DOCKER_AS_CMD)) \ + $(if $(DOCKER_LD_CMD),LD=$(DOCKER_LD_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, true, "BUILD", \ + "$(TARGET) guest-tests SKIPPED") + +run-guest-tests: + $(call quiet-command, 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) |