122 lines
3.4 KiB
Makefile
122 lines
3.4 KiB
Makefile
# -*- 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)
|