aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Fainelli <florian@openwrt.org>2013-04-05 12:36:23 +0000
committerFlorian Fainelli <florian@openwrt.org>2013-04-05 12:36:23 +0000
commite03292226618c68f219f41d745f92172687690dd (patch)
tree30339621d48222e18d49491444ca6c9bdc3591be
parent348cae15d2934f07a6c584261c2bee49cc43bbbd (diff)
downloadupstream-e03292226618c68f219f41d745f92172687690dd.tar.gz
upstream-e03292226618c68f219f41d745f92172687690dd.tar.bz2
upstream-e03292226618c68f219f41d745f92172687690dd.zip
toolchain: allow choosing the MIPS64 user-land ABI
Signed-off-by: Florian Fainelli <florian@openwrt.org> SVN-Revision: 36205
-rw-r--r--rules.mk5
-rw-r--r--toolchain/Config.in27
-rw-r--r--toolchain/Makefile1
-rw-r--r--toolchain/gcc/common.mk3
4 files changed, 35 insertions, 1 deletions
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