152652c30SMichal Berger# Global macros 27a5cc6caSMichal Berger%define debug_package %{nil} 37a5cc6caSMichal Berger 47a5cc6caSMichal Berger%{!?deps:%define deps 1} 57a5cc6caSMichal Berger%{!?dpdk:%define dpdk 0} 61e08a4cdSBen Walker%{!?fio:%define fio 0} 77a5cc6caSMichal Berger%{!?requirements:%define requirements 0} 86317642cSMichal Berger%{!?build_requirements:%define build_requirements 0} 97a5cc6caSMichal Berger%{!?shared:%define shared 0} 10875ccefcSMykola Golub%{!?rbd:%define rbd 0} 11e8863cb7SMichal Berger%{!?libdir:%define libdir /usr/local/lib} 12cd926640SMichal Berger%{!?vfio_user:%define vfio_user 0} 137a5cc6caSMichal Berger 1452652c30SMichal Berger# Spec metadata 1552652c30SMichal BergerName: spdk 1652652c30SMichal BergerVersion: %{version} 1752652c30SMichal BergerRelease: %{release} 1852652c30SMichal BergerSummary: Storage Performance Development Kit 1952652c30SMichal Berger 207a5cc6caSMichal Berger# This is a minimal set of requirements needed for SPDK apps to run when built with 217a5cc6caSMichal Berger# default configuration. These are also predetermined by rpmbuild. Extra requirements 227a5cc6caSMichal Berger# can be defined through a comma-separated list passed via $requirements when building 237a5cc6caSMichal Berger# the spec. 247a5cc6caSMichal BergerRequires: glibc 257a5cc6caSMichal BergerRequires: libaio 267a5cc6caSMichal BergerRequires: libgcc 277a5cc6caSMichal BergerRequires: libstdc++ 287a5cc6caSMichal BergerRequires: libuuid 297a5cc6caSMichal BergerRequires: ncurses-libs 307a5cc6caSMichal BergerRequires: numactl-libs 317a5cc6caSMichal BergerRequires: openssl-libs 327a5cc6caSMichal BergerRequires: zlib 337a5cc6caSMichal Berger 347a5cc6caSMichal Berger%if %{requirements} 3552652c30SMichal BergerRequires: %(echo "%{requirements_list}") 367a5cc6caSMichal Berger%endif 377a5cc6caSMichal Berger 387610bc38SKonrad SztyberBuildRequires: python3-devel 397610bc38SKonrad Sztyber 406317642cSMichal Berger%if %{build_requirements} 416317642cSMichal BergerBuildRequires: %(echo "%{build_requirements_list}") 426317642cSMichal Berger%endif 436317642cSMichal Berger 4452652c30SMichal BergerLicense: BSD 4552652c30SMichal BergerURL: https://spdk.io 4652652c30SMichal BergerSource: spdk-%{version}.tar.gz 4752652c30SMichal Berger 4852652c30SMichal Berger%description 4952652c30SMichal Berger 5052652c30SMichal BergerThe Storage Performance Development Kit (SPDK) provides a set of tools and libraries for 5152652c30SMichal Bergerwriting high performance, scalable, user-mode storage applications. It achieves high 5252652c30SMichal Bergerperformance by moving all of the necessary drivers into userspace and operating in a 5352652c30SMichal Bergerpolled mode instead of relying on interrupts, which avoids kernel context switches and 5452652c30SMichal Bergereliminates interrupt handling overhead. 5552652c30SMichal Berger 567a5cc6caSMichal Berger%prep 57b1aaa1e8SMichal Bergermake clean %{make} &>/dev/null || : 587a5cc6caSMichal Berger%setup 597a5cc6caSMichal Berger 607a5cc6caSMichal Berger%build 618ecd4994SMichal Bergerset +x 628ecd4994SMichal Berger 635e75ad20SMichal Bergercfs() { 645e75ad20SMichal Berger (($# > 1)) || return 0 655e75ad20SMichal Berger 665e75ad20SMichal Berger local dst=$1 f 675e75ad20SMichal Berger 685e75ad20SMichal Berger mkdir -p "$dst" 695e75ad20SMichal Berger shift; for f; do [[ -e $f ]] && cp -a "$f" "$dst"; done 705e75ad20SMichal Berger} 715e75ad20SMichal Berger 7223019242SMichal Bergercl() { 7323019242SMichal Berger [[ -e $2 ]] || return 0 7423019242SMichal Berger 7523019242SMichal Berger cfs "$1" $(find "$2" -name '*.so*' -type f -o -type l | grep -v .symbols) 7623019242SMichal Berger} 7723019242SMichal Berger 787a5cc6caSMichal Berger%if %{deps} 79875ccefcSMykola Golub_PKGDEP_OPTS="--docs --pmem --rdma --uring" 80875ccefcSMykola Golub%if %{rbd} 81875ccefcSMykola Golub_PKGDEP_OPTS="$_PKGDEP_OPTS --rbd" 82875ccefcSMykola Golub%endif 83875ccefcSMykola Golub./scripts/pkgdep.sh $_PKGDEP_OPTS 847a5cc6caSMichal Berger%endif 857a5cc6caSMichal Berger 867a5cc6caSMichal Berger# Rely mainly on CONFIG 87ab7607e1SMichal Bergergit submodule update --init 887a5cc6caSMichal Berger./configure --disable-unit-tests --disable-tests %{configure} 897a5cc6caSMichal Bergermake %{make} 90b1aaa1e8SMichal Bergermake DESTDIR=%{buildroot} install %{make} 916747380fSBen Walker# DPDK always builds both static and shared, so we need to remove one or the other 926747380fSBen Walker# SPDK always builds static, so remove it if we want shared. 936747380fSBen Walker%if %{shared} 946747380fSBen Walker rm -f %{buildroot}/usr/local/lib/lib*.a 956747380fSBen Walker%endif 966747380fSBen Walker%if "%{shared}" != "1" 976747380fSBen Walker rm -f %{buildroot}/usr/local/lib/lib*.so* 986747380fSBen Walker rm -rf %{buildroot}/usr/local/lib/dpdk 996747380fSBen Walker%endif 1007a5cc6caSMichal Berger%if %{dpdk} 1016747380fSBen Walker# DPDK also installs some python scripts to bin that we do not want to package here 1026747380fSBen Walkerrm -f %{buildroot}/usr/local/bin/dpdk-*.py 1036747380fSBen Walker# DPDK examples do not need to be packaged in our RPMs 1046747380fSBen Walkerrm -rf %{buildroot}/usr/local/share/dpdk 105*89d955aeSMichal Berger# In case sphinx-build is available, DPDK will leave some files we don't need 106*89d955aeSMichal Bergerrm -rf %{buildroot}/usr/local/share/doc/dpdk 1077a5cc6caSMichal Berger%endif 1087a5cc6caSMichal Berger 109b02581a8SBen Walker# The ISA-L install may have installed some binaries that we do not want to package 110b02581a8SBen Walkerrm -f %{buildroot}/usr/local/bin/igzip 111b02581a8SBen Walkerrm -rf %{buildroot}/usr/local/share/man 112b02581a8SBen Walker 113cd926640SMichal Berger# Include libvfio-user libs in case --with-vfio-user is in use together with --with-shared 114cd926640SMichal Berger%if %{vfio_user} && %{shared} 11523019242SMichal Bergercl %{buildroot}/usr/local/lib/libvfio-user build/libvfio-user/ 116cd926640SMichal Berger%endif 1177a5cc6caSMichal Berger 1187a5cc6caSMichal Berger# And some useful setup scripts SPDK uses 1197a5cc6caSMichal Bergermkdir -p %{buildroot}/usr/libexec/spdk 1207a5cc6caSMichal Bergermkdir -p %{buildroot}/etc/bash_completion.d 1217a5cc6caSMichal Bergermkdir -p %{buildroot}/etc/profile.d 1227a5cc6caSMichal Bergermkdir -p %{buildroot}/etc/ld.so.conf.d 1237a5cc6caSMichal Berger 1246747380fSBen Walker%if %{shared} 1257a5cc6caSMichal Bergercat <<-EOF > %{buildroot}/etc/ld.so.conf.d/spdk.conf 126e8863cb7SMichal Berger%{libdir} 1277a5cc6caSMichal Berger/usr/local/lib/dpdk 128cd926640SMichal Berger/usr/local/lib/libvfio-user 1297a5cc6caSMichal BergerEOF 1306747380fSBen Walker%endif 1317a5cc6caSMichal Berger 1327a5cc6caSMichal Bergercat <<-'EOF' > %{buildroot}/etc/profile.d/spdk_path.sh 1337a5cc6caSMichal BergerPATH=$PATH:/usr/libexec/spdk/scripts 1347a5cc6caSMichal BergerPATH=$PATH:/usr/libexec/spdk/scripts/vagrant 1357a5cc6caSMichal BergerPATH=$PATH:/usr/libexec/spdk/test/common/config 1367a5cc6caSMichal Bergerexport PATH 1377a5cc6caSMichal BergerEOF 1387a5cc6caSMichal Berger 1395e75ad20SMichal Bergercfs %{buildroot}/usr/libexec/spdk scripts 1407a5cc6caSMichal Bergerln -s /usr/libexec/spdk/scripts/bash-completion/spdk %{buildroot}/etc/bash_completion.d/ 1417a5cc6caSMichal Berger 1427a5cc6caSMichal Berger# We need to take into the account the fact that most of the scripts depend on being 1437a5cc6caSMichal Berger# run directly from the repo. To workaround it, create common root space under dir 1447a5cc6caSMichal Berger# like /usr/libexec/spdk and link all potential relative paths the script may try 1457a5cc6caSMichal Berger# to reference. 1467a5cc6caSMichal Berger 1477a5cc6caSMichal Berger# setup.sh uses pci_ids.h 1487a5cc6caSMichal Bergerln -s /usr/local/include %{buildroot}/usr/libexec/spdk 1497a5cc6caSMichal Berger 1507a5cc6caSMichal Berger%files 1517a5cc6caSMichal Berger/usr/local/bin/* 152f14b142aSBen Walker/usr/local/lib/python%{python3_version}/site-packages/spdk*/* 1537a5cc6caSMichal Berger 1547a5cc6caSMichal Berger%package devel 1556747380fSBen Walker%if %{shared} 1567a5cc6caSMichal BergerSummary: SPDK development libraries and headers 1576747380fSBen Walker%endif 1586747380fSBen Walker%if "%{shared}" != "1" 1596747380fSBen WalkerSummary: SPDK static development libraries and headers 1606747380fSBen Walker%endif 1617a5cc6caSMichal Berger 1627a5cc6caSMichal Berger%description devel 1636747380fSBen Walker%if %{shared} 1646747380fSBen WalkerSPDK development libraries and header 1656747380fSBen Walker%endif 1666747380fSBen Walker%if "%{shared}" != "1" 1676747380fSBen WalkerSPDK static development libraries and header 1686747380fSBen Walker%endif 1697a5cc6caSMichal Berger 1707a5cc6caSMichal Berger%files devel 1717a5cc6caSMichal Berger/usr/local/include/* 172e8863cb7SMichal Berger%{libdir}/pkgconfig/*.pc 173b02581a8SBen Walker%{libdir}/*.la 1741e08a4cdSBen Walker%if %{fio} 1751e08a4cdSBen Walker%{libdir}/fio 1761e08a4cdSBen Walker%endif 1777a5cc6caSMichal Berger%if %{shared} 1786747380fSBen Walker%{libdir}/*.so* 1796747380fSBen Walker/etc/ld.so.conf.d/spdk.conf 1807a5cc6caSMichal Berger%if %{dpdk} 1816747380fSBen Walker%{libdir}/dpdk 1827a5cc6caSMichal Berger%endif 1836747380fSBen Walker%if %{vfio_user} 184cd926640SMichal Berger/usr/local/lib/libvfio-user 185cd926640SMichal Berger%endif 1866747380fSBen Walker%endif 1876747380fSBen Walker%if "%{shared}" != "1" 1886747380fSBen Walker%{libdir}/*.a 1896747380fSBen Walker%endif 1906747380fSBen Walker 1916747380fSBen Walker%post devel 1926747380fSBen Walkerldconfig 193cd926640SMichal Berger 19491ccdf19SBen Walker%package scripts 19591ccdf19SBen WalkerSummary: SPDK scripts and utilities 19691ccdf19SBen Walker 19791ccdf19SBen Walker%description scripts 19891ccdf19SBen WalkerSPDK scripts and utilities 19991ccdf19SBen Walker 20091ccdf19SBen Walker%files scripts 20191ccdf19SBen Walker/usr/libexec/spdk/* 20291ccdf19SBen Walker/etc/profile.d/* 20391ccdf19SBen Walker/etc/bash_completion.d/* 20491ccdf19SBen Walker 20591ccdf19SBen Walker%post scripts 20691ccdf19SBen Walkerldconfig 20791ccdf19SBen Walker 2087a5cc6caSMichal Berger%changelog 2097a5cc6caSMichal Berger* Tue Feb 16 2021 Michal Berger <michalx.berger@intel.com> 2107a5cc6caSMichal Berger- Initial RPM .spec for the SPDK 211