qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH V7 1/4] rules: Move cross compilation auto detec


From: Wei Huang
Subject: Re: [Qemu-devel] [PATCH V7 1/4] rules: Move cross compilation auto detection functions to rules.mak
Date: Mon, 5 Mar 2018 11:59:34 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0


On 03/05/2018 07:52 AM, Dr. David Alan Gilbert wrote:
> * Andrew Jones (address@hidden) wrote:
>> On Mon, Mar 05, 2018 at 11:01:23AM +0000, Dr. David Alan Gilbert wrote:
>>> * Laurent Vivier (address@hidden) wrote:
>>>> On 28/02/2018 19:02, Wei Huang wrote:
>>>>> This patch moves the auto detection functions for cross compilation from
>>>>> roms/Makefile to rules.mak. So the functions can be shared among Makefiles
>>>>> in QEMU.
>>>>>
>>>>> Signed-off-by: Wei Huang <address@hidden>
>>>>> Reviewed-by: Andrew Jones <address@hidden>
>>>>> ---
>>>>>  roms/Makefile | 24 +++++++-----------------
>>>>>  rules.mak     | 15 +++++++++++++++
>>>>>  2 files changed, 22 insertions(+), 17 deletions(-)
>>>>>
>>>>> diff --git a/roms/Makefile b/roms/Makefile
>>>>> index b5e5a69e91..e972c65333 100644
>>>>> --- a/roms/Makefile
>>>>> +++ b/roms/Makefile
>>>>> @@ -21,23 +21,6 @@ pxe-rom-virtio   efi-rom-virtio   : DID := 1000
>>>>>  pxe-rom-vmxnet3  efi-rom-vmxnet3  : VID := 15ad
>>>>>  pxe-rom-vmxnet3  efi-rom-vmxnet3  : DID := 07b0
>>>>>  
>>>>> -#
>>>>> -# cross compiler auto detection
>>>>> -#
>>>>> -path := $(subst :, ,$(PATH))
>>>>> -system := $(shell uname -s | tr "A-Z" "a-z")
>>>>> -
>>>>> -# first find cross binutils in path
>>>>> -find-cross-ld = $(firstword $(wildcard $(patsubst 
>>>>> %,%/$(1)-*$(system)*-ld,$(path))))
>>>>> -# then check we have cross gcc too
>>>>> -find-cross-gcc = $(firstword $(wildcard $(patsubst %ld,%gcc,$(call 
>>>>> find-cross-ld,$(1)))))
>>>>> -# finally strip off path + toolname so we get the prefix
>>>>> -find-cross-prefix = $(subst gcc,,$(notdir $(call find-cross-gcc,$(1))))
>>>>> -
>>>>> -powerpc64_cross_prefix := $(call find-cross-prefix,powerpc64)
>>>>> -powerpc_cross_prefix := $(call find-cross-prefix,powerpc)
>>>>> -x86_64_cross_prefix := $(call find-cross-prefix,x86_64)
>>>>> -
>>>>>  # tag our seabios builds
>>>>>  SEABIOS_EXTRAVERSION="-prebuilt.qemu-project.org"
>>>>>  
>>>>> @@ -66,6 +49,13 @@ default:
>>>>>   @echo "  skiboot        -- update skiboot.lid"
>>>>>   @echo "  u-boot.e500    -- update u-boot.e500"
>>>>>  
>>>>> +SRC_PATH=..
>>>>> +include $(SRC_PATH)/rules.mak
>>>>> +
>>>>> +powerpc64_cross_prefix := $(call find-cross-prefix,powerpc64)
>>>>> +powerpc_cross_prefix := $(call find-cross-prefix,powerpc)
>>>>> +x86_64_cross_prefix := $(call find-cross-prefix,x86_64)
>>>>> +
>>>>>  bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k
>>>>>   cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin
>>>>>   cp seabios/builds/seabios-256k/bios.bin ../pc-bios/bios-256k.bin
>>>>> diff --git a/rules.mak b/rules.mak
>>>>> index 6e943335f3..ef8adee3f8 100644
>>>>> --- a/rules.mak
>>>>> +++ b/rules.mak
>>>>> @@ -62,6 +62,21 @@ expand-objs = $(strip $(sort $(filter %.o,$1)) \
>>>>>                    $(foreach o,$(filter %.mo,$1),$($o-objs)) \
>>>>>                    $(filter-out %.o %.mo,$1))
>>>>>  
>>>>> +# Cross compilation auto detection. Use find-cross-prefix to detect the
>>>>> +# target archtecture's prefix, and then append it to the build tool or 
>>>>> pass
>>>>> +# it to CROSS_COMPILE directly. Here is one example:
>>>>> +#      x86_64_cross_prefix := $(call find-cross-prefix,x86_64)
>>>>> +#      $(x86_64_cross_prefix)gcc -c test.c -o test.o
>>>>> +#      make -C testdir CROSS_COMPILE=$(x86_64_cross_prefix)
>>>>> +cross-search-path := $(subst :, ,$(PATH))
>>>>> +cross-host-system := $(shell uname -s | tr "A-Z" "a-z")
>>>>> +
>>>>> +find-cross-ld = $(firstword $(wildcard $(patsubst \
>>>>> +                    
>>>>> %,%/$(1)-*$(cross-host-system)*-ld,$(cross-search-path))))
>>>>> +find-cross-gcc = $(firstword $(wildcard \
>>>>> +                    $(patsubst %ld,%gcc,$(call find-cross-ld,$(1)))))
>>>>> +find-cross-prefix = $(subst gcc,,$(notdir $(call find-cross-gcc,$(1))))
>>>>> +
>>>>>  %.o: %.c
>>>>>   $(call quiet-command,$(CC) $(QEMU_LOCAL_INCLUDES) $(QEMU_INCLUDES) \
>>>>>          $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $(address@hidden) \
>>>>>
>>>>
>>>> With this patch, "make slof" fails:
>>>>
>>>>   git submodule init roms/SLOF
>>>>   git submodule update roms/SLOF
>>>>   cd roms
>>>>   make slof
>>>> ...
>>>> make[4]: Entering directory
>>>> '/home/lvivier/Projects/qemu-upstream/roms/SLOF/lib/libnvram'
>>>>    [CC]    Makefile.dep
>>>> powerpc64-linux-gnu-ar: nvram.o: No such file or directory
>>>> make[4]: *** [Makefile:31: ../libnvram.a] Error 1
>>>>
>>>> Perhaps rules.mak defines values inherited by SLOF makefiles that are
>>>> incompatible?
>>>
>>> OK, can we go back a step here; and split this series; it's trying to do
>>> two entirely different things:
>>>
>>>    a) Add an aarch64 migration test
>>>    b) Refactor some of the build stuff
>>>
>>> I'd like to see (a) posted separately, doing things approximately the same 
>>> way that
>>> the x86 ROM is doing it. 
>>
>> IMO, the makefile is the right approach.
> 
> It may be; however, for what benefit?  How many iterations have we gone
> through here for something that (in the x86 case) was shipped as a hex
> blob and never regenerated.  IMHO even the script is overkill, comments
> in the .s file would be enough given just how often this stuff gets
> changed.  Simplicity seems a better aim.
> 
>> I wouldn't like to see AArch64
>> added with a script and then converted, along with x86, to a makefile at
>> some later time (probably never).
>>
>> We can drop the build refactoring, at the expense of adding redundant
>> cross-compile support, but still introduce a makefile. Likely nobody will
>> ever get around to the refactoring needed to remove that redundancy, but
>> oh well...
>>
>> I think we try to fix the SLOF build issue first, though.
> 
> OK.

SLO build actually is OK if we don't move the cross-compile stuff to the
generic rules.mak.

So this cross-compile approach has lots of objection (unclean, broken
rom build etc.). A complete solution will make this patchset bloated,
which is diverted away from original purpose of migration-test.

Dave & Drew: will the following be acceptable?

1. Still use Makefile for .s->.h compilation
2. In Makefile, we don't support cross-compilation. This avoids
duplicating the cross-compile detection code at all. Whoever really
wants to re-generate .h file must be avid programmers. They can either
find a native machine or fix Makefile themselves.
3. The cross-compile re-factoring will become a separate patchset. In
that patchset, both ROM and migration-test Makefiles will be changed to
support cross compilation.

Thoughts?

> 
> Dave
> 
>> Thanks,
>> drew
> --
> Dr. David Alan Gilbert / address@hidden / Manchester, UK
> 



reply via email to

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