[Buildroot] [PATCH] Clarify MIPS ABIs support

Arnout Vandecappelle arnout at mind.be
Wed Jul 25 17:32:26 UTC 2012


On 07/24/12 22:47, Thomas Petazzoni wrote:
> So, this commit reworks the Buildroot MIPS support by:
>
>   * Renaming the n32 ABI option to BR2_MIPS_NABI32, for consistency
>     with BR2_MIPS_OABI32.
>
>   * Renaming the n64 ABI option to BR2_MIPS_NABI64, for consistency
>     with BR2_MIPS_OABI32.
>
>   * Make the n32 and n64 ABI selections select the BR2_ARCH_IS_64,
>     since those ABIs are valid on 64-bits CPUs only.

  As far as I understand, the situation is a bit similar to PCs, where
i386 and x86_64 are in fact quite different even at instruction set
level.  So wouldn't it make more sense to distinguish mips and mips64
at the 'Target Architecture' level?  Then mips would always select
o32, and the ABI choice would only exist for mips64.  And there
would be a 1-to-1 mapping between BR2_ARCH and the user choice,
which makes more sense to me.

  It would require a bit of research to find out which sub-architectures
are 64-bit, of course.


>   * Removing the o64 ABI, which is practicaly never used.
>
>   * Removing the "none" ABI, which really doesn't make sense.
>
>   * Introduce the mips64 and mips64el architecture names when a 64-bits
>     MIPS ABI is choosen. This will fix build issue like
>     http://autobuild.buildroot.org/results/9b8c5ea86c953a89e85e7b67e9221de41773f652/build-end.log
>     where gmp was confused by the fact of having a 32 bits architecture
>     (detected by the mips- architecture part of the tuple) but 64 bits
>     integer size when compiling.
>
>   * Adjust the uclibc.mk logic to support the new mips64/mips64el
>     architecture names, and take into account the renaming of the ABI
>     options.
>
> This has been build tested by generating Buildroot toolchains and
> compiling a few packages for MIPS o32, MIPS n32 and MIPS n64.
>
> This work is originally based on prior work done by Gustavo Zacarias.
>
> Signed-off-by: Thomas Petazzoni<thomas.petazzoni at free-electrons.com>
> ---
>   package/Makefile.in        |    2 +-
>   target/Config.in.arch      |   28 +++++++++++-----------------
>   toolchain/uClibc/uclibc.mk |    9 ++++++---
>   3 files changed, 18 insertions(+), 21 deletions(-)
>
> diff --git a/package/Makefile.in b/package/Makefile.in
> index 6fad224..21b8634 100644
> --- a/package/Makefile.in
> +++ b/package/Makefile.in
> @@ -87,7 +87,7 @@ endif
>
>   TARGET_CFLAGS=$(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
>
> -ifeq ($(findstring yy,$(BR2_mips)$(BR2_MIPS_ABI64)),yy)
> +ifeq ($(findstring yy,$(BR2_mips)$(BR2_MIPS_NABI64)),yy)

  Any reason why this isn't just

ifeq ($(BR2_MIPS_NABI64),y)

>   TARGET_CFLAGS+=-fno-pic -mno-abicalls
>   endif
>
> diff --git a/target/Config.in.arch b/target/Config.in.arch
> index e7aec56..0ef59ef 100644
> --- a/target/Config.in.arch
> +++ b/target/Config.in.arch
> @@ -271,26 +271,20 @@ choice
>   	prompt "Target ABI"
>   	depends on BR2_mips || BR2_mipsel
>   	default BR2_MIPS_OABI32 if BR_mips_32 || BR_mips_32r2
> -	default BR2_MIPS_ABI32 if BR_mips_64 || BR_mips_64r2
> +	default BR2_MIPS_NABI32 if BR_mips_64 || BR_mips_64r2
>   	help
>   	  Application Binary Interface to use
>
>   config BR2_MIPS_OABI32
>   	bool "o32"
> -config BR2_MIPS_ABI32
> +config BR2_MIPS_NABI32
>   	bool "n32"
> +	select BR2_ARCH_IS_64
>   	depends on BR2_mips_3 || BR2_mips_4 || BR2_mips_64 || BR2_mips_64r2 || BR2_mips_16
> -config BR2_MIPS_ABI64
> +config BR2_MIPS_NABI64
>   	bool "n64"
> +	select BR2_ARCH_IS_64
>   	depends on BR2_mips_3 || BR2_mips_4 || BR2_mips_64 || BR2_mips_64r2 || BR2_mips_16
> -config BR2_MIPS_OABI64
> -	bool "o64"
> -	depends on BR2_mips_3 || BR2_mips_4 || BR2_mips_64 || BR2_mips_64r2 || BR2_mips_16
> -config BR2_MIPS_ABI_none
> -	bool "unspecified"
> -	depends on BR2_mips_16
> -	help
> -	  Unspecified ABI leaves ABI selection blank.
>   endchoice
>
>   choice
> @@ -688,8 +682,10 @@ config BR2_ARCH
>   	default "i686"		if BR2_x86_athlon_4
>   	default "m68k"		if BR2_m68k
>   	default "microblaze"	if BR2_microblaze
> -	default "mips"		if BR2_mips
> -	default "mipsel"	if BR2_mipsel
> +	default "mips"		if BR2_mips&&  !BR2_ARCH_IS_64
> +	default "mipsel"	if BR2_mipsel&&  !BR2_ARCH_IS_64
> +	default "mips64"	if BR2_mips&&  BR2_ARCH_IS_64
> +	default "mips64el"	if BR2_mipsel&&  BR2_ARCH_IS_64
>   	default "powerpc"	if BR2_powerpc
>   	default "sh2"		if BR2_sh2
>   	default "sh2a"		if BR2_sh2a
> @@ -904,10 +900,8 @@ config BR2_GCC_TARGET_ABI
>   	default aapcs		if BR2_arm_dunno
>   	default aapcs-linux	if BR2_ARM_EABI
>   	default 32		if BR2_MIPS_OABI32
> -	default n32		if BR2_MIPS_ABI32
> -	default eabi		if BR2_MIPS_EABI
> -	default o64		if BR2_MIPS_OABI64
> -	default 64		if BR2_MIPS_ABI64
> +	default n32		if BR2_MIPS_NABI32
> +	default 64		if BR2_MIPS_NABI64
>   	default mmixware	if BR2_mmix &&  BR2_MMIX_ABI_native
>   	default gnu		if BR2_mmix &&  !BR2_MMIX_ABI_native

  Unrelated, but what is this BR2_mmix?

>   	default altivec		if BR2_powerpc&&  BR2_PPC_ABI_altivec
> diff --git a/toolchain/uClibc/uclibc.mk b/toolchain/uClibc/uclibc.mk
> index 9d0b6db..aff0a60 100644
> --- a/toolchain/uClibc/uclibc.mk
> +++ b/toolchain/uClibc/uclibc.mk
> @@ -38,6 +38,7 @@ UCLIBC_TARGET_ARCH:=$(shell $(SHELL) -c "echo $(ARCH) | sed \
>   		-e 's/sh[234].*/sh/' \
>   		-e 's/mips.*/mips/' \
>   		-e 's/mipsel.*/mips/' \
> +		-e 's/mips64el.*/mips/' \

  This one is already covered by the mips.* expression.  Actually,
so is the mipsel.* one.


  Regards,
  Arnout


>   		-e 's/cris.*/cris/' \
>   		-e 's/xtensa.*/xtensa/' \
>   ")
> @@ -45,6 +46,8 @@ UCLIBC_TARGET_ARCH:=$(shell $(SHELL) -c "echo $(ARCH) | sed \
>   UCLIBC_TARGET_ENDIAN:=$(shell $(SHELL) -c "echo $(ARCH) | sed \
>   		-e 's/armeb/BIG/' \
>   		-e 's/arm/LITTLE/' \
> +		-e 's/mips64el/LITTLE/' \
> +		-e 's/mips64/BIG/' \
>   		-e 's/mipsel/LITTLE/' \
>   		-e 's/mips/BIG/' \
>   		-e 's/sh.*eb/BIG/' \
> @@ -155,13 +158,13 @@ ifeq ($(UCLIBC_TARGET_ARCH),mips)
>   	 /bin/echo "# CONFIG_MIPS_ISA_MIPS32R2 is not set"; \
>   	 /bin/echo "# CONFIG_MIPS_ISA_MIPS64 is not set"; \
>   	)>>  $(UCLIBC_DIR)/.oldconfig
> -ifeq ($(BR2_MIPS_OABI),y)
> +ifeq ($(BR2_MIPS_OABI32),y)
>   	$(SED) 's/.*\(CONFIG_MIPS_O32_ABI\).*/\1=y/' $(UCLIBC_DIR)/.oldconfig
>   endif
> -ifeq ($(BR2_MIPS_ABI32),y)
> +ifeq ($(BR2_MIPS_NABI32),y)
>   	$(SED) 's/.*\(CONFIG_MIPS_N32_ABI\).*/\1=y/' $(UCLIBC_DIR)/.oldconfig
>   endif
> -ifeq ($(BR2_MIPS_ABI64),y)
> +ifeq ($(BR2_MIPS_NABI64),y)
>   	$(SED) 's/.*\(CONFIG_MIPS_N64_ABI\).*/\1=y/' $(UCLIBC_DIR)/.oldconfig
>   endif
>   ifeq ($(BR2_mips_1),y)

-- 
Arnout Vandecappelle                               arnout at mind be
Senior Embedded Software Architect                 +32-16-286540
Essensium/Mind                                     http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium                BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F



More information about the buildroot mailing list