[packages/xnvme] - new; + patch to adjust constant-size structs with ABIs other than LP64

qboosh qboosh at pld-linux.org
Sun Nov 17 11:55:23 CET 2024


commit 3f2016b5d425a505e5e3ba47ec18e52ff6c3a111
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Sun Nov 17 10:54:19 2024 +0100

    - new; + patch to adjust constant-size structs with ABIs other than LP64

 xnvme-sizes.patch | 243 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 xnvme.spec        | 141 +++++++++++++++++++++++++++++++
 2 files changed, 384 insertions(+)
---
diff --git a/xnvme.spec b/xnvme.spec
new file mode 100644
index 0000000..5b25c53
--- /dev/null
+++ b/xnvme.spec
@@ -0,0 +1,141 @@
+# TODO: spdk (force using system?)
+#
+# Conditional build:
+%bcond_without	apidocs		# API documentation
+%bcond_without	static_libs	# static libraries
+%bcond_without	libvfn		# libvfn support
+
+%ifnarch %{x8664} aarch64
+%undefine	with_libvfn
+%endif
+Summary:	xNVMe: cross-platform libraries and tools for NVMe devices
+Summary(pl.UTF-8):	xNVMe - wieloplatformowe biblioteki i narzędzia dla urządzeń NVMe
+Name:		xnvme
+Version:	0.7.5
+Release:	1
+License:	BSD
+Group:		Libraries
+#Source0Download: https://github.com/xnvme/xnvme/releases
+Source0:	https://github.com/xnvme/xnvme/releases/download/v%{version}/%{name}-%{version}.tar.gz
+# Source0-md5:	d3dab6e7843cbea13a0592f3b9f4a452
+Patch0:		%{name}-sizes.patch
+URL:		https://xnvme.io/
+BuildRequires:	gcc >= 6:4.7
+BuildRequires:	libaio-devel
+BuildRequires:	libisal-devel >= 2.30
+BuildRequires:	liburing-devel >= 2.2
+%{?with_libvfn:BuildRequires:	libvfn-devel >= 5.0.0}
+BuildRequires:	meson >= 0.58
+BuildRequires:	ninja >= 1.5
+BuildRequires:	pkgconfig
+BuildRequires:	rpmbuild(macros) >= 1.736
+Requires:	libisal >= 2.30
+Requires:	liburing >= 2.2
+BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%description
+xNVMe provides the means to program and interact with NVMe devices
+from user space.
+
+%description -l pl.UTF-8
+xNVMe udostępnia możliwość programowania i współpracy z urządzeniami
+NVMe z przestrzeni użytkownika.
+
+%package devel
+Summary:	Header files for xNVMe library
+Summary(pl.UTF-8):	Pliki nagłówkowe biblioteki xNVMe
+Group:		Development/Libraries
+Requires:	%{name} = %{version}-%{release}
+Requires:	libaio-devel
+Requires:	libisal-devel >= 2.30
+Requires:	liburing-devel >= 2.2
+%{?with_libvfn:Requires:	libvfn-devel >= 5.0.0}
+
+%description devel
+Header files for xNVMe library.
+
+%description devel -l pl.UTF-8
+Pliki nagłówkowe biblioteki xNVMe.
+
+%package static
+Summary:	Static xNVMe library
+Summary(pl.UTF-8):	Statyczna biblioteka xNVMe
+Group:		Development/Libraries
+Requires:	%{name}-devel = %{version}-%{release}
+
+%description static
+Static xNVMe library.
+
+%description static -l pl.UTF-8
+Statyczna biblioteka xNVMe.
+
+%prep
+%setup -q
+%patch0 -p1
+
+%{__sed} -i '1s,/usr/bin/env bash,/bin/bash,' toolbox/xnvme-driver.sh
+
+%build
+%meson build \
+	%{!?with_static_libs:--default-library=shared} \
+	-Dforce_completions=true
+
+%ninja_build -C build
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+%ninja_install -C build
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post	-p /sbin/ldconfig
+%postun	-p /sbin/ldconfig
+
+%files
+%defattr(644,root,root,755)
+%doc CHANGELOG.rst CONTRIBUTORS.md ISSUES.rst LICENSE MAINTAINERS.md README.md
+%attr(755,root,root) %{_bindir}/kvs
+%attr(755,root,root) %{_bindir}/lblk
+%attr(755,root,root) %{_bindir}/xdd
+%attr(755,root,root) %{_bindir}/xnvme
+%attr(755,root,root) %{_bindir}/xnvme-driver
+%attr(755,root,root) %{_bindir}/xnvme_*
+%attr(755,root,root) %{_bindir}/zoned
+%attr(755,root,root) %{_bindir}/zoned_io_async
+%attr(755,root,root) %{_bindir}/zoned_io_sync
+%attr(755,root,root) %{_libdir}/libxnvme.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libxnvme.so.0
+%{bash_compdir}/kvs-completions
+%{bash_compdir}/lblk-completions
+%{bash_compdir}/xdd-completions
+%{bash_compdir}/xnvme*-completions
+%{bash_compdir}/zoned*-completions
+%{_mandir}/man1/kvs.1*
+%{_mandir}/man1/kvs-*.1*
+%{_mandir}/man1/lblk.1*
+%{_mandir}/man1/lblk-*.1*
+%{_mandir}/man1/xdd.1*
+%{_mandir}/man1/xdd-*.1*
+%{_mandir}/man1/xnvme.1*
+%{_mandir}/man1/xnvme-*.1*
+%{_mandir}/man1/xnvme_*.1*
+%{_mandir}/man1/zoned.1*
+%{_mandir}/man1/zoned-*.1*
+%{_mandir}/man1/zoned_io_async.1*
+%{_mandir}/man1/zoned_io_async-*.1*
+%{_mandir}/man1/zoned_io_sync.1*
+%{_mandir}/man1/zoned_io_sync-*.1*
+
+%files devel
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libxnvme.so
+%{_includedir}/libxnvme*.h
+%{_pkgconfigdir}/xnvme.pc
+
+%if %{with static_libs}
+%files static
+%defattr(644,root,root,755)
+%{_libdir}/libxnvme.a
+%endif
diff --git a/xnvme-sizes.patch b/xnvme-sizes.patch
new file mode 100644
index 0000000..739e4ba
--- /dev/null
+++ b/xnvme-sizes.patch
@@ -0,0 +1,243 @@
+--- xnvme-0.7.5/include/libxnvme_spec_fs.h.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/include/libxnvme_spec_fs.h	2024-11-16 15:26:57.379119585 +0100
+@@ -63,6 +63,8 @@ struct xnvme_spec_fs_idfy_ctrlr {
+ 
+ 	uint8_t ac;
+ 	uint8_t dc;
++
++	uint8_t rsvd2_[5];
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct xnvme_spec_fs_idfy_ctrlr) == 4096, "Incorrect size")
+ 
+--- xnvme-0.7.5/include/libxnvme_cmd.h.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/include/libxnvme_cmd.h	2024-11-16 15:30:31.957957112 +0100
+@@ -27,6 +27,9 @@ struct xnvme_cmd_ctx {
+ 	struct xnvme_spec_cpl cpl;        ///< Completion result from processing
+ 	struct xnvme_dev *dev;            ///< Device associated with the command
+ 	struct xnvme_cmd_ctx_async async; ///< Fields for command option: XNVME_CMD_ASYNC
++#ifndef __LP64__
++	uint32_t padding_[4];
++#endif
+ 	///< Field containing command-options, the field is initialized by helper-functions
+ 	uint32_t opts;
+ 
+--- xnvme-0.7.5/include/libxnvme_be.h.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/include/libxnvme_be.h	2024-11-16 18:19:03.383178820 +0100
+@@ -13,6 +13,9 @@
+  */
+ struct xnvme_be_attr {
+ 	const char *name; ///< Backend name
++#ifndef __LP64__
++	uint32_t padding_;
++#endif
+ 
+ 	uint8_t enabled; ///< Whether the backend is 'enabled'
+ 
+--- xnvme-0.7.5/include/xnvme_be.h.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/include/xnvme_be.h	2024-11-16 18:23:41.288339945 +0100
+@@ -51,6 +51,9 @@ struct xnvme_be_async {
+ 
+ 	// Check if the backend is supported in the current environment
+ 	const char *id;
++#ifndef __LP64__
++	uint32_t padding_[8];
++#endif
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct xnvme_be_async) == XNVME_BE_ASYNC_NBYTES, "Incorrect size")
+ 
+@@ -68,6 +71,9 @@ struct xnvme_be_sync {
+ 	int (*cmd_iov)(struct xnvme_cmd_ctx *, struct iovec *, size_t, size_t, void *, size_t);
+ 
+ 	const char *id;
++#ifndef __LP64__
++	uint32_t padding_[3];
++#endif
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct xnvme_be_sync) == XNVME_BE_SYNC_NBYTES, "Incorrect size")
+ 
+@@ -86,6 +92,9 @@ struct xnvme_be_admin {
+ 	int (*cmd_pseudo)(struct xnvme_cmd_ctx *, void *, size_t, void *, size_t);
+ 
+ 	const char *id;
++#ifndef __LP64__
++	uint32_t padding_[3];
++#endif
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct xnvme_be_admin) == XNVME_BE_ADMIN_NBYTES, "Incorrect size")
+ 
+@@ -104,6 +113,9 @@ struct xnvme_be_dev {
+ 	 * Close the given device
+ 	 */
+ 	void (*dev_close)(struct xnvme_dev *);
++#ifndef __LP64__
++	uint32_t padding_[3];
++#endif
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct xnvme_be_dev) == XNVME_BE_DEV_NBYTES, "Incorrect size")
+ 
+@@ -138,6 +150,9 @@ struct xnvme_be_mem {
+ 	 */
+ 	int (*mem_unmap)(const struct xnvme_dev *, void *);
+ 	const char *id;
++#ifndef __LP64__
++	uint32_t padding_[7];
++#endif
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct xnvme_be_mem) == XNVME_BE_MEM_NBYTES, "Incorrect size")
+ 
+@@ -209,6 +224,9 @@ struct xnvme_be {
+ 	uint8_t state[XNVME_BE_STATE_NBYTES]; ///< Backend instance state
+ 
+ 	struct xnvme_be_mixin *objs;
++#ifndef __LP64__
++	uint32_t padding_;
++#endif
+ 	uint64_t nobjs;
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct xnvme_be) == XNVME_BE_NBYTES, "Incorrect size")
+--- xnvme-0.7.5/include/xnvme_queue.h.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/include/xnvme_queue.h	2024-11-16 19:03:50.955285659 +0100
+@@ -24,19 +24,33 @@ struct xnvme_cmd_ctx_entry {
+ 		void *cb_arg;
+ 	} async;
+ 
++#ifndef __LP64__
++	uint32_t padding_[4];
++#endif
++
+ 	uint32_t opts;
+ 
+ 	uint32_t id;
+ 
+ 	SLIST_ENTRY(xnvme_cmd_ctx_entry) link;
++
++#ifndef __LP64__
++	uint32_t padding2_;
++#endif
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct xnvme_cmd_ctx_entry) == 128, "Incorrect size")
+ 
+ struct xnvme_queue_base {
+ 	struct xnvme_dev *dev; ///< Device on which the queue operates
++#ifndef __LP64__
++	uint32_t padding_;
++#endif
+ 	uint32_t capacity;     ///< Maximum number of outstanding commands
+ 	uint32_t outstanding;  ///< Number of currently outstanding commands
+ 	SLIST_HEAD(, xnvme_cmd_ctx_entry) pool;
++#ifndef __LP64__
++	uint32_t padding2_;
++#endif
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct xnvme_queue_base) == 24, "Incorrect size")
+ 
+--- xnvme-0.7.5/lib/xnvme_be_cbi_async_emu.c.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/lib/xnvme_be_cbi_async_emu.c	2024-11-16 21:04:14.062821394 +0100
+@@ -41,6 +41,9 @@ struct xnvme_queue_emu {
+ 	struct xnvme_queue_base base;
+ 
+ 	struct qpair *qp;
++#ifndef __LP64__
++	uint32_t padding_;
++#endif
+ 
+ 	uint8_t _rsvd[224];
+ };
+--- xnvme-0.7.5/lib/xnvme_be_cbi_async_nil.c.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/lib/xnvme_be_cbi_async_nil.c	2024-11-16 21:05:34.692384586 +0100
+@@ -18,6 +18,10 @@ struct nil_queue {
+ 	struct xnvme_queue_base base;
+ 
+ 	struct xnvme_cmd_ctx *ctx[XNVME_BE_CBI_ASYNC_NIL_CTX_DEPTH_MAX];
++
++#ifndef __LP64__
++	uint32_t padding_[XNVME_BE_CBI_ASYNC_NIL_CTX_DEPTH_MAX];
++#endif
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct nil_queue) == XNVME_BE_QUEUE_STATE_NBYTES, "Incorrect size")
+ 
+--- xnvme-0.7.5/lib/xnvme_be_cbi_async_thrpool.c.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/lib/xnvme_be_cbi_async_thrpool.c	2024-11-16 21:12:52.396680005 +0100
+@@ -46,12 +46,18 @@ struct xnvme_queue_thrpool {
+ 	struct xnvme_queue_base base;
+ 
+ 	struct _thrpool_qp *qp;
++#ifndef __LP64__
++	uint32_t padding_;
++#endif
+ 
+ 	bool threads_stop;
+ 	int nthreads;
+ 	pthread_t *threads;
++#ifndef __LP64__
++	uint32_t padding2_;
++#endif
+ 
+-	uint8_t _rsvd[204];
++	uint8_t _rsvd[208];
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct xnvme_queue_thrpool) == XNVME_BE_QUEUE_STATE_NBYTES,
+ 		    "Incorrect size")
+--- xnvme-0.7.5/lib/xnvme_be_cbi_async_posix.c.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/lib/xnvme_be_cbi_async_posix.c	2024-11-16 21:18:46.981425721 +0100
+@@ -21,8 +21,11 @@ struct posix_queue {
+ 	TAILQ_HEAD(, posix_request) reqs_ready;
+ 	TAILQ_HEAD(, posix_request) reqs_outstanding;
+ 	struct posix_request *reqs_storage;
++#ifndef __LP64__
++	uint32_t padding_[5];
++#endif
+ 
+-	uint8_t rsvd[188];
++	uint8_t rsvd[192];
+ };
+ XNVME_STATIC_ASSERT(sizeof(struct posix_queue) == XNVME_BE_QUEUE_STATE_NBYTES, "Incorrect size")
+ 
+--- xnvme-0.7.5/include/xnvme_be_linux_libaio.h.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/include/xnvme_be_linux_libaio.h	2024-11-16 21:19:49.414420826 +0100
+@@ -11,6 +11,9 @@ struct xnvme_queue_libaio {
+ 
+ 	io_context_t aio_ctx;
+ 	struct io_event *aio_events;
++#ifndef __LP64__
++	uint32_t padding_[2];
++#endif
+ 
+ 	uint8_t poll_io;
+ 	uint8_t rsvd[212];
+--- xnvme-0.7.5/include/xnvme_be_linux_liburing.h.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/include/xnvme_be_linux_liburing.h	2024-11-16 21:24:58.599412494 +0100
+@@ -13,6 +13,9 @@ struct xnvme_queue_liburing {
+ 	struct xnvme_queue_base base;
+ 
+ 	struct io_uring ring;
++#ifndef __LP64__
++	uint32_t padding_[19];
++#endif
+ 
+ 	uint8_t poll_io;
+ 	uint8_t poll_sq;
+--- xnvme-0.7.5/include/xnvme_be_ramdisk.h.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/include/xnvme_be_ramdisk.h	2024-11-16 21:30:54.530817581 +0100
+@@ -6,6 +6,9 @@
+ #define __INTERNAL_XNVME_BE_RAMDISK_H
+ struct xnvme_be_ramdisk_state {
+ 	void *ramdisk;
++#ifndef __LP64__
++	uint32_t padding_;
++#endif
+ 
+ 	uint8_t _rsvd[120];
+ };
+--- xnvme-0.7.5/include/xnvme_be_windows.h.orig	2024-09-11 13:56:13.000000000 +0200
++++ xnvme-0.7.5/include/xnvme_be_windows.h	2024-11-16 21:32:14.007053688 +0100
+@@ -23,6 +23,9 @@ struct xnvme_be_windows_opts {
+ struct xnvme_be_windows_state {
+ 	void *sync_handle;
+ 	void *async_handle;
++#ifndef __LP64__
++	uint32_t padding_[2];
++#endif
+ 	int fd;
+ 	uint8_t _rsvd[108]; ///< reserved space
+ };
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/xnvme.git/commitdiff/3f2016b5d425a505e5e3ba47ec18e52ff6c3a111



More information about the pld-cvs-commit mailing list