Source: openmpi
Severity: important
Tags: patch

This is a backport from Ubuntu bug #438433, that enables openmpi to build
on arm ports (both armel and armhf build properly with this patch).

https://bugs.launchpad.net/ubuntu/+source/openmpi/+bug/438433

Please add armel/armhf support in the next version.

Regards

Konstantinos

-- System Information:
Debian Release: squeeze/sid
Architecture: armhf (armv7l)

Kernel: Linux 2.6.31.14-efikamx (PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -ruN openmpi-1.4.3/debian/control openmpi-1.4.3.armhf//debian/control
--- openmpi-1.4.3/debian/control	2011-02-18 19:18:37.000000000 +0200
+++ openmpi-1.4.3.armhf//debian/control	2011-03-11 12:50:59.577299110 +0200
@@ -4,15 +4,15 @@
 Homepage: http://www.open-mpi.org/
 Maintainer: Debian Open MPI Maintainers <pkg-openmpi-maintain...@lists.alioth.debian.org>
 Uploaders: Manuel Prinz <man...@debian.org>, Sylvestre Ledru <sylves...@debian.org>
-Build-Depends: debhelper (>= 5.0.0), libibverbs-dev (>= 1.1.1) [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], gfortran, gcc (>= 4:4.1.2), chrpath, quilt, libcr-dev [amd64 armel i386 powerpc], libnuma-dev [amd64 i386 ia64 mips mipsel powerpc], autoconf (>= 2.59), automake1.10, libtool, libltdl-dev, libtorque2-dev
+Build-Depends: debhelper (>= 5.0.0), libibverbs-dev (>= 1.1.1) [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], gfortran, gcc (>= 4:4.1.2), chrpath, quilt, libcr-dev [amd64 armel armhf i386 powerpc], libnuma-dev [amd64 i386 ia64 mips mipsel powerpc], autoconf (>= 2.59), automake1.10, libtool, libltdl-dev, libtorque2-dev
 Standards-Version: 3.9.1
 Vcs-Svn: svn://svn.debian.org/svn/pkg-openmpi/openmpi/trunk/
 Vcs-Browser: http://svn.debian.org/wsvn/pkg-openmpi/openmpi/trunk/
 
 Package: openmpi-bin
-Architecture: alpha amd64 i386 ia64 powerpc powerpcspe ppc64 sparc sparc64 kfreebsd-i386 kfreebsd-amd64 hurd-i386
+Architecture: alpha amd64 armel armhf i386 ia64 powerpc powerpcspe ppc64 sparc sparc64 kfreebsd-i386 kfreebsd-amd64 hurd-i386
 Depends: ${shlibs:Depends}, ${misc:Depends}, openmpi-common (= ${source:Version})
-Recommends: openmpi-checkpoint [ amd64 armel i386 powerpc ]
+Recommends: openmpi-checkpoint [ amd64 armel armhf i386 powerpc ]
 Suggests: gfortran
 Description: high performance message passing library -- binaries
  Open MPI is a project combining technologies and resources from several other
@@ -39,7 +39,7 @@
 
 Package: libopenmpi-dev
 Section: libdevel
-Architecture: alpha amd64 i386 ia64 powerpc powerpcspe ppc64 sparc sparc64 kfreebsd-i386 kfreebsd-amd64 hurd-i386
+Architecture: alpha amd64 armel armhf i386 ia64 powerpc powerpcspe ppc64 sparc sparc64 kfreebsd-i386 kfreebsd-amd64 hurd-i386
 Depends: ${shlibs:Depends}, ${misc:Depends}, libopenmpi1.3 (= ${binary:Version}), openmpi-common (= ${source:Version}), libibverbs-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386]
 Conflicts: openmpi-dev
 Replaces: openmpi-dev, openmpi-bin (<= 1.2.4-0)
@@ -56,7 +56,7 @@
 
 Package: libopenmpi1.3
 Section: libs
-Architecture: alpha amd64 i386 ia64 powerpc powerpcspe ppc64 sparc sparc64 kfreebsd-i386 kfreebsd-amd64 hurd-i386
+Architecture: alpha amd64 armel armhf i386 ia64 powerpc powerpcspe ppc64 sparc sparc64 kfreebsd-i386 kfreebsd-amd64 hurd-i386
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Conflicts: openmpi-libs0, libopenmpi1
 Replaces: openmpi-libs0, libopenmpi1
@@ -101,7 +101,7 @@
 
 Package: libopenmpi-dbg
 Section: debug
-Architecture: alpha amd64 i386 ia64 powerpc powerpcspe ppc64 sparc sparc64 kfreebsd-i386 kfreebsd-amd64 hurd-i386
+Architecture: alpha amd64 armel armhf i386 ia64 powerpc powerpcspe ppc64 sparc sparc64 kfreebsd-i386 kfreebsd-amd64 hurd-i386
 Depends: ${misc:Depends}, openmpi-bin (= ${binary:Version}), libopenmpi1.3 (= ${binary:Version})
 Conflicts: openmpi-dbg
 Replaces: openmpi-dbg
@@ -116,7 +116,7 @@
  This package contains debugging symbols for Open MPI.
 
 Package: openmpi-checkpoint
-Architecture: amd64 armel i386 powerpc
+Architecture: amd64 armel armhf i386 powerpc
 Depends: ${shlibs:Depends}, ${misc:Depends}, openmpi-bin (= ${binary:Version}), blcr-util
 Description: high performance message passing library -- checkpoint support
  Open MPI is a project combining technologies and resources from several other
diff -ruN openmpi-1.4.3/debian/libopenmpi1.3.links openmpi-1.4.3.armhf//debian/libopenmpi1.3.links
--- openmpi-1.4.3/debian/libopenmpi1.3.links	2011-02-18 19:18:37.000000000 +0200
+++ openmpi-1.4.3.armhf//debian/libopenmpi1.3.links	2011-02-18 12:47:57.395050883 +0200
@@ -4,13 +4,13 @@
 usr/lib/openmpi/lib/libopenmpi_malloc.so.0.0.0  usr/lib/libopenmpi_malloc.so.0.0.0
 usr/lib/openmpi/lib/libmpi.so.0.0.2             usr/lib/libmpi.so.0.0.2
 usr/lib/openmpi/lib/libmpi_cxx.so.0.0.1         usr/lib/libmpi_cxx.so.0.0.1
-usr/lib/openmpi/lib/libmpi_f77.so.0.0.0         usr/lib/libmpi_f77.so.0.0.0
-usr/lib/openmpi/lib/libmpi_f90.so.0.0.0         usr/lib/libmpi_f90.so.0.0.0
+usr/lib/openmpi/lib/libmpi_f77.so.0.0.1         usr/lib/libmpi_f77.so.0.0.1
+usr/lib/openmpi/lib/libmpi_f90.so.0.0.1         usr/lib/libmpi_f90.so.0.0.1
 usr/lib/libmca_common_sm.so.1.0.0               usr/lib/libmca_common_sm.so.1
 usr/lib/libopen-pal.so.0.0.0                    usr/lib/libopen-pal.so.0
 usr/lib/libopen-rte.so.0.0.0                    usr/lib/libopen-rte.so.0
 usr/lib/libopenmpi_malloc.so.0.0.0              usr/lib/libopenmpi_malloc.so.0
 usr/lib/libmpi.so.0.0.2                         usr/lib/libmpi.so.0
 usr/lib/libmpi_cxx.so.0.0.1                     usr/lib/libmpi_cxx.so.0
-usr/lib/libmpi_f77.so.0.0.0                     usr/lib/libmpi_f77.so.0
-usr/lib/libmpi_f90.so.0.0.0                     usr/lib/libmpi_f90.so.0
+usr/lib/libmpi_f77.so.0.0.1                     usr/lib/libmpi_f77.so.0
+usr/lib/libmpi_f90.so.0.0.1                     usr/lib/libmpi_f90.so.0
diff -ruN openmpi-1.4.3/debian/patches/arm_support openmpi-1.4.3.armhf//debian/patches/arm_support
--- openmpi-1.4.3/debian/patches/arm_support	1970-01-01 02:00:00.000000000 +0200
+++ openmpi-1.4.3.armhf//debian/patches/arm_support	2011-02-18 12:45:24.265052009 +0200
@@ -0,0 +1,316 @@
+## Description: Support building for arm 
+## Origin/Author: jani.mono...@canonical.com
+## Bug: bug URL
+Index: openmpi-1.4.3/config/ompi_config_asm.m4
+===================================================================
+--- openmpi-1.4.3.orig/config/ompi_config_asm.m4	2011-01-06 14:07:27.000000000 +0200
++++ openmpi-1.4.3/config/ompi_config_asm.m4	2011-01-06 14:49:30.000000000 +0200
+@@ -875,6 +875,12 @@
+             OMPI_GCC_INLINE_ASSIGN='"movl [$]0, %0" : "=&r"(ret)'
+             ;;
+ 
++        arm*)
++            ompi_cv_asm_arch="ARM"
++            OMPI_ASM_SUPPORT_64BIT=1
++            OMPI_GCC_INLINE_ASSIGN='"mov r0, 0" : "=&r"(ret)'
++            ;;
++
+         ia64-*)
+             ompi_cv_asm_arch="IA64"
+             OMPI_ASM_SUPPORT_64BIT=1
+Index: openmpi-1.4.3/opal/include/opal/sys/Makefile.am
+===================================================================
+--- openmpi-1.4.3.orig/opal/include/opal/sys/Makefile.am	2011-01-06 14:07:27.000000000 +0200
++++ openmpi-1.4.3/opal/include/opal/sys/Makefile.am	2011-01-06 14:49:30.000000000 +0200
+@@ -27,6 +27,7 @@
+ 
+ include opal/sys/alpha/Makefile.am
+ include opal/sys/amd64/Makefile.am
++include opal/sys/arm/Makefile.am
+ include opal/sys/ia32/Makefile.am
+ include opal/sys/ia64/Makefile.am
+ include opal/sys/mips/Makefile.am
+Index: openmpi-1.4.3/opal/include/opal/sys/architecture.h
+===================================================================
+--- openmpi-1.4.3.orig/opal/include/opal/sys/architecture.h	2011-01-06 14:07:27.000000000 +0200
++++ openmpi-1.4.3/opal/include/opal/sys/architecture.h	2011-01-06 14:49:30.000000000 +0200
+@@ -36,6 +36,7 @@
+ #define OMPI_SPARCV9_32     0061
+ #define OMPI_SPARCV9_64     0062
+ #define OMPI_MIPS           0070
++#define OMPI_ARM            0100
+ 
+ /* Formats */
+ #define OMPI_DEFAULT        1000  /* standard for given architecture */
+Index: openmpi-1.4.3/opal/include/opal/sys/arm/Makefile.am
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ openmpi-1.4.3/opal/include/opal/sys/arm/Makefile.am	2011-01-06 14:49:30.000000000 +0200
+@@ -0,0 +1,23 @@
++#
++# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
++#                         University Research and Technology
++#                         Corporation.  All rights reserved.
++# Copyright (c) 2004-2005 The University of Tennessee and The University
++#                         of Tennessee Research Foundation.  All rights
++#                         reserved.
++# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 
++#                         University of Stuttgart.  All rights reserved.
++# Copyright (c) 2004-2005 The Regents of the University of California.
++#                         All rights reserved.
++# $COPYRIGHT$
++# 
++# Additional copyrights may follow
++# 
++# $HEADER$
++#
++
++# This makefile.am does not stand on its own - it is included from opal/include/Makefile.am
++
++headers += \
++		   opal/sys/arm/atomic.h \
++		   opal/sys/arm/timer.h
+Index: openmpi-1.4.3/opal/include/opal/sys/arm/atomic.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ openmpi-1.4.3/opal/include/opal/sys/arm/atomic.h	2011-01-06 14:49:30.000000000 +0200
+@@ -0,0 +1,163 @@
++/*
++ * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
++ *                         University Research and Technology
++ *                         Corporation.  All rights reserved.
++ * Copyright (c) 2004-2005 The University of Tennessee and The University
++ *                         of Tennessee Research Foundation.  All rights
++ *                         reserved.
++ * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 
++ *                         University of Stuttgart.  All rights reserved.
++ * Copyright (c) 2004-2005 The Regents of the University of California.
++ *                         All rights reserved.
++ * $COPYRIGHT$
++ * 
++ * Additional copyrights may follow
++ * 
++ * $HEADER$
++ */
++
++#ifndef OMPI_SYS_ARCH_ATOMIC_H
++#define OMPI_SYS_ARCH_ATOMIC_H 1
++
++/*
++ * On armv7, everything is load-locked, store-conditional...
++ */
++
++#if OMPI_WANT_SMP_LOCKS
++#define MB()  __sync_synchronize();
++#define RMB() MB()
++#define WMB() MB();
++
++#else
++
++#define MB()
++#define RMB()
++#define WMB()
++
++#endif
++
++
++/**********************************************************************
++ *
++ * Define constants for ARM
++ *
++ *********************************************************************/
++#define OPAL_HAVE_ATOMIC_MEM_BARRIER 1
++
++#define OPAL_HAVE_ATOMIC_CMPSET_32 1
++#define OPAL_HAVE_ATOMIC_MATH_32 1
++#define OPAL_HAVE_ATOMIC_ADD_32 1
++#define OPAL_HAVE_ATOMIC_SUB_32 1
++
++#define OPAL_HAVE_ATOMIC_CMPSET_64 0
++#define OPAL_HAVE_ATOMIC_MATH_64 0
++#define OPAL_HAVE_ATOMIC_ADD_64 0
++#define OPAL_HAVE_ATOMIC_SUB_64 0
++
++/**********************************************************************
++ *
++ * Memory Barriers
++ *
++ *********************************************************************/
++
++static inline void opal_atomic_mb(void)
++{
++    MB();
++}
++
++
++static inline void opal_atomic_rmb(void)
++{
++    RMB();
++}
++
++
++static inline void opal_atomic_wmb(void)
++{
++    WMB();
++}
++
++
++/**********************************************************************
++ *
++ * Atomic math operations
++ *
++ *********************************************************************/
++
++static inline int opal_atomic_cmpset_32( volatile int32_t *addr,
++                                         int32_t oldval, int32_t newval)
++{
++    return __sync_bool_compare_and_swap(addr, oldval, newval);
++}
++
++static inline int opal_atomic_cmpset_acq_32(volatile int32_t *addr,
++                                           int32_t oldval,
++                                           int32_t newval)
++{
++    int rc;
++
++    rc = opal_atomic_cmpset_32(addr, oldval, newval);
++    opal_atomic_rmb();
++
++    return rc;
++}
++
++
++static inline int opal_atomic_cmpset_rel_32(volatile int32_t *addr,
++                                           int32_t oldval,
++                                           int32_t newval)
++{
++    opal_atomic_wmb();
++    return opal_atomic_cmpset_32(addr, oldval, newval);
++}
++
++
++static inline int opal_atomic_cmpset_64( volatile int64_t *addr,
++                                         int64_t oldval, int64_t newval)
++{
++    return __sync_bool_compare_and_swap(addr, oldval, newval);
++}
++
++
++static inline int opal_atomic_cmpset_acq_64(volatile int64_t *addr,
++                                           int64_t oldval,
++                                           int64_t newval)
++{
++    int rc;
++
++    rc = opal_atomic_cmpset_64(addr, oldval, newval);
++    opal_atomic_rmb();
++
++    return rc;
++}
++
++
++static inline int opal_atomic_cmpset_rel_64(volatile int64_t *addr,
++                                           int64_t oldval,
++                                           int64_t newval)
++{
++    opal_atomic_wmb();
++    return opal_atomic_cmpset_64(addr, oldval, newval);
++}
++
++static inline int32_t opal_atomic_add_32(volatile int32_t* v, int inc)
++{
++   return __sync_add_and_fetch(v, inc);
++}
++
++static inline int64_t opal_atomic_sub_64(volatile int64_t* v, int64_t dec)
++{
++   return __sync_sub_and_fetch(v, dec);
++}
++
++static inline int64_t opal_atomic_add_64(volatile int64_t* v, int64_t inc)
++{
++   return __sync_add_and_fetch(v, inc);
++}
++
++
++static inline int32_t opal_atomic_sub_32(volatile int32_t* v, int dec)
++{
++   return __sync_sub_and_fetch(v, dec);
++}
++#endif /* ! OMPI_SYS_ARCH_ATOMIC_H */
+Index: openmpi-1.4.3/opal/include/opal/sys/atomic.h
+===================================================================
+--- openmpi-1.4.3.orig/opal/include/opal/sys/atomic.h	2011-01-06 14:07:27.000000000 +0200
++++ openmpi-1.4.3/opal/include/opal/sys/atomic.h	2011-01-06 14:49:30.000000000 +0200
+@@ -148,6 +148,8 @@
+ #include "opal/sys/alpha/atomic.h"
+ #elif OMPI_ASSEMBLY_ARCH == OMPI_AMD64
+ #include "opal/sys/amd64/atomic.h"
++#elif OMPI_ASSEMBLY_ARCH == OMPI_ARM
++#include "opal/sys/arm/atomic.h"
+ #elif OMPI_ASSEMBLY_ARCH == OMPI_IA32
+ #include "opal/sys/ia32/atomic.h"
+ #elif OMPI_ASSEMBLY_ARCH == OMPI_IA64
+Index: openmpi-1.4.3/opal/include/opal/sys/arm/timer.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ openmpi-1.4.3/opal/include/opal/sys/arm/timer.h	2011-01-06 14:49:50.000000000 +0200
+@@ -0,0 +1,32 @@
++/*
++ * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
++ *                         University Research and Technology
++ *                         Corporation.  All rights reserved.
++ * Copyright (c) 2004-2005 The University of Tennessee and The University
++ *                         of Tennessee Research Foundation.  All rights
++ *                         reserved.
++ * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 
++ *                         University of Stuttgart.  All rights reserved.
++ * Copyright (c) 2004-2005 The Regents of the University of California.
++ *                         All rights reserved.
++ * $COPYRIGHT$
++ * 
++ * Additional copyrights may follow
++ * 
++ * $HEADER$
++ */
++
++#ifndef OMPI_SYS_ARCH_TIMER_H
++#define OMPI_SYS_ARCH_TIMER_H 1
++
++#define OPAL_HAVE_SYS_TIMER_GET_CYCLES 1
++
++typedef uint64_t opal_timer_t;
++
++static inline opal_timer_t
++opal_sys_timer_get_cycles(void)
++{
++    return 0;
++}
++
++#endif /* ! OMPI_SYS_ARCH_TIMER_H */
+Index: openmpi-1.4.3/opal/include/opal/sys/timer.h
+===================================================================
+--- openmpi-1.4.3.orig/opal/include/opal/sys/timer.h	2011-01-06 14:07:27.000000000 +0200
++++ openmpi-1.4.3/opal/include/opal/sys/timer.h	2011-01-06 14:49:30.000000000 +0200
+@@ -81,6 +81,8 @@
+ /* don't include system-level gorp when generating doxygen files */ 
+ #elif OMPI_ASSEMBLY_ARCH == OMPI_AMD64
+ #include "opal/sys/amd64/timer.h"
++#elif OMPI_ASSEMBLY_ARCH == OMPI_ARM
++#include "opal/sys/arm/timer.h"
+ #elif OMPI_ASSEMBLY_ARCH == OMPI_IA32
+ #include "opal/sys/ia32/timer.h"
+ #elif OMPI_ASSEMBLY_ARCH == OMPI_IA64
+Index: openmpi-1.4.3/opal/mca/timer/linux/configure.m4
+===================================================================
+--- openmpi-1.4.3.orig/opal/mca/timer/linux/configure.m4	2011-01-06 14:07:26.000000000 +0200
++++ openmpi-1.4.3/opal/mca/timer/linux/configure.m4	2011-01-06 14:49:30.000000000 +0200
+@@ -42,7 +42,7 @@
+                  [timer_linux_happy="no"])])
+ 
+    case "${host}" in
+-   i?86-*linux*|x86_64*linux*|ia64-*linux*|powerpc-*linux*|powerpc64-*linux*|sparc*-*linux*)
++   i?86-*linux*|x86_64*linux*|ia64-*linux*|powerpc-*linux*|powerpc64-*linux*|sparc*-*linux*|arm*-*linux*)
+         AS_IF([test "$timer_linux_happy" = "yes"],
+               [AS_IF([test -r "/proc/cpuinfo"],
+                      [timer_linux_happy="yes"],
diff -ruN openmpi-1.4.3/debian/patches/series openmpi-1.4.3.armhf//debian/patches/series
--- openmpi-1.4.3/debian/patches/series	2011-02-18 19:18:37.000000000 +0200
+++ openmpi-1.4.3.armhf//debian/patches/series	2011-02-18 12:45:41.825050135 +0200
@@ -1,2 +1,3 @@
 build_hurd
 manpage_macros
+arm_support

Reply via email to