On 02/27/2018 05:38 AM, Dr. David Alan Gilbert wrote:
> * Wei Huang (w...@redhat.com) wrote:
>>
>>
>> On 02/26/2018 12:01 PM, Dr. David Alan Gilbert wrote:
>>> * Wei Huang (w...@redhat.com) wrote:
>>>> The x86 boot block header currently is generated with a shell script.
>>>> To better support other CPUs (e.g. aarch64), we convert the script
>>>> into Makefile. This allows us to 1) support cross-compilation easily,
>>>> and 2) avoid creating a script file for every architecture.
>>>>
>>>> Signed-off-by: Wei Huang <w...@redhat.com>
>>>
>>> But what happens if you're on a system that doesn't have the cross
>>> compilers?  I found it's too easy to get stuck with it trying
>>> to rebuild the header when there's no need.
>>
>> I think it is fine. If no cross compiler is present, NNN_cross_prefix
>> won't find anything. So it ends up with using the gcc tools on host
>> systems. Obviously the compilation will fail. This should become the
>> problem to solve for whoever wants to do cross-compile. For us, we have
>> done our part because the .h files have been provided.
> 
> But isn't it a problem for people just trying to make check?

"make check" doesn't invoke the Makefile in tests/migration/. This
Makefile is only invoked when people manually run "make" or "make
x86-a-b-bootblock.h" inside the tests/migration/ directory.

> One of the things that convinced me to move it out of the makefile and
> into a separate script was that it was too easy to get into a situation
> where Make wanted to rebuild the headerilfe on a system.

This could be potentially one concern. But the real reason behind this
concern is the cross-compilation doesn't always work (it depends on the
availability of cross-compiler tools). My argument is this problem also
exists in the original script approach. As long as QEMU doesn't include
tests/migration/Makefile in "make" or "make check", I think this rebuild
headerfile situation won't happen.

Also, using Makefile, we don't need to write a script for each single
architecture. And it is easier to support cross-compilation detection
(than script).

Thanks,
-Wei

> 
> Dave
> 
>>>
>>> Dave
>>>
>>>> ---
>>>>  tests/migration/Makefile                 | 36 
>>>> ++++++++++++++++++++++++++++++++
>>>>  tests/migration/rebuild-x86-bootblock.sh | 33 
>>>> -----------------------------
>>>>  tests/migration/x86-a-b-bootblock.h      |  2 +-
>>>>  tests/migration/x86-a-b-bootblock.s      |  5 ++---
>>>>  4 files changed, 39 insertions(+), 37 deletions(-)
>>>>  create mode 100644 tests/migration/Makefile
>>>>  delete mode 100755 tests/migration/rebuild-x86-bootblock.sh
>>>>
>>>> diff --git a/tests/migration/Makefile b/tests/migration/Makefile
>>>> new file mode 100644
>>>> index 0000000000..8fbedaa8b8
>>>> --- /dev/null
>>>> +++ b/tests/migration/Makefile
>>>> @@ -0,0 +1,36 @@
>>>> +#
>>>> +# Copyright (c) 2016-2018 Red Hat, Inc. and/or its affiliates
>>>> +#
>>>> +# Authors:
>>>> +#   Dave Gilbert <dgilb...@redhat.com>
>>>> +#
>>>> +# This work is licensed under the terms of the GNU GPL, version 2 or 
>>>> later.
>>>> +# See the COPYING file in the top-level directory.
>>>> +#
>>>> +export __note
>>>> +override define __note
>>>> +/* This file is automatically generated from
>>>> + * tests/migration/$<, edit that and then run
>>>> + * "make $@" inside tests/migration to update,
>>>> + * and then remember to send both in your patch submission.
>>>> + */
>>>> +endef
>>>> +
>>>> +all: x86-a-b-bootblock.h
>>>> +# Dummy command so that make thinks it has done something
>>>> +  @true
>>>> +
>>>> +SRC_PATH=../..
>>>> +include $(SRC_PATH)/rules.mak
>>>> +
>>>> +x86_64_cross_prefix := $(call find-cross-prefix,x86_64)
>>>> +
>>>> +x86-a-b-bootblock.h: x86-a-b-bootblock.s
>>>> +  $(x86_64_cross_prefix)as --32 -march=i486 $< -o x86.o
>>>> +  $(x86_64_cross_prefix)objcopy -O binary x86.o x86.boot
>>>> +  dd if=x86.boot of=x86.bootsect bs=256 count=2 skip=124
>>>> +  echo "$$__note" > $@
>>>> +  xxd -i x86.bootsect | sed -e 's/.*int.*//' >> $@
>>>> +
>>>> +clean:
>>>> +  rm -f *.bootsect *.boot *.o
>>>> diff --git a/tests/migration/rebuild-x86-bootblock.sh 
>>>> b/tests/migration/rebuild-x86-bootblock.sh
>>>> deleted file mode 100755
>>>> index 86cec5d284..0000000000
>>>> --- a/tests/migration/rebuild-x86-bootblock.sh
>>>> +++ /dev/null
>>>> @@ -1,33 +0,0 @@
>>>> -#!/bin/sh
>>>> -# Copyright (c) 2016-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.
>>>> -#
>>>> -# Author: dgilb...@redhat.com
>>>> -
>>>> -ASMFILE=$PWD/tests/migration/x86-a-b-bootblock.s
>>>> -HEADER=$PWD/tests/migration/x86-a-b-bootblock.h
>>>> -
>>>> -if [ ! -e "$ASMFILE" ]
>>>> -then
>>>> -  echo "Couldn't find $ASMFILE" >&2
>>>> -  exit 1
>>>> -fi
>>>> -
>>>> -ASM_WORK_DIR=$(mktemp -d --tmpdir X86BB.XXXXXX)
>>>> -cd "$ASM_WORK_DIR" &&
>>>> -as --32 -march=i486 "$ASMFILE" -o x86.o &&
>>>> -objcopy -O binary x86.o x86.boot &&
>>>> -dd if=x86.boot of=x86.bootsect bs=256 count=2 skip=124 &&
>>>> -xxd -i x86.bootsect |
>>>> -sed -e 's/.*int.*//' > x86.hex &&
>>>> -cat - x86.hex <<HERE > "$HEADER"
>>>> -/* 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.
>>>> - */
>>>> -HERE
>>>> -
>>>> -rm x86.hex x86.bootsect x86.boot x86.o
>>>> -cd .. && rmdir "$ASM_WORK_DIR"
>>>> diff --git a/tests/migration/x86-a-b-bootblock.h 
>>>> b/tests/migration/x86-a-b-bootblock.h
>>>> index 78a151fe2a..9e8e2e028b 100644
>>>> --- a/tests/migration/x86-a-b-bootblock.h
>>>> +++ b/tests/migration/x86-a-b-bootblock.h
>>>> @@ -1,6 +1,6 @@
>>>>  /* 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,
>>>> + * "make x86-a-b-bootblock.h" inside tests/migration to update,
>>>>   * and then remember to send both in your patch submission.
>>>>   */
>>>>  unsigned char x86_bootsect[] = {
>>>> diff --git a/tests/migration/x86-a-b-bootblock.s 
>>>> b/tests/migration/x86-a-b-bootblock.s
>>>> index b1642641a7..98dbfab084 100644
>>>> --- a/tests/migration/x86-a-b-bootblock.s
>>>> +++ b/tests/migration/x86-a-b-bootblock.s
>>>> @@ -3,9 +3,8 @@
>>>>  #  range.
>>>>  #  Outputs an initial 'A' on serial followed by repeated 'B's
>>>>  #
>>>> -# run   tests/migration/rebuild-x86-bootblock.sh
>>>> -#   to regenerate the hex, and remember to include both the .h and .s
>>>> -#   in any patches.
>>>> +#  In tests/migration dir, run 'make x86-a-b-bootblock.h' to regenerate
>>>> +#  the hex, and remember to include both the .h and .s in any patches.
>>>>  #
>>>>  # Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
>>>>  # This work is licensed under the terms of the GNU GPL, version 2 or 
>>>> later.
>>>> -- 
>>>> 2.14.3
>>>>
>>> --
>>> Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK
>>>
> --
> Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK
> 

Reply via email to