mirror of
https://github.com/qemu/qemu.git
synced 2024-12-12 21:23:36 +08:00
ac3c7c3f79
At least for the TriCore target no easily available c compiler exists. Thus we need to rely on "as" and "ld". This allows us to run them through the docker image. We don't test the generation capabilities of docker images as they are assumed to work. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de> [AJB: fix quoting, only handle docker & clear, test -n, tweak commit msg] Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20210512102051.12134-12-alex.bennee@linaro.org>
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)
|