[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: |
Laurent Vivier |
Subject: |
Re: [Qemu-devel] [PATCH V7 1/4] rules: Move cross compilation auto detection functions to rules.mak |
Date: |
Fri, 2 Mar 2018 17:27:18 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 |
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?
Thanks,
Laurent