xref: /spdk/rpmbuild/spdk.spec (revision 89d955ae76a70975ae875e67aab1f2b856274821)
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