diff options
author | Gonzalo Exequiel Pedone | 2024-03-02 00:32:21 -0300 |
---|---|---|
committer | Gonzalo Exequiel Pedone | 2024-03-02 00:32:21 -0300 |
commit | d6045050d17cffd999b5223610abc8b31a319579 (patch) | |
tree | 0f06237897eef7f23243308feede0471d10ad707 | |
download | aur-d6045050d17cffd999b5223610abc8b31a319579.tar.gz |
New package.
-rw-r--r-- | .SRCINFO | 26 | ||||
-rw-r--r-- | .gitignore | 7 | ||||
-rw-r--r-- | 0001-Use-pthread_kill.patch | 11 | ||||
-rw-r--r-- | 0002-Fix-syntax-error.patch | 19 | ||||
-rw-r--r-- | 0003-Remove-shmctl.patch | 15 | ||||
-rw-r--r-- | 0004-Fix-osd.patch | 158 | ||||
-rw-r--r-- | 0005-Fix-smr.patch | 81 | ||||
-rw-r--r-- | PKGBUILD | 70 |
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 +} |