Accepting request 764679 from home:NMoreyChaisemartin:branches:science:HPC

Add openmpi4

OBS-URL: https://build.opensuse.org/request/show/764679
OBS-URL: https://build.opensuse.org/package/show/science:HPC/openmpi4?expand=0&rev=1
This commit is contained in:
Nicolas Morey-Chaisemartin 2020-01-15 13:55:39 +00:00 committed by Git OBS Bridge
commit 2a914cad07
15 changed files with 1275 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

6
_multibuild Normal file
View File

@ -0,0 +1,6 @@
<multibuild>
<package>standard</package>
<package>testsuite</package>
<package>gnu-hpc</package>
<package>gnu-hpc-testsuite</package>
</multibuild>

17
_service Normal file
View File

@ -0,0 +1,17 @@
<services>
<service name="tar_scm" mode="disabled">
<param name="scm">git</param>
<param name="url">https://github.com/open-mpi/ompi.git</param>
<param name="package-meta">no</param>
<param name="exclude">.git</param>
<param name="filename">openmpi</param>
<param name="versionformat">@PARENT_TAG@.@TAG_OFFSET@.%h</param>
<param name="versionrewrite-pattern">v(.*)</param>
<param name="versionrewrite-replacement">\1</param>
<param name="revision">cb5f4e737a9d9cf47511b940179d620dd11249b3</param>
</service>
<service name="recompress" mode="disabled">
<param name="file">openmpi*.tar</param>
<param name="compression">bz2</param>
</service>
</services>

21
macros.hpc-openmpi Normal file
View File

@ -0,0 +1,21 @@
#
# openmpi
#
%hpc_openmpi_init(V:) \
%{-V: %define _mf_ver %{-V*}} \
%{expand: %%global hpc_openmpi_dep_version %%{?_mf_ver}%%{?!_mf_ver:3}} \
%{expand: %%global hpc_openmpi_dir openmpi%{hpc_openmpi_dep_version}} \
%{expand: %%global hpc_openmpi_pack_version %{hpc_openmpi_dep_version}} \
%{expand: %%global _hpc_openmpi_modules openmpi}
# We may have to add a version here.
%hpc_setup_openmpi \
module load openmpi
%hpc_openmpi_requires \
Requires: libopenmpi%{hpc_openmpi_dep_version}-%{hpc_compiler_family}%{hpc_cf_pack_version}-hpc
%hpc_openmpi_requires_devel \
Requires: openmpi%{hpc_openmpi_dep_version}-%{hpc_compiler_family}%{hpc_cf_pack_version}-hpc-devel

156
macros.mpi Normal file
View File

@ -0,0 +1,156 @@
%mpi_flavor @MPI_FLAVOR@
%mpi_vers @MPI_VERS@
%mpi_vers_nodots @MPI_VERS_NODOTS@
%mpi_major @MPI_MAJOR@
%mpi_flavor_ver @MPI_FLAVOR_VER@
%mpi_base %{_libdir}/mpi/gcc/
%mpi_prefix %{mpi_base}/@MPI_FLAVOR_VER@
%mpi_exec_prefix %{mpi_prefix}
%mpi_sysconfdir %{_sysconfdir}
%mpi_localstatedir %{_localstatedir}
%mpi_sharedstatedir %{_sharedstatedir}
%mpi_bindir %{mpi_prefix}/bin
%mpi_datadir %{mpi_prefix}/share
%mpi_includedir %{mpi_prefix}/include
%mpi_libdir %{mpi_prefix}/%{_lib}
%mpi_libexecdir %{mpi_prefix}/lib
%mpi_sbindir %{mpi_prefix}/sbin
%mpi_docdir %{mpi_datadir}/doc/packages
%mpi_infodir %{mpi_datadir}/info
%mpi_mandir %{mpi_datadir}/man
%mpi_pkgconfigdir %{mpi_libdir}/pkgconfig
%mpi_cmake_dir %{mpi_datadir}/cmake
%mpi_cmake_moddir %{mpi_cmake_moddir}/Modules
# ----------------------------------------------------
%mpi_init source %{mpi_bindir}/mpivars.sh
%mpi_run %{mpi_bindir}/mpirun
%mpi_set_compilers \
export CC="%{mpi_bindir}/mpicc" \
export CXX="%{mpi_bindir}/mpicxx" \
export F77="%{mpi_bindir}/mpif77" \
export FC="%{mpi_bindir}/mpif90" \
export MPICC=$CC \
export MPICXX=$CXX \
export MPIF77=$F77 \
export MPIFC=$FC \
%{nil}
#
# Autotools
#
%mpi_configure \
%{mpi_init} \
%{mpi_set_compilers} \
CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \
CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \
FFLAGS="${FFLAGS:-%optflags}" ; export FFLAGS ; \
%{_configure} --host=%{_host} --build=%{_build} \\\
%{?_program_prefix:--program-prefix=%{_program_prefix}} \\\
--disable-dependency-tracking \\\
--prefix=%{mpi_prefix} \\\
--exec-prefix=%{mpi_exec_prefix} \\\
--bindir=%{mpi_bindir} \\\
--sbindir=%{mpi_sbindir} \\\
--sysconfdir=%{mpi_sysconfdir} \\\
--datadir=%{mpi_datadir} \\\
--includedir=%{mpi_includedir} \\\
--libdir=%{mpi_libdir} \\\
--libexecdir=%{mpi_libexecdir} \\\
--localstatedir=%{mpi_localstatedir} \\\
--sharedstatedir=%{mpi_sharedstatedir} \\\
--mandir=%{mpi_mandir} \\\
--infodir=%{mpi_infodir}
#
# man pages
#
# %{mpi_compress_man <num>} compress man page in %mpi_mandir/man<num>
%mpi_compress_man() \
[ -n "%{*}" ] || { echo "no man page list!" >&2 ; exit 1; } \
for j in %{*}; do \
for i in $(ls %{buildroot}%{mpi_mandir}/man${j}/*.${j}* | grep -v ".*\.gz$"); \
do \
test -L $i && continue \
gzip $i \
done; \
done
# wraps macro from macros.cmake - paths replaced by MPI paths.
%mpi_cmake \
%{!?cmake:%{error: please include macros.cmake}} \
%{mpi_init} \
%{mpi_set_compilers} \
%{?cmake: \
%global __cmake %{_bindir}/cmake \
%define _bindir %{mpi_bindir} \
%define _datadir %{mpi_datadir} \
%define _includedir %{mpi_includedir} \
%define _infodir %{mpi_infodir} \
%define _libdir %{mpi_libdir} \
%define _libexecdir %{mpi_libexecdir} \
%define _localstatedir %{mpi_localstatedir} \
%define _mandir %{mpi_mandir} \
%define _prefix %{mpi_prefix} \
%define _sbindir %{mpi_sbindir} \
%define _sharedstatedir %{mpi_sharedstatedir} \
%define _sysconfdir %{mpi_sysconfdir} \
%cmake \\\
%undefine __cmake \\\
%undefine _bindir \\\
%undefine _datadir \\\
%undefine _includedir \\\
%undefine _infodir \\\
%undefine _libdir \\\
%undefine _libexecdir \\\
%undefine _localstatedir \\\
%undefine _mandir \\\
%undefine _prefix \\\
%undefine _sbindir \\\
%undefine _sharedstatedir \\\
%undefine _sysconfdir \\\
}
# wraps macro from macros.meson - paths replaced by MPI paths.
%mpi_meson \
%{!?meson:%{error: please include macros.meson}} \
%{mpi_init} \
%{mpi_set_compilers} \
%{?meson: \
%global __meson %{_bindir}/meson \
%define _bindir %{mpi_bindir} \
%define _datadir %{mpi_datadir} \
%define _includedir %{mpi_includedir} \
%define _infodir %{mpi_infodir} \
%define _libdir %{mpi_libdir} \
%define _libexecdir %{mpi_libexecdir} \
%define _localstatedir %{mpi_localstatedir} \
%define _mandir %{mpi_mandir} \
%define _prefix %{mpi_prefix} \
%define _sbindir %{mpi_sbindir} \
%define _sharedstatedir %{mpi_sharedstatedir} \
%define _sysconfdir %{mpi_sysconfdir} \
%meson \\\
%undefine __meson \\\
%undefine _bindir \\\
%undefine _datadir \\\
%undefine _includedir \\\
%undefine _infodir \\\
%undefine _libdir \\\
%undefine _libexecdir \\\
%undefine _localstatedir \\\
%undefine _mandir \\\
%undefine _prefix \\\
%undefine _sbindir \\\
%undefine _sharedstatedir \\\
%undefine _sysconfdir \\\
}

69
macros.mpi-hpc Normal file
View File

@ -0,0 +1,69 @@
%mpi_flavor @MPI_FLAVOR@
%mpi_vers @MPI_VERS@
%mpi_vers_nodots @MPI_VERS_NODOTS@
%mpi_major @MPI_MAJOR@
%mpi_flavor_ver @MPI_FLAVOR_VER@
%mpi_base %{hpc_base}
%mpi_prefix %{hpc_prefix}
%mpi_exec_prefix %{hpc_exec_prefix}
%mpi_sysconfdir %{hpc_sysconfdir}
%mpi_localstatedir %{hpc_localstatedir}
%mpi_sharedstatedir %{hpc_sharedstatedir}
%mpi_bindir %{hpc_bindir}
%mpi_datadir %{hpc_datadir}
%mpi_includedir %{hpc_includedir}
%mpi_libdir %{hpc_libdir}
%mpi_libexecdir %{hpc_libexecdir}
%mpi_sbindir %{hpc_sbindir}
%mpi_docdir %{hpc_docdir}
%mpi_infodir %{hpc_infodir}
%mpi_mandir %{hpc_mandir}
%mpi_pkgconfigdir %{hpc_pkgconfigdir}
%mpi_cmake_dir %{hpc_cmake_dir}
%mpi_cmake_moddir %{hpc_cmake_moddir}
# ----------------------------------------------------
%mpi_init source %{mpi_bindir}/mpivars.sh
%mpi_run %{mpi_bindir}/mpirun
%mpi_set_compilers \
export CC=mpicc \
export CXX=mpicxx \
export F77=mpif77 \
export FC=mpif90 \
export MPICC=$CC \
export MPICXX=$CXX \
export MPIF77=$F77 \
export MPIFC=$FC \
%{nil}
#
# Autotools
#
%mpi_configure \
%{mpi_set_compilers} \
%{hpc_configure}
#
# man pages
#
# %{mpi_compress_man <num>} compress man page in %mpi_mandir/man<num>
%mpi_compress_man %hpc_compress_man
# wraps macro from macros.cmake - paths replaced by MPI paths.
%mpi_cmake \
%{mpi_set_compilers} \
%{hpc_cmake}
# wraps macro from macros.meson - paths replaced by MPI paths.
%mpi_meson \
%{mpi_set_compilers} \
%{hpc_meson}

View File

@ -0,0 +1,24 @@
commit aa60ad84658b3433bcecb968f8dea2031fec27c3
Author: Maxwell Coil <mcoil@nd.edu>
Date: Sun Dec 8 13:56:00 2019 -0500
memory/patcher: fix compiler warning
syscall() returns a long, but we are invoking shmat(), which returns
a void*.
Signed-off-by: Maxwell Coil <mcoil@nd.edu>
diff --git opal/mca/memory/patcher/memory_patcher_component.c opal/mca/memory/patcher/memory_patcher_component.c
index 687d430fa362..272ec721225b 100644
--- opal/mca/memory/patcher/memory_patcher_component.c
+++ opal/mca/memory/patcher/memory_patcher_component.c
@@ -440,7 +440,7 @@ static void *_intercept_shmat(int shmid, const void *shmaddr, int shmflg)
if (!original_shmat) {
#if defined(SYS_shmat)
- result = memory_patcher_syscall(SYS_shmat, shmid, shmaddr, shmflg);
+ result = (void*) memory_patcher_syscall(SYS_shmat, shmid, shmaddr, shmflg);
#else // IPCOP_shmat
unsigned long ret;
ret = memory_patcher_syscall(SYS_ipc, IPCOP_shmat,

15
mpivars.csh Normal file
View File

@ -0,0 +1,15 @@
set -f path= ( prefix/bin $path )
if ($?MANPATH) then
if ( "$MANPATH" !~ *prefix/man* ) then
setenv MANPATH prefix/man:$MANPATH
endif
else
setenv MANPATH prefix/man:
endif
if ($?LD_LIBRARY_PATH) then
setenv LD_LIBRARY_PATH libdir:$LD_LIBRARY_PATH
else
setenv LD_LIBRARY_PATH libdir
endif

31
mpivars.sh Normal file
View File

@ -0,0 +1,31 @@
case $PATH in
*prefix/bin*)
true
;;
*)
PATH=prefix/bin:$PATH
esac
case $MANPATH in
*prefix/share/man*)
true
;;
*)
MANPATH=prefix/share/man:$MANPATH
export MANPATH
esac
case $LD_LIBRARY_PATH in
*libdir*)
true
;;
*)
if [ -z "$LD_LIBRARY_PATH" ]; then
LD_LIBRARY_PATH=libdir
else
LD_LIBRARY_PATH="libdir:$LD_LIBRARY_PATH"
fi
export LD_LIBRARY_PATH
esac

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c2798b5679a61c052c876c00f700b7c8c556d32dd7585350c0dd1434bfcb73c5
size 6267972

8
openmpi4-rpmlintrc Normal file
View File

@ -0,0 +1,8 @@
# This line is mandatory to access the configuration functions
from Config import *
addFilter("openmpi.*-config.* useless-provides")
addFilter("openmpi.*-devel.* shared-lib-calls-exit")
addFilter("openmpi.*-libs.* rpath-in-buildconfig")
addFilter("openmpi.*-libs.* shared-lib-calls-exit")
addFilter("openmpi.*-libs.* useless-provides")

15
openmpi4.changes Normal file
View File

@ -0,0 +1,15 @@
-------------------------------------------------------------------
Wed Jan 15 09:05:14 UTC 2020 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Add memory-patcher-fix-compiler-warning.patch to fix 64bit portability issues
-------------------------------------------------------------------
Thu Oct 31 17:05:14 UTC 2019 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Link against libnuma (bsc#1155120)
-------------------------------------------------------------------
Thu Oct 24 14:40:07 UTC 2019 - Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
- Initial version (4.0.2)
- Add reproducible.patch for reproducible builds.

760
openmpi4.spec Normal file
View File

@ -0,0 +1,760 @@
#
# spec file for package openmpi4
#
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
# 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 (c) 2006-2016 Cisco Systems, Inc. All rights reserved.
# Copyright (c) 2013 Mellanox Technologies, Inc.
# All rights reserved.
# Copyright (c) 2015 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2003, The Regents of the University of California, through
# Lawrence Berkeley National Laboratory (subject to receipt of any
# required approvals from the U.S. Dept. of Energy). All rights reserved.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%global flavor @BUILD_FLAVOR@%{nil}
# Static libraries are disabled by default
# for non HPC builds
# To enable them, simply uncomment:
# % define build_static_devel 1
%define pname openmpi
%define vers 4.0.2
%define _vers 4_0_2
%define m_f_ver 4
%bcond_with ringdisabled
%if "%flavor" == ""
ExclusiveArch: do_not_build
%{bcond_with hpc}
%define package_name %pname%{m_f_ver}
%else
# Trickery for OBS Staging. If _with_ringdisabled is set
# we only want to build the flavors required by other rings packages.
# Do not build any other ones
%if %{with ringdisabled}
%if "%flavor" != "standard"
ExclusiveArch: do_not_build
%endif
%endif
%if "%flavor" == "standard" || "%flavor" == "testsuite"
%define package_name %{pname}%{m_f_ver}
%bcond_with hpc
%if "%flavor" == "testsuite"
%define testsuite 1
%endif
%else
%bcond_without hpc
# Needs to be defined here to avoid hen/egg problem with test packages.
%define package_name %{pname}_%{_vers}-%{compiler_family}%{?c_f_ver}-hpc
%define build_static_devel 1
%endif
%endif
%if "%flavor" == "gnu-hpc"
%define compiler_family gnu
%undefine c_f_ver
%endif
%if "%flavor" == "gnu7-hpc"
%define compiler_family gnu
%define c_f_ver 7
%endif
%if "%flavor" == "gnu-hpc-testsuite"
%define compiler_family gnu
%undefine c_f_ver
%define testsuite 1
%endif
%if "%flavor" == "gnu7-hpc-testsuite"
%define compiler_family gnu
%define c_f_ver 7
%define testsuite 1
%endif
%if 0%{?suse_version} >= 1320
%ifarch aarch64 %power64 x86_64 s390x
%define with_ucx 1
%endif
%endif
# Detect whether we are the default openMPI implemantation or not
%define default_openmpi 0
%if %{with hpc}
%{!?compiler_family:%global compiler_family gnu}
%{hpc_init -M -c %compiler_family %{?c_f_ver:-v %{c_f_ver}} -m openmpi %{?mpi_f_ver:-V %{mpi_f_ver}}}
%global hpc_openmpi_dep_version %(VER=%m_f_ver; echo -n ${VER})
%global hpc_openmpi_dir openmpi%{hpc_openmpi_dep_version}
%global hpc_openmpi_pack_version %{hpc_openmpi_dep_version}
%endif
%define git_ver .0.cb5f4e737a9d
#############################################################################
#
# Preamble Section
#
#############################################################################
Name: %{package_name}%{?testsuite:-testsuite}
Version: %{vers}
Release: 0
Summary: An implementation of MPI/SHMEM (Version %{m_f_ver})
License: BSD-3-Clause
Group: Development/Libraries/Parallel
Url: http://www.open-mpi.org/
Source0: openmpi-%{version}%{git_ver}.tar.bz2
Source2: openmpi4-rpmlintrc
Source3: macros.hpc-openmpi
Source4: mpivars.sh
Source5: mpivars.csh
Patch0: reproducible.patch
patch1: memory-patcher-fix-compiler-warning.patch
Provides: mpi
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: fdupes
BuildRequires: flex
BuildRequires: libibumad-devel
BuildRequires: libibverbs-devel
BuildRequires: libtool
# net-tools is required to run hostname
BuildRequires: net-tools
%if 0%{?testsuite}
BuildArch: noarch
BuildRequires: %{package_name} = %{version}
%endif
%if 0%{?with_ucx}
BuildRequires: libucm-devel
BuildRequires: libucp-devel
BuildRequires: libucs-devel
BuildRequires: libuct-devel
%endif
%if %{without hpc}
BuildRequires: Modules
BuildRequires: gcc-c++
BuildRequires: gcc-fortran
BuildRequires: mpi-selector
Requires: mpi-selector
Requires(preun): mpi-selector
Requires: %{package_name}-libs = %{version}
%else
BuildRequires: %{compiler_family}%{?c_f_ver}-compilers-hpc-macros-devel
BuildRequires: lua-lmod
BuildRequires: suse-hpc
%if 0%{!?testsuite:1}
Requires: lib%{package_name} = %{version}
%endif
%hpc_requires
%endif
%ifarch %{ix86} x86_64
BuildRequires: infinipath-psm-devel
BuildRequires: libfabric-devel
%endif
%ifarch x86_64
BuildRequires: libnuma-devel
BuildRequires: libpsm2-devel
BuildRequires: numactl
%endif
Requires: openmpi-runtime-config
Recommends: openmpi%{m_f_ver}-config
%if 0%{?default_openmpi}
Provides: openmpi = %{version}
%endif
# OpenMPI requires ssh (or rsh) to run even on a single host
# Force ssh to make sure the install works out of the box
Requires: openssh
%if %{without hpc}
%define mpi_prefix %{_libdir}/mpi/gcc/openmpi%{m_f_ver}
%define mpi_bindir %{mpi_prefix}/bin
%define mpi_libdir %{mpi_prefix}/%{_lib}
%define mpi_datadir %{mpi_prefix}/share
%define mpi_helpdir %{mpi_datadir}/%{pname}%{m_f_ver}
%define mpi_includedir %{mpi_prefix}/include
%define mpi_mandir %{mpi_prefix}/share/man
%else
%define mpi_prefix %hpc_prefix
%define mpi_bindir %hpc_bindir
%define mpi_libdir %hpc_libdir
%define mpi_datadir %hpc_datadir
%define mpi_helpdir %{mpi_datadir}/openmpi
%define mpi_includedir %hpc_includedir
%define mpi_mandir %hpc_mandir
%endif
%description
%if 0%{?testsuite}
This package is just needed to run the testsuite and does not contain
anything interesting.
%else
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
OpenMPI also includes an implementation of the OpenSHMEM parallel
programming API, which is a Partitioned Global Address Space (PGAS)
abstraction layer providing inter-process communication using
one-sided communication techniques.
This package provides general tools (mpirun, mpiexec, etc.) and the
Module Component Architecture (MCA) base and plugins necessary for
running Open MPI/OpenSHMEM version %{m_f_ver} jobs.
%endif
%if 0%{!?testsuite:1}
%package %{!?with_hpc:libs}%{?with_hpc:-n lib%{name}}
Summary: OpenMPI runtime libraries for OpenMPI %{?with_hpc:HPC} version %{version}
Group: System/Libraries
Requires: %{name} = %{version}
%if 0%{?default_openmpi}
Provides: openmpi-libs = %{version}
%endif
%{?with_hpc:%hpc_requires}
%description %{!?with_hpc:libs}%{?with_hpc:-n lib%{name}}
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
OpenMPI also includes an implementation of the OpenSHMEM parallel
programming API, which is a Partitioned Global Address Space (PGAS)
abstraction layer providing inter-process communication using
one-sided communication techniques.
This package provides the Open MPI/OpenSHMEM version %{m_f_ver}
shared libraries.
%package devel
Summary: SDK for openMPI %{?with_hpc:HPC} version %{version}
Group: Development/Libraries/Parallel
Requires: libibumad-devel
Requires: libibverbs-devel
%if %{without hpc}
Requires: libstdc++-devel
%if 0%{?default_openmpi}
Provides: openmpi-devel = %{version}
%endif
%else
%hpc_requires_devel
%endif
Requires: %{name} = %{version}
%description devel
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
OpenMPI also includes an implementation of the OpenSHMEM parallel
programming API, which is a Partitioned Global Address Space (PGAS)
abstraction layer providing inter-process communication using
one-sided communication techniques.
This package provides the development files for Open MPI/OpenSHMEM
version %{m_f_ver}, such as wrapper compilers and header files for
MPI/OpenSHMEM development.
%package docs
Summary: Documentation for Open MPI/SHMEM %{?with_hpc:HPC} version %{version}
Group: Documentation/Man
Requires: %{name} = %{version}
%description docs
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
OpenMPI also includes an implementation of the OpenSHMEM parallel
programming API, which is a Partitioned Global Address Space (PGAS)
abstraction layer providing inter-process communication using
one-sided communication techniques.
This subpackage provides the documentation for Open MPI/OpenSHMEM.
%package macros-devel
Summary: Macros for openMPI version %{version}
Group: Development/Libraries/Parallel
Requires: %{name}-devel = %{version}
# Make sure no two openmpi macro file can be installed at once
Provides: %{pname}-macros-provider = %{version}
Conflicts: otherproviders(%{pname}-macros-provider)
# Conflict (without providing) with the older openmpi-hpc-macros-devel flag
# to avoid issue with older packages
Conflicts: otherproviders(%{pname}-hpc-macros-devel)
%if 0%{?default_openmpi}
Provides: openmpi-macros-devel = %{version}
%endif
%description macros-devel
Macros for building RPM packages for OpenMPI version %{version}.
%if 0%{?build_static_devel}
%package devel-static
Summary: Static libraries for openMPI %{?with_hpc:HPC} version %{version}
Group: Development/Libraries/Parallel
Requires: %{name}-devel = %{version}
%if 0%{?default_openmpi}
Provides: openmpi-devel-static = %{version}
%endif
%description devel-static
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
This RPM contains the static library files, which are packaged separately from
the dynamic library and headers.
%endif
%if %{without hpc}
%package -n %{pname}%{m_f_ver}-config
Summary: Runtime configuration files for openMPI %{?with_hpc:HPC} version %{version}
Group: Development/Libraries/Parallel
Provides: openmpi-runtime-config = %{version}
Conflicts: otherproviders(openmpi-runtime-config)
# OpenMPI4 is PMIx enabled
Provides: pmix-runtime-config = %{version}
Conflicts: otherproviders(pmix-runtime-config)
%description -n %{pname}%{m_f_ver}-config
OpenMPI is an implementation of the Message Passing Interface, a
standardized API typically used for parallel and/or distributed
computing. OpenMPI is the merged result of four prior implementations
where the team found for them to excel in one or more areas,
such as latency or throughput.
This RPM contains the configuration files for OpenMPI runtime (Version 3).
%endif
%if %{with hpc}
%{hpc_master_package -L -a}
%{hpc_master_package -l}
%{hpc_master_package devel}
%{hpc_master_package docs}
%{hpc_master_package macros-devel}
%{hpc_master_package -a devel-static}
%endif # ?with_hpc
%endif # !testsuite
#############################################################################
#
# Prepatory Section
#
#############################################################################
%prep
echo FLAVOR %{flavor}
%if %{with hpc}
echo with HPC
%endif
%if %{without hpc}
echo without HPC
%endif
%setup -q -n openmpi-%{version}%{git_ver}
%if %{without hpc}
cat > %{_sourcedir}/baselibs.conf <<EOF
openmpi%{m_f_ver}-libs
EOF
%endif
%patch0 -p1
%patch1
# Live patch the VERSION file
sed -i -e 's/^greek=.*$/greek=%{git_ver}/' -e 's/^repo_rev=.*$/repo_rev=%{version}%{git_ver}/' \
-e 's/^date=.*$/date="OpenMPI %{version} Distribution for SUSE"/' VERSION
#############################################################################
#
# Build Section
#
#############################################################################
%build
export USER=OBS
export HOSTNAME=OBS
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
%{?with_hpc:%hpc_debug}
./autogen.pl --force
%if %{with hpc}
%{hpc_setup}
%{hpc_configure} \
%else
%{configure} \
--prefix="%{mpi_prefix}" \
--exec-prefix="%{mpi_prefix}" \
--bindir="%{mpi_bindir}" \
--datadir="%{mpi_datadir}" \
--includedir="%{mpi_includedir}" \
--libdir="%{mpi_libdir}" \
--mandir="%{mpi_mandir}" \
%endif
%{?build_static_devel:--enable-static} \
%{!?build_static_devel:--disable-static} \
--enable-builtin-atomics \
--with-libltdl=%{_prefix} \
--with-verbs \
--enable-mpi-thread-multiple \
--disable-wrapper-rpath \
--with-slurm \
%if 0%{?with_ucx}
--with-ucx \
--with-ucx-libdir=/usr/%_lib \
%endif
%ifarch %{ix86} x86_64
--with-psm \
%endif
%ifarch x86_64
--with-psm2 \
%endif
--disable-silent-rules \
--enable-mpirun-prefix-by-default \
--with-package-string="Open MPI Distribution for %{?is_opensuse:openSUSE}%{!?is_opensuse:SLE}" \
--disable-wrapper-runpath
make %{?_smp_mflags}
%if 0%{?testsuite}
%check
make check
%install
%files
%defattr(-, root, root)
%doc README
%doc test/util/test-suite.log
%else # ?testsuite
#############################################################################
#
# Install Section
#
#############################################################################
%install
%{?with_hpc:%{hpc_setup_compiler}}
make install DESTDIR="%buildroot"
# sanitize .la files
list="$(find %{buildroot} -name "*.la" -printf "%%h\n" | sort | uniq)"
for dir in ${list}
do
deps="${deps} -L${dir##%{buildroot}}"
done
for dir in ${list}
do
%if !0%{?build_static_devel}
rm -f ${dir}/*.la
%else
for file in ${dir}/*.la
do
sed -i -e "s@ [^[:space:]]*home[^[:space:]\']*@${deps}@" \
-e "s@ [^[:space:]]*home[^[:space:]\']*@@g" \
-e "s@-L.*.libs @@g" ${file}
done
%endif
done
##even with disable static this one gets generated
%{!?build_static_devel:rm -f %{buildroot}%{mpi_libdir}/libvt-pomp.a}
# GCC 5 builds the ignore-tkr extension and there is no way to
# turn that off
rm -f %{buildroot}%{mpi_libdir}/mpi_ext.mod
%fdupes %{buildroot}%{mpi_mandir}
%fdupes %{buildroot}%{mpi_datadir}
%fdupes %{buildroot}%{mpi_libdir}/pkgconfig
%if %{without hpc}
# make and install mpivars files
sed -e 's,prefix,%{mpi_prefix},g' -e 's,libdir,%{mpi_libdir},g' %{SOURCE4} \
> %{buildroot}%{mpi_bindir}/mpivars.sh
sed -e 's,prefix,%{mpi_prefix},g' -e 's,libdir,%{mpi_libdir},g' %{SOURCE5} \
> %{buildroot}%{mpi_bindir}/mpivars.csh
mkdir -p %{buildroot}%{_datadir}/modules/gnu-openmpi
cat << EOF > %{buildroot}%{_datadir}/modules/gnu-openmpi/%{version}
#%%Module
proc ModulesHelp { } {
global dotversion
puts stderr "\tLoads the gnu - openmpi %{version} Environment"
}
module-whatis "Loads the gnu openmpi %{version} Environment."
conflict gnu-openmpi
prepend-path PATH %{mpi_bindir}
prepend-path INCLUDE %{mpi_includedir}
prepend-path INCLUDE %{mpi_libdir}
prepend-path MANPATH %{mpi_mandir}
prepend-path LD_LIBRARY_PATH %{mpi_libdir}
EOF
mkdir -p %{buildroot}%{_sysconfdir}/rpm
cat <<EOF >%{buildroot}%{_sysconfdir}/rpm/macros.openmpi
#
# openmpi
#
%openmpi_prefix %{mpi_prefix}
%setup_openmpi source %{mpi_bindir}/mpivars.sh
%openmpi_requires Requires: %{name}-libs
%openmpi_devel_requires Requires: %{name}-devel
EOF
%else
%hpc_write_modules_files
#%%Module1.0#####################################################################
proc ModulesHelp { } {
puts stderr " "
puts stderr "This module loads the %{pname} library built with the %{compiler_family} toolchain."
puts stderr "\nVersion %{version}\n"
}
module-whatis "Name: %{pname} built with %{compiler_family} toolchain"
module-whatis "Version: %{version}"
module-whatis "Category: runtime library"
module-whatis "Description: %{SUMMARY:0}"
module-whatis "URL: %{url}"
set version %{version}
setenv MPI_DIR %{hpc_mpi_install_path}
prepend-path PATH %{hpc_bindir}
prepend-path MANPATH %{hpc_mandir}
prepend-path LD_LIBRARY_PATH %{hpc_libdir}
prepend-path MODULEPATH %{hpc_modulepath}
%{hpc_modulefile_add_pkgconfig_path}
family "MPI"
EOF
cat <<EOF > %{buildroot}/%{mpi_bindir}/mpivars.sh
%hpc_setup_compiler
module load %{hpc_mpi_family}%{?pack_suff}/%{version}
EOF
sed -e "s/export/setenv/" -e "s/=/ /" \
%{buildroot}/%{mpi_bindir}/mpivars.sh > \
%{buildroot}/%{mpi_bindir}/mpivars.csh
mkdir -p %{buildroot}%{_sysconfdir}/rpm
mkdir -p %{buildroot}%{_sysconfdir}/rpm
cp %{S:3} %{buildroot}%{_sysconfdir}/rpm
# Drop the files that should go into %{pname}-config as we only package them
# in the non HPC build
rm -f %{buildroot}%{_sysconfdir}/openmpi-default-hostfile
rm -f %{buildroot}%{_sysconfdir}/openmpi-mca-params.conf
rm -f %{buildroot}%{_sysconfdir}/openmpi-totalview.tcl
rm -f %{buildroot}%{_sysconfdir}/pmix-mca-params.conf
%endif
%if %{without hpc}
%post
# Always register. We might be already registered in the case of an udate
# but mpi-selector handles it fine
/usr/bin/mpi-selector \
--register %{name} \
--source-dir %{mpi_bindir} \
--yes
%preun
# Only unregister when uninstalling
if [ "$1" = "0" ]; then
/usr/bin/mpi-selector --unregister %{name} --yes
# Deregister the default if we are uninstalling it
if [ "$(/usr/bin/mpi-selector --system --query)" = "%{name}" ]; then
/usr/bin/mpi-selector --system --unset --yes
fi
fi
%post libs -p /sbin/ldconfig
%postun libs -p /sbin/ldconfig
%else #!?with_hpc
# make it default
%post -n lib%{name} -p /sbin/ldconfig
%postun -n lib%{name} -p /sbin/ldconfig
%postun
%hpc_module_delete_if_default
%endif #!?with_hpc
%files
%defattr(-, root, root)
%doc NEWS README
%license LICENSE
%dir %{mpi_prefix}
%dir %{mpi_bindir}
%dir %{mpi_libdir}
%dir %{mpi_datadir}
%dir %{mpi_mandir}
%{mpi_bindir}/mpivars.csh
%{mpi_bindir}/mpivars.sh
%if %{without hpc}
%dir %{_libdir}/mpi
%dir %{_libdir}/mpi/gcc
%dir %{_datadir}/modules/gnu-openmpi
%{_datadir}/modules/gnu-openmpi/%{version}
%else # with hpc
%hpc_mpi_dirs
%hpc_modules_files
%endif # with hpc
#
%{mpi_bindir}/mpirun
%{mpi_bindir}/ompi-clean
%{mpi_bindir}/ompi-server
%{mpi_bindir}/ompi_info
%{mpi_bindir}/orte-clean
%{mpi_bindir}/orte-info
%{mpi_bindir}/orte-server
%{mpi_bindir}/orted
%{mpi_bindir}/orterun
%if 0%{?with_ucx}
%{mpi_bindir}/oshmem_info
%{mpi_bindir}/oshrun
%{mpi_bindir}/shmemrun
%endif
%if %{without hpc}
%{mpi_bindir}/aggregate_profile.pl
%{mpi_bindir}/profile2mat.pl
%endif
%dir %{mpi_datadir}/openmpi
%dir %{mpi_datadir}/openmpi/amca-param-sets
%{mpi_datadir}/openmpi/amca-param-sets/btl-openib-benchmark
%{mpi_datadir}/openmpi/amca-param-sets/example.conf
%{mpi_datadir}/openmpi/mca-btl-openib-device-params.ini
%{mpi_datadir}/openmpi/*-data.txt
%{mpi_datadir}/openmpi/help-*.txt
%dir %{mpi_datadir}/pmix
%{mpi_datadir}/pmix/help-*.txt
%files %{!?with_hpc:libs}%{?with_hpc:-n lib%{name}}
%defattr(-,root,root)
%dir %mpi_prefix/
%dir %mpi_libdir/
%mpi_libdir/*.so.*
%{mpi_libdir}/openmpi/*.so
%if 0%{!?build_static_devel:1}
%dir %mpi_libdir/pmix/
%{mpi_libdir}/pmix/*.so
%endif
%files devel
%defattr(-, root, root)
%dir %{mpi_libdir}/openmpi
%dir %{mpi_libdir}/pkgconfig
%{mpi_includedir}
%{mpi_libdir}/*.so
%{mpi_libdir}/pkgconfig/*.pc
%{mpi_libdir}/mpi.mod
%if 0%{?suse_version} >= 1320
%{mpi_libdir}/mpi_f08*.mod
%{mpi_libdir}/pmpi_f08*.mod
%endif
%{mpi_bindir}/mpiCC
%{mpi_bindir}/mpic++
%{mpi_bindir}/mpicc
%{mpi_bindir}/mpicxx
%{mpi_bindir}/mpiexec
%{mpi_bindir}/mpif77
%{mpi_bindir}/mpif90
%{mpi_bindir}/mpifort
%{mpi_bindir}/opal_wrapper
%{mpi_bindir}/ortecc
%if 0%{?with_ucx}
%{mpi_bindir}/oshcc
%{mpi_bindir}/oshCC
%{mpi_bindir}/oshc++
%{mpi_bindir}/oshcxx
%{mpi_bindir}/oshfort
%{mpi_bindir}/shmemcc
%{mpi_bindir}/shmemCC
%{mpi_bindir}/shmemc++
%{mpi_bindir}/shmemcxx
%{mpi_bindir}/shmemfort
%endif
%{mpi_datadir}/openmpi/openmpi-valgrind.supp
%{mpi_datadir}/pmix/pmix-valgrind.supp
%files docs
%defattr(-, root, root, -)
%{mpi_mandir}
%files macros-devel
%defattr(-,root,root,-)
%if %{with hpc}
%config %{_sysconfdir}/rpm/macros.hpc-openmpi
%else
%config %{_sysconfdir}/rpm/macros.openmpi
%endif
%if 0%{?build_static_devel}
%files devel-static
%defattr(-, root, root)
%{mpi_libdir}/*.la
%{mpi_libdir}/openmpi/*.la
%{mpi_libdir}/*.a
%{mpi_libdir}/openmpi/*.a
%endif
%if %{without hpc}
%files -n %{pname}%{m_f_ver}-config
%config %{_sysconfdir}/openmpi-default-hostfile
%config %{_sysconfdir}/openmpi-mca-params.conf
%config %{_sysconfdir}/pmix-mca-params.conf
%{_sysconfdir}/openmpi-totalview.tcl
%endif
%endif # !?testsuite
%changelog

126
reproducible.patch Normal file
View File

@ -0,0 +1,126 @@
Author: Bernhard M. Wiedemann <bwiedemann suse de>
Date: 2017-06-29
make package build reproducible
by using fixed date + hostname
https://github.com/open-mpi/ompi/issues/3759
https://bugzilla.opensuse.org/show_bug.cgi?id=1047218 packages do not build reproducibly from including build time
https://bugzilla.opensuse.org/show_bug.cgi?id=1084909 +hostname
Index: openmpi-4.0.0/autogen.pl
===================================================================
--- openmpi-4.0.0.orig/autogen.pl
+++ openmpi-4.0.0/autogen.pl
@@ -85,7 +85,7 @@ if ($^O eq "solaris") {
}
$username = getpwuid($>);
-$full_hostname = `hostname`;
+$full_hostname = "openSUSEnohostname";
chomp($full_hostname);
$hostname = $full_hostname;
$hostname =~ s/^([\w\-]+)\..+/\1/;
@@ -1190,7 +1190,7 @@ if (-e "orcm") {
#---------------------------------------------------------------------------
-$full_hostname = `hostname`;
+$full_hostname = "openSUSEnohostname";
chomp($full_hostname);
$m4 = "dnl
Index: openmpi-4.0.0/config/opal_functions.m4
===================================================================
--- openmpi-4.0.0.orig/config/opal_functions.m4
+++ openmpi-4.0.0/config/opal_functions.m4
@@ -94,9 +94,9 @@ EOF
# Save some stats about this build
#
-OPAL_CONFIGURE_USER="`whoami`"
-OPAL_CONFIGURE_HOST="`(hostname || uname -n) 2> /dev/null | sed 1q`"
-OPAL_CONFIGURE_DATE="`date`"
+OPAL_CONFIGURE_USER="openSUSEnowhoami"
+OPAL_CONFIGURE_HOST="openSUSEnohostname"
+OPAL_CONFIGURE_DATE="openSUSEnodate"
OPAL_LIBNL_SANITY_INIT
@@ -116,9 +116,9 @@ AC_DEFUN([OPAL_BASIC_SETUP],[
# Save some stats about this build
#
-OPAL_CONFIGURE_USER="`whoami`"
-OPAL_CONFIGURE_HOST="`(hostname || uname -n) 2> /dev/null | sed 1q`"
-OPAL_CONFIGURE_DATE="`date`"
+OPAL_CONFIGURE_USER="openSUSEnowhoami"
+OPAL_CONFIGURE_HOST="openSUSEnohostname"
+OPAL_CONFIGURE_DATE="openSUSEnodate"
#
# Make automake clean emacs ~ files for "make clean"
Index: openmpi-4.0.0/config/opal_get_version.m4
===================================================================
--- openmpi-4.0.0.orig/config/opal_get_version.m4
+++ openmpi-4.0.0/config/opal_get_version.m4
@@ -91,7 +91,7 @@ m4_define([OPAL_GET_VERSION],[
$2_REPO_REV=`git describe --tags --always`
fi
else
- $2_REPO_REV="date`date '+%Y-%m-%d'`"
+ $2_REPO_REV="date"
fi
fi
Index: openmpi-4.0.0/ompi/tools/ompi_info/Makefile.am
===================================================================
--- openmpi-4.0.0.orig/ompi/tools/ompi_info/Makefile.am
+++ openmpi-4.0.0/ompi/tools/ompi_info/Makefile.am
@@ -27,9 +27,9 @@ AM_CFLAGS = \
-DOPAL_CONFIGURE_USER="\"@OPAL_CONFIGURE_USER@\"" \
-DOPAL_CONFIGURE_HOST="\"@OPAL_CONFIGURE_HOST@\"" \
-DOPAL_CONFIGURE_DATE="\"@OPAL_CONFIGURE_DATE@\"" \
- -DOMPI_BUILD_USER="\"$$USER\"" \
- -DOMPI_BUILD_HOST="\"`(hostname || uname -n) 2> /dev/null | sed 1q`\"" \
- -DOMPI_BUILD_DATE="\"`date`\"" \
+ -DOMPI_BUILD_USER="\"USER\"" \
+ -DOMPI_BUILD_HOST="\"openSUSEnohostname\"" \
+ -DOMPI_BUILD_DATE="\"`date -u -r ../../../NEWS`\"" \
-DOMPI_BUILD_CFLAGS="\"@CFLAGS@\"" \
-DOMPI_BUILD_CPPFLAGS="\"@CPPFLAGS@\"" \
-DOMPI_BUILD_CXXFLAGS="\"@CXXFLAGS@\"" \
Index: openmpi-4.0.0/orte/tools/orte-info/Makefile.am
===================================================================
--- openmpi-4.0.0.orig/orte/tools/orte-info/Makefile.am
+++ openmpi-4.0.0/orte/tools/orte-info/Makefile.am
@@ -24,9 +24,9 @@ AM_CFLAGS = \
-DOPAL_CONFIGURE_USER="\"@OPAL_CONFIGURE_USER@\"" \
-DOPAL_CONFIGURE_HOST="\"@OPAL_CONFIGURE_HOST@\"" \
-DOPAL_CONFIGURE_DATE="\"@OPAL_CONFIGURE_DATE@\"" \
- -DOMPI_BUILD_USER="\"$$USER\"" \
- -DOMPI_BUILD_HOST="\"`(hostname || uname -n) | sed 1q`\"" \
- -DOMPI_BUILD_DATE="\"`date`\"" \
+ -DOMPI_BUILD_USER="\"USER\"" \
+ -DOMPI_BUILD_HOST="\"openSUSEnohostname\"" \
+ -DOMPI_BUILD_DATE="\"`date -u -r ../../../NEWS`\"" \
-DOMPI_BUILD_CFLAGS="\"@CFLAGS@\"" \
-DOMPI_BUILD_CPPFLAGS="\"@CPPFLAGS@\"" \
-DOMPI_BUILD_CXXFLAGS="\"@CXXFLAGS@\"" \
Index: openmpi-4.0.0/oshmem/tools/oshmem_info/Makefile.am
===================================================================
--- openmpi-4.0.0.orig/oshmem/tools/oshmem_info/Makefile.am
+++ openmpi-4.0.0/oshmem/tools/oshmem_info/Makefile.am
@@ -16,9 +16,9 @@ AM_CPPFLAGS = \
-DOPAL_CONFIGURE_USER="\"@OPAL_CONFIGURE_USER@\"" \
-DOPAL_CONFIGURE_HOST="\"@OPAL_CONFIGURE_HOST@\"" \
-DOPAL_CONFIGURE_DATE="\"@OPAL_CONFIGURE_DATE@\"" \
- -DOMPI_BUILD_USER="\"$$USER\"" \
- -DOMPI_BUILD_HOST="\"`(hostname || uname -n) 2> /dev/null | sed 1q`\"" \
- -DOMPI_BUILD_DATE="\"`date`\"" \
+ -DOMPI_BUILD_USER="\"USER\"" \
+ -DOMPI_BUILD_HOST="\"openSUSEnohostname\"" \
+ -DOMPI_BUILD_DATE="\"`date -u -r ../../../NEWS`\"" \
-DOMPI_BUILD_CFLAGS="\"@CFLAGS@\"" \
-DOMPI_BUILD_CPPFLAGS="\"@CPPFLAGS@\"" \
-DOMPI_BUILD_CXXFLAGS="\"@CXXFLAGS@\"" \