Blob Blame History Raw
%global _hardened_build 1
# We only compile with gcc, but other people may want other compilers.
# Set the compiler here.
%global opt_cc gcc
# Optional CFLAGS to use with the specific compiler...gcc doesn't need any,
# so uncomment and define to use
#global opt_cflags
%global opt_cxx g++
#global opt_cxxflags
%global opt_f77 gfortran
#global opt_fflags
%global opt_fc gfortran
#global opt_fcflags


# Optional name suffix to use...we leave it off when compiling with gcc, but
# for other compiled versions to install side by side, it will need a
# suffix in order to keep the names from conflicting.
#global _cc_name_suffix -gcc

%global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d)

Name:			openmpi%{?_cc_name_suffix}
Version:		4.0.2
Release:		2%{?dist}
Summary:		Open Message Passing Interface
Group:			Development/Libraries
License:		BSD and MIT and Romio
URL:			http://www.open-mpi.org/

# We can't use %%{name} here because of _cc_name_suffix
Source0:		https://www.open-mpi.org/software/ompi/v4.0/downloads/openmpi-%{version}.tar.bz2
Source1:		openmpi.module.in
Source2:		openmpi.pth.py3
Source3:		macros.openmpi

BuildRequires:		gcc-gfortran, gcc-c++
%ifnarch s390 s390x
BuildRequires:		valgrind-devel
%endif
%ifnarch s390 s390x i686
BuildRequires:		ucx-devel
%endif
%ifnarch s390 s390x %{arm}
BuildRequires:		libibverbs-devel >= 1.1.3, opensm-devel >= 3.3.22
BuildRequires:		librdmacm-devel rdma-core-devel
%endif
# Doesn't compile:
# vt_dyn.cc:958:28: error: 'class BPatch_basicBlockLoop' has no member named 'getLoopHead'
#                      loop->getLoopHead()->getStartAddress(), loop_stmts );
#BuildRequires:		dyninst-devel
BuildRequires:		hwloc-devel
# So configure can find lstopo
BuildRequires:		hwloc-gui
BuildRequires:		java-devel
%ifnarch s390 s390x
BuildRequires:		libfabric-devel
BuildRequires:		papi-devel
%endif
BuildRequires:		perl-generators
BuildRequires:		perl(Getopt::Long)
BuildRequires:		pmix-devel
%ifarch x86_64
BuildRequires:          libpsm2-devel
%endif
BuildRequires:		torque-devel
BuildRequires:		zlib-devel
BuildRequires:		rpm-mpi-hooks
BuildRequires:		libevent-devel >= 2.0.22

Provides:		mpi
Requires:		environment(modules)
# openmpi currently requires ssh to run
# https://svn.open-mpi.org/trac/ompi/ticket/4228
Requires:		openssh-clients
Requires:		libevent >= 2.0.22

# Private openmpi libraries
%global __provides_exclude_from %{_libdir}/openmpi/lib/(lib(mca|ompi|open-(pal|rte|trace))|openmpi/).*.so
%global __requires_exclude lib(mca|ompi|open-(pal|rte|trace)|vt).*

%description
Open MPI is an open source, freely available implementation of both the
MPI-1 and MPI-2 standards, combining technologies and resources from
several other projects (FT-MPI, LA-MPI, LAM/MPI, and PACX-MPI) in
order to build the best MPI library available.  A completely new MPI-2
compliant implementation, Open MPI offers advantages for system and
software vendors, application developers, and computer science
researchers. For more information, see http://www.open-mpi.org/ .

%package devel
Summary:	Development files for openmpi
Group:		Development/Libraries
Requires:	%{name} = %{version}-%{release}, gcc-gfortran
Provides:	mpi-devel
Requires:	rpm-mpi-hooks

%description devel
Contains development headers and libraries for openmpi.

%package java
Summary:	Java library
Group:		Development/Libraries
Requires:	%{name} = %{version}-%{release}
Requires:	java-headless

%description java
OpenMPI Java library.

%package java-devel
Summary:	Java development files for openmpi
Group:		Development/Libraries
Requires:	%{name}-java = %{version}-%{release}
Requires:	java-devel

%description java-devel
Contains development wrapper for compiling Java with openmpi.

# We set this to for convenience, since this is the unique dir we use for this
# particular package, version, compiler
%global namearch openmpi-%{_arch}%{?_cc_name_suffix}

%package -n python3-openmpi
Summary:	OpenMPI support for Python 3
Group:		Development/Libraries
BuildRequires:	python3-devel
Requires:	%{name} = %{version}-%{release}
Provides:	python-openmpi

%description -n python3-openmpi
OpenMPI support for Python 3.


%prep
%setup -q -n openmpi-%{version}

%build
%set_build_flags
./configure --prefix=%{_libdir}/%{name} \
	--mandir=%{_mandir}/%{namearch} \
	--includedir=%{_includedir}/%{namearch} \
	--sysconfdir=%{_sysconfdir}/%{namearch} \
	--disable-silent-rules \
	--enable-builtin-atomics \
	--enable-mpi-thread-multiple \
%ifnarch %{power64}
	--enable-mpi-cxx \
%endif
	--enable-mpi-java \
	--enable-mpi-fortran=all \
	--enable-cxx-exceptions \
	--with-sge \
%ifnarch s390 s390x
	--with-valgrind \
	--enable-memchecker \
%endif
%ifnarch s390 s390x i686
	--with-ucx \
	--with-ucx-libdir=%{_libdir} \
%endif
	--with-hwloc=external \
	--with-pmix=external \
	--with-libevent=external \
	CC=%{opt_cc} CXX=%{opt_cxx} FC=%{opt_fc} \
	LDFLAGS="%{build_ldflags}" \
	CFLAGS="%{?opt_cflags}%{!?opt_cflags:$RPM_OPT_FLAGS}" \
	CXXFLAGS="%{?opt_cxxflags}%{!?opt_cxxflags:$RPM_OPT_FLAGS}" \
	FCFLAGS="%{?opt_fcflags}%{!?opt_fcflags:$RPM_OPT_FLAGS}" \
	--with-contrib-vt-flags='CXXFLAGS="-I%{_includedir}/dyninst -L%{_libdir}/dyninst"'

make %{?_smp_mflags} V=1

%install
make install DESTDIR=%{buildroot}
find %{buildroot}%{_libdir}/%{name}/lib -name \*.la | xargs rm
find %{buildroot}%{_mandir}/%{namearch} -type f | xargs gzip -9
ln -s mpicc.1.gz %{buildroot}%{_mandir}/%{namearch}/man1/mpiCC.1.gz
# Remove dangling symlink
rm %{buildroot}%{_mandir}/%{namearch}/man1/mpiCC.1
mkdir %{buildroot}%{_mandir}/%{namearch}/man{2,4,5,6,8,9,n}

# Make the environment-modules file
mkdir -p %{buildroot}%{_sysconfdir}/modulefiles/mpi
# Since we're doing our own substitution here, use our own definitions.
sed 's#@LIBDIR@#%{_libdir}/%{name}#;
     s#@ETCDIR@#%{_sysconfdir}/%{namearch}#;
     s#@FMODDIR@#%{_fmoddir}/%{name}#;
     s#@INCDIR@#%{_includedir}/%{namearch}#;
     s#@MANDIR@#%{_mandir}/%{namearch}#;
     s#@PYSITEARCH@#%{python3_sitearch}/%{name}#;
     s#@COMPILER@#openmpi-%{_arch}%{?_cc_name_suffix}#;
     s#@SUFFIX@#%{?_cc_name_suffix}_openmpi#' \
     <%{SOURCE1} \
     >%{buildroot}%{_sysconfdir}/modulefiles/mpi/%{namearch}

# make the rpm config file
install -Dpm 644 %{SOURCE3} %{buildroot}/%{macrosdir}/macros.%{namearch}

# Link the fortran module to proper location
mkdir -p %{buildroot}%{_fmoddir}/%{name}
for mod in %{buildroot}%{_libdir}/%{name}/lib/*.mod
do
  modname=$(basename $mod)
  ln -s ../../../%{name}/lib/${modname} %{buildroot}/%{_fmoddir}/%{name}/
done

# Link the pkgconfig files into the main namespace as well
mkdir -p %{buildroot}%{_libdir}/pkgconfig
cd %{buildroot}%{_libdir}/pkgconfig
ln -s ../%{name}/lib/pkgconfig/*.pc .
cd -

# Remove extraneous wrapper link libraries (bug 814798)
sed -i -e s/-ldl// -e s/-lhwloc// \
  %{buildroot}%{_libdir}/%{name}/share/openmpi/*-wrapper-data.txt

# install .pth files
mkdir -p %{buildroot}/%{python3_sitearch}/%{name}
install -pDm0644 %{SOURCE2} %{buildroot}/%{python3_sitearch}/openmpi.pth

%check
make check

%files
%license LICENSE
%dir %{_libdir}/%{name}
%dir %{_sysconfdir}/%{namearch}
%dir %{_libdir}/%{name}/bin
%dir %{_libdir}/%{name}/lib
%dir %{_libdir}/%{name}/lib/openmpi
%dir %{_mandir}/%{namearch}
%dir %{_mandir}/%{namearch}/man*
%config(noreplace) %{_sysconfdir}/%{namearch}/*
%{_libdir}/%{name}/bin/*.pl
%{_libdir}/%{name}/bin/mpi[er]*
%{_libdir}/%{name}/bin/ompi*
%{_libdir}/%{name}/bin/orte[-dr_]*
%ifnarch s390 s390x i686
%{_libdir}/%{name}/bin/osh*
%{_libdir}/%{name}/bin/shmem*
%endif
%{_libdir}/%{name}/lib/*.so.*
%{_mandir}/%{namearch}/man1/*
%{_mandir}/%{namearch}/man7/*
%{_libdir}/%{name}/lib/openmpi/*
%{_sysconfdir}/modulefiles/mpi/
%dir %{_libdir}/%{name}/share
%dir %{_libdir}/%{name}/share/openmpi
%{_libdir}/%{name}/share/openmpi/amca-param-sets
%{_libdir}/%{name}/share/openmpi/help*.txt
%ifnarch s390 %{arm}
%{_libdir}/%{name}/share/openmpi/mca-btl-openib-device-params.ini
%endif


%files devel
%dir %{_includedir}/%{namearch}
%{_libdir}/%{name}/bin/mpi[cCf]*
%{_libdir}/%{name}/bin/opal_*
%{_libdir}/%{name}/bin/orte[cCf]*
%{_includedir}/%{namearch}/*
%{_fmoddir}/%{name}/
%{_libdir}/%{name}/lib/*.so
%{_libdir}/%{name}/lib/*.mod
%{_libdir}/%{name}/lib/pkgconfig/
%{_libdir}/pkgconfig/*.pc
%{_mandir}/%{namearch}/man1/mpi[cCf]*
%{_mandir}/%{namearch}/man1/opal_*
%{_mandir}/%{namearch}/man3/*
%{_libdir}/%{name}/share/openmpi/openmpi-valgrind.supp
%{_libdir}/%{name}/share/openmpi/*-wrapper-data.txt
%{macrosdir}/macros.%{namearch}

%files java
%{_libdir}/%{name}/lib/mpi.jar

%files java-devel
%{_libdir}/%{name}/bin/mpijavac
%{_libdir}/%{name}/bin/mpijavac.pl
# Currently this only contaings openmpi/javadoc
%{_libdir}/%{name}/share/doc/
%{_mandir}/%{namearch}/man1/mpijavac.1.gz

%files -n python3-openmpi
%dir %{python3_sitearch}/%{name}
%{python3_sitearch}/openmpi.pth


%changelog
* Sun Jan 19 2020 Honggang Li <honli@redhat.com> - 4.0.2-2
- Rebuild against ucx-1.6
- Resolves: rhbz#1791483

* Wed Oct 16 2019 Jarod Wilson <jarod@redhat.com> - 4.0.2-1
- Update to upstream v4.0.2 release
- Resolves: rhbz#1725631

* Thu Aug 01 2019 Jarod Wilson <jarod@redhat.com> - 4.0.1-3
- Actually enable UCX support
- Resolves: rhbz#1642942

* Wed Jun 19 2019 Jarod Wilson <jarod@redhat.com> - 4.0.1-2
- Bump and rebuild for newer opensm
- Resolves: rhbz#1717289

* Mon Apr 29 2019 Jarod Wilson <jarod@redhat.com> - 4.0.1-1
- Update to upstream v4.0.1 release
- Resolves: rhbz#1660623

* Tue Sep 25 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-5
- Update BR: opensm-devel min version and rebuild against opensm 3.3.21
- Resolves: rhbz#1630653

* Mon Sep 24 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-4
- Further tweaks to compile/linker flag usage
- Related: rhbz#1624157
- Move modulefiles under /etc like our other suppored mpi providers
- Resolves: rhbz#1632399

* Tue Sep 18 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-3
- Undo stripping/ignoring of distro-provided optimization flags
- Related: rhbz#1624157

* Wed Sep 12 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-2
- Additional tweaks to module paths, fix openmpi-devel R
- Related: rhbz#1623441

* Wed Sep 12 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-1
- Update to upstream 3.1.2 bug fix release
- Fix some paths in module file, strip out python2 bits
- Related: rhbz#1623441

* Thu Aug 30 2018 Jarod Wilson <jarod@redhat.com> - 3.1.1-2
- Bump and rebuild for autogen rpmbuild library dependency fixes
- Related: rhbz#1623441

* Mon Jul 02 2018 Jarod Wilson <jarod@redhat.com> - 3.1.1-1
- Update to upstream 3.1.1 bug fix release
- Drop BR: on deprecated infinipath-psm

* Thu May 31 2018 Jarod Wilson <jarod@redhat.com> - 3.1.0-1
- Update to upstream 3.1.0 release
- Use external pmix and libevent

* Thu May 17 2018 Charalampos Stratakis <cstratak@redhat.com> - 2.1.1-11
- Do not build the python2 subpackage on EL > 7

* Wed May 09 2018 Troy Dawson <tdawson@redhat.com> - 2.1.1-10
- Build with rdma-core-devel instead of libibcm-devel

* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 2.1.1-9
- Escape macros in %%changelog

* Mon Feb 05 2018 Orion Poplawski <orion@cora.nwra.com> - 2.1.1-8
- Rebuild for rdma-core 16.2

* Wed Jan 31 2018 Christoph Junghans <junghans@votca.org> - 2.1.1-7
- Rebuild for gfortran-8

* Fri Jan 12 2018 Iryna Shcherbina <ishcherb@redhat.com> - 2.1.1-6
- Update Python 2 dependency declarations to new packaging standards
  (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)

* Wed Aug 23 2017 Adam Williamson <awilliam@redhat.com> - 2.1.1-5
- Disable RDMA support on 32-bit ARM (#1484155)
- Disable hanging opal_fifo test on ppc64le (gh #2526 / #2966)

* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.1.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild

* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.1.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild

* Wed Jul 19 2017 Orion Poplawski <orion@cora.nwra.com> - 2.1.1-2
- Provide pkgconfig files in the main namespace as well (1471512)

* Fri May 12 2017 Orion Poplawski <orion@cora.nwra.com> - 2.1.1-1
- Update to 2.1.1

* Thu May 4 2017 Orion Poplawski <orion@cora.nwra.com> - 2.1.0-1
- Update to 2.1.0