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: Andrew Jones
Subject: Re: [Qemu-devel] [PATCH V7 1/4] rules: Move cross compilation auto detection functions to rules.mak
Date: Mon, 5 Mar 2018 14:36:54 +0100
User-agent: Mutt/1.6.0.1 (2016-04-01)

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. 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.

Thanks,
drew



reply via email to

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