[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tes
From: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets |
Date: |
Tue, 17 Apr 2018 16:09:38 +0100 |
User-agent: |
mu4e 1.1.0; emacs 26.1 |
Philippe Mathieu-Daudé <address@hidden> writes:
> Hi Alex
>
> On 04/16/2018 05:08 PM, Alex Bennée wrote:
>>>>>> Now all the build infrastructure is in place we can build tests for
>>>>>> each guest that we support. That support mainly depends on having
>>>>>> cross compilers installed or docker setup. To keep all the logic for
>>>>>> that together we put the rules in tests/tcg/Makefile.include and
>>>>>> include it from the main Makefile.target.
>>>>>>
>>>>>> Signed-off-by: Alex Bennée <address@hidden>
>>>>>> ---
>>>>>> Makefile.target | 5 +++
>>>>>> tests/tcg/Makefile.include | 79
>>>>>> ++++++++++++++++++++++++++++++++++++++++++++++
>>>>>> 2 files changed, 84 insertions(+)
>>>>>> create mode 100644 tests/tcg/Makefile.include
>>>>>>
>>>>>> diff --git a/Makefile.target b/Makefile.target
>>>>>> index d0ec77a307..a30fd40257 100644
>>>>>> --- a/Makefile.target
>>>>>> +++ b/Makefile.target
>>>>>> @@ -36,6 +36,11 @@ endif
>>>>>> PROGS=$(QEMU_PROG) $(QEMU_PROGW)
>>>>>> STPFILES=
>>>>>>
>>>>>> +# Makefile Tests
>>>>>> +ifdef CONFIG_USER_ONLY
>>>>>> +include $(SRC_PATH)/tests/tcg/Makefile.include
>>>>>> +endif
>>>>>> +
>>>>>> config-target.h: config-target.h-timestamp
>>>>>> config-target.h-timestamp: config-target.mak
>>>>>>
>>>>>> diff --git a/tests/tcg/Makefile.include b/tests/tcg/Makefile.include
>>>>>> new file mode 100644
>>>>>> index 0000000000..cb8bb36026
>>>>>> --- /dev/null
>>>>>> +++ b/tests/tcg/Makefile.include
>>>>>> @@ -0,0 +1,79 @@
>>>>>> +# -*- Mode: makefile -*-
>>>>>> +#
>>>>>> +# TCG tests (per-target rules)
>>>>>> +#
>>>>>> +# This Makefile fragement 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 it if it
>>>>>> +# exists
>>>>>> +
>>>>>> +ARCH_MAKEFILE=$(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.include
>>>>>> +CHECK_INCLUDE=$(wildcard $(ARCH_MAKEFILE))
>>>>>> +
>>>>>> +ifeq ($(ARCH_MAKEFILE),$(CHECK_INCLUDE))
>>>>>> +include $(ARCH_MAKEFILE)
>>>>>> +endif
>>>>>> +
>>>>>> +GUEST_BUILD=
>>>>>> +
>>>>>> +# 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 $(SRC_PATH)/tests/tcg/Makefile ARCH=$(TARGET_NAME)
>>>>>> CC=$(CROSS_CC_GUEST)), \
>>>>>> + "CROSS-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
>>>>>> +
>>>>>
>>>>> Eventually:
>>>>>
>>>>> DOCKER_CROSS_COMPILER ?= $(DOCKER_CROSS_COMPILER_PREFIX)-gcc
>>>>>
>>>>>> +DOCKER_COMPILE_CMD="$(DOCKER_SCRIPT) cc --user $(shell id -u) \
>>>>>> + --cc $(DOCKER_CROSS_COMPILER) \
>>>>>> + -i qemu:$(DOCKER_IMAGE) \
>>>>>> + -s $(SRC_PATH) -- "
>>>>>
>>>>> Should we check $(DOCKER_CROSS_COMPILER) is set?
>>>>
>>>> Currently it's implied. It would be nice if there was an easy way just
>>>> to fish it out of the env of the docker image as they already have it
>>>> set there.
>>>>
>>>> I've been trying quite hard to ensure all the tests can just use LD (see
>>>> the hoops I jump in i386 for this). Maybe a prefix config makes more
>>>> sense though....
>>>
>>> We might also need some CROSS_CFLAGS, i.e. for armeb we need to use
>>> -mbig-endian. This would go in
>>> tests/tcg/$(TARGET_NAME)/Makefile.target
>>
>> Yeah we can fish that out from config-target.mak
>>
>> However I've run into problems with compiling things with -mbig-endian
>> as it forces the inclusion of something that seems to be missing in the
>> glibc-dev:
>>
>>
>> aarch64-linux-gnu-gcc -mbig-endian -o config-temp/qemu-conf.exe
>> config-temp/qemu-conf.c -static
>> In file included from /usr/aarch64-linux-gnu/include/features.h:391:0,
>> from /usr/aarch64-linux-gnu/include/stdio.h:27,
>> from config-temp/qemu-conf.c:1:
>> /usr/aarch64-linux-gnu/include/gnu/stubs.h:11:32: fatal error:
>> gnu/stubs-lp64_be.h: No such file or directory
>> compilation terminated.
>>
>> And they aren't packaged if the distro doesn't support the arch.
>
> Oh I never tried BE on v8, but I'm successfully using it for v7, having
> the following packages installed:
>
> - gcc-arm-none-eabi
> - gdb-arm-none-eabi
> - libnewlib-arm-none-eabi
> - binutils-arm-none-eabi
>
> Indeed I'm not using the glibc but newlib, BE libs are here:
>
> /usr/lib/arm-none-eabi/newlib/thumb/armv7-ar/fpu/vfpv3-d16/be
So maybe we need a docker-arm3264be-cross with newlib?
>
>>>>>> +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 $(SRC_PATH)/tests/tcg/Makefile ARCH=$(TARGET_NAME)
>>>>>> CC=$(DOCKER_COMPILE_CMD)), \
>>>>>> + "CROSS-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)
>>>>>> +else
>>>>>> +guest-tests:
>>>>>> + $(call quiet-command, /bin/true, "CROSS-BUILD", "$(TARGET_NAME)
>>>>>> guest-tests SKIPPED")
>>>>>> +endif
>>>>>> +
>>>>>> +# It doesn't mater if these don't exits
>>>>>> +.PHONY: clean-guest-tests
>>>>>> +clean-guest-tests:
>>>>>> + rm -rf tests || echo "no $(TARGET_NAME) tests to remove"
>>>>>>
>>
>>
>> --
>> Alex Bennée
>>
--
Alex Bennée
- [Qemu-devel] [PATCH v1 24/24] tests/Makefile.include: add (clean-)check-tcg targets, (continued)
- [Qemu-devel] [PATCH v1 24/24] tests/Makefile.include: add (clean-)check-tcg targets, Alex Bennée, 2018/04/10
- [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets, Alex Bennée, 2018/04/10
- Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets, Philippe Mathieu-Daudé, 2018/04/15
- Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets, Philippe Mathieu-Daudé, 2018/04/15
- Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets, Alex Bennée, 2018/04/16
- Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets, Philippe Mathieu-Daudé, 2018/04/16
- Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets, Philippe Mathieu-Daudé, 2018/04/16
- Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets, Alex Bennée, 2018/04/16
- Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets, Philippe Mathieu-Daudé, 2018/04/17
- Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets,
Alex Bennée <=
[Qemu-devel] [PATCH v1 20/24] tests/tcg: enable building for s390x, Alex Bennée, 2018/04/10
[Qemu-devel] [PATCH v1 21/24] tests/tcg: enable building for ppc64, Alex Bennée, 2018/04/10
[Qemu-devel] [PATCH v1 11/24] tests/tcg: move i386 specific tests into subdir, Alex Bennée, 2018/04/10
[Qemu-devel] [PATCH v1 12/24] tests/tcg/i386: Build fix for hello-i386, Alex Bennée, 2018/04/10