toolchain: allow choosing the MIPS64 user-land ABI
authorFlorian Fainelli <florian@openwrt.org>
Fri, 5 Apr 2013 12:36:23 +0000 (12:36 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Fri, 5 Apr 2013 12:36:23 +0000 (12:36 +0000)
Signed-off-by: Florian Fainelli <florian@openwrt.org>
SVN-Revision: 36205

rules.mk
toolchain/Config.in
toolchain/Makefile
toolchain/gcc/common.mk

index d9d3837..2333f2a 100644 (file)
--- a/rules.mk
+++ b/rules.mk
@@ -73,6 +73,11 @@ endif
 ifdef CONFIG_HAS_SPE_FPU
   TARGET_SUFFIX:=$(TARGET_SUFFIX)spe
 endif
+ifdef CONFIG_MIPS64_ABI
+  ifneq ($(CONFIG_MIPS64_ABI_O32),y)
+     ARCH_SUFFIX:=$(ARCH_SUFFIX)_$(subst ",,$(CONFIG_MIPS64_ABI))
+  endif
+endif
 
 DL_DIR:=$(if $(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(TOPDIR)/dl)
 BIN_DIR:=$(TOPDIR)/bin/$(BOARD)
index 8677b87..e323640 100644 (file)
@@ -130,6 +130,25 @@ menuconfig EXTRA_TARGET_ARCH
                  both powerpc and powerpc64 binaries, you'll need to
                  specify -m64 here.
 
+
+       choice
+               prompt "MIPS64 user-land ABI" if TOOLCHAINOPTS && (mips64 || mips64el)
+               default MIPS64_ABI_N64
+               help
+                  MIPS64 supports 3 different user-land ABIs: o32 (legacy),
+                  n32 and n64.
+
+               config MIPS64_ABI_N64
+                       bool "n64"
+
+               config MIPS64_ABI_N32
+                       bool "n32"
+
+               config MIPS64_ABI_O32
+                       bool "o32"
+
+       endchoice
+
 comment "Binary tools"
        depends TOOLCHAINOPTS
 
@@ -218,3 +237,11 @@ config TARGET_SUFFIX
        default "uclibc"          if USE_UCLIBC && !(arm || armeb)
        default "muslgnueabi"     if USE_MUSL && (arm || armeb)
        default "musl"            if USE_MUSL && !(arm || armeb)
+
+config MIPS64_ABI
+       depends mips64 || mips64el
+       string
+       default "64" if MIPS64_ABI_N64
+       default "n32" if MIPS64_ABI_N32
+       default "32" if MIPS64_ABI_O32
+       default "64"
index 763381a..581d2b3 100644 (file)
@@ -64,6 +64,7 @@ ifneq ($(ARCH),)
                mkdir -p "$$dir"; \
                cd "$$dir"; \
                ln -nsf lib lib64; \
+               ln -nsf lib lib32; \
                mkdir -p stamp lib usr/include usr/lib ; \
        ); done
        @grep GCC_VERSION $@ >/dev/null 2>&1 || $(INSTALL_DATA) $(TOPDIR)/toolchain/info.mk $@
index 8305aa9..c6b9617 100644 (file)
@@ -113,7 +113,8 @@ GCC_CONFIGURE:= \
                --with-host-libstdcxx=-lstdc++ \
                $(SOFT_FLOAT_CONFIG_OPTION) \
                $(call qstrip,$(CONFIG_EXTRA_GCC_CONFIG_OPTIONS)) \
-               $(if $(CONFIG_mips64)$(CONFIG_mips64el),--with-arch=mips64 --with-abi=64) \
+               $(if $(CONFIG_mips64)$(CONFIG_mips64el),--with-arch=mips64 \
+                       --with-abi=$(subst ",,$(CONFIG_MIPS64_ABI))) \
                --with-gmp=$(TOPDIR)/staging_dir/host \
                --with-mpfr=$(TOPDIR)/staging_dir/host \
                --disable-decimal-float