[Pkg-openmpi-maintainers] Bug#489173: Bug#489173: Support for mips/mipsel

Dirk Eddelbuettel edd at debian.org
Thu Jul 3 18:36:14 UTC 2008


On 3 July 2008 at 19:01, Thiemo Seufer wrote:
| Package: openmpi
| Version: 1.2.7~rc2-1
| Tags: patch
| Severity: wishlist
| 
| I believe the appended patch is sufficient to add Linux/MIPS support
| to openmpi (for both the mips and mipsel variants). That said, I wasn't

That would be great as would reduce the number of non-supported arches from
three to two!  And Mips is a nice-to-have as there are some compute blades
based on it if I recall.

| able to build and test it, due to some libtool-induced trouble:
| 
| - With just this patch, ./libtool gets triggered and falls over an
|   undefined CDPATH variable:
| 
| [...]
| Making all in asm
| make[3]: Entering directory `/srv/ths/debian/openmpi/openmpi-1.2.7~rc2/opal/asm'
| depbase=`echo asm.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
| 	/bin/sh ../../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I../../opal/include -I../../orte/include -I../../ompi/include   -I../..    -DNDEBUG -Wall -g -O2 -finline-functions -fno-strict-aliasing -pthread -MT asm.lo -MD -MP -MF $depbase.Tpo -c -o asm.lo asm.c &&\
| 	mv -f $depbase.Tpo $depbase.Plo
| ../../libtool: line 463: CDPATH: command not found
| ../../libtool: line 1266: func_opt_split: command not found
| libtool: Version mismatch error.  This is libtool 2.1a, but the
| libtool: definition of this LT_INIT comes from an older release.
| libtool: You should recreate aclocal.m4 with macros from libtool 2.1a
| libtool: and run autoconf again.
| make[3]: *** [asm.lo] Error 63
| make[3]: Leaving directory `/srv/ths/debian/openmpi/openmpi-1.2.7~rc2/opal/asm'
| make[2]: *** [all-recursive] Error 1
| make[2]: Leaving directory `/srv/ths/debian/openmpi/openmpi-1.2.7~rc2/opal'
| make[1]: *** [all-recursive] Error 1
| make[1]: Leaving directory `/srv/ths/debian/openmpi/openmpi-1.2.7~rc2'
| make: *** [build] Error 2
| dpkg-buildpackage: failure: debian/rules build gave error exit status 2
| 
| 
| - The native approach of re-libtoolizing broke down in opal/libltdl,
|   which does some special libtool handling I couldn't figure out.

Ok, let me pass this on to Tim and Jeff, our two trusted contacts upstream.
Maybe we turn this around in one or two iterations if they can pass it on to
whoever is the libtool wizard.

I presume you have access to Mips hardware to run some tests re the libtool
issues, and in general?

Cheers, Dirk
 
 
| Thiemo
| 
| 
| Index: openmpi-1.2.7~rc2/config/ompi_config_asm.m4
| ===================================================================
| --- openmpi-1.2.7~rc2.orig/config/ompi_config_asm.m4	2007-12-06 20:20:58.000000000 +0000
| +++ openmpi-1.2.7~rc2/config/ompi_config_asm.m4	2008-07-03 18:21:34.000000000 +0100
| @@ -873,6 +873,18 @@
|              OMPI_GCC_INLINE_ASSIGN='"bis [$]31,[$]31,%0" : "=&r"(ret)'
|              ;;
|  
| +        mips64*-linux-*)
| +            ompi_cv_asm_arch="MIPS"
| +            OMPI_ASM_SUPPORT_64BIT=1
| +            OMPI_GCC_INLINE_ASSIGN='"or %0,[$]0,[$]0" : "=&r"(ret)'
| +            ;;
| +
| +        mips*-linux-*)
| +            ompi_cv_asm_arch="MIPS"
| +            OMPI_ASM_SUPPORT_64BIT=0
| +            OMPI_GCC_INLINE_ASSIGN='"or %0,[$]0,[$]0" : "=&r"(ret)'
| +            ;;
| +
|          mips-*|mips64-*)
|              # Should really find some way to make sure that we are on
|              # a MIPS III machine (r4000 and later)
| Index: openmpi-1.2.7~rc2/debian/control
| ===================================================================
| --- openmpi-1.2.7~rc2.orig/debian/control	2008-07-03 18:21:22.000000000 +0100
| +++ openmpi-1.2.7~rc2/debian/control	2008-07-03 18:21:34.000000000 +0100
| @@ -12,7 +12,7 @@
|  XS-Dm-Upload-Allowed: yes
|  
|  Package: openmpi-bin
| -Architecture: alpha amd64 i386 ia64 powerpc ppc64 sparc kfreebsd-i386 kfreebsd-amd64 hurd-i386
| +Architecture: alpha amd64 i386 ia64 powerpc ppc64 sparc kfreebsd-i386 kfreebsd-amd64 hurd-i386 mips mipsel
|  Depends: ${shlibs:Depends}, ${misc:Depends}, openmpi-common (= ${source:Version})
|  Suggests: gfortran
|  Description: high performance message passing library -- binaries
| @@ -40,7 +40,7 @@
|  
|  Package: libopenmpi-dev
|  Section: libdevel
| -Architecture: alpha amd64 i386 ia64 powerpc ppc64 sparc kfreebsd-i386 kfreebsd-amd64 hurd-i386
| +Architecture: alpha amd64 i386 ia64 powerpc ppc64 sparc kfreebsd-i386 kfreebsd-amd64 hurd-i386 mips mipsel
|  Depends: ${shlibs:Depends}, libopenmpi1 (= ${binary:Version}), openmpi-common (= ${source:Version})
|  Conflicts: libopal-dev, pgapack (<= 1.0.0.1-4.2), openmpi-dev
|  Replaces: openmpi-dev, openmpi-bin (<= 1.2.4-0)
| @@ -57,7 +57,7 @@
|  
|  Package: libopenmpi1
|  Section: libs
| -Architecture: alpha amd64 i386 ia64 powerpc ppc64 sparc kfreebsd-i386 kfreebsd-amd64 hurd-i386
| +Architecture: alpha amd64 i386 ia64 powerpc ppc64 sparc kfreebsd-i386 kfreebsd-amd64 hurd-i386 mips mipsel
|  Depends: ${shlibs:Depends}, ${misc:Depends}
|  Conflicts: openmpi-libs0
|  Replaces: openmpi-libs0
| @@ -100,7 +100,7 @@
|  
|  Package: libopenmpi-dbg
|  Section: devel
| -Architecture: alpha amd64 i386 ia64 powerpc ppc64 sparc kfreebsd-i386 kfreebsd-amd64 hurd-i386
| +Architecture: alpha amd64 i386 ia64 powerpc ppc64 sparc kfreebsd-i386 kfreebsd-amd64 hurd-i386 mips mipsel
|  Depends: openmpi-bin (= ${binary:Version}), libopenmpi1 (= ${binary:Version})
|  Conflicts: openmpi-dbg
|  Replaces: openmpi-dbg
| Index: openmpi-1.2.7~rc2/opal/asm/asm-data.txt
| ===================================================================
| --- openmpi-1.2.7~rc2.orig/opal/asm/asm-data.txt	2006-11-09 18:53:28.000000000 +0000
| +++ openmpi-1.2.7~rc2/opal/asm/asm-data.txt	2008-07-03 18:21:34.000000000 +0100
| @@ -126,3 +126,7 @@
|  # means that we can use the same code either way.  Woo hoo!
|  
|  MIPS	default-.text-.globl-:--L--1-1-1-1-0	mips-irix
| +MIPS	default-.text-.globl-:--L- at -1-1-1-1-1	mips64-linux
| +
| +# However, this doesn't hold true for 32-bit MIPS as used on Linux.
| +MIPS	default-.text-.globl-:--L- at -1-1-1-0-1	mips-linux
| Index: openmpi-1.2.7~rc2/opal/include/opal/sys/mips/atomic.h
| ===================================================================
| --- openmpi-1.2.7~rc2.orig/opal/include/opal/sys/mips/atomic.h	2006-08-15 21:13:38.000000000 +0100
| +++ openmpi-1.2.7~rc2/opal/include/opal/sys/mips/atomic.h	2008-07-03 18:21:34.000000000 +0100
| @@ -23,10 +23,17 @@
|  #if OMPI_WANT_SMP_LOCKS
|  
|  /* BWB - FIX ME! */
| +#ifdef __linux__
| +#define MB() __asm__ __volatile__(".set mips2; sync; .set mips0": : :"memory")
| +#define RMB() __asm__ __volatile__(".set mips2; sync; .set mips0": : :"memory")
| +#define WMB() __asm__ __volatile__(".set mips2; sync; .set mips0": : :"memory")
| +#define SMP_SYNC ".set mips2; sync; .set mips0"
| +#else
|  #define MB() __asm__ __volatile__("sync": : :"memory")
|  #define RMB() __asm__ __volatile__("sync": : :"memory")
|  #define WMB() __asm__ __volatile__("sync": : :"memory")
|  #define SMP_SYNC "sync"
| +#endif
|  
|  #else
|  
| @@ -46,8 +53,10 @@
|  #define OPAL_HAVE_ATOMIC_MEM_BARRIER 1
|  
|  #define OPAL_HAVE_ATOMIC_CMPSET_32 1
| -#define OPAL_HAVE_ATOMIC_CMPSET_64 1
|  
| +#ifdef __mips64
| +#define OPAL_HAVE_ATOMIC_CMPSET_64 1
| +#endif
|  
|  /**********************************************************************
|   *
| @@ -92,16 +101,23 @@
|      int32_t tmp;
|  
|     __asm__ __volatile__ ("\t"
| -                         ".set noreorder        \n"
| -                         "1:                \n\t"
| -                         "ll     %0, %2         \n\t" /* load *addr into ret */
| -                         "bne    %0, %3, 2f   \n\t" /* done if oldval != ret */
| -                         "or     %5, %4, 0      \n\t" /* ret = newval */
| -                         "sc     %5, %2         \n\t" /* store ret in *addr */
| +                         ".set noreorder     \n"
| +                         "1:                 \n\t"
| +#ifdef __linux__
| +                         ".set mips2         \n\t"
| +#endif
| +                         "ll     %0, %2      \n\t" /* load *addr into ret */
| +                         "bne    %0, %3, 2f  \n\t" /* done if oldval != ret */
| +                         "or     %5, %4, 0   \n\t" /* ret = newval */
| +                         "sc     %5, %2      \n\t" /* store ret in *addr */
| +#ifdef __linux__
| +                         ".set mips0         \n\t"
| +#endif
|                           /* note: ret will be 0 if failed, 1 if succeeded */
|  			 "bne    %5, 1, 1b   \n\t"
| +			 "nop                \n"
|                           "2:                 \n\t"
| -                         ".set reorder          \n"
| +                         ".set reorder       \n"
|                           : "=&r"(ret), "=m"(*addr)
|                           : "m"(*addr), "r"(oldval), "r"(newval), "r"(tmp)
|                           : "cc", "memory");
| @@ -133,7 +149,7 @@
|      return opal_atomic_cmpset_32(addr, oldval, newval);
|  }
|  
| -
| +#ifdef OPAL_HAVE_ATOMIC_CMPSET_64
|  static inline int opal_atomic_cmpset_64(volatile int64_t *addr,
|                                          int64_t oldval, int64_t newval)
|  {
| @@ -141,16 +157,17 @@
|      int64_t tmp;
|  
|     __asm__ __volatile__ ("\t"
| -                         ".set noreorder        \n"
| -                         "1:                \n\t"
| -                         "lld    %0, %2         \n\t" /* load *addr into ret */
| -                         "bne    %0, %3, 2f   \n\t" /* done if oldval != ret */
| -                         "or     %5, %4, 0      \n\t" /* tmp = newval */
| -                         "scd    %5, %2         \n\t" /* store tmp in *addr */
| +                         ".set noreorder     \n"
| +                         "1:                 \n\t"
| +                         "lld    %0, %2      \n\t" /* load *addr into ret */
| +                         "bne    %0, %3, 2f  \n\t" /* done if oldval != ret */
| +                         "or     %5, %4, 0   \n\t" /* tmp = newval */
| +                         "scd    %5, %2      \n\t" /* store tmp in *addr */
|                           /* note: ret will be 0 if failed, 1 if succeeded */
| -			 "bne    %5, 1, 1b   \n"
| +			 "bne    %5, 1, 1b   \n\t"
| +			 "nop                \n"
|                           "2:                 \n\t"
| -                         ".set reorder          \n"
| +                         ".set reorder       \n"
|                           : "=&r" (ret), "=m" (*addr)
|                           : "m" (*addr), "r" (oldval), "r" (newval),
|  			   "r"(tmp)
| @@ -183,6 +200,7 @@
|      opal_atomic_wmb();
|      return opal_atomic_cmpset_64(addr, oldval, newval);
|  }
| +#endif /* OPAL_HAVE_ATOMIC_CMPSET_64 */
|  
|  #endif /* OMPI_GCC_INLINE_ASSEMBLY */
|  
| Index: openmpi-1.2.7~rc2/opal/asm/base/MIPS.asm
| ===================================================================
| --- openmpi-1.2.7~rc2.orig/opal/asm/base/MIPS.asm	2006-08-15 21:13:33.000000000 +0100
| +++ openmpi-1.2.7~rc2/opal/asm/base/MIPS.asm	2008-07-03 18:21:34.000000000 +0100
| @@ -1,26 +1,48 @@
|  START_FILE
|  
| +#ifdef __linux__
| +#include <sys/asm.h>
| +#else
|  #include <asm.h>
| +#endif
|  #include <regdef.h>
|  	
|  	TEXT
|  
|  	ALIGN(8)
|  LEAF(opal_atomic_mb)
| -	sync
| +#ifdef __linux__
| +	.set mips2
| +#endif
| +	sync
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  	j	ra
|  END(opal_atomic_mb)
|  
|  	
|  	ALIGN(8)
|  LEAF(opal_atomic_rmb)
| -	sync
| +#ifdef __linux__
| +	.set mips2
| +#endif
| +	sync
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  	j	ra
|  END(opal_atomic_rmb)
|  	
|  	
|  LEAF(opal_atomic_wmb)
| -	sync
| +#ifdef __linux__
| +	.set mips2
| +#endif
| +	sync
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  	j	ra
|  END(opal_atomic_wmb)
|  
| @@ -28,10 +50,22 @@
|  LEAF(opal_atomic_cmpset_32)
|  	.set noreorder        
|  retry1:                
| +#ifdef __linux__
| +	.set mips2
| +#endif
|  	ll     $3, 0($4)         
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  	bne    $3, $5, done1   
|  	or     $2, $6, 0      
| +#ifdef __linux__
| +	.set mips2
| +#endif
|  	sc     $2, 0($4)         
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  	bne    $2, 1, retry1
|  done1:                 
|  	.set reorder          
| @@ -45,13 +79,31 @@
|  LEAF(opal_atomic_cmpset_acq_32)
|  	.set noreorder        
|  retry2:                
| +#ifdef __linux__
| +	.set mips2
| +#endif
|  	ll     $3, 0($4)         
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  	bne    $3, $5, done2   
|  	or     $2, $6, 0      
| +#ifdef __linux__
| +	.set mips2
| +#endif
|  	sc     $2, 0($4)         
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  	bne    $2, 1, retry2   
|  done2:                 
| -	sync
| +#ifdef __linux__
| +	.set mips2
| +#endif
| +	sync
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  	.set reorder          
|  
|  	xor	$3,$3,$5
| @@ -62,12 +114,30 @@
|  	
|  LEAF(opal_atomic_cmpset_rel_32)
|  	.set noreorder        
| -	sync
| +#ifdef __linux__
| +	.set mips2
| +#endif
| +	sync
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  retry3:                
| +#ifdef __linux__
| +	.set mips2
| +#endif
|  	ll     $3, 0($4)         
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  	bne    $3, $5, done3   
|  	or     $2, $6, 0      
| +#ifdef __linux__
| +	.set mips2
| +#endif
|  	sc     $2, 0($4)         
| +#ifdef __linux__
| +	.set mips0
| +#endif
|  	bne    $2, 1, retry3   
|  done3:                 
|  	.set reorder          
| @@ -76,8 +146,8 @@
|  	j	ra
|  	sltu	$2,$3,1
|  END(opal_atomic_cmpset_rel_32)
| -	
| -	
| +
| +#ifdef __mips64
|  LEAF(opal_atomic_cmpset_64)
|  		.set noreorder        
|  retry4:                
| @@ -128,3 +198,4 @@
|  	j	ra
|  	sltu	$3,$4,1
|  END(opal_atomic_cmpset_rel_64)
| +#endif /* __mips64 */
| Index: openmpi-1.2.7~rc2/debian/rules
| ===================================================================
| --- openmpi-1.2.7~rc2.orig/debian/rules	2008-07-03 18:21:22.000000000 +0100
| +++ openmpi-1.2.7~rc2/debian/rules	2008-07-03 18:21:34.000000000 +0100
| @@ -28,7 +28,7 @@
|  
|  config.status: #patch-stamp
|  	dh_testdir
| -	CFLAGS="$(CFLAGS)" ./configure 				\
| +	CFLAGS="$(CFLAGS)" CCASFLAGS="-xassembler-with-cpp" ./configure \
|  			$(CROSS)				\
|  			--prefix=/usr 				\
|  			--mandir=\$${prefix}/share/man 		\
| 
| 
| 
| _______________________________________________
| Pkg-openmpi-maintainers mailing list
| Pkg-openmpi-maintainers at lists.alioth.debian.org
| http://lists.alioth.debian.org/mailman/listinfo/pkg-openmpi-maintainers

-- 
Three out of two people have difficulties with fractions.






More information about the Pkg-openmpi-maintainers mailing list