All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Huang <wehuang@redhat.com>
To: Andrew Jones <drjones@redhat.com>
Cc: qemu-devel@nongnu.org, lvivier@redhat.com,
	peter maydell <peter.maydell@linaro.org>,
	quintela@redhat.com, dgilbert@redhat.com
Subject: Re: [Qemu-devel] [PATCH V8 2/4] tests/migration: Support cross compilation in generating boot header file
Date: Tue, 4 Sep 2018 13:04:31 -0400 (EDT)	[thread overview]
Message-ID: <2128164405.32860913.1536080671057.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <20180903112639.hnuprihktvifieuz@kamzik.brq.redhat.com>



----- Original Message -----
> From: "Andrew Jones" <drjones@redhat.com>
> To: "Wei Huang" <wei@redhat.com>
> Cc: qemu-devel@nongnu.org, lvivier@redhat.com, "peter maydell" <peter.maydell@linaro.org>, quintela@redhat.com,
> dgilbert@redhat.com
> Sent: Monday, September 3, 2018 6:26:39 AM
> Subject: Re: [Qemu-devel] [PATCH V8 2/4] tests/migration: Support cross compilation in generating boot header file
> 
> On Sat, Sep 01, 2018 at 01:11:13AM -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_64 related files are moved to a new sub-dir (named ./x86_64).
> >  * 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.
> > 
> > Signed-off-by: Wei Huang <wei@redhat.com>
> > ---
> >  tests/migration-test.c                           |  2 +-
> >  tests/migration/Makefile                         | 43
> >  +++++++++++++-----------
> >  tests/migration/x86_64/Makefile                  | 22 ++++++++++++
> >  tests/migration/{ => x86_64}/x86-a-b-bootblock.S |  0
> >  tests/migration/{ => x86_64}/x86-a-b-bootblock.h |  8 ++---
> >  5 files changed, 50 insertions(+), 25 deletions(-)
> >  create mode 100644 tests/migration/x86_64/Makefile
> >  rename tests/migration/{ => x86_64}/x86-a-b-bootblock.S (100%)
> >  rename tests/migration/{ => x86_64}/x86-a-b-bootblock.h (93%)
> > 
> > diff --git a/tests/migration-test.c b/tests/migration-test.c
> > index 0e687b7..c4d79e9 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/x86_64/x86-a-b-bootblock.h"
> 
> Is x86-a-b-bootblock.h specific to x86_64, or both i386 and x86_64?
> I think we want the dir name to be i386 if it's the later. Also,
> we could drop the 'x86-' prefix from the filename, now that the
> directory identifies the arch.

Well, I can try it. But this will make the Makefile more complicated as we have to detect x86_64 compiler for i386 binary (most distros only ship x86_64 cross compiler).

> 
> >  
> >  static void init_bootfile_x86(const char *bootpath)
> >  {
> > diff --git a/tests/migration/Makefile b/tests/migration/Makefile
> > index 5d5fa07..1de480e 100644
> > --- a/tests/migration/Makefile
> > +++ b/tests/migration/Makefile
> > @@ -1,31 +1,34 @@
> > -# 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 = x86_64
> > +
> > +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/$@, edit that and then run "make all"
> 
> nit: /, edit that/. Edit that file/
> 
> > + * inside tests/migration to update, and then remember to send both
> > + * in your patch submission.
> nit: ^ the header and the assembler differences
> 
> >   */
> >  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 $@
> > +parse-cross-prefix = $(subst gcc,,$(patsubst cc,gcc,$(patsubst
> > CROSS_CC_GUEST="%",%,$(shell grep "CROSS_CC_GUEST="
> > $(SRC_PATH)/$(1)-softmmu/config-target.mak))))
> > +gen-cross-prefix = $(patsubst %-,CROSS_PREFIX=%-,$(call
> > parse-cross-prefix,$(1)))
> >  
> > -x86.bootsect: x86.boot
> > -	dd if=$< of=$@ bs=256 count=2 skip=124
> > +.PHONY: all $(TARGET_LIST)
> >  
> > -x86.boot: x86.o
> > -	$(CROSS_PREFIX)objcopy -O binary $< $@
> > +all: $(TARGET_LIST)
> >  
> > -x86.o: x86-a-b-bootblock.S
> > -	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> > +$(TARGET_LIST):
> > +	$(MAKE) -C $@ $(call gen-cross-prefix,$@)
> >  
> >  clean:
> > -	@rm -rf *.boot *.o *.bootsect
> > +	for target in $(TARGET_LIST); do \
> > +		$(MAKE) -C $$target clean; \
> > +	done
> 
> The above seems overly complicated. Does the following work?
> 
> $(TARGET_LIST): CROSS_PREFIX=$(CROSS_CC_GUEST)
> $(TARGET_LIST):
> 	$(MAKE) -C $@

No, it doen't work for different reasons.

First, to have CROSS_CC_GUEST defined, we normally would use "-include" to include config-target.mak file. But the end result is, the CROSS_CC_GUEST only has the same definition for both architectures (due to make command's multi-iteration processing and include is processed first). Secondly, CROSS_CC_GUEST needs to be polished because it can be: i) not defined; ii) "cc" without prefix; or iii) used-define value. We can't use it directly.



> 
> 
> > diff --git a/tests/migration/x86_64/Makefile
> > b/tests/migration/x86_64/Makefile
> > new file mode 100644
> > index 0000000..6dc849f
> > --- /dev/null
> > +++ b/tests/migration/x86_64/Makefile
> > @@ -0,0 +1,22 @@
> > +# To specify cross compiler prefix, use CROSS_PREFIX=
> > +#   > make CROSS_PREFIX=x86_64-linux-gnu-
> > +
> > +.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 $@
> > +
> > +x86.bootsect: x86.boot
> > +	dd if=$< of=$@ bs=256 count=2 skip=124
> > +
> > +x86.boot: x86.o
> > +	$(CROSS_PREFIX)objcopy -O binary $< $@
> > +
> > +x86.o: x86-a-b-bootblock.S
> > +	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> > +
> > +clean:
> > +	@rm -rf *.boot *.o *.bootsect
> > diff --git a/tests/migration/x86-a-b-bootblock.S
> > b/tests/migration/x86_64/x86-a-b-bootblock.S
> > similarity index 100%
> > rename from tests/migration/x86-a-b-bootblock.S
> > rename to tests/migration/x86_64/x86-a-b-bootblock.S
> > diff --git a/tests/migration/x86-a-b-bootblock.h
> > b/tests/migration/x86_64/x86-a-b-bootblock.h
> > similarity index 93%
> > rename from tests/migration/x86-a-b-bootblock.h
> > rename to tests/migration/x86_64/x86-a-b-bootblock.h
> > index 78a151f..73670ef 100644
> > --- a/tests/migration/x86-a-b-bootblock.h
> > +++ b/tests/migration/x86_64/x86-a-b-bootblock.h
> > @@ -1,7 +1,7 @@
> > -/* 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/x86_64, edit that and then run "make all"
> > + * inside tests/migration to update, and then remember to send both
> > + * in your patch submission.
> >   */
> >  unsigned char x86_bootsect[] = {
> >    0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00, 0x00,
> > --
> > 1.8.3.1
> > 
> >
> 
> Thanks,
> drew
> 

  reply	other threads:[~2018-09-04 17:04 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-01  5:11 [Qemu-devel] [PATCH V8 0/4] tests: Add migration test for aarch64 Wei Huang
2018-09-01  5:11 ` [Qemu-devel] [PATCH V8 1/4] tests/migration: Convert x86 boot block compilation script into Makefile Wei Huang
2018-09-03  9:32   ` Juan Quintela
2018-09-03 11:08   ` Andrew Jones
2018-09-03 11:45     ` Juan Quintela
2018-09-03 12:14       ` Andrew Jones
2018-09-04 15:51     ` Wei Huang
2018-09-01  5:11 ` [Qemu-devel] [PATCH V8 2/4] tests/migration: Support cross compilation in generating boot header file Wei Huang
2018-09-03  9:43   ` Juan Quintela
2018-09-03 11:26   ` Andrew Jones
2018-09-04 17:04     ` Wei Huang [this message]
2018-09-04 18:05       ` Andrew Jones
2018-09-01  5:11 ` [Qemu-devel] [PATCH V8 3/4] tests/migration: Add migration-test " Wei Huang
2018-09-03  9:35   ` Juan Quintela
2018-09-03 11:34   ` Andrew Jones
2018-09-01  5:11 ` [Qemu-devel] [PATCH V8 4/4] tests: Add migration test for aarch64 Wei Huang
2018-09-01 10:07   ` Peter Maydell
2018-09-02  5:00     ` Wei Huang
2018-09-03 11:46     ` Andrew Jones
2018-09-03  9:42   ` Juan Quintela
2018-09-03 11:53   ` Andrew Jones
2018-09-04 17:07     ` Wei Huang
2018-09-04 18:02       ` Andrew Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2128164405.32860913.1536080671057.JavaMail.zimbra@redhat.com \
    --to=wehuang@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=drjones@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.