File arm_support of Package openmpi
## Description: Support building for arm
## Origin/Author: jani.monoses@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"],