From f335e5894fc9cd8087ba8d48e33708fe70630229 Mon Sep 17 00:00:00 2001
From: florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Fri, 5 Apr 2013 12:36:23 +0000
Subject: [PATCH] toolchain: allow choosing the MIPS64 user-land ABI

Signed-off-by: Florian Fainelli <florian@openwrt.org>

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36205 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 rules.mk                |  5 +++++
 toolchain/Config.in     | 27 +++++++++++++++++++++++++++
 toolchain/Makefile      |  1 +
 toolchain/gcc/common.mk |  3 ++-
 4 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/rules.mk b/rules.mk
index d9d38374fa..2333f2aaf5 100644
--- 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)
diff --git a/toolchain/Config.in b/toolchain/Config.in
index 8677b87e7e..e32364095b 100644
--- a/toolchain/Config.in
+++ b/toolchain/Config.in
@@ -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"
diff --git a/toolchain/Makefile b/toolchain/Makefile
index 763381a838..581d2b3c60 100644
--- a/toolchain/Makefile
+++ b/toolchain/Makefile
@@ -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 $@
diff --git a/toolchain/gcc/common.mk b/toolchain/gcc/common.mk
index 8305aa9fc1..c6b961735c 100644
--- a/toolchain/gcc/common.mk
+++ b/toolchain/gcc/common.mk
@@ -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
-- 
GitLab