qemu-devel
[Top][All Lists]
Advanced

[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: Philippe Mathieu-Daudé
Subject: Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets
Date: Tue, 17 Apr 2018 11:41:23 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0

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

>>>>> +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
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]