tests/tcg: Add docker_as and docker_ld cmds

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>
This commit is contained in:
Bastian Koppelmann 2021-05-12 11:20:31 +01:00 committed by Alex Bennée
parent 6a7e70006a
commit ac3c7c3f79
2 changed files with 33 additions and 1 deletions

View file

@ -22,6 +22,8 @@ quiet-@ = $(if $(V),,@)
quiet-command = $(quiet-@)$(call quiet-command-run,$1,$2,$3) quiet-command = $(quiet-@)$(call quiet-command-run,$1,$2,$3)
CROSS_CC_GUEST:= CROSS_CC_GUEST:=
CROSS_AS_GUEST:=
CROSS_LD_GUEST:=
DOCKER_IMAGE:= DOCKER_IMAGE:=
-include tests/tcg/config-$(TARGET).mak -include tests/tcg/config-$(TARGET).mak
@ -42,6 +44,8 @@ cross-build-guest-tests:
$(call quiet-command, \ $(call quiet-command, \
(mkdir -p tests/tcg/$(TARGET) && cd tests/tcg/$(TARGET) && \ (mkdir -p tests/tcg/$(TARGET) && cd tests/tcg/$(TARGET) && \
$(MAKE) -f $(TCG_MAKE) TARGET="$(TARGET)" CC="$(CROSS_CC_GUEST)" \ $(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) \ SRC_PATH="$(SRC_PATH)" BUILD_STATIC=$(CROSS_CC_GUEST_STATIC) \
EXTRA_CFLAGS="$(CROSS_CC_GUEST_CFLAGS)"), \ EXTRA_CFLAGS="$(CROSS_CC_GUEST_CFLAGS)"), \
"BUILD","$(TARGET) guest-tests with $(CROSS_CC_GUEST)") "BUILD","$(TARGET) guest-tests with $(CROSS_CC_GUEST)")
@ -59,11 +63,24 @@ DOCKER_COMPILE_CMD="$(DOCKER_SCRIPT) cc \
-i qemu/$(DOCKER_IMAGE) \ -i qemu/$(DOCKER_IMAGE) \
-s $(SRC_PATH) -- " -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 .PHONY: docker-build-guest-tests
docker-build-guest-tests: docker-image-$(DOCKER_IMAGE) docker-build-guest-tests: docker-image-$(DOCKER_IMAGE)
$(call quiet-command, \ $(call quiet-command, \
(mkdir -p tests/tcg/$(TARGET) && cd tests/tcg/$(TARGET) && \ (mkdir -p tests/tcg/$(TARGET) && cd tests/tcg/$(TARGET) && \
$(MAKE) -f $(TCG_MAKE) TARGET="$(TARGET)" CC=$(DOCKER_COMPILE_CMD) \ $(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 \ SRC_PATH="$(SRC_PATH)" BUILD_STATIC=y \
EXTRA_CFLAGS="$(CROSS_CC_GUEST_CFLAGS)"), \ EXTRA_CFLAGS="$(CROSS_CC_GUEST_CFLAGS)"), \
"BUILD","$(TARGET) guest-tests with docker qemu/$(DOCKER_IMAGE)") "BUILD","$(TARGET) guest-tests with docker qemu/$(DOCKER_IMAGE)")

View file

@ -75,7 +75,13 @@ fi
for target in $target_list; do for target in $target_list; do
arch=${target%%-*} arch=${target%%-*}
# reset all container fields
container_image= container_image=
container_hosts=
container_cross_cc=
container_cross_as=
container_cross_ld=
case $target in case $target in
aarch64-*) aarch64-*)
# We don't have any bigendian build tools so we only use this for AArch64 # We don't have any bigendian build tools so we only use this for AArch64
@ -273,7 +279,16 @@ for target in $target_list; do
for host in $container_hosts; do for host in $container_hosts; do
if test "$host" = "$ARCH"; then if test "$host" = "$ARCH"; then
echo "DOCKER_IMAGE=$container_image" >> $config_target_mak echo "DOCKER_IMAGE=$container_image" >> $config_target_mak
echo "DOCKER_CROSS_CC_GUEST=$container_cross_cc" >> $config_target_mak echo "DOCKER_CROSS_CC_GUEST=$container_cross_cc" >> \
$config_target_mak
if test -n "$container_cross_as"; then
echo "DOCKER_CROSS_AS_GUEST=$container_cross_as" >> \
$config_target_mak
fi
if test -n "$container_cross_ld"; then
echo "DOCKER_CROSS_LD_GUEST=$container_cross_ld" >> \
$config_target_mak
fi
fi fi
done done
fi fi