428 lines
14 KiB
RPMSpec
428 lines
14 KiB
RPMSpec
|
#
|
||
|
# spec file for package pmdk
|
||
|
#
|
||
|
# Copyright (c) 2021 SUSE LLC
|
||
|
# Copyright 2016, Intel Corporation
|
||
|
#
|
||
|
# 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/
|
||
|
#
|
||
|
|
||
|
|
||
|
%if 0%{?suse_version} > 1315
|
||
|
%define with_fabric 1
|
||
|
%endif
|
||
|
|
||
|
%define min_libfabric_ver 1.4.2
|
||
|
%define min_ndctl_ver 63.0
|
||
|
|
||
|
Name: pmdk
|
||
|
Version: 1.11.1
|
||
|
Release: 0
|
||
|
Summary: Persistent Memory Development Kit
|
||
|
License: BSD-3-Clause
|
||
|
Group: Development/Libraries/C and C++
|
||
|
URL: http://pmem.io/pmdk/
|
||
|
|
||
|
Source: https://github.com/pmem/pmdk/archive/%version.tar.gz
|
||
|
Source1: pregen-doc.tgz
|
||
|
Source99: gen-doc.sh
|
||
|
Patch0: examples-rpmem-add-missing-lfabric-flag.patch
|
||
|
|
||
|
BuildRequires: automake
|
||
|
BuildRequires: fdupes
|
||
|
BuildRequires: man
|
||
|
BuildRequires: pkg-config
|
||
|
%if 0%{?with_fabric}
|
||
|
BuildRequires: libfabric-devel >= %min_libfabric_ver
|
||
|
%endif
|
||
|
# NVML was renamed upstream to PMDK between 1.3 and 1.3.1
|
||
|
Obsoletes: nvml < %version-%release
|
||
|
Provides: nvml = %version-%release
|
||
|
BuildRequires: libndctl-devel >= %min_ndctl_ver
|
||
|
|
||
|
# By design, NVML does not support any 32-bit architecture.
|
||
|
# Due to dependency on xmmintrin.h and some inline assembly, it can be
|
||
|
# compiled only for x86_64 at the moment.
|
||
|
# Other 64-bit architectures could also be supported, if only there is
|
||
|
# a request for that, and if somebody provides the arch-specific
|
||
|
# implementation of the low-level routines for flushing to persistent
|
||
|
# memory.
|
||
|
ExclusiveArch: x86_64 aarch64 ppc64le
|
||
|
|
||
|
# Debug variants of the libraries should be filtered out of the provides.
|
||
|
%global __provides_exclude_from ^%_libdir/pmdk_debug/.*\\.so.*$
|
||
|
|
||
|
%description
|
||
|
The Persistent Memory Development Kit (PMDK), formerly known as NVML
|
||
|
(Non-Volatile Memory Library), is a collection of libraries and tools
|
||
|
built on the DAX (Direct Access) feature of the Linux kernel which
|
||
|
allows applications to access persistent memory as memory-mapped
|
||
|
files, as described in the SNIA NVM Programming Model.
|
||
|
|
||
|
%package tools
|
||
|
Summary: Utilities for Persistent Memory
|
||
|
Group: System/Base
|
||
|
Obsoletes: nvml-tools < %version-%release
|
||
|
Provides: nvml-tools = %version-%release
|
||
|
Requires: bash-completion
|
||
|
|
||
|
%description tools
|
||
|
The Persistent Memory Development Kit (PMDK) is a collection of
|
||
|
libraries and tools built on the DAX (Direct Access) feature of the
|
||
|
Linux kernel which allows applications to access persistent memory as
|
||
|
memory-mapped files, as described in the SNIA NVM Programming Model.
|
||
|
|
||
|
* pmempool: utility for administration and diagnosis of PMDK pools
|
||
|
* pmreorder: Python scripts to parse and replay operations logged by pmemcheck
|
||
|
* daxio: utility to perform I/O on DAX devices
|
||
|
|
||
|
%package -n libpmem1
|
||
|
Summary: Low-level persistent memory support library
|
||
|
Group: System/Libraries
|
||
|
Recommends: %name
|
||
|
|
||
|
%description -n libpmem1
|
||
|
libpmem provides low level persistent memory support, in particular,
|
||
|
support for the persistent memory instructions for flushing changes
|
||
|
to pmem.
|
||
|
|
||
|
%package -n libpmem-devel
|
||
|
Summary: Development files for the low-level persistent memory library
|
||
|
Group: Development/Libraries/C and C++
|
||
|
Requires: libpmem1 = %version
|
||
|
|
||
|
%description -n libpmem-devel
|
||
|
libpmem provides low level persistent memory support. In particular,
|
||
|
support for the persistent memory instructions for flushing changes
|
||
|
to pmem is provided.
|
||
|
|
||
|
This library is provided for software which tracks every store to
|
||
|
pmem and needs to flush those changes to durability. Most developers
|
||
|
will find higher level libraries like libpmemobj to be much more
|
||
|
convenient.
|
||
|
|
||
|
%package -n libpmem2-1
|
||
|
Summary: Low-level persistent memory support library
|
||
|
Group: System/Libraries
|
||
|
Recommends: %name
|
||
|
|
||
|
%description -n libpmem2-1
|
||
|
libpmem provides low level persistent memory support, in particular,
|
||
|
support for the persistent memory instructions for flushing changes
|
||
|
to pmem. libpmem2 has a new API that addresses many of the shortcommings
|
||
|
of libpmem1
|
||
|
|
||
|
%package -n libpmem2-devel
|
||
|
Summary: Development files for the low-level persistent memory library
|
||
|
Group: Development/Libraries/C and C++
|
||
|
Requires: libpmem2-1 = %version
|
||
|
|
||
|
%description -n libpmem2-devel
|
||
|
libpmem2 provides low level persistent memory support. In particular,
|
||
|
support for the persistent memory instructions for flushing changes
|
||
|
to pmem is provided.
|
||
|
|
||
|
This library is provided for software which tracks every store to
|
||
|
pmem and needs to flush those changes to durability. Most developers
|
||
|
will find higher level libraries like libpmemobj to be much more
|
||
|
convenient. libpmem2 has a new API that addresses many of the shortcommings
|
||
|
of libpmem1
|
||
|
|
||
|
%package -n libpmemblk1
|
||
|
Summary: Persistent Memory Resident Block library
|
||
|
Group: System/Libraries
|
||
|
|
||
|
%description -n libpmemblk1
|
||
|
libpmemblk implements a pmem-resident array of blocks, all the same
|
||
|
size, where a block is updated atomically with respect to power
|
||
|
failure or program interruption (no torn blocks).
|
||
|
|
||
|
%package -n libpmemblk-devel
|
||
|
Summary: Development files for the Persistent Memory Resident Block library
|
||
|
Group: Development/Libraries/C and C++
|
||
|
Requires: libpmemblk1 = %version
|
||
|
|
||
|
%description -n libpmemblk-devel
|
||
|
libpmemblk implements a pmem-resident array of blocks, all the same
|
||
|
size, where a block is updated atomically with respect to power
|
||
|
failure or program interruption (no torn blocks).
|
||
|
|
||
|
For example, a program keeping a cache of fixed-size objects in pmem
|
||
|
might find this library useful. This library is provided for cases
|
||
|
requiring large arrays of objects at least 512 bytes each. Most
|
||
|
developers will find higher level libraries like libpmemobj to be
|
||
|
more generally useful.
|
||
|
|
||
|
%package -n libpmemlog1
|
||
|
Summary: Persistent Memory Resident Log File library
|
||
|
Group: System/Libraries
|
||
|
|
||
|
%description -n libpmemlog1
|
||
|
The libpmemlog library provides a pmem-resident log file. This is
|
||
|
useful for programs like databases that append frequently to a log
|
||
|
file.
|
||
|
|
||
|
%package -n libpmemlog-devel
|
||
|
Summary: Development files for the Persistent Memory Resident Log File library
|
||
|
Group: Development/Libraries/C and C++
|
||
|
Requires: libpmemlog1 = %version
|
||
|
|
||
|
%description -n libpmemlog-devel
|
||
|
The libpmemlog library provides a pmem-resident log file. This
|
||
|
library is provided for cases requiring an append-mostly file to
|
||
|
record variable length entries. Most developers will find higher
|
||
|
level libraries like libpmemobj to be more generally useful.
|
||
|
|
||
|
%package -n libpmemobj1
|
||
|
Summary: Persistent Memory Transactional Object Store library
|
||
|
Group: System/Libraries
|
||
|
|
||
|
%description -n libpmemobj1
|
||
|
The libpmemobj library provides a transactional object store,
|
||
|
providing memory allocation, transactions, and general facilities for
|
||
|
persistent memory programming.
|
||
|
|
||
|
%package -n libpmemobj-devel
|
||
|
Summary: Development files for the Persistent Memory Transactional Object Store library
|
||
|
Group: Development/Libraries/C and C++
|
||
|
Requires: libpmemobj1 = %version
|
||
|
|
||
|
%description -n libpmemobj-devel
|
||
|
The libpmemobj library provides a transactional object store,
|
||
|
providing memory allocation, transactions, and general facilities for
|
||
|
persistent memory programming. Developers new to persistent memory
|
||
|
probably want to start with this library.
|
||
|
|
||
|
%package -n libpmempool1
|
||
|
Summary: Persistent Memory pool management library
|
||
|
Group: System/Libraries
|
||
|
|
||
|
%description -n libpmempool1
|
||
|
The libpmempool library provides a set of utilities for off-line administration,
|
||
|
analysis, diagnostics and repair of persistent memory pools created
|
||
|
by libpmemlog, libpemblk and libpmemobj libraries.
|
||
|
|
||
|
%package -n libpmempool-devel
|
||
|
Summary: Development files for Persistent Memory pool management library
|
||
|
Group: Development/Libraries/C and C++
|
||
|
Requires: libpmempool1 = %version
|
||
|
|
||
|
%description -n libpmempool-devel
|
||
|
The libpmempool library provides a set of utilities for off-line administration,
|
||
|
analysis, diagnostics and repair of persistent memory pools created
|
||
|
by libpmemlog, libpemblk and libpmemobj libraries.
|
||
|
|
||
|
%package -n librpmem1
|
||
|
Summary: Remote Access to Persistent Memory library
|
||
|
#Manual dependency to make sure libfabric is at least in this version
|
||
|
Group: System/Libraries
|
||
|
Requires: libfabric >= %min_libfabric_ver
|
||
|
Requires: openssh
|
||
|
|
||
|
%description -n librpmem1
|
||
|
The librpmem library provides low-level support for remote access
|
||
|
to persistent memory utilizing RDMA-capable NICs. It can be used
|
||
|
to replicate persistent memory regions over RDMA protocol.
|
||
|
|
||
|
%package -n librpmem-devel
|
||
|
Summary: Development files for the Remote Access to Persistent Memory library
|
||
|
Group: Development/Libraries/C and C++
|
||
|
Requires: librpmem1 = %version
|
||
|
|
||
|
%description -n librpmem-devel
|
||
|
The librpmem library provides low-level support for remote access
|
||
|
to persistent memory utilizing RDMA-capable NICs. It can be used
|
||
|
to replicate persistent memory regions over RDMA protocol.
|
||
|
|
||
|
This sub-package contains libraries and header files for developing
|
||
|
applications that want to specifically make use of librpmem.
|
||
|
|
||
|
%package -n rpmemd
|
||
|
Summary: Target node process executed by librpmem
|
||
|
#Manual dependency to make sure libfabric is at least in this version
|
||
|
Group: System/Base
|
||
|
Requires: libfabric >= %min_libfabric_ver
|
||
|
|
||
|
%description -n rpmemd
|
||
|
The rpmemd process is executed on a target node by librpmem library
|
||
|
and facilitates access to persistent memory over RDMA.
|
||
|
|
||
|
%package devel-doc
|
||
|
Summary: Man pages for the libpmem C API
|
||
|
Group: Documentation/Man
|
||
|
|
||
|
%description devel-doc
|
||
|
Documentation for the pmem library interface.
|
||
|
|
||
|
%prep
|
||
|
%autosetup -p0 -a1
|
||
|
|
||
|
%build
|
||
|
%define _lto_cflags %nil
|
||
|
# Currently, NVML makefiles do not allow to easily override CFLAGS,
|
||
|
# so the build flags are passed via EXTRA_CFLAGS. For debug build
|
||
|
# selected flags are overriden to disable compiler optimizations.
|
||
|
#
|
||
|
# remaining issues:
|
||
|
# * jemalloc attempts to use __builtin_clz, this might not always work
|
||
|
EXTRA_CFLAGS_RELEASE="%optflags" \
|
||
|
EXTRA_CFLAGS_DEBUG="%optflags -Wp,-U_FORTIFY_SOURCE -O0" \
|
||
|
EXTRA_CXXFLAGS="%optflags" \
|
||
|
make %{?_smp_mflags} BINDIR="%_bindir" EXTRA_CFLAGS="-Wno-error" \
|
||
|
%if 0%{?with_fabric}
|
||
|
BUILD_RPMEM=y \
|
||
|
%endif
|
||
|
NORPATH=1
|
||
|
|
||
|
# Override LIB_AR with empty string to skip installation of static libraries
|
||
|
%install
|
||
|
b="%buildroot"
|
||
|
%make_install LIB_AR= \
|
||
|
prefix="%_prefix" \
|
||
|
libdir="%_libdir" \
|
||
|
includedir="%_includedir" \
|
||
|
mandir="%_mandir" \
|
||
|
bindir="%_bindir" \
|
||
|
sysconfdir="%_sysconfdir" \
|
||
|
docdir="%_docdir"
|
||
|
mkdir -p "$b/%_datadir/pmdk"
|
||
|
cp utils/pmdk.magic "$b/%_datadir/pmdk/"
|
||
|
|
||
|
#Fix installation dir for bash completion
|
||
|
mkdir -p %buildroot/%_datadir/bash-completion/completions
|
||
|
mv %buildroot/%_sysconfdir/bash_completion.d/* %buildroot/%_datadir/bash-completion/completions
|
||
|
|
||
|
%fdupes %buildroot/%_prefix
|
||
|
|
||
|
%check
|
||
|
cp src/test/testconfig.sh.example src/test/testconfig.sh
|
||
|
#make check
|
||
|
|
||
|
%post -n libpmem1 -p /sbin/ldconfig
|
||
|
%postun -n libpmem1 -p /sbin/ldconfig
|
||
|
%post -n libpmem2-1 -p /sbin/ldconfig
|
||
|
%postun -n libpmem2-1 -p /sbin/ldconfig
|
||
|
%post -n libpmemblk1 -p /sbin/ldconfig
|
||
|
%postun -n libpmemblk1 -p /sbin/ldconfig
|
||
|
%post -n libpmemlog1 -p /sbin/ldconfig
|
||
|
%postun -n libpmemlog1 -p /sbin/ldconfig
|
||
|
%post -n libpmemobj1 -p /sbin/ldconfig
|
||
|
%postun -n libpmemobj1 -p /sbin/ldconfig
|
||
|
%post -n libpmempool1 -p /sbin/ldconfig
|
||
|
%postun -n libpmempool1 -p /sbin/ldconfig
|
||
|
%post -n librpmem1 -p /sbin/ldconfig
|
||
|
%postun -n librpmem1 -p /sbin/ldconfig
|
||
|
|
||
|
%files
|
||
|
%_datadir/pmdk/
|
||
|
%doc ChangeLog
|
||
|
|
||
|
%files tools
|
||
|
%_datadir/bash-completion/completions/*
|
||
|
%_bindir/daxio
|
||
|
%_bindir/pmempool
|
||
|
%_bindir/pmreorder
|
||
|
%_datadir/pmreorder/
|
||
|
%_mandir/man1/daxio.1*
|
||
|
%_mandir/man1/pmempool-*.1*
|
||
|
%_mandir/man1/pmempool.1*
|
||
|
%_mandir/man1/pmreorder.1*
|
||
|
%_mandir/man5/*.5*
|
||
|
%doc LICENSE
|
||
|
|
||
|
%files -n libpmem1
|
||
|
%_libdir/libpmem.so.1*
|
||
|
|
||
|
%files -n libpmem-devel
|
||
|
%_libdir/libpmem.so
|
||
|
%_libdir/pkgconfig/libpmem.pc
|
||
|
%dir %_libdir/pmdk_debug/
|
||
|
%_libdir/pmdk_debug/libpmem.so*
|
||
|
%_includedir/libpmem.h
|
||
|
|
||
|
%files -n libpmem2-1
|
||
|
%_libdir/libpmem2.so.1*
|
||
|
|
||
|
%files -n libpmem2-devel
|
||
|
%_libdir/libpmem2.so
|
||
|
%_libdir/pkgconfig/libpmem2.pc
|
||
|
%dir %_libdir/pmdk_debug/
|
||
|
%_libdir/pmdk_debug/libpmem2.so*
|
||
|
%_includedir/libpmem2.h
|
||
|
|
||
|
%files -n libpmemblk1
|
||
|
%_libdir/libpmemblk.so.1*
|
||
|
|
||
|
%files -n libpmemblk-devel
|
||
|
%_libdir/libpmemblk.so
|
||
|
%_libdir/pkgconfig/libpmemblk.pc
|
||
|
%dir %_libdir/pmdk_debug/
|
||
|
%_libdir/pmdk_debug/libpmemblk.so*
|
||
|
%_includedir/libpmemblk.h
|
||
|
|
||
|
%files -n libpmemlog1
|
||
|
%_libdir/libpmemlog.so.1*
|
||
|
|
||
|
%files -n libpmemlog-devel
|
||
|
%_libdir/libpmemlog.so
|
||
|
%_libdir/pkgconfig/libpmemlog.pc
|
||
|
%dir %_libdir/pmdk_debug/
|
||
|
%_libdir/pmdk_debug/libpmemlog.so*
|
||
|
%_includedir/libpmemlog.h
|
||
|
|
||
|
%files -n libpmemobj1
|
||
|
%_libdir/libpmemobj.so.1*
|
||
|
|
||
|
%files -n libpmemobj-devel
|
||
|
%_libdir/libpmemobj.so
|
||
|
%dir %_libdir/pmdk_debug/
|
||
|
%_libdir/pkgconfig/libpmemobj.pc
|
||
|
%_libdir/pmdk_debug/libpmemobj.so*
|
||
|
%_includedir/libpmemobj.h
|
||
|
%_includedir/libpmemobj/
|
||
|
|
||
|
%files -n libpmempool1
|
||
|
%_libdir/libpmempool.so.1*
|
||
|
|
||
|
%files -n libpmempool-devel
|
||
|
%_libdir/libpmempool.so
|
||
|
%_libdir/pkgconfig/libpmempool.pc
|
||
|
%dir %_libdir/pmdk_debug
|
||
|
%_libdir/pmdk_debug/libpmempool.so*
|
||
|
%_includedir/libpmempool.h
|
||
|
|
||
|
%if 0%{?with_fabric}
|
||
|
%files -n librpmem1
|
||
|
%_libdir/librpmem.so.*
|
||
|
%license LICENSE
|
||
|
|
||
|
%files -n librpmem-devel
|
||
|
%_libdir/librpmem.so
|
||
|
%_libdir/pkgconfig/librpmem.pc
|
||
|
%dir %_libdir/pmdk_debug
|
||
|
%_libdir/pmdk_debug/librpmem.so*
|
||
|
%_includedir/librpmem.h
|
||
|
%license LICENSE
|
||
|
|
||
|
%files -n rpmemd
|
||
|
%_bindir/rpmemd
|
||
|
%_mandir/man1/rpmemd.1*
|
||
|
#with_fabric
|
||
|
%endif
|
||
|
|
||
|
%files devel-doc
|
||
|
%_mandir/man3/*.3*
|
||
|
%_mandir/man7/*.7*
|
||
|
%doc ChangeLog CONTRIBUTING.md README.md
|
||
|
|
||
|
%changelog
|