commit 2a914cad0765cfe48b67d467a6f8dca90ae1f6706b4e8b83a5560d589b2b875a Author: Nicolas Morey-Chaisemartin Date: Wed Jan 15 13:55:39 2020 +0000 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 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/_multibuild b/_multibuild new file mode 100644 index 0000000..825bf2e --- /dev/null +++ b/_multibuild @@ -0,0 +1,6 @@ + + standard + testsuite + gnu-hpc + gnu-hpc-testsuite + diff --git a/_service b/_service new file mode 100644 index 0000000..a862d89 --- /dev/null +++ b/_service @@ -0,0 +1,17 @@ + + + git + https://github.com/open-mpi/ompi.git + no + .git + openmpi + @PARENT_TAG@.@TAG_OFFSET@.%h + v(.*) + \1 + cb5f4e737a9d9cf47511b940179d620dd11249b3 + + + openmpi*.tar + bz2 + + diff --git a/macros.hpc-openmpi b/macros.hpc-openmpi new file mode 100644 index 0000000..f6d9650 --- /dev/null +++ b/macros.hpc-openmpi @@ -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 + diff --git a/macros.mpi b/macros.mpi new file mode 100644 index 0000000..0789bce --- /dev/null +++ b/macros.mpi @@ -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 } compress man page in %mpi_mandir/man +%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 \\\ + } diff --git a/macros.mpi-hpc b/macros.mpi-hpc new file mode 100644 index 0000000..29c89f8 --- /dev/null +++ b/macros.mpi-hpc @@ -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 } compress man page in %mpi_mandir/man +%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} diff --git a/memory-patcher-fix-compiler-warning.patch b/memory-patcher-fix-compiler-warning.patch new file mode 100644 index 0000000..3e78202 --- /dev/null +++ b/memory-patcher-fix-compiler-warning.patch @@ -0,0 +1,24 @@ +commit aa60ad84658b3433bcecb968f8dea2031fec27c3 +Author: Maxwell Coil +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 + +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, diff --git a/mpivars.csh b/mpivars.csh new file mode 100644 index 0000000..5c7f4a3 --- /dev/null +++ b/mpivars.csh @@ -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 diff --git a/mpivars.sh b/mpivars.sh new file mode 100644 index 0000000..c8317da --- /dev/null +++ b/mpivars.sh @@ -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 diff --git a/openmpi-4.0.2.0.cb5f4e737a9d.tar.bz2 b/openmpi-4.0.2.0.cb5f4e737a9d.tar.bz2 new file mode 100644 index 0000000..fa2846a --- /dev/null +++ b/openmpi-4.0.2.0.cb5f4e737a9d.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2798b5679a61c052c876c00f700b7c8c556d32dd7585350c0dd1434bfcb73c5 +size 6267972 diff --git a/openmpi4-rpmlintrc b/openmpi4-rpmlintrc new file mode 100644 index 0000000..446289f --- /dev/null +++ b/openmpi4-rpmlintrc @@ -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") diff --git a/openmpi4.changes b/openmpi4.changes new file mode 100644 index 0000000..3b41ade --- /dev/null +++ b/openmpi4.changes @@ -0,0 +1,15 @@ +------------------------------------------------------------------- +Wed Jan 15 09:05:14 UTC 2020 - Nicolas Morey-Chaisemartin + +- Add memory-patcher-fix-compiler-warning.patch to fix 64bit portability issues + +------------------------------------------------------------------- +Thu Oct 31 17:05:14 UTC 2019 - Nicolas Morey-Chaisemartin + +- Link against libnuma (bsc#1155120) + +------------------------------------------------------------------- +Thu Oct 24 14:40:07 UTC 2019 - Nicolas Morey-Chaisemartin + +- Initial version (4.0.2) +- Add reproducible.patch for reproducible builds. diff --git a/openmpi4.spec b/openmpi4.spec new file mode 100644 index 0000000..e683a56 --- /dev/null +++ b/openmpi4.spec @@ -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 < %{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 <%{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 < %{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 diff --git a/reproducible.patch b/reproducible.patch new file mode 100644 index 0000000..40afb69 --- /dev/null +++ b/reproducible.patch @@ -0,0 +1,126 @@ +Author: Bernhard M. Wiedemann +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@\"" \