summaryrefslogtreecommitdiff
path: root/tests/tcg/Makefile.include
blob: 73b5626fc5f955fb717f78287e425f5295dbfca4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# -*- 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"