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