summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Exequiel Pedone2024-03-02 00:32:21 -0300
committerGonzalo Exequiel Pedone2024-03-02 00:32:21 -0300
commitd6045050d17cffd999b5223610abc8b31a319579 (patch)
tree0f06237897eef7f23243308feede0471d10ad707
downloadaur-d6045050d17cffd999b5223610abc8b31a319579.tar.gz
New package.
-rw-r--r--.SRCINFO26
-rw-r--r--.gitignore7
-rw-r--r--0001-Use-pthread_kill.patch11
-rw-r--r--0002-Fix-syntax-error.patch19
-rw-r--r--0003-Remove-shmctl.patch15
-rw-r--r--0004-Fix-osd.patch158
-rw-r--r--0005-Fix-smr.patch81
-rw-r--r--PKGBUILD70
8 files changed, 387 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..d9fbf5f191a8
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,26 @@
+pkgbase = android-armv7a-eabi-libfabric
+ pkgdesc = User-space API for OpenFabrics Interfaces (OFI) (android)
+ pkgver = 1.20.0
+ pkgrel = 1
+ url = https://ofiwg.github.io/libfabric/
+ arch = any
+ license = GPL2
+ depends = android-armv7a-eabi-numactl
+ options = !strip
+ options = !buildflags
+ options = staticlibs
+ options = !emptydirs
+ source = https://github.com/ofiwg/libfabric/releases/download/v1.20.0/libfabric-1.20.0.tar.bz2
+ source = 0001-Use-pthread_kill.patch
+ source = 0002-Fix-syntax-error.patch
+ source = 0003-Remove-shmctl.patch
+ source = 0004-Fix-osd.patch
+ source = 0005-Fix-smr.patch
+ sha256sums = 7fbbaeb0e15c7c4553c0ac5f54e4ef7aecaff8a669d4ba96fa04b0fc780b9ddc
+ sha256sums = 4c9e4afc69b152d97505faeae12a29959ba092bd16e7455b0b624619a54f3368
+ sha256sums = 8610ed6ffd23f160c38aa8ce79681b8ebfdd2e37521f176edde793f5b9d31137
+ sha256sums = e1592bece8eaec5c8f4fe9f0fb145cd7d8771653ca5cb3f144e6e731d30eb987
+ sha256sums = 4c3344485f4971a32f71a7b665a0772e24cf5e653240c12dedd13fe9f9cf447b
+ sha256sums = 212ae851eea73b5f1b0f6f560672ec183110481abbf91da6492e43be5b0ed509
+
+pkgname = android-armv7a-eabi-libfabric
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..982db4eb4c01
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+pkg
+src
+*.tar.xz
+*.tar.gz
+*.tar.bz2
+*.asc
+*.sign
diff --git a/0001-Use-pthread_kill.patch b/0001-Use-pthread_kill.patch
new file mode 100644
index 000000000000..a7c4c5c4f149
--- /dev/null
+++ b/0001-Use-pthread_kill.patch
@@ -0,0 +1,11 @@
+--- a/prov/util/src/util_mem_monitor.c
++++ b/prov/util/src/util_mem_monitor.c
+@@ -688,7 +688,7 @@
+
+ static void ofi_uffd_stop(struct ofi_mem_monitor *monitor)
+ {
+- pthread_cancel(uffd.thread);
++ pthread_kill(uffd.thread, 0);
+ pthread_join(uffd.thread, NULL);
+ close(uffd.fd);
+ }
diff --git a/0002-Fix-syntax-error.patch b/0002-Fix-syntax-error.patch
new file mode 100644
index 000000000000..5bd09869c5f6
--- /dev/null
+++ b/0002-Fix-syntax-error.patch
@@ -0,0 +1,19 @@
+--- a/prov/util/src/util_mem_hooks.c
++++ b/prov/util/src/util_mem_hooks.c
+@@ -190,13 +190,13 @@
+ #if (defined(__x86_64__) || defined(__amd64__))
+ __asm__ volatile("mfence;clflush %0;mfence"::
+ "m" (*((char*) address + i)));
+-#elif (defined(__aarch64__)
++#elif (defined(__aarch64__))
+ __asm__ volatile ("dc cvau, %0\n\t"
+ "dsb ish\n\t"
+ "ic ivau, %0\n\t"
+ "dsb ish\n\t"
+ "isb":: "r" (address + i));
+-#elif (defined(__riscv) && (__riscv_xlen == 64)
++#elif (defined(__riscv) && (__riscv_xlen == 64))
+ __riscv_flush_icache(address, address+data_size, SYS_RISCV_FLUSH_ICACHE_LOCAL);
+ __asm__ volatile ("fence.i\n");
+ #endif
+
diff --git a/0003-Remove-shmctl.patch b/0003-Remove-shmctl.patch
new file mode 100644
index 000000000000..6e2700c15f82
--- /dev/null
+++ b/0003-Remove-shmctl.patch
@@ -0,0 +1,15 @@
+--- a/prov/util/src/util_mem_hooks.c
++++ b/prov/util/src/util_mem_hooks.c
+@@ -588,11 +588,9 @@
+ const void *start;
+ void *result;
+ size_t len;
+- int ret;
+
+ if (shmaddr && (shmflg & SHM_REMAP)) {
+- ret = shmctl(shmid, IPC_STAT, &ds);
+- len = (ret < 0) ? 0 : ds.shm_segsz;
++ len = 0;
+
+ if (shmflg & SHM_RND) {
+ start = (char *) shmaddr - ((uintptr_t) shmaddr) % SHMLBA;
diff --git a/0004-Fix-osd.patch b/0004-Fix-osd.patch
new file mode 100644
index 000000000000..05eefc79988e
--- /dev/null
+++ b/0004-Fix-osd.patch
@@ -0,0 +1,158 @@
+--- a/src/unix/osd.c
++++ b/src/unix/osd.c
+@@ -143,80 +143,13 @@
+ int ofi_shm_map(struct util_shm *shm, const char *name, size_t size,
+ int readonly, void **mapped)
+ {
+- char *fname = 0;
+- int i, ret = FI_SUCCESS;
+- int flags = O_RDWR | (readonly ? 0 : O_CREAT);
+- struct stat mapstat;
+- int fname_size = 0;
+-
++ OFI_UNUSED(name);
++ OFI_UNUSED(size);
++ OFI_UNUSED(readonly);
+ *mapped = MAP_FAILED;
+ memset(shm, 0, sizeof(*shm));
+-
+- fname_size = strlen(name) + 2; /* '/' + %s + trailing 0 */
+- fname = calloc(1, fname_size);
+- if (!fname)
+- return -FI_ENOMEM;
+-
+- snprintf(fname, fname_size, "/%s", name);
+- shm->name = fname;
+-
+- for (i = 0; i < strlen(fname); i++) {
+- if (fname[i] == ' ')
+- fname[i] = '_';
+- }
+-
+- FI_DBG(&core_prov, FI_LOG_CORE,
+- "Creating shm segment :%s (size: %lu)\n", fname, size);
+-
+- shm->shared_fd = shm_open(fname, flags, S_IRUSR | S_IWUSR);
+- if (shm->shared_fd < 0) {
+- FI_WARN(&core_prov, FI_LOG_CORE, "shm_open failed\n");
+- ret = -FI_EINVAL;
+- goto failed;
+- }
+-
+- if (fstat(shm->shared_fd, &mapstat)) {
+- FI_WARN(&core_prov, FI_LOG_CORE, "failed to do fstat: %s\n",
+- strerror(errno));
+- ret = -FI_EINVAL;
+- goto failed;
+- }
+-
+- if (mapstat.st_size == 0) {
+- if (ftruncate(shm->shared_fd, size)) {
+- FI_WARN(&core_prov, FI_LOG_CORE,
+- "ftruncate failed: %s\n", strerror(errno));
+- ret = -FI_EINVAL;
+- goto failed;
+- }
+- } else if (mapstat.st_size < size) {
+- FI_WARN(&core_prov, FI_LOG_CORE, "shm file too small\n");
+- ret = -FI_EINVAL;
+- goto failed;
+- }
+-
+- shm->ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
+- MAP_SHARED, shm->shared_fd, 0);
+- if (shm->ptr == MAP_FAILED) {
+- FI_WARN(&core_prov, FI_LOG_CORE,
+- "mmap failed: %s\n", strerror(errno));
+- ret = -FI_EINVAL;
+- goto failed;
+- }
+-
+- *mapped = shm->ptr;
+- shm->size = size;
+- return ret;
+-
+-failed:
+- if (shm->shared_fd >= 0) {
+- close(shm->shared_fd);
+- shm_unlink(fname);
+- }
+- if (fname)
+- free(fname);
+- memset(shm, 0, sizeof(*shm));
+- return ret;
++ FI_WARN(&core_prov, FI_LOG_CORE, "shm_open failed\n");
++ return -FI_ENOSYS;
+ }
+
+ int ofi_shm_unmap(struct util_shm* shm)
+@@ -230,10 +163,8 @@
+
+ if (shm->shared_fd)
+ close(shm->shared_fd);
+- if (shm->name) {
+- shm_unlink(shm->name);
++ if (shm->name)
+ free((void*)shm->name);
+- }
+ memset(shm, 0, sizeof(*shm));
+ return FI_SUCCESS;
+ }
+@@ -264,57 +195,8 @@
+
+ int ofi_set_thread_affinity(const char *s)
+ {
+-#ifndef __APPLE__
+- char *saveptra = NULL, *saveptrb = NULL, *saveptrc = NULL;
+- char *dup_s, *a, *b, *c;
+- int j, first, last, stride, ret = FI_SUCCESS;
+- ofi_cpu_set_t mycpuset;
+- pthread_t mythread;
+-
+- mythread = pthread_self();
+- CPU_ZERO(&mycpuset);
+-
+- dup_s = strdup(s);
+- if (dup_s == NULL)
+- return -FI_ENOMEM;
+-
+- a = strtok_r(dup_s, ",", &saveptra);
+- while (a) {
+- last = -1;
+- stride = 1;
+- b = strtok_r(a, "-", &saveptrb);
+- assert(b);
+- first = atoi(b);
+- /* Check for range delimiter */
+- b = strtok_r(NULL, "-", &saveptrb);
+- if (b) {
+- c = strtok_r(b, ":", &saveptrc);
+- assert(c);
+- last = atoi(c);
+- /* Check for stride */
+- c = strtok_r(NULL, ":", &saveptrc);
+- if (c)
+- stride = atoi(c);
+- }
+-
+- if (last == -1)
+- last = first;
+-
+- for (j = first; j <= last; j += stride)
+- CPU_SET(j, &mycpuset);
+- a = strtok_r(NULL, ",", &saveptra);
+- }
+-
+- ret = pthread_setaffinity_np(mythread, sizeof(mycpuset), &mycpuset);
+- if (ret)
+- ret = -errno;
+-
+- free(dup_s);
+- return ret;
+-#else
+ OFI_UNUSED(s);
+ return -FI_ENOSYS;
+-#endif
+ }
+
+
diff --git a/0005-Fix-smr.patch b/0005-Fix-smr.patch
new file mode 100644
index 000000000000..2ea3ad384014
--- /dev/null
+++ b/0005-Fix-smr.patch
@@ -0,0 +1,81 @@
+--- a/prov/shm/src/smr_progress.c
++++ b/prov/shm/src/smr_progress.c
+@@ -157,7 +157,6 @@
+ }
+ munmap(pending->map_ptr, pending->cmd.msg.hdr.size);
+ }
+- shm_unlink(pending->map_name->name);
+ dlist_remove(&pending->map_name->entry);
+ free(pending->map_name);
+ pending->map_name = NULL;
+@@ -342,61 +341,15 @@
+ struct ofi_mr **mr, struct iovec *iov,
+ size_t iov_count, size_t *total_len)
+ {
+- char shm_name[SMR_NAME_MAX];
+- void *mapped_ptr;
+- int fd, num;
+- int ret = 0;
+- ssize_t hmem_copy_ret;
+-
+- num = smr_mmap_name(shm_name,
+- ep->region->map->peers[cmd->msg.hdr.id].peer.name,
+- cmd->msg.hdr.msg_id);
+- if (num < 0) {
+- FI_WARN(&smr_prov, FI_LOG_AV, "generating shm file name failed\n");
+- return -errno;
+- }
+-
+- fd = shm_open(shm_name, O_RDWR, S_IRUSR | S_IWUSR);
+- if (fd < 0) {
+- FI_WARN(&smr_prov, FI_LOG_AV, "shm_open error\n");
+- return -errno;
+- }
+-
+- mapped_ptr = mmap(NULL, cmd->msg.hdr.size, PROT_READ | PROT_WRITE,
+- MAP_SHARED, fd, 0);
+- if (mapped_ptr == MAP_FAILED) {
+- FI_WARN(&smr_prov, FI_LOG_AV, "mmap error %s\n", strerror(errno));
+- ret = -errno;
+- goto unlink_close;
+- }
+-
+- if (cmd->msg.hdr.op == ofi_op_read_req) {
+- hmem_copy_ret = ofi_copy_from_mr_iov(mapped_ptr,
+- cmd->msg.hdr.size, mr, iov,
+- iov_count, 0);
+- } else {
+- hmem_copy_ret = ofi_copy_to_mr_iov(mr, iov, iov_count, 0,
+- mapped_ptr, cmd->msg.hdr.size);
+- }
+-
+- if (hmem_copy_ret < 0) {
+- FI_WARN(&smr_prov, FI_LOG_EP_CTRL,
+- "mmap copy iov failed with code %d\n",
+- (int)(-hmem_copy_ret));
+- ret = hmem_copy_ret;
+- } else if (hmem_copy_ret != cmd->msg.hdr.size) {
+- FI_WARN(&smr_prov, FI_LOG_EP_CTRL,
+- "mmap copy iov truncated\n");
+- ret = -FI_ETRUNC;
+- }
+-
+- *total_len = hmem_copy_ret;
+-
+- munmap(mapped_ptr, cmd->msg.hdr.size);
+-unlink_close:
+- shm_unlink(shm_name);
+- close(fd);
+- return ret;
++ OFI_UNUSED(ep);
++ OFI_UNUSED(cmd);
++ OFI_UNUSED(mr);
++ OFI_UNUSED(iov);
++ OFI_UNUSED(iov_count);
++ if(total_len)
++ *total_len = 0;
++ FI_WARN(&smr_prov, FI_LOG_AV, "shm_open error\n");
++ return -FI_ENOSYS;
+ }
+
+ static int smr_progress_mmap(struct smr_cmd *cmd, struct ofi_mr **mr,
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..9f4e2ea9b379
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,70 @@
+# Maintainer: Gonzalo Exequiel Pedone <hipersayan DOT x AT gmail DOT com>
+# Contributor: Bruno Pagani <archange@archlinux.org>
+
+_android_arch=armv7a-eabi
+
+pkgname=android-${_android_arch}-libfabric
+pkgver=1.20.0
+pkgrel=1
+arch=('any')
+pkgdesc="User-space API for OpenFabrics Interfaces (OFI) (android)"
+url="https://ofiwg.github.io/libfabric/"
+license=('GPL2')
+depends=("android-${_android_arch}-numactl")
+options=(!strip !buildflags staticlibs !emptydirs)
+source=("https://github.com/ofiwg/libfabric/releases/download/v${pkgver}/libfabric-${pkgver}.tar.bz2"
+ '0001-Use-pthread_kill.patch'
+ '0002-Fix-syntax-error.patch'
+ '0003-Remove-shmctl.patch'
+ '0004-Fix-osd.patch'
+ '0005-Fix-smr.patch')
+sha256sums=('7fbbaeb0e15c7c4553c0ac5f54e4ef7aecaff8a669d4ba96fa04b0fc780b9ddc'
+ '4c9e4afc69b152d97505faeae12a29959ba092bd16e7455b0b624619a54f3368'
+ '8610ed6ffd23f160c38aa8ce79681b8ebfdd2e37521f176edde793f5b9d31137'
+ 'e1592bece8eaec5c8f4fe9f0fb145cd7d8771653ca5cb3f144e6e731d30eb987'
+ '4c3344485f4971a32f71a7b665a0772e24cf5e653240c12dedd13fe9f9cf447b'
+ '212ae851eea73b5f1b0f6f560672ec183110481abbf91da6492e43be5b0ed509')
+
+prepare() {
+ cd "${srcdir}/libfabric-${pkgver}"
+ source android-env ${_android_arch}
+
+ patch -Np1 -i ../0001-Use-pthread_kill.patch
+ patch -Np1 -i ../0002-Fix-syntax-error.patch
+ patch -Np1 -i ../0004-Fix-osd.patch
+ patch -Np1 -i ../0005-Fix-smr.patch
+
+ if [ "${ANDROID_MINIMUM_PLATFORM}" -lt 26 ]; then
+ patch -Np1 -i ../0003-Remove-shmctl.patch
+ fi
+
+ autoreconf -fvi
+
+ # Force compile even if shm functions are no available.
+
+ sed -i 's|LIBS="-lpthread |LIBS=" |g' configure
+ sed -i 's|LIBS="-lrt |LIBS=" |g' configure
+ sed -i '/char shm_open ();/d' configure
+ sed -i '/char shm_open (void);/d' configure
+ sed -i '/return shm_open ();/d' configure
+}
+
+build() {
+ cd "${srcdir}/libfabric-${pkgver}"
+ source android-env ${_android_arch}
+
+ android-${_android_arch}-configure \
+ --enable-shm=no
+ make $MAKEFLAGS
+}
+
+package() {
+ cd "${srcdir}/libfabric-${pkgver}"
+ source android-env ${_android_arch}
+
+ make DESTDIR="${pkgdir}" install
+ rm -rf "${pkgdir}/${ANDROID_PREFIX_BIN}"
+ rm -rf "${pkgdir}/${ANDROID_PREFIX_SHARE}"
+ ${ANDROID_STRIP} -g --strip-unneeded "${pkgdir}"/${ANDROID_PREFIX_LIB}/*.so
+ ${ANDROID_STRIP} -g "$pkgdir"/${ANDROID_PREFIX_LIB}/*.a
+}