qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilati


From: Wei Huang
Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
Date: Fri, 7 Sep 2018 08:42:38 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1


On 09/07/2018 02:04 AM, Andrew Jones wrote:
> On Thu, Sep 06, 2018 at 12:23:45PM -0400, Wei Huang wrote:
>>
>>
>> ----- Original Message -----
>>> From: "Andrew Jones" <address@hidden>
>>> To: "Wei Huang" <address@hidden>
>>> Cc: address@hidden, "peter maydell" <address@hidden>, address@hidden, 
>>> address@hidden,
>>> address@hidden, "alex bennee" <address@hidden>
>>> Sent: Thursday, September 6, 2018 9:00:33 AM
>>> Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross 
>>> compilation in generating boot header file
>>>
>>> On Thu, Sep 06, 2018 at 09:37:04AM -0400, Wei Huang wrote:
>>>>
>>>>
>>>> ----- Original Message -----
>>>>> From: "Andrew Jones" <address@hidden>
>>>>> To: "Wei Huang" <address@hidden>
>>>>> Cc: address@hidden, address@hidden, "peter maydell"
>>>>> <address@hidden>, address@hidden,
>>>>> address@hidden, "alex bennee" <address@hidden>
>>>>> Sent: Thursday, September 6, 2018 7:03:32 AM
>>>>> Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross
>>>>> compilation in generating boot header file
>>>>>
>>>>> On Wed, Sep 05, 2018 at 03:15:32PM -0400, Wei Huang wrote:
>>>>>> Recently a new configure option, CROSS_CC_GUEST, was added to
>>>>>> $(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
>>>>>> patch tries to leverage this option to support cross compilation when
>>>>>> the
>>>>>> migration boot block file is being re-generated:
>>>>>>
>>>>>>  * The x86 related files are moved to a new sub-dir (named ./i386).
>>>>>>  * A new top-layer Makefile is created in tests/migration/ directory.
>>>>>>    This Makefile searches and parses CROSS_CC_GUEST to generate
>>>>>>    CROSS_PREFIX.
>>>>>>    The CROSS_PREFIX, if available, is then passed to
>>>>>>    migration/$ARCH/Makefile.
>>>>>>
>>>>>> Reviewed-by: Juan Quintela <address@hidden>
>>>>>> Signed-off-by: Wei Huang <address@hidden>
>>>>>> ---
>>>>>>  tests/migration-test.c                             |  2 +-
>>>>>>  tests/migration/Makefile                           | 44
>>>>>>  ++++++++++++----------
>>>>>>  tests/migration/i386/Makefile                      | 22 +++++++++++
>>>>>>  .../{x86-a-b-bootblock.S => i386/a-b-bootblock.S}  |  4 --
>>>>>>  .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 ++--
>>>>>>  5 files changed, 51 insertions(+), 29 deletions(-)
>>>>>>  create mode 100644 tests/migration/i386/Makefile
>>>>>>  rename tests/migration/{x86-a-b-bootblock.S => i386/a-b-bootblock.S}
>>>>>>  (93%)
>>>>>>  rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h}
>>>>>>  (92%)
>>>>>>
>>>>>> diff --git a/tests/migration-test.c b/tests/migration-test.c
>>>>>> index 0e687b7..fe6b41a 100644
>>>>>> --- a/tests/migration-test.c
>>>>>> +++ b/tests/migration-test.c
>>>>>> @@ -83,7 +83,7 @@ static const char *tmpfs;
>>>>>>  /* A simple PC boot sector that modifies memory (1-100MB) quickly
>>>>>>   * outputting a 'B' every so often if it's still running.
>>>>>>   */
>>>>>> -#include "tests/migration/x86-a-b-bootblock.h"
>>>>>> +#include "tests/migration/i386/a-b-bootblock.h"
>>>>>>  
>>>>>>  static void init_bootfile_x86(const char *bootpath)
>>>>>>  {
>>>>>> diff --git a/tests/migration/Makefile b/tests/migration/Makefile
>>>>>> index c0824b4..a9ed875 100644
>>>>>> --- a/tests/migration/Makefile
>>>>>> +++ b/tests/migration/Makefile
>>>>>> @@ -1,31 +1,35 @@
>>>>>> -# To specify cross compiler prefix, use CROSS_PREFIX=
>>>>>> -#   $ make CROSS_PREFIX=x86_64-linux-gnu-
>>>>>> +#
>>>>>> +# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
>>>>>> +#
>>>>>> +# This work is licensed under the terms of the GNU GPL, version 2 or
>>>>>> later.
>>>>>> +# See the COPYING file in the top-level directory.
>>>>>> +#
>>>>>> +
>>>>>> +TARGET_LIST = i386
>>>>>> +
>>>>>> +SRC_PATH = ../..
>>>>>>  
>>>>>>  override define __note
>>>>>> -/* This file is automatically generated from
>>>>>> - * tests/migration/x86-a-b-bootblock.S, edit that and then run
>>>>>> - * tests/migration/rebuild-x86-bootblock.sh to update,
>>>>>> - * and then remember to send both in your patch submission.
>>>>>> +/* This file is automatically generated from the assembly file in
>>>>>> + * tests/migration/address@hidden Edit that file and then run "make all"
>>>>>> + * inside tests/migration to update, and then remember to send both
>>>>>> + * the header and the assembler differences in your patch submission.
>>>>>>   */
>>>>>>  endef
>>>>>>  export __note
>>>>>>  
>>>>>> -.PHONY: all clean
>>>>>> -all: x86-a-b-bootblock.h
>>>>>> -
>>>>>> -x86-a-b-bootblock.h: x86.bootsect
>>>>>> -        echo "$$__note" > header.tmp
>>>>>> -        xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
>>>>>> -        mv header.tmp $@
>>>>>> +find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST="
>>>>>> $(wildcard $(SRC_PATH)/$(patsubst
>>>>>> i386,*86*,$(1))-softmmu/config-target.mak)))
>>>>>
>>>>> The above function hangs unless configuring with
>>>>> '--target-list=x86_64-softmmu,aarch64-softmmu'. I tried just x86_64
>>>>> alone,
>>>>> just aarch64 alone, and also configuring both x86_64 and i386, but none
>>>>> of those worked. For some reason grep isn't happy with the generated path
>>>>> list. I tested like this
>>>>>
>>>>>  ./configure --target-list=x86_64-softmmu,i386-softmmu
>>>>>  make -C tests/migration
>>>>>
>>>>> And, while not an issue of this series, I had to manually add
>>>>> CROSS_CC_GUEST="aarch64-linux-gnu-gcc" to
>>>>> aarch64-softmmu/config-target.mak
>>>>> for it to work, because configure's compiler test fails with the Fedora
>>>>> aarch64-linux-gnu-gcc installation (the linker can't find code it needs
>>>>> to a build a program with main()). I'm not sure if building programs with
>>>>> main() is something the CROSS_CC_GUEST compiler needs to do. Maybe that
>>>>> test can be relaxed. Alex?
>>>>
>>>> I saw the same problem and it needs to be addressed in ./configure file.
>>>> Most distros don't ship with
>>>> cross-compiled glibc. So compiling main() will fail because of that.
>>>
>>> I don't care too much about that problem. You just need to have the right
>>> cross compiler installed. I care about the one above, which is a separate
>>> problem and should be fixed. The tests/migration build shouldn't hang
>>> when a target-list other than x86_64-softmmu,aarch64-softmmu is used.
>>>
>>
>> Since you don't have aarch64, the stall happens when grep is supplied with
>> an empty file name and waiting on standard input. There is no easy way to
>> skip standard input for grep. How about the following? Basically we always
>> supply with a terminator. 
>>
>> grep -h "CROSS_CC_GUEST=" $(wildcard $(SRC_PATH)/$(patsubst 
>> i386,*86*,$(1))-softmmu/config-target.mak) /dev/null)
> 
> Yeah, that should work. Also, when a target-list of
> i386-softmmu,x86_64-softmmu is used, since lastword is applied to
> the grep results, then the cross-cc-guest entry for x86_64 will be
> selected for the i386 target (since it comes later in the alphabet).

This was done intentionally. Normally x86_64 cross compiler is able to
generate i386/i486 binaries, but not the other way. I prefer x86_64 over
i386 for this case...

> That's not correct, but I won't hold the patch up over it.
> 
> Thanks,
> drew
> 



reply via email to

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