Re: Bug#708143: mips64 and mips64el support without multilib

YunQiang Su <[email protected]>
Newsgroups gmane.linux.debian.ports.mips
Message-ID <CAKcpw6V2=On3=nTBcRzt_DE=Fv91Gn8=N88BZtM5hpz_TUf5-g@mail.gmail.com>
I refreshed this patch to add multilib support for mips64(el) and mipsn32(el)

The mips* ask for o32 libraries to be put in /lib and /usr/lib, which
make the change to
debian/rules2 a little longer.

With this package gcc-4.8 can build successfully on amd64, mipsel and mips64el.

Besides the mips64(el) and mipsn32(el) support, I add support of
DEB_BUILD_OPTIONS=nocheck support.

On Wed, May 15, 2013 at 10:57 AM, YunQiang Su <[email protected]> wrote:
> On Tue, May 14, 2013 at 11:16 PM, Matthias Klose <[email protected]> wrote:
>> Am 13.05.2013 15:37, schrieb YunQiang Su:
>>> Package: gcc-4.8
>>>
>>> We are working on mips64(el) port.
>>> The support of these architectures are finished, while multilib is still to do.
>>>
>>> This is the patch.
>>
>> You are introducing a new configuration, separate from the existing mips64
>> configurations.  Could you explain why?  And you keep the same multiarch name
> My fault, I will merge them.
>> for both configurations. How do the new mips64 targets and the existing mips64
>> multilib relate to each other?
> I will support multilib finally.
> As my understand, the multilib-less is a step to the multilib support. Is it?
> I am very not sure.
>>
>>   Matthias
>>
>
>
>
> --
> YunQiang Su



-- 
YunQiang Su
mips64.diff (application/octet-stream, 25.9 KB)
diff --git a/debian/lib32gfortran3.symbols.mips64 b/debian/lib32gfortran3.symbols.mips64
new file mode 100644
index 0000000..c1908ee
--- /dev/null
+++ b/debian/lib32gfortran3.symbols.mips64
@@ -0,0 +1,2 @@
+libgfortran.so.3 lib32gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
diff --git a/debian/lib32gfortran3.symbols.mips64el b/debian/lib32gfortran3.symbols.mips64el
new file mode 100644
index 0000000..c1908ee
--- /dev/null
+++ b/debian/lib32gfortran3.symbols.mips64el
@@ -0,0 +1,2 @@
+libgfortran.so.3 lib32gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
diff --git a/debian/lib32gfortran3.symbols.mipsn32 b/debian/lib32gfortran3.symbols.mipsn32
new file mode 100644
index 0000000..c1908ee
--- /dev/null
+++ b/debian/lib32gfortran3.symbols.mipsn32
@@ -0,0 +1,2 @@
+libgfortran.so.3 lib32gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
diff --git a/debian/lib32gfortran3.symbols.mipsn32el b/debian/lib32gfortran3.symbols.mipsn32el
new file mode 100644
index 0000000..c1908ee
--- /dev/null
+++ b/debian/lib32gfortran3.symbols.mipsn32el
@@ -0,0 +1,2 @@
+libgfortran.so.3 lib32gfortran3 #MINVER#
+#include "libgfortran3.symbols.common"
diff --git a/debian/patches/gcc-multiarch.diff b/debian/patches/gcc-multiarch.diff
index 9048349..acf2225 100644
--- a/debian/patches/gcc-multiarch.diff
+++ b/debian/patches/gcc-multiarch.diff
@@ -2,39 +2,39 @@
 # DP: - Add MULTIARCH_DIRNAME definitions for multilib configurations,
 # DP:   which are used for the non-multilib builds.
 
-Index: b/src/gcc/config/sh/t-linux
+Index: gcc-4.8/src/gcc/config/sh/t-linux
 ===================================================================
---- a/src/gcc/config/sh/t-linux
-+++ b/src/gcc/config/sh/t-linux
+--- gcc-4.8.orig/src/gcc/config/sh/t-linux	2013-06-13 18:10:03.963383948 +0800
++++ gcc-4.8/src/gcc/config/sh/t-linux	2013-06-13 18:10:03.947383947 +0800
 @@ -1,2 +1,4 @@
  MULTILIB_DIRNAMES= 
  MULTILIB_MATCHES = 
 +
 +MULTILIB_OSDIRNAMES = sh4-linux-gnu:sh4-linux-gnu sh4_nofpu-linux-gnu:sh4-linux-gnu
-Index: b/src/gcc/config/sparc/t-linux64
+Index: gcc-4.8/src/gcc/config/sparc/t-linux64
 ===================================================================
---- a/src/gcc/config/sparc/t-linux64
-+++ b/src/gcc/config/sparc/t-linux64
+--- gcc-4.8.orig/src/gcc/config/sparc/t-linux64	2013-06-13 18:10:03.963383948 +0800
++++ gcc-4.8/src/gcc/config/sparc/t-linux64	2013-06-13 18:10:03.947383947 +0800
 @@ -27,3 +27,5 @@
  MULTILIB_DIRNAMES = 64 32
  MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:sparc64-linux-gnu)
  MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:sparc-linux-gnu)
 +
 +MULTIARCH_DIRNAME = $(call if_multiarch,sparc$(if $(findstring 64,$(target)),64)-linux-gnu)
-Index: b/src/gcc/config/s390/t-linux64
+Index: gcc-4.8/src/gcc/config/s390/t-linux64
 ===================================================================
---- a/src/gcc/config/s390/t-linux64
-+++ b/src/gcc/config/s390/t-linux64
+--- gcc-4.8.orig/src/gcc/config/s390/t-linux64	2013-06-13 18:10:03.963383948 +0800
++++ gcc-4.8/src/gcc/config/s390/t-linux64	2013-06-13 18:10:03.951383947 +0800
 @@ -9,3 +9,5 @@
  MULTILIB_DIRNAMES = 64 32
  MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu)
  MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu)
 +
 +MULTIARCH_DIRNAME = $(call if_multiarch,s390$(if $(findstring s390x,$(target)),x)-linux-gnu)
-Index: b/src/gcc/config/rs6000/t-linux
+Index: gcc-4.8/src/gcc/config/rs6000/t-linux
 ===================================================================
---- a/src/gcc/config/rs6000/t-linux
-+++ b/src/gcc/config/rs6000/t-linux
+--- gcc-4.8.orig/src/gcc/config/rs6000/t-linux	2013-06-13 18:10:03.963383948 +0800
++++ gcc-4.8/src/gcc/config/rs6000/t-linux	2013-06-13 18:10:03.951383947 +0800
 @@ -2,7 +2,7 @@
  # or soft-float.
  ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float)))
@@ -44,20 +44,20 @@ Index: b/src/gcc/config/rs6000/t-linux
  else
  MULTIARCH_DIRNAME = powerpc-linux-gnu
  endif
-Index: b/src/gcc/config/rs6000/t-linux64
+Index: gcc-4.8/src/gcc/config/rs6000/t-linux64
 ===================================================================
---- a/src/gcc/config/rs6000/t-linux64
-+++ b/src/gcc/config/rs6000/t-linux64
+--- gcc-4.8.orig/src/gcc/config/rs6000/t-linux64	2013-06-13 18:10:03.963383948 +0800
++++ gcc-4.8/src/gcc/config/rs6000/t-linux64	2013-06-13 18:10:03.951383947 +0800
 @@ -30,3 +30,5 @@
  MULTILIB_EXTRA_OPTS     = fPIC
  MULTILIB_OSDIRNAMES	= ../lib64$(call if_multiarch,:powerpc64-linux-gnu)
  MULTILIB_OSDIRNAMES    += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
 +
 +MULTIARCH_DIRNAME = $(call if_multiarch,powerpc$(if $(findstring 64,$(target)),64)-linux-gnu)
-Index: b/src/gcc/config/i386/t-linux64
+Index: gcc-4.8/src/gcc/config/i386/t-linux64
 ===================================================================
---- a/src/gcc/config/i386/t-linux64
-+++ b/src/gcc/config/i386/t-linux64
+--- gcc-4.8.orig/src/gcc/config/i386/t-linux64	2013-06-13 18:10:03.963383948 +0800
++++ gcc-4.8/src/gcc/config/i386/t-linux64	2013-06-13 18:10:03.951383947 +0800
 @@ -36,3 +36,13 @@
  MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
  MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu)
@@ -72,10 +72,10 @@ Index: b/src/gcc/config/i386/t-linux64
 +else
 +  MULTIARCH_DIRNAME = $(call if_multiarch,i386-linux-gnu)
 +endif
-Index: b/src/gcc/config/i386/t-kfreebsd
+Index: gcc-4.8/src/gcc/config/i386/t-kfreebsd
 ===================================================================
---- a/src/gcc/config/i386/t-kfreebsd
-+++ b/src/gcc/config/i386/t-kfreebsd
+--- gcc-4.8.orig/src/gcc/config/i386/t-kfreebsd	2013-06-13 18:10:03.963383948 +0800
++++ gcc-4.8/src/gcc/config/i386/t-kfreebsd	2013-06-13 18:10:03.951383947 +0800
 @@ -1,5 +1,9 @@
 -MULTIARCH_DIRNAME = $(call if_multiarch,i386-kfreebsd-gnu)
 +ifeq (,$(MULTIARCH_DIRNAME))
@@ -87,29 +87,24 @@ Index: b/src/gcc/config/i386/t-kfreebsd
  MULTILIB_OSDIRNAMES := $(filter-out mx32=%,$(subst linux,$(KFREEBSD_OS),$(MULTILIB_OSDIRNAMES)))
 +
 +MULTIARCH_DIRNAME := $(subst linux,$(KFREEBSD_OS),$(MULTIARCH_DIRNAME))
-Index: b/src/gcc/config/mips/t-linux64
+Index: gcc-4.8/src/gcc/config.gcc
 ===================================================================
---- a/src/gcc/config/mips/t-linux64
-+++ b/src/gcc/config/mips/t-linux64
-@@ -24,3 +24,13 @@
- 	../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
- 	../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
- 	../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
-+
-+ifneq (,$(findstring abin32,$(target)))
-+MULTIARCH_DIRNAME = $(call if_multiarch,mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT))
-+else
-+ifneq (,$(findstring abi64,$(target)))
-+MULTIARCH_DIRNAME = $(call if_multiarch,mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
-+else
-+MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT))
-+endif
-+endif
-Index: b/src/gcc/config.gcc
-===================================================================
---- a/src/gcc/config.gcc
-+++ b/src/gcc/config.gcc
-@@ -3703,7 +3703,7 @@
+--- gcc-4.8.orig/src/gcc/config.gcc	2013-06-13 18:10:03.963383948 +0800
++++ gcc-4.8/src/gcc/config.gcc	2013-06-13 18:10:03.955383948 +0800
+@@ -1797,8 +1797,11 @@
+ mips64*-*-linux* | mipsisa64*-*-linux*)
+ 	tm_file="dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/gnu-user64.h mips/linux64.h mips/linux-common.h"
+ 	tmake_file="${tmake_file} mips/t-linux64"
+-	tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_N32"
++	tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_64"
+ 	case ${target} in
++		*gnuabin32*)
++			tm_defines=$(echo ${tm_defines}| sed 's/MIPS_ABI_DEFAULT=ABI_64/MIPS_ABI_DEFAULT=ABI_N32/g')
++			;;
+ 		mips64el-st-linux-gnu)
+ 			tm_file="${tm_file} mips/st.h"
+ 			tmake_file="${tmake_file} mips/t-st"
+@@ -3703,7 +3706,7 @@
  	i[34567]86-*-darwin* | x86_64-*-darwin*)
  		;;
  	i[34567]86-*-linux* | x86_64-*-linux*)
@@ -118,8 +113,10 @@ Index: b/src/gcc/config.gcc
  		;;
  	i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu)
  		tmake_file="$tmake_file i386/t-kfreebsd"
---- a/src/gcc/java/jvspec.c
-+++ b/src/gcc/java/jvspec.c
+Index: gcc-4.8/src/gcc/java/jvspec.c
+===================================================================
+--- gcc-4.8.orig/src/gcc/java/jvspec.c	2013-06-13 18:10:03.963383948 +0800
++++ gcc-4.8/src/gcc/java/jvspec.c	2013-06-13 18:10:03.955383948 +0800
 @@ -59,7 +59,7 @@
    "jvgenmain %{findirect-dispatch} %{D*} %b %m.i |\n\
     cc1 %m.i %1 \
diff --git a/debian/patches/gcc-multilib-multiarch.diff b/debian/patches/gcc-multilib-multiarch.diff
index 725ec61..6905575 100644
--- a/debian/patches/gcc-multilib-multiarch.diff
+++ b/debian/patches/gcc-multilib-multiarch.diff
@@ -1,9 +1,9 @@
 # DP: Don't auto-detect multilib osdirnames.
 
-Index: b/src/gcc/config/sparc/t-linux64
+Index: gcc-4.8/src/gcc/config/sparc/t-linux64
 ===================================================================
---- a/src/gcc/config/sparc/t-linux64
-+++ b/src/gcc/config/sparc/t-linux64
+--- gcc-4.8.orig/src/gcc/config/sparc/t-linux64	2013-06-25 23:30:09.396115210 +0800
++++ gcc-4.8/src/gcc/config/sparc/t-linux64	2013-06-25 23:30:09.388115209 +0800
 @@ -25,7 +25,12 @@
  
  MULTILIB_OPTIONS = m64/m32
@@ -18,10 +18,10 @@ Index: b/src/gcc/config/sparc/t-linux64
 +endif
  
  MULTIARCH_DIRNAME = $(call if_multiarch,sparc$(if $(findstring 64,$(target)),64)-linux-gnu)
-Index: b/src/gcc/config/s390/t-linux64
+Index: gcc-4.8/src/gcc/config/s390/t-linux64
 ===================================================================
---- a/src/gcc/config/s390/t-linux64
-+++ b/src/gcc/config/s390/t-linux64
+--- gcc-4.8.orig/src/gcc/config/s390/t-linux64	2013-06-25 23:30:09.396115210 +0800
++++ gcc-4.8/src/gcc/config/s390/t-linux64	2013-06-25 23:30:09.388115209 +0800
 @@ -7,7 +7,12 @@
  
  MULTILIB_OPTIONS = m64/m31
@@ -36,10 +36,10 @@ Index: b/src/gcc/config/s390/t-linux64
 +endif
  
  MULTIARCH_DIRNAME = $(call if_multiarch,s390$(if $(findstring s390x,$(target)),x)-linux-gnu)
-Index: b/src/gcc/config/rs6000/t-linux64
+Index: gcc-4.8/src/gcc/config/rs6000/t-linux64
 ===================================================================
---- a/src/gcc/config/rs6000/t-linux64
-+++ b/src/gcc/config/rs6000/t-linux64
+--- gcc-4.8.orig/src/gcc/config/rs6000/t-linux64	2013-06-25 23:30:09.396115210 +0800
++++ gcc-4.8/src/gcc/config/rs6000/t-linux64	2013-06-25 23:30:09.388115209 +0800
 @@ -28,7 +28,12 @@
  MULTILIB_OPTIONS        = m64/m32
  MULTILIB_DIRNAMES       = 64 32
@@ -54,10 +54,10 @@ Index: b/src/gcc/config/rs6000/t-linux64
 +endif
  
  MULTIARCH_DIRNAME = $(call if_multiarch,powerpc$(if $(findstring 64,$(target)),64)-linux-gnu)
-Index: b/src/gcc/config/i386/t-linux64
+Index: gcc-4.8/src/gcc/config/i386/t-linux64
 ===================================================================
---- a/src/gcc/config/i386/t-linux64
-+++ b/src/gcc/config/i386/t-linux64
+--- gcc-4.8.orig/src/gcc/config/i386/t-linux64	2013-06-25 23:30:09.396115210 +0800
++++ gcc-4.8/src/gcc/config/i386/t-linux64	2013-06-25 23:30:09.388115209 +0800
 @@ -33,9 +33,19 @@
  comma=,
  MULTILIB_OPTIONS    = $(subst $(comma),/,$(TM_MULTILIB_CONFIG))
@@ -79,13 +79,45 @@ Index: b/src/gcc/config/i386/t-linux64
  
  ifneq (,$(findstring x86_64,$(target)))
    ifneq (,$(findstring biarchx32.h,$(tm_include_list)))
-Index: gcc/config/aarch64/t-aarch64-linux
+Index: gcc-4.8/src/gcc/config/aarch64/t-aarch64-linux
 ===================================================================
---- a/src/gcc/config/aarch64/t-aarch64-linux	(revision 196661)
-+++ b/src/gcc/config/aarch64/t-aarch64-linux	(working copy)
+--- gcc-4.8.orig/src/gcc/config/aarch64/t-aarch64-linux	2013-06-25 23:30:09.396115210 +0800
++++ gcc-4.8/src/gcc/config/aarch64/t-aarch64-linux	2013-06-25 23:30:09.388115209 +0800
 @@ -22,4 +22,4 @@
  LIB1ASMFUNCS = _aarch64_sync_cache_range
  
  AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be)
 -MULTILIB_OSDIRNAMES = .=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
 +MULTILIB_OSDIRNAMES = .=../lib$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
+Index: gcc-4.8/src/gcc/config/mips/t-linux64
+===================================================================
+--- gcc-4.8.orig/src/gcc/config/mips/t-linux64	2013-06-25 23:30:09.396115210 +0800
++++ gcc-4.8/src/gcc/config/mips/t-linux64	2013-06-25 23:41:41.304134509 +0800
+@@ -20,7 +20,27 @@
+ MULTILIB_DIRNAMES = n32 32 64
+ MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
+ MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft)
++
++ifneq (,$(findstring gnuabi64,$(target)))
++MULTILIB_OSDIRNAMES = \
++	../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
++	../libo32$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
++	../lib$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
++else ifneq (,$(findstring gnuabin32,$(target)))
++	../lib$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
++	../libo32$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
++	../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
++else
+ MULTILIB_OSDIRNAMES = \
+ 	../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
+ 	../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
+ 	../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
++endif
++
++ifneq (,$(findstring gnuabi64,$(target)))
++  MULTIARCH_DIRNAME = $(call if_multiarch,mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
++else ifneq (,$(findstring gnuabin32,$(target)))
++  MULTIARCH_DIRNAME = $(call if_multiarch,mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT))
++else
++  MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT))
++endif
diff --git a/debian/rules.conf b/debian/rules.conf
index 3f10e6b..6feb09f 100644
--- a/debian/rules.conf
+++ b/debian/rules.conf
@@ -263,6 +263,8 @@ LIBC_BIARCH_DEV_DEP :=
 ifneq (,$(findstring yes,$(biarch64) $(biarch32) $(biarchn32) $(biarchx32)$(biarchhf)$(biarchsf)))
   LIBC_BIARCH_DEP := $${shlibs:Depends}
   LIBC_BIARCH_DEV_DEP := $(LIBC_DEV_DEP)-$(biarch_deb_arch)$(LS)$(AQ) (>= $(libc_ver))
+  # x86_64, x32, i386
+  ifneq (,$(findstring $(DEB_TARGET_ARCH),x86_64 x32 i386))
   ifeq ($(biarch64)$(biarch32),yesyes)
     LIBC_BIARCH_DEV_DEP := $(LIBC_DEV_DEP)-amd64$(LS)$(AQ) (>= $(libc_ver)), $(LIBC_DEV_DEP)-i386$(LS)$(AQ) (>= $(libc_ver))
   endif
@@ -272,15 +274,22 @@ ifneq (,$(findstring yes,$(biarch64) $(biarch32) $(biarchn32) $(biarchx32)$(biar
   ifeq ($(biarch32)$(biarchx32),yesyes)
     LIBC_BIARCH_DEV_DEP := $(LIBC_DEV_DEP)-i386$(LS)$(AQ) (>= $(libc_ver)), $(LIBC_DEV_DEP)-x32$(LS)$(AQ) (>= $(libc_ver))
   endif
-  ifeq ($(biarchn32),yes)
-    ifneq (,$(findstring $(DEB_TARGET_ARCH),mips mipsel))
-      triarch :=
-      ifeq ($(biarch64),yes)
-        triarch := $(COMMA)$(SPACE)
-      endif
-      LIBC_BIARCH_DEV_DEP += $(triarch)libc6-dev-mipsn32$(LS)$(AQ) (>= $(libc_ver))
-    endif
   endif
+  # mips*
+  ifneq (,$(findstring $(DEB_TARGET_ARCH),mips mipsel mipsn32 mipsn32el mips64 mips64el))
+  ifeq ($(biarchn32)$(biarch32),yesyes)
+      LIBC_BIARCH_DEV_DEP := libc6-dev-mips32$(LS)$(AQ) (>= $(libc_ver)), libc6-dev-mipsn32$(LS)$(AQ) (>= $(libc_ver))
+  endif
+  ifeq ($(biarch64)$(biarch32),yesyes)
+      triarch := $(COMMA)$(SPACE)
+      LIBC_BIARCH_DEV_DEP := libc6-dev-mips32$(LS)$(AQ) (>= $(libc_ver)), libc6-dev-mips64$(LS)$(AQ) (>= $(libc_ver))
+  endif
+  ifeq ($(biarchn32)$(biarch64),yesyes)
+      triarch := $(COMMA)$(SPACE)
+      LIBC_BIARCH_DEV_DEP := libc6-dev-mips64$(LS)$(AQ) (>= $(libc_ver)), libc6-dev-mipsn32$(LS)$(AQ) (>= $(libc_ver))
+  endif
+  endif
+
   ifeq ($(biarchhf),yes)
     LIBC_BIARCH_DEP := $(LIBC_DEP)-$(biarch_deb_arch)$(LS)$(AQ) (>= $(libc_ver))
     LIBC_BIARCH_DEP += | $(LIBC_DEP)-$(biarch_deb_arch)$(LS)$(AQ)
diff --git a/debian/rules.d/binary-go.mk b/debian/rules.d/binary-go.mk
index 6f3da92..ed6a4c5 100644
--- a/debian/rules.d/binary-go.mk
+++ b/debian/rules.d/binary-go.mk
@@ -168,13 +168,12 @@ $(binary_stamp)-gccgo: $(install_stamp)
 		$(d)/$(gcc_lib_dir)/64/; \
 	fi
 	if [ -f $(d)/$(usr_lib32)/libgobegin.a ]; then \
-	  if [ -d $(d)/$(gcc_lib_dir)/32 ]; then \
 	    mv $(d)/$(usr_lib32)/libgobegin.a \
 		$(d)/$(gcc_lib_dir)/32/; \
-	  else \
-	    mv $(d)/$(usr_lib32)/libgobegin.a \
+	fi
+	if [ -f $(d)/$(usr_libn32)/libgobegin.a ]; then \
+	    mv $(d)/$(usr_libn32)/libgobegin.a \
 		$(d)/$(gcc_lib_dir)/n32/; \
-	  fi; \
 	fi
 	if [ -f $(d)/$(usr_libx32)/libgobegin.a ]; then \
 	    mv $(d)/$(usr_libx32)/libgobegin.a \
diff --git a/debian/rules.d/binary-libstdcxx.mk b/debian/rules.d/binary-libstdcxx.mk
index f910a6a..95a3c36 100644
--- a/debian/rules.d/binary-libstdcxx.mk
+++ b/debian/rules.d/binary-libstdcxx.mk
@@ -236,7 +236,8 @@ define __do_libstdcxx_dbg
 	)
 
 	$(if $(filter yes,$(with_debug)),
-		mv $(d)/$(usr_lib$(2))/debug $(d_d)/$(usr_lib$(2))/.;
+		mkdir -p $(d_d)/$(usr_lib$(2))/debug;
+		mv $(d)/$(usr_lib$(2))/debug/libstdc++* $(d_d)/$(usr_lib$(2))/debug;
 		rm -f $(d_d)/$(usr_lib$(2))/debug/libstdc++_pic.a
 	)
 
diff --git a/debian/rules.defs b/debian/rules.defs
index 68cee74..bbede4d 100644
--- a/debian/rules.defs
+++ b/debian/rules.defs
@@ -371,6 +371,10 @@ multiarch_xarch_map = \
 	s390x=s390-linux-gnu \
 	mips=mips64-linux-gnuabin32,mips64-linux-gnuabi64 \
 	mipsel=mips64el-linux-gnuabin32,mips64el-linux-gnuabi64 \
+	mipsn32=mips-linux-gnu,mips64-linux-gnuabi64 \
+	mipsn32el=mipsel-linux-gnu,mips64el-linux-gnuabi64 \
+	mips64=mips-linux-gnu,mips64-linux-gnuabin32 \
+	mips64el=mipsel-linux-gnu,mips64el-linux-gnuabin32 \
 	x32=x86_64-linux-gnu,i386-linux-gnu \
 	kfreebsd-amd64=i386-kfreebsd-gnu
 xarch_multiarch_names = $(subst $(COMMA),$(SPACE),$(patsubst $(DEB_TARGET_ARCH)=%,%, \
@@ -394,6 +398,14 @@ multilib_multiarch_map = \
 	mips/64=mips64-linux-gnuabi64 \
 	mipsel/n32=mips64el-linux-gnuabin32 \
 	mipsel/64=mips64el-linux-gnuabi64 \
+	mipsn32/32=mips-linux-gnu \
+	mipsn32/64=mips64-linux-gnuabi64 \
+	mipsn32el/32=mipsel-linux-gnu \
+	mipsn32el/64=mips64el-linux-gnuabi64 \
+	mips64/32=mips-linux-gnu \
+	mips64/n32=mips64-linux-gnuabin32 \
+	mips64el/32=mipsel-linux-gnu \
+	mips64el/n32=mips64el-linux-gnuabin32 \
 	x32/32=i386-linux-gnu \
 	x32/64=x86_64-linux-gnu \
 	kfreebsd-amd64/32=i386-kfreebsd-gnu
@@ -627,7 +639,7 @@ with_java_plugin := no
 
 ifeq ($(with_java),yes)
   # use the same names as OpenJDK
-  java_cpu_map = armel=arm armhf=arm hppa=parisc i686=i386 i586=i386 i486=i386 mipsel=mips powerpc=ppc sh4=sh
+  java_cpu_map = armel=arm armhf=arm hppa=parisc i686=i386 i586=i386 i486=i386 mipsel=mips mips64=mips mips64el=mips mipsn32=mips mipsn32el=mips powerpc=ppc sh4=sh
   java_cpu = $(patsubst $(DEB_TARGET_ARCH_CPU)=%,%, \
                          $(filter $(DEB_TARGET_ARCH_CPU)=%,$(java_cpu_map)))
   ifeq (,$(java_cpu))
@@ -782,7 +794,7 @@ ifeq ($(with_d),yes)
     with_libphobos := yes
   endif
 
-  libphobos_no_cpus := alpha avr arm arm64 hppa ia64 m68k mips mipsel powerpc powerpcspe ppc64 s390 s390x sh4 sparc sparc64
+  libphobos_no_cpus := alpha avr arm arm64 hppa ia64 m68k mips mipsel mips64 mips64el mipsn32 mipsn32el powerpc powerpcspe ppc64 s390 s390x sh4 sparc sparc64
   libphobos_no_systems := gnu kfreebsd-gnu
   ifneq (,$(findstring $(DEB_TARGET_ARCH_CPU),$(libphobos_no_cpus)))
     with_libphobos := disabled for cpu $(DEB_TARGET_ARCH_CPU)
@@ -1150,6 +1162,9 @@ endif
 with_check := yes
 # if you don't want to run the gcc testsuite, uncomment the next line
 #with_check := disabled by hand
+ifneq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
+  with_check := disabled by DEB_BUILD_OPTIONS
+endif
 ifeq ($(with_base_only),yes)
   with_check := no
 endif
@@ -1197,7 +1212,7 @@ export debian_extra_langs
 
 # multilib
 biarch_map := i686=x86_64 powerpc=powerpc64 sparc=sparc64 s390=s390x s390x=s390 \
-		x86_64=i686 powerpc64=powerpc mips=mips64 mipsel=mips64el
+		x86_64=i686 powerpc64=powerpc mips=mips64 mipsel=mips64el mips64=mips mips64el=mipsel mipsn32=mips mipsn32el=mipsel
 ifeq (,$(filter $(distrelease),lenny etch squeeze wheezy sid dapper hardy jaunty karmic lucid))
   biarch_map := $(subst i686=,i486=,$(biarch_map))
 endif
@@ -1318,9 +1333,9 @@ define gen_biarch
     export TARGET64_MACHINE
   endif
 endef
-biarch32archs := /amd64/ppc64/kfreebsd-amd64/s390x/x32/
-biarch64archs := /i386/powerpc/sparc/s390/mips/mipsel/x32/
-biarchn32archs := /mips/mipsel/
+biarch32archs := /amd64/ppc64/kfreebsd-amd64/s390x/x32/mipsn32/mipsn32el/mips64/mips64el/
+biarch64archs := /i386/powerpc/sparc/s390/mips/mipsel/mipsn32/mipsn32el/x32/
+biarchn32archs := /mips/mipsel/mips64/mips64el/
 ifeq ($(distribution),Ubuntu)
   ifeq (,$(filter $(distrelease),dapper hardy jaunty karmic lucid maverick natty))
     biarchhfarchs := /armel/
@@ -1669,7 +1684,7 @@ shlibdirs_to_search = -l$(subst $(SPACE),:,$(foreach d,$(_shlibdirs),$(d)))
 
 # native ... 
 
-ifneq (,$(filter $(DEB_TARGET_ARCH), mips mipsel))
+ifneq (,$(filter $(DEB_TARGET_ARCH), mips mipsel mips64 mips64el mipsn32 mipsn32el))
   ifneq ($(with_deps_on_target_arch_pkgs),yes)
     define cross_mangle_control
 	$(if $(findstring 64,$(1)),sed -i -r '/^(Dep|Rec|Sug)/s/[a-z0-9-]+32[^$(COMMA)]+($(COMMA) *|$$)//g;/^(Dep|Rec|Sug)/s/$(p_lgcc)/$(p_l64gcc)/;/^(Dep|Rec|Sug)/s/ *$(COMMA) *$$//' debian/$(1)/DEBIAN/control,@:)
diff --git a/debian/rules2 b/debian/rules2
index f9c2f1c..788798b 100644
--- a/debian/rules2
+++ b/debian/rules2
@@ -511,6 +511,51 @@ ifneq (,$(findstring mipsel-linux,$(DEB_TARGET_GNU_TYPE)))
   endif
 endif
 
+#FIXME: howto for mipsn32?
+ifneq (,$(findstring mips64el-linux-gnuabin32,$(DEB_TARGET_GNU_TYPE)))
+  CONFARGS += --with-mips-plt
+  ifeq ($(multilib),yes)
+    ifeq ($(biarchn32)-$(biarch32),yes-yes)
+      CONFARGS += --enable-targets=all
+      CONFARGS += --with-arch-64=mips64r2 --with-tune-64=loongson3a
+      CONFARGS += --with-arch-32=mips32 --with-tune-32=mips32r2
+    endif
+  endif
+endif
+
+ifneq (,$(findstring mips64-linux-gnuabin32,$(DEB_TARGET_GNU_TYPE)))
+  CONFARGS += --with-mips-plt
+  ifeq ($(multilib),yes)
+    ifeq ($(biarchn32)-$(biarch32),yes-yes)
+      CONFARGS += --enable-targets=all
+      CONFARGS += --with-arch-64=mips64r2 --with-tune-64=octeon+
+      CONFARGS += --with-arch-32=mips32 --with-tune-32=mips32r2
+    endif
+  endif
+endif
+
+ifneq (,$(findstring mips64el-linux-gnuabi64,$(DEB_TARGET_GNU_TYPE)))
+  CONFARGS += --with-mips-plt
+  CONFARGS += --with-arch-64=mips64r2 --with-tune-64=loongson3a
+  ifeq ($(multilib),yes)
+    ifeq ($(biarchn32)-$(biarch32),yes-yes)
+      CONFARGS += --enable-targets=all
+      CONFARGS += --with-arch-32=mips2 --with-tune-32=mips32
+    endif
+  endif
+endif
+
+ifneq (,$(findstring mips64-linux-gnuabi64,$(DEB_TARGET_GNU_TYPE)))
+  CONFARGS += --with-mips-plt
+  CONFARGS += --with-arch-64=mips64r2 --with-tune-64=octeon+
+  ifeq ($(multilib),yes)
+    ifeq ($(biarchn32)-$(biarch32),yes-yes)
+      CONFARGS += --enable-targets=all
+      CONFARGS += --with-arch-32=mips2 --with-tune-32=mips32
+    endif
+  endif
+endif
+
 ifneq (,$(findstring s390-linux,$(DEB_TARGET_GNU_TYPE)))
   ifeq ($(multilib),yes)
     ifeq ($(biarch64),yes)
@@ -737,10 +782,18 @@ ifneq ($(single_package),yes)
   endif
 endif
 
-gcc_lib_dir	= $(PF)/$(configured_libdir)/$(gcc_subdir_name)/$(TARGET_ALIAS)/$(versiondir)
+#FIXME: hardcode $(PF)/lib/gcc, is it a problem?
+gcc_lib_dir	= $(PF)/lib/$(gcc_subdir_name)/$(TARGET_ALIAS)/$(versiondir)
+gcc_lexec_dir	= $(PF)/lib/$(gcc_subdir_name)/$(TARGET_ALIAS)/$(versiondir)
+ifeq ($(single_package),yes)
 gcc_lexec_dir	= $(libexecdir)/$(gcc_subdir_name)/$(TARGET_ALIAS)/$(versiondir)
+endif
 
-lib32		= $(PF)/lib32
+lib32loc 	= lib32
+ifneq (,$(findstring mips,$(DEB_TARGET_GNU_TYPE)))
+lib32loc	= lib
+endif
+lib32		= $(PF)/$(lib32loc)
 lib64		= lib64
 libn32		= lib32
 libx32		= libx32
@@ -764,7 +817,7 @@ ifeq ($(DEB_CROSS),yes)
 else
   usr_lib = $(PFL)/$(libdir)
 endif
-usr_lib32 = $(PFL)/lib32
+usr_lib32 = $(PFL)/$(lib32loc)
 usr_libn32 = $(PFL)/lib32
 usr_libx32 = $(PFL)/libx32
 usr_lib64 = $(PFL)/lib64
@@ -782,7 +835,7 @@ gcc_lib_dirsf = $(gcc_lib_dir)/$(biarchsfsubdir)
 
 libgcc_dir = $(RPF)/$(libdir)
 # yes, really; lib32gcc_s ends up in usr
-libgcc_dir32 = $(PFL)/lib32
+libgcc_dir32 = $(PFL)/$(lib32loc)
 libgcc_dirn32 = $(RPF)/lib32
 # libx32gcc_s also ends up in usr
 libgcc_dirx32 = $(PFL)/libx32
@@ -865,6 +918,8 @@ endif
 	@echo "Install prefix: /$(PF)"
 ifeq ($(biarchn32)-$(biarch64),yes-yes)
 	@echo "Will build the triarch compilers (o32/n32/64, defaulting to o32)"
+else ifeq ($(biarchn32)-$(biarch32),yes-yes)
+	@echo "Will build the triarch compilers (o32/n32/64, defaulting to 64)"
 else ifeq ($(biarch64)-$(biarch32),yes-yes)
 	@echo "Will build the triarch compilers (x32/64/32, defaulting to x32)"
 else ifeq ($(biarch64)-$(biarchx32),yes-yes)
@@ -1839,7 +1894,7 @@ ifeq ($(with_hppa64),yes)
 	    esac; \
 	  done
 endif
-
+	
 	: # Work around PR lto/41569
 	ln -sf gcc $(builddir)/prev-gcc
 	ln -sf $(DEB_TARGET_GNU_TYPE) $(builddir)/prev-$(DEB_TARGET_GNU_TYPE)
@@ -1872,13 +1927,6 @@ endif
 	    esac; \
 	  done
 
-ifneq ($(configured_libdir),$(libdir))
-	for i in debug go pkgconfig '*.so' '*.so.*' '*.a' '*.la' '*.py' '*.spec'; do \
-	  mv $(d)/$(PF)/$(configured_libdir)/$$i \
-		$(d)/$(PF)/$(libdir)/. || true; \
-	done
-endif
-
 # FIXME: libjava/classpath not correctly patched
 ifeq ($(with_java),yes)
 	-if [ -d $(d)/$(PF)/lib/gcj-$(GCC_VERSION)-$(GCJ_SONAME) ]; then \
@@ -1925,7 +1973,7 @@ $(install_stamp): $(build_stamp)
 	rm -rf $(d)
 	mkdir -p $(d)/$(libdir) $(d)/$(PF) $(d)/$(PF)/$(libdir)/debug
 ifeq ($(biarch32),yes)
-	mkdir -p $(d)/$(PF)/lib32/debug
+	mkdir -p $(d)/$(PF)/$(lib32loc)/debug
 endif
 ifeq ($(biarch64),yes)
 	mkdir -p $(d)/$(PF)/lib64/debug
@@ -1971,6 +2019,8 @@ ifneq ($(configured_libdir),$(libdir))
 	for i in debug go pkgconfig '*.so' '*.so.*' '*.a' '*.la' '*.o' '*.py' '*.spec'; do \
 	  mv $(d)/$(PF)/$(configured_libdir)/$$i \
 		$(d)/$(PF)/$(libdir)/. || true; \
+	  mv $(d)/$(PF)/libo32/$$i \
+		$(d)/$(PF)/lib/. || true; \
 	done
 endif
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.