%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 %{arm} 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 %{arm} --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 %{arm} %{_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 - 4.0.2-2 - Rebuild against ucx-1.6 - Resolves: rhbz#1791483 * Wed Oct 16 2019 Jarod Wilson - 4.0.2-1 - Update to upstream v4.0.2 release - Resolves: rhbz#1725631 * Thu Aug 01 2019 Jarod Wilson - 4.0.1-3 - Actually enable UCX support - Resolves: rhbz#1642942 * Wed Jun 19 2019 Jarod Wilson - 4.0.1-2 - Bump and rebuild for newer opensm - Resolves: rhbz#1717289 * Mon Apr 29 2019 Jarod Wilson - 4.0.1-1 - Update to upstream v4.0.1 release - Resolves: rhbz#1660623 * Tue Sep 25 2018 Jarod Wilson - 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 - 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 - 3.1.2-3 - Undo stripping/ignoring of distro-provided optimization flags - Related: rhbz#1624157 * Wed Sep 12 2018 Jarod Wilson - 3.1.2-2 - Additional tweaks to module paths, fix openmpi-devel R - Related: rhbz#1623441 * Wed Sep 12 2018 Jarod Wilson - 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 - 3.1.1-2 - Bump and rebuild for autogen rpmbuild library dependency fixes - Related: rhbz#1623441 * Mon Jul 02 2018 Jarod Wilson - 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 - 3.1.0-1 - Update to upstream 3.1.0 release - Use external pmix and libevent * Thu May 17 2018 Charalampos Stratakis - 2.1.1-11 - Do not build the python2 subpackage on EL > 7 * Wed May 09 2018 Troy Dawson - 2.1.1-10 - Build with rdma-core-devel instead of libibcm-devel * Fri Feb 09 2018 Igor Gnatenko - 2.1.1-9 - Escape macros in %%changelog * Mon Feb 05 2018 Orion Poplawski - 2.1.1-8 - Rebuild for rdma-core 16.2 * Wed Jan 31 2018 Christoph Junghans - 2.1.1-7 - Rebuild for gfortran-8 * Fri Jan 12 2018 Iryna Shcherbina - 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 - 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 - 2.1.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild * Thu Jul 27 2017 Fedora Release Engineering - 2.1.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild * Wed Jul 19 2017 Orion Poplawski - 2.1.1-2 - Provide pkgconfig files in the main namespace as well (1471512) * Fri May 12 2017 Orion Poplawski - 2.1.1-1 - Update to 2.1.1 * Thu May 4 2017 Orion Poplawski - 2.1.0-1 - Update to 2.1.0