d7a3d84
%{!?configure_options: %global configure_options %{nil}}
4096a7b
%bcond_without cma
4096a7b
%bcond_with    cuda
4096a7b
%bcond_with    gdrcopy
4096a7b
%bcond_without ib
4096a7b
%if 0%{?fedora} >= 30 || 0%{?rhel} >= 7
4096a7b
%bcond_with ib_cm
4096a7b
%else
4096a7b
%bcond_without ib_cm
4096a7b
%endif
4096a7b
%bcond_with    knem
4096a7b
%bcond_without rdmacm
4096a7b
%bcond_with    rocm
4096a7b
%bcond_with    ugni
4096a7b
%bcond_with    xpmem
d7a3d84
d7a3d84
Name: ucx
a3eac79
Version: 1.6.1
4096a7b
Release: 1%{?dist}
c34d554
Summary: UCX is a communication library implementing high-performance messaging
d7a3d84
d7a3d84
License: BSD
d7a3d84
URL: http://www.openucx.org
a3eac79
Source: https://github.com/openucx/%{name}/releases/download/v1.6.1/ucx-1.6.1.tar.gz
0d580f4
0d580f4
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
d7a3d84
d7a3d84
# UCX currently supports only the following architectures
d7a3d84
ExclusiveArch: aarch64 ppc64le x86_64
d7a3d84
4096a7b
BuildRequires: automake autoconf libtool gcc-c++ numactl-devel
4096a7b
%if %{with cma}
4096a7b
BuildRequires: glibc-devel >= 2.15
4096a7b
%endif
4096a7b
%if %{with gdrcopy}
4096a7b
BuildRequires: gdrcopy
4096a7b
%endif
4096a7b
%if %{with ib}
4096a7b
BuildRequires: libibverbs-devel
4096a7b
%endif
4096a7b
%if %{with ib_cm}
4096a7b
BuildRequires: libibcm-devel
4096a7b
%endif
4096a7b
%if %{with knem}
4096a7b
BuildRequires: knem
4096a7b
%endif
4096a7b
%if %{with rdmacm}
4096a7b
BuildRequires: librdmacm-devel
4096a7b
%endif
4096a7b
%if %{with rocm}
4096a7b
BuildRequires: hsa-rocr-dev
4096a7b
%endif
4096a7b
%if %{with xpmem}
4096a7b
BuildRequires: xpmem-devel
4096a7b
%endif
d7a3d84
d7a3d84
%description
0d580f4
UCX stands for Unified Communication X. UCX provides an optimized communication
0d580f4
layer for Message Passing (MPI), PGAS/OpenSHMEM libraries and RPC/data-centric
0d580f4
applications. UCX utilizes high-speed networks, such as RDMA (InfiniBand, RoCE,
0d580f4
etc), Cray Gemini or Aries, for inter-node communication. If no such network is
0d580f4
available, TCP is used instead. UCX supports efficient transfer of data in
0d580f4
either main memory (RAM) or GPU memory (through CUDA and ROCm libraries).
0d580f4
In addition, UCX provides efficient intra-node communication, by leveraging the
0d580f4
following shared memory mechanisms: posix, sysv, cma, knem, and xpmem.
d7a3d84
d7a3d84
%package devel
d7a3d84
Requires: %{name}%{?_isa} = %{version}-%{release}
4096a7b
Summary: Header files required for developing with UCX
d7a3d84
d7a3d84
%description devel
d7a3d84
Provides header files and examples for developing with UCX.
d7a3d84
d7a3d84
%prep
d7a3d84
%setup -q
d7a3d84
d7a3d84
%build
4096a7b
%define _with_arg()   %{expand:%%{?with_%{1}:--with-%{2}}%%{!?with_%{1}:--without-%{2}}}
4096a7b
%define _enable_arg() %{expand:%%{?with_%{1}:--enable-%{2}}%%{!?with_%{1}:--disable-%{2}}}
d7a3d84
%configure --disable-optimizations \
d7a3d84
           --disable-logging \
d7a3d84
           --disable-debug \
d7a3d84
           --disable-assertions \
d7a3d84
           --disable-params-check \
4096a7b
           %_enable_arg cma cma \
4096a7b
           %_with_arg cuda cuda \
4096a7b
           %_with_arg gdrcopy gdrcopy \
4096a7b
           %_with_arg ib verbs \
4096a7b
           %_with_arg ib_cm cm \
4096a7b
           %_with_arg knem knem \
4096a7b
           %_with_arg rdmacm rdmacm \
4096a7b
           %_with_arg rocm rocm \
4096a7b
           %_with_arg xpmem xpmem \
4096a7b
           %_with_arg ugni ugni \
d7a3d84
           %{?configure_options}
c34d554
make %{?_smp_mflags} V=1
d7a3d84
d7a3d84
%install
c34d554
make DESTDIR=%{buildroot} install
d7a3d84
rm -f %{buildroot}%{_libdir}/*.la
4096a7b
rm -f %{buildroot}%{_libdir}/*.a
4096a7b
rm -f %{buildroot}%{_libdir}/ucx/*.la
4096a7b
rm -f %{buildroot}%{_libdir}/ucx/lib*.so
4096a7b
rm -f %{buildroot}%{_libdir}/ucx/lib*.a
d7a3d84
d7a3d84
%files
d7a3d84
%{_libdir}/lib*.so.*
d7a3d84
%{_bindir}/uc*
c34d554
%{_datadir}/ucx
c34d554
%exclude %{_datadir}/ucx/examples
c34d554
%doc README AUTHORS NEWS
0d580f4
%{!?_licensedir:%global license %%doc}
d7a3d84
%license LICENSE
d7a3d84
d7a3d84
%files devel
d7a3d84
%{_includedir}/uc*
d7a3d84
%{_libdir}/lib*.so
d7a3d84
%{_libdir}/pkgconfig/ucx.pc
c34d554
%{_datadir}/ucx/examples
d7a3d84
0d580f4
%post -p /sbin/ldconfig
0d580f4
%postun -p /sbin/ldconfig
d7a3d84
4096a7b
%if %{with cma}
4096a7b
%package cma
4096a7b
Requires: %{name}%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX CMA support
df0afde
4096a7b
%description cma
4096a7b
Provides CMA (Linux cross-memory-attach) transport for UCX. It utilizes the
4096a7b
system calls process_vm_readv/writev() for one-shot memory copy from another
4096a7b
process.
4096a7b
4096a7b
%files cma
4096a7b
%{_libdir}/ucx/libuct_cma.so.*
4096a7b
%endif
4096a7b
4096a7b
%if %{with cuda}
4096a7b
%package cuda
4096a7b
Requires: %{name}%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX CUDA support
4096a7b
4096a7b
%description cuda
4096a7b
Provide CUDA (NVIDIA GPU) support for UCX. Enables passing GPU memory pointers
4096a7b
to UCX communication routines, and transports taking advantage of GPU-Direct
4096a7b
technology for direct data transfer between GPU and RDMA devices.
4096a7b
4096a7b
%files cuda
4096a7b
%{_libdir}/ucx/libucx_perftest_cuda.so.*
4096a7b
%{_libdir}/ucx/libucm_cuda.so.*
4096a7b
%{_libdir}/ucx/libuct_cuda.so.*
4096a7b
%endif
4096a7b
4096a7b
%if %{with gdrcopy}
4096a7b
%package gdrcopy
4096a7b
Requires: %{name}-cuda%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX GDRCopy support
4096a7b
4096a7b
%description gdrcopy
4096a7b
Provide GDRCopy support for UCX. GDRCopy is a low-latency GPU memory copy
4096a7b
library, built on top of the NVIDIA GPUDirect RDMA technology.
4096a7b
4096a7b
%files gdrcopy
4096a7b
%{_libdir}/ucx/libuct_cuda_gdrcopy.so.*
4096a7b
%endif
4096a7b
4096a7b
%if %{with ib}
4096a7b
%package ib
4096a7b
Requires: %{name}%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX RDMA support
4096a7b
4096a7b
%description ib
4096a7b
Provides support for IBTA-compliant transports for UCX. This includes RoCE,
4096a7b
InfiniBand, OmniPath, and any other transport supported by IB Verbs API.
4096a7b
Typically these transports provide RDMA support, which enables a fast and
4096a7b
hardware-offloaded data transfer.
4096a7b
4096a7b
%files ib
4096a7b
%{_libdir}/ucx/libuct_ib.so.*
4096a7b
%endif
4096a7b
4096a7b
%if %{with ib_cm}
4096a7b
%package ib-cm
4096a7b
Requires: %{name}-ib%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX InfiniBand connection-manager support
4096a7b
4096a7b
%description ib-cm
4096a7b
Provides Infiniband Connection Manager (also known as ibcm) support for UCX.
4096a7b
4096a7b
%files ib-cm
4096a7b
%{_libdir}/ucx/libuct_ib_cm.so.*
4096a7b
%endif
4096a7b
4096a7b
%if %{with knem}
4096a7b
%package knem
4096a7b
Requires: %{name}%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX KNEM transport support
4096a7b
4096a7b
%description knem
4096a7b
Provides KNEM (fast inter-process copy) transport for UCX. KNEM is a Linux
4096a7b
kernel module that enables high-performance intra-node MPI communication
4096a7b
for large messages.
4096a7b
4096a7b
%files knem
4096a7b
%{_libdir}/ucx/libuct_knem.so.*
4096a7b
%endif
4096a7b
4096a7b
%if %{with rdmacm}
4096a7b
%package rdmacm
4096a7b
Requires: %{name}%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX RDMA connection manager support
4096a7b
4096a7b
%description rdmacm
4096a7b
Provides RDMA connection-manager support to UCX, which enables client/server
4096a7b
based connection establishment for RDMA-capable transports.
4096a7b
4096a7b
%files rdmacm
4096a7b
%{_libdir}/ucx/libuct_rdmacm.so.*
4096a7b
%endif
4096a7b
4096a7b
%if %{with rocm}
4096a7b
%package rocm
4096a7b
Requires: %{name}%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX ROCm GPU support
4096a7b
4096a7b
%description rocm
4096a7b
Provides Radeon Open Compute (ROCm) Runtime support for UCX.
4096a7b
4096a7b
%files rocm
4096a7b
%{_libdir}/ucx/libuct_rocm.so.*
4096a7b
%{_libdir}/ucx/libucm_rocm.so.*
4096a7b
4096a7b
%if %{with gdrcopy}
4096a7b
%package rocmgdr
4096a7b
Requires: %{name}-rocm%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX GDRCopy support for ROCM
4096a7b
4096a7b
%description rocmgdr
4096a7b
Provide GDRCopy support for UCX ROCM. GDRCopy is a low-latency GPU memory copy
4096a7b
library, built on top of the NVIDIA GPUDirect RDMA technology.
4096a7b
4096a7b
%files rocmgdr
4096a7b
%{_libdir}/ucx/libuct_rocm_gdr.so.*
4096a7b
%endif
4096a7b
%endif
4096a7b
4096a7b
%if %{with ugni}
4096a7b
%package ugni
4096a7b
Requires: %{name}%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX Gemini/Aries transport support.
4096a7b
4096a7b
%description ugni
4096a7b
Provides Gemini/Aries transport for UCX.
4096a7b
4096a7b
%files ugni
4096a7b
%{_libdir}/ucx/libuct_ugni.so.*
4096a7b
%endif
4096a7b
4096a7b
%if %{with xpmem}
4096a7b
%package xpmem
4096a7b
Requires: %{name}%{?_isa} = %{version}-%{release}
4096a7b
Summary: UCX XPMEM transport support.
4096a7b
4096a7b
%description xpmem
4096a7b
Provides XPMEM transport for UCX. XPMEM is a Linux kernel module that enables a
4096a7b
process to map the memory of another process into its virtual address space.
4096a7b
4096a7b
%files xpmem
4096a7b
%{_libdir}/ucx/libuct_xpmem.so.*
4096a7b
%endif
4096a7b
4096a7b
4096a7b
%changelog
a3eac79
* Sat Jul 20 2019 Yossi Itigin <yosefe@mellanox.com> 1.6.1-1
a3eac79
- Bump version to 1.6.1
4096a7b
* Thu Jan 24 2019 Yossi Itigin <yosefe@mellanox.com> 1.6.0-1
4096a7b
- Add cma, knem, and xpmem sub-packages
4096a7b
* Tue Nov 20 2018 Yossi Itigin <yosefe@mellanox.com> 1.6.0-1
4096a7b
- Bump version to 1.6.0
0d580f4
* Tue Nov 6 2018 Andrey Maslennikov <andreyma@mellanox.com> 1.5.0-1
0d580f4
- Bump version to 1.5.0
0d580f4
- See NEWS for details
0d580f4
* Tue Oct 30 2018 Andrey Maslennikov <andreyma@mellanox.com> 1.4.0-1
0d580f4
- See NEWS for details
Orion Poplawski c95fa08
* Mon Aug 20 2018 Andrey Maslennikov <andreyma@mellanox.com> 1.3.1-1
Orion Poplawski c95fa08
- See NEWS for details
c34d554
* Thu Aug 16 2018 Andrey Maslennikov <andreyma@mellanox.com> 1.3.0-1
c34d554
- Explicitly set gcc-c++ as requirements
c34d554
* Wed Mar 7 2018 Andrey Maslennikov <andreyma@mellanox.com> 1.3.0-1
c34d554
- See NEWS for details
d7a3d84
* Mon Aug 21 2017 Andrey Maslennikov <andreyma@mellanox.com> 1.2.1-1
d7a3d84
- Spec file now complies with Fedora guidelines
d7a3d84
* Mon Jul 3 2017 Andrey Maslennikov <andreyma@mellanox.com> 1.2.0-1
d7a3d84
- Fedora package created