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: Alex Bennée
Subject: Re: [Qemu-devel] [PATCH v1 23/24] Makefile.target: add (clean-)guest-tests targets
Date: Mon, 16 Apr 2018 21:08:03 +0100
User-agent: mu4e 1.1.0; emacs 26.1

Philippe Mathieu-Daudé <address@hidden> writes:

> On 04/16/2018 05:53 AM, Alex Bennée wrote:
>>
>> Philippe Mathieu-Daudé <address@hidden> writes:
>>
>>> On 04/10/2018 04:39 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.

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