[U-Boot] [PATCH 07/30] riscv: set -march and -mabi based on the Kconfig configuration

Auer, Lukas lukas.auer at aisec.fraunhofer.de
Wed Oct 24 15:57:15 UTC 2018


Hi Bin,

On Mon, 2018-10-22 at 15:21 +0800, Bin Meng wrote:
> Hi Lukas,
> 
> On Sat, Oct 20, 2018 at 6:09 AM Lukas Auer
> <lukas.auer at aisec.fraunhofer.de> wrote:
> > 
> > Use the new Kconfig entries to construct the ISA string for the
> > -march
> > compiler flag. The -mabi compiler flag is selected based on the
> > base
> > integer instruction set.
> > 
> > With this change, the C (compressed instructions) ISA extension is
> > now
> > enabled for all boards with CONFIG_RISCV_ISA_C set. Buildman
> > reports a
> > decrease in binary size of 71590 bytes.
> > 
> > Signed-off-by: Lukas Auer <lukas.auer at aisec.fraunhofer.de>
> > ---
> > 
> >  arch/riscv/Makefile  | 13 +++++++++++++
> >  arch/riscv/config.mk |  4 ----
> >  2 files changed, 13 insertions(+), 4 deletions(-)
> > 
> > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
> > index 8fb6a889d8..6fb292d0b4 100644
> > --- a/arch/riscv/Makefile
> > +++ b/arch/riscv/Makefile
> > @@ -3,6 +3,19 @@
> >  # Copyright (C) 2017 Andes Technology Corporation.
> >  # Rick Chen, Andes Technology Corporation <rick at andestech.com>
> > 
> > +riscv-march-$(CONFIG_ARCH_RV32I)       := rv32im
> > +riscv-march-$(CONFIG_ARCH_RV64I)       := rv64im
> > +riscv-march-$(CONFIG_RISCV_ISA_A)      := $(riscv-march-y)a
> > +riscv-march-$(CONFIG_RISCV_ISA_C)      := $(riscv-march-y)c
> > +
> > +riscv-mabi-$(CONFIG_ARCH_RV64I)        := lp64
> > +riscv-mabi-$(CONFIG_ARCH_RV32I)        := ilp32
> > +
> > +arch-y := -march=$(riscv-march-y) -mabi=$(riscv-mabi-y)
> > +
> > +PLATFORM_CPPFLAGS      += $(arch-y)
> > +CFLAGS_EFI             += $(arch-y)
> > +
> 
> The concept of this patch is good. However the usage of := is a bit
> odd, since it makes people think the latter will override the former
> one, however it is not.
> 
> Can we get rid of these riscv-mach-xxx, instead using something like
> this:
> 
> ifeq ($(CONFIG_RISCV_ISA_A),y)
>         ARCH_A = a
> endif
> ifeq ($(CONFIG_RISCV_ISA_C),y)
>         ARCH_C = c
> endif
> 
> ifeq ($(CONFIG_ARCH_RV32I),y)
>         BITS = 32
>         ABI_I = i
> endif
> ifeq ($(CONFIG_ARCH_RV64I),y)
>         BITS = 64
> endif
> 
> PLATFORM_CPPFLAGS += -march=rv$(BITS)im$(ARCH_A)$(ARCH_C)
> -mabi=$(ABI_I)lp$(BITS)
> 

That makes sense. Yes I can change it to something like that. 
One small change I would do is to try and keep any constant ISA / ABI
strings (so rv and im) out of PLATFORM_CPPFLAGS to keep the
configuration more in one place. So something like this. What do you
think?

ifeq ($(CONFIG_ARCH_RV32I),y)
        ARCH_BASE = rv32im
        ABI = ilp32
endif
ifeq ($(CONFIG_ARCH_RV64I),y)
        ARCH_BASE = rv64im
        ABI = lp64
endif

PLATFORM_CPPFLAGS += -march=$(ARCH_BASE)$(ARCH_A)$(ARCH_C)
-mabi=$(ABI)

Thanks,
Lukas

> >  head-y := arch/riscv/cpu/start.o
> > 
> >  libs-y += arch/riscv/cpu/
> > diff --git a/arch/riscv/config.mk b/arch/riscv/config.mk
> > index ed9eb0c24c..9088b9ef2c 100644
> > --- a/arch/riscv/config.mk
> > +++ b/arch/riscv/config.mk
> > @@ -14,16 +14,12 @@
> >  64bit-emul             := elf64lriscv
> > 
> >  ifdef CONFIG_32BIT
> > -PLATFORM_CPPFLAGS      += -march=rv32ima -mabi=ilp32
> >  PLATFORM_LDFLAGS       += -m $(32bit-emul)
> > -CFLAGS_EFI             += -march=rv32ima -mabi=ilp32
> >  EFI_LDS                        := elf_riscv32_efi.lds
> >  endif
> > 
> >  ifdef CONFIG_64BIT
> > -PLATFORM_CPPFLAGS      += -march=rv64ima -mabi=lp64
> >  PLATFORM_LDFLAGS       += -m $(64bit-emul)
> > -CFLAGS_EFI             += -march=rv64ima -mabi=lp64
> >  EFI_LDS                        := elf_riscv64_efi.lds
> >  endif
> > 
> > --
> 
> Regards,
> Bin


More information about the U-Boot mailing list