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