From 7d4a877dd947392ca99d314d74855b47e22cc256 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 09:19:09 +0200 Subject: [PATCH 01/39] Add hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb --- ...2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb diff --git a/easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb new file mode 100644 index 000000000000..97b5abe01fcb --- /dev/null +++ b/easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -0,0 +1,73 @@ + + +easyblock = 'ConfigureMake' + +name = 'hwloc' +version = '2.11.2' +_rocm_version = '6.4.1' + +homepage = 'https://www.open-mpi.org/projects/hwloc/' + +description = """ + The Portable Hardware Locality (hwloc) software package provides a portable + abstraction (across OS, versions, architectures, ...) of the hierarchical + topology of modern architectures, including NUMA memory nodes, sockets, shared + caches, cores and simultaneous multithreading. It also gathers various system + attributes such as cache and memory information as well as the locality of I/O + devices such as network interfaces, InfiniBand HCAs or GPUs. It primarily + aims at helping applications with gathering information about modern computing + hardware so as to exploit it accordingly and efficiently. + + This provides the ROCm and RSMI plugins for hwloc to discover AMD GPUs. +""" + +toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} + +source_urls = ['https://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] +sources = ['hwloc-%(version)s.tar.gz'] +checksums = ['866ac8ef07b350a6a2ba0c6826c37d78e8994dcbcd443bdd2b436350de19d540'] + +builddependencies = [ + ('pkgconf', '2.3.0'), +] + +dependencies = [ + ('HIP', '6.4.1'), + ('rocm-smi', '7.6.0', f'-ROCm-{_rocm_version}'), + ('numactl', '2.0.19'), +] + +configopts = ' '.join([ + '--enable-plugins', + '--disable-cuda', + '--disable-nvml', + '--with-rocm=$EBROOTHIP', + '--enable-rsmi', + '--disable-cairo', + '--disable-opencl', + '--disable-levelzero', + '--disable-gl', + '--disable-libxml2', + '--disable-pci', + '--disable-libudev', +]) + +# Build ONLY the AMD RSMI plugin +build_cmd = 'cd hwloc && make hwloc_rsmi.la' +install_cmd = f'cp hwloc/.libs/hwloc_rsmi.{SHLIB_EXT} %(installdir)s' + +modextrapaths = { + 'HWLOC_PLUGINS_PATH': '.', +} + +sanity_check_paths = { + 'files': [f'hwloc_rsmi.{SHLIB_EXT}'], + 'dirs': [], +} + +# Verify that hwloc can successfully load the new AMD plugins +sanity_check_commands = [ + 'HWLOC_COMPONENTS_VERBOSE=1 lstopo 2>&1 | grep %(installdir)s' +] + +moduleclass = 'system' From 6d0e3dbedd943ce49efac901f356f23bbac9c218 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 10:24:23 +0200 Subject: [PATCH 02/39] Add UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb --- ...2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 2 +- ...OCm-1.11.2_fix_hsa+hip_include_paths.patch | 149 ------------------ ...1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 34 ++++ ....18.0_link_against_existing_UCX_libs.patch | 109 +++++++++++++ 4 files changed, 144 insertions(+), 150 deletions(-) delete mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.11.2_fix_hsa+hip_include_paths.patch create mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb create mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch diff --git a/easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 97b5abe01fcb..d03d4d88a5e4 100644 --- a/easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -1,4 +1,4 @@ - +# Author: Aayush Joglekar easyblock = 'ConfigureMake' diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.11.2_fix_hsa+hip_include_paths.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.11.2_fix_hsa+hip_include_paths.patch deleted file mode 100644 index a29251bbc506..000000000000 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.11.2_fix_hsa+hip_include_paths.patch +++ /dev/null @@ -1,149 +0,0 @@ -Fix hsa and hip include path - -Åke Sandgren, 2023-01-03 -diff -ru ucx-1.11.2.orig/config/m4/rocm.m4 ucx-1.11.2/config/m4/rocm.m4 ---- ucx-1.11.2.orig/config/m4/rocm.m4 2021-02-27 02:18:15.000000000 +0100 -+++ ucx-1.11.2/config/m4/rocm.m4 2023-01-03 09:23:39.310360596 +0100 -@@ -84,9 +84,9 @@ - - rocm_happy=yes - AS_IF([test "x$rocm_happy" = xyes], -- [AC_CHECK_HEADERS([hsa.h], [rocm_happy=yes], [rocm_happy=no])]) -+ [AC_CHECK_HEADERS([hsa/hsa.h], [rocm_happy=yes], [rocm_happy=no])]) - AS_IF([test "x$rocm_happy" = xyes], -- [AC_CHECK_HEADERS([hsa_ext_amd.h], [rocm_happy=yes], [rocm_happy=no])]) -+ [AC_CHECK_HEADERS([hsa/hsa_ext_amd.h], [rocm_happy=yes], [rocm_happy=no])]) - AS_IF([test "x$rocm_happy" = xyes], - [AC_CHECK_LIB([hsa-runtime64], [hsa_init], [rocm_happy=yes], [rocm_happy=no])]) - -@@ -111,7 +111,7 @@ - hip_happy=no - AC_CHECK_LIB([hip_hcc], [hipFree], [AC_MSG_WARN([Please install ROCm-3.7.0 or above])], [hip_happy=yes]) - AS_IF([test "x$hip_happy" = xyes], -- [AC_CHECK_HEADERS([hip_runtime.h], [hip_happy=yes], [hip_happy=no])]) -+ [AC_CHECK_HEADERS([hip/hip_runtime.h], [hip_happy=yes], [hip_happy=no])]) - AS_IF([test "x$hip_happy" = xyes], - [AC_CHECK_LIB([amdhip64], [hipFree], [hip_happy=yes], [hip_happy=no])]) - AS_IF([test "x$hip_happy" = xyes], [HIP_CXXFLAGS="--std=gnu++11"], []) -diff -ru ucx-1.11.2.orig/src/ucm/rocm/rocmmem.h ucx-1.11.2/src/ucm/rocm/rocmmem.h ---- ucx-1.11.2.orig/src/ucm/rocm/rocmmem.h 2021-02-27 02:18:15.000000000 +0100 -+++ ucx-1.11.2/src/ucm/rocm/rocmmem.h 2023-01-03 09:25:40.289314597 +0100 -@@ -7,7 +7,7 @@ - #define UCM_ROCMMEM_H_ - - #include --#include -+#include - - /* hsa_amd_memory_pool_allocate */ - hsa_status_t ucm_override_hsa_amd_memory_pool_allocate( -diff -ru ucx-1.11.2.orig/src/uct/rocm/base/rocm_base.h ucx-1.11.2/src/uct/rocm/base/rocm_base.h ---- ucx-1.11.2.orig/src/uct/rocm/base/rocm_base.h 2021-07-10 09:59:16.000000000 +0200 -+++ ucx-1.11.2/src/uct/rocm/base/rocm_base.h 2023-01-03 09:24:10.206096620 +0100 -@@ -9,8 +9,8 @@ - - #include - #include --#include --#include -+#include -+#include - - - hsa_status_t uct_rocm_base_init(void); -diff -ru ucx-1.11.2.orig/src/uct/rocm/copy/rocm_copy_ep.c ucx-1.11.2/src/uct/rocm/copy/rocm_copy_ep.c ---- ucx-1.11.2.orig/src/uct/rocm/copy/rocm_copy_ep.c 2021-09-23 22:36:08.000000000 +0200 -+++ ucx-1.11.2/src/uct/rocm/copy/rocm_copy_ep.c 2023-01-03 09:25:35.457356174 +0100 -@@ -19,7 +19,7 @@ - #include - #include - --#include -+#include - - #define uct_rocm_memcpy_h2d(_d,_s,_l) memcpy((_d),(_s),(_l)) - #define uct_rocm_memcpy_d2h(_d,_s,_l) ucs_memcpy_nontemporal((_d),(_s),(_l)) -diff -ru ucx-1.11.2.orig/src/uct/rocm/copy/rocm_copy_iface.h ucx-1.11.2/src/uct/rocm/copy/rocm_copy_iface.h ---- ucx-1.11.2.orig/src/uct/rocm/copy/rocm_copy_iface.h 2021-02-27 02:18:15.000000000 +0100 -+++ ucx-1.11.2/src/uct/rocm/copy/rocm_copy_iface.h 2023-01-03 09:24:33.245895073 +0100 -@@ -8,7 +8,7 @@ - - #include - --#include -+#include - - #define UCT_ROCM_COPY_TL_NAME "rocm_cpy" - -diff -ru ucx-1.11.2.orig/src/uct/rocm/copy/rocm_copy_md.c ucx-1.11.2/src/uct/rocm/copy/rocm_copy_md.c ---- ucx-1.11.2.orig/src/uct/rocm/copy/rocm_copy_md.c 2021-09-23 22:36:08.000000000 +0200 -+++ ucx-1.11.2/src/uct/rocm/copy/rocm_copy_md.c 2023-01-03 09:25:33.073376690 +0100 -@@ -20,7 +20,7 @@ - #include - #include - --#include -+#include - - static ucs_config_field_t uct_rocm_copy_md_config_table[] = { - {"", "", NULL, -diff -ru ucx-1.11.2.orig/src/uct/rocm/gdr/rocm_gdr_md.c ucx-1.11.2/src/uct/rocm/gdr/rocm_gdr_md.c ---- ucx-1.11.2.orig/src/uct/rocm/gdr/rocm_gdr_md.c 2021-09-23 22:36:08.000000000 +0200 -+++ ucx-1.11.2/src/uct/rocm/gdr/rocm_gdr_md.c 2023-01-03 09:25:37.569338002 +0100 -@@ -18,7 +18,7 @@ - #include - #include - --#include -+#include - - static ucs_config_field_t uct_rocm_gdr_md_config_table[] = { - {"", "", NULL, -diff -ru ucx-1.11.2.orig/src/uct/rocm/ipc/rocm_ipc_iface.h ucx-1.11.2/src/uct/rocm/ipc/rocm_ipc_iface.h ---- ucx-1.11.2.orig/src/uct/rocm/ipc/rocm_ipc_iface.h 2021-02-27 02:18:15.000000000 +0100 -+++ ucx-1.11.2/src/uct/rocm/ipc/rocm_ipc_iface.h 2023-01-03 09:24:27.741943217 +0100 -@@ -9,7 +9,7 @@ - - #include - --#include -+#include - - #define UCT_ROCM_IPC_TL_NAME "rocm_ipc" - -diff -ru ucx-1.11.2.orig/src/uct/rocm/ipc/rocm_ipc_md.h ucx-1.11.2/src/uct/rocm/ipc/rocm_ipc_md.h ---- ucx-1.11.2.orig/src/uct/rocm/ipc/rocm_ipc_md.h 2021-02-27 02:18:15.000000000 +0100 -+++ ucx-1.11.2/src/uct/rocm/ipc/rocm_ipc_md.h 2023-01-03 09:25:30.109402193 +0100 -@@ -7,7 +7,7 @@ - #define ROCM_IPC_MD_H - - #include --#include -+#include - - - extern uct_component_t uct_rocm_ipc_component; -diff -ru ucx-1.11.2.orig/test/gtest/common/mem_buffer.cc ucx-1.11.2/test/gtest/common/mem_buffer.cc ---- ucx-1.11.2.orig/test/gtest/common/mem_buffer.cc 2021-09-23 22:36:08.000000000 +0200 -+++ ucx-1.11.2/test/gtest/common/mem_buffer.cc 2023-01-03 09:32:23.085955061 +0100 -@@ -31,7 +31,7 @@ - #endif - - #if HAVE_ROCM --# include -+# include - - #define ROCM_CALL(_code) \ - do { \ -diff -ru ucx-1.11.2.orig/test/gtest/ucm/rocm_hooks.cc ucx-1.11.2/test/gtest/ucm/rocm_hooks.cc ---- ucx-1.11.2.orig/test/gtest/ucm/rocm_hooks.cc 2021-09-23 22:36:08.000000000 +0200 -+++ ucx-1.11.2/test/gtest/ucm/rocm_hooks.cc 2023-01-03 09:32:26.177929298 +0100 -@@ -5,7 +5,7 @@ - */ - #include - #include --#include -+#include - - static ucm_event_t alloc_event, free_event; - diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb new file mode 100644 index 000000000000..8a16fc10c67a --- /dev/null +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -0,0 +1,34 @@ +# Author: Aayush Joglekar + +easyblock = 'EB_UCX_Plugins' + +name = 'UCX-ROCm' +version = '1.18.0' + +homepage = 'http://www.openucx.org/' +description = """Unified Communication X +An open-source production grade communication framework for data centric +and high-performance applications + +This module adds the UCX ROCm support. +""" + +toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s'] +sources = [{'filename': 'ucx-%(version)s.tar.gz', 'alt_location': 'UCX'}] +patches = ['UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch'] + +builddependencies = [ + ('Autotools', '20240712'), + ('pkgconf', '2.3.0'), +] + +dependencies = [ + ('UCX', version), + ('zlib', '1.3.1'), + ('HIP', '6.4.1'), +] + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch new file mode 100644 index 000000000000..e8356494e2b5 --- /dev/null +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch @@ -0,0 +1,109 @@ +Make CUDA/ROCm/Ze plugins link against the existing ucs/ucm/uct libraries. + +--- a/configure.ac ++++ b/configure.ac +@@ -31,13 +31,13 @@ valgrind_libpath="" + AC_USE_SYSTEM_EXTENSIONS + AC_CONFIG_HEADERS([config.h]) + +-AC_CHECK_PROG(GITBIN, git, yes) +-AS_IF([test x"${GITBIN}" = x"yes"], +- [# remove preceding "refs/heads/" (11 characters) for symbolic ref +- AC_SUBST(SCM_BRANCH, esyscmd([sh -c 'git symbolic-ref --quiet HEAD | sed "s/^.\{11\}//"'])) +- AC_SUBST(SCM_VERSION, esyscmd([sh -c 'git rev-parse --short=7 HEAD']))], +- [AC_SUBST(SCM_BRANCH, "") +- AC_SUBST(SCM_VERSION, "0000000")]) ++#AC_CHECK_PROG(GITBIN, git, yes) ++#AS_IF([test x"${GITBIN}" = x"yes"], ++# [# remove preceding "refs/heads/" (11 characters) for symbolic ref ++# AC_SUBST(SCM_BRANCH, esyscmd([sh -c 'git symbolic-ref --quiet HEAD | sed "s/^.\{11\}//"'])) ++# AC_SUBST(SCM_VERSION, esyscmd([sh -c 'git rev-parse --short=7 HEAD']))], ++# [AC_SUBST(SCM_BRANCH, "") ++# AC_SUBST(SCM_VERSION, "0000000")]) + + AH_TOP([ + #ifndef UCX_CONFIG_H +diff --git a/src/ucm/cuda/Makefile.am b/src/ucm/cuda/Makefile.am +index e8eda0f..31a6d54 100644 +--- a/src/ucm/cuda/Makefile.am ++++ b/src/ucm/cuda/Makefile.am +@@ -9,7 +9,7 @@ if HAVE_CUDA + module_LTLIBRARIES = libucm_cuda.la + libucm_cuda_la_CPPFLAGS = $(BASE_CPPFLAGS) $(CUDA_CPPFLAGS) + libucm_cuda_la_CFLAGS = $(BASE_CFLAGS) $(CUDA_CFLAGS) $(LT_CFLAGS) +-libucm_cuda_la_LIBADD = ../libucm.la $(CUDA_LIBS) $(CUDART_LIBS) ++libucm_cuda_la_LIBADD = -lucm $(CUDA_LIBS) $(CUDART_LIBS) + libucm_cuda_la_LDFLAGS = $(UCM_MODULE_LDFLAGS) \ + $(patsubst %, -Xlinker %, $(CUDA_LDFLAGS)) \ + -version-info $(SOVERSION) +diff --git a/src/ucm/rocm/Makefile.am b/src/ucm/rocm/Makefile.am +index 57545b3..9c86ee3 100644 +--- a/src/ucm/rocm/Makefile.am ++++ b/src/ucm/rocm/Makefile.am +@@ -10,7 +10,7 @@ if HAVE_ROCM + module_LTLIBRARIES = libucm_rocm.la + libucm_rocm_la_CPPFLAGS = $(BASE_CPPFLAGS) $(ROCM_CPPFLAGS) + libucm_rocm_la_CFLAGS = $(BASE_CFLAGS) $(ROCM_CFLAGS) $(LT_CFLAGS) +-libucm_rocm_la_LIBADD = ../libucm.la ++libucm_rocm_la_LIBADD = -lucm + libucm_rocm_la_LDFLAGS = $(UCM_MODULE_LDFLAGS) \ + $(ROCM_LDFLAGS) $(ROCM_LIBS) -version-info $(SOVERSION) \ + $(patsubst %, -Xlinker %, -L$(ROCM_ROOT)/lib -rpath $(ROCM_ROOT)/hip/lib -rpath $(ROCM_ROOT)/lib) \ +diff --git a/src/uct/cuda/Makefile.am b/src/uct/cuda/Makefile.am +index 8c76de0..e804cc5 100644 +--- a/src/uct/cuda/Makefile.am ++++ b/src/uct/cuda/Makefile.am +@@ -11,8 +11,8 @@ module_LTLIBRARIES = libuct_cuda.la + libuct_cuda_la_CPPFLAGS = $(BASE_CPPFLAGS) $(CUDA_CPPFLAGS) + libuct_cuda_la_CFLAGS = $(BASE_CFLAGS) $(CUDA_CFLAGS) $(LT_CFLAGS) + libuct_cuda_la_LDFLAGS = $(CUDA_LDFLAGS) -version-info $(SOVERSION) +-libuct_cuda_la_LIBADD = $(top_builddir)/src/ucs/libucs.la \ +- $(top_builddir)/src/uct/libuct.la \ ++libuct_cuda_la_LIBADD = -lucs \ ++ -luct \ + $(CUDA_LIBS) $(NVML_LIBS) + + noinst_HEADERS = \ +diff --git a/src/uct/cuda/gdr_copy/Makefile.am b/src/uct/cuda/gdr_copy/Makefile.am +index 06ad3df..a1a9757 100644 +--- a/src/uct/cuda/gdr_copy/Makefile.am ++++ b/src/uct/cuda/gdr_copy/Makefile.am +@@ -9,7 +9,7 @@ module_LTLIBRARIES = libuct_cuda_gdrcopy.la + libuct_cuda_gdrcopy_la_CPPFLAGS = $(BASE_CPPFLAGS) $(GDR_COPY_CPPFLAGS) + libuct_cuda_gdrcopy_la_CFLAGS = $(BASE_CFLAGS) $(LT_CFLAGS) + libuct_cuda_gdrcopy_la_LDFLAGS = $(GDR_COPY_LDFLAGS) -version-info $(SOVERSION) +-libuct_cuda_gdrcopy_la_LIBADD = $(top_builddir)/src/ucs/libucs.la \ ++libuct_cuda_gdrcopy_la_LIBADD = -lucs \ + $(top_builddir)/src/uct/cuda/libuct_cuda.la \ + $(GDR_COPY_LIBS) + +diff --git a/src/uct/rocm/Makefile.am b/src/uct/rocm/Makefile.am +index 310ca2e..5caf702 100644 +--- a/src/uct/rocm/Makefile.am ++++ b/src/uct/rocm/Makefile.am +@@ -8,8 +8,8 @@ if HAVE_ROCM + module_LTLIBRARIES = libuct_rocm.la + libuct_rocm_la_CPPFLAGS = $(BASE_CPPFLAGS) $(ROCM_CPPFLAGS) + libuct_rocm_la_CFLAGS = $(BASE_CFLAGS) $(LT_CFLAGS) +-libuct_rocm_la_LIBADD = $(top_builddir)/src/ucs/libucs.la \ +- $(top_builddir)/src/uct/libuct.la ++libuct_rocm_la_LIBADD = -lucs \ ++ -luct + libuct_rocm_la_LDFLAGS = $(ROCM_LDFLAGS) $(ROCM_LIBS) -version-info $(SOVERSION) \ + $(patsubst %, -Xlinker %, -L$(ROCM_ROOT)/lib -rpath $(ROCM_ROOT)/hip/lib -rpath $(ROCM_ROOT)/lib) \ + $(patsubst %, -Xlinker %, --enable-new-dtags) \ +diff --git a/src/uct/ze/Makefile.am b/src/uct/ze/Makefile.am +index c2ef39c..0993647 100644 +--- a/src/uct/ze/Makefile.am ++++ b/src/uct/ze/Makefile.am +@@ -10,8 +10,8 @@ SUBDIRS = . + module_LTLIBRARIES = libuct_ze.la + libuct_ze_la_CPPFLAGS = $(BASE_CPPFLAGS) $(ZE_CPPFLAGS) + libuct_ze_la_CFLAGS = $(BASE_CFLAGS) $(LT_CFLAGS) +-libuct_ze_la_LIBADD = $(top_builddir)/src/ucs/libucs.la \ +- $(top_builddir)/src/uct/libuct.la ++libuct_ze_la_LIBADD = -lucs \ ++ -luct + libuct_ze_la_LDFLAGS = $(ZE_LDFLAGS) $(ZE_LIBS) -version-info $(SOVERSION) \ + $(patsubst %, -Xlinker %, -L$(ZE_ROOT)/lib -rpath $(ZE_ROOT)/hip/lib -rpath $(ZE_ROOT)/lib) \ + $(patsubst %, -Xlinker %, --enable-new-dtags) \ From e74c0cca6ae9e43b7759cadd0691920eed133c35 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 10:45:40 +0200 Subject: [PATCH 03/39] Try to expose ROCm lib --- ...b => UCX-ROCm-1.18.0-GCCcore-14.2.0-ROCm-6.4.1.eb} | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) rename easybuild/easyconfigs/u/UCX-ROCm/{UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb => UCX-ROCm-1.18.0-GCCcore-14.2.0-ROCm-6.4.1.eb} (63%) diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-GCCcore-14.2.0-ROCm-6.4.1.eb similarity index 63% rename from easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb rename to easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-GCCcore-14.2.0-ROCm-6.4.1.eb index 8a16fc10c67a..96b223563b7c 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-GCCcore-14.2.0-ROCm-6.4.1.eb @@ -4,6 +4,7 @@ easyblock = 'EB_UCX_Plugins' name = 'UCX-ROCm' version = '1.18.0' +versionsuffix = '-ROCm-6.4.1' homepage = 'http://www.openucx.org/' description = """Unified Communication X @@ -13,12 +14,17 @@ and high-performance applications This module adds the UCX ROCm support. """ -toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} +toolchain = {'name': 'GCCcore', 'version': '14.2.0'} toolchainopts = {'pic': True} source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s'] sources = [{'filename': 'ucx-%(version)s.tar.gz', 'alt_location': 'UCX'}] patches = ['UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch'] +checksums = [ + {'ucx-1.18.0.tar.gz': 'fa75070f5fa7442731b4ef5fc9549391e147ed3d859afeb1dad2d4513b39dc33'}, + {'UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch': + '5aa85e428f62a168f2d4e75197c41c6835ed5a9893696cedaf1021858678f08c'}, +] builddependencies = [ ('Autotools', '20240712'), @@ -28,7 +34,8 @@ builddependencies = [ dependencies = [ ('UCX', version), ('zlib', '1.3.1'), - ('HIP', '6.4.1'), + ('HIP', '6.4.1', '', ('rocm-compilers', '19.0.0-ROCm-6.4.1')), + ('ROCm-LLVM', '19.0.0', '-ROCm-6.4.1'), ] moduleclass = 'lib' From 9c85ca0ef237188da4550eddda054da8fac25051 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 10:51:59 +0200 Subject: [PATCH 04/39] Expose CPPFLAGS and LDFLAGS --- ... UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb} | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) rename easybuild/easyconfigs/u/UCX-ROCm/{UCX-ROCm-1.18.0-GCCcore-14.2.0-ROCm-6.4.1.eb => UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb} (78%) diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-GCCcore-14.2.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb similarity index 78% rename from easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-GCCcore-14.2.0-ROCm-6.4.1.eb rename to easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 96b223563b7c..a49bd92fb3b8 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-GCCcore-14.2.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -4,7 +4,6 @@ easyblock = 'EB_UCX_Plugins' name = 'UCX-ROCm' version = '1.18.0' -versionsuffix = '-ROCm-6.4.1' homepage = 'http://www.openucx.org/' description = """Unified Communication X @@ -14,7 +13,7 @@ and high-performance applications This module adds the UCX ROCm support. """ -toolchain = {'name': 'GCCcore', 'version': '14.2.0'} +toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} toolchainopts = {'pic': True} source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s'] @@ -34,8 +33,10 @@ builddependencies = [ dependencies = [ ('UCX', version), ('zlib', '1.3.1'), - ('HIP', '6.4.1', '', ('rocm-compilers', '19.0.0-ROCm-6.4.1')), - ('ROCm-LLVM', '19.0.0', '-ROCm-6.4.1'), + ('HIP', '6.4.1',), ] +preconfigopts = 'export CPPFLAGS="$CPPFLAGS -I$EBROOTROCMMINLLVM/include -I$EBROOTHIP/include" && ' +preconfigopts += 'export LDFLAGS="$LDFLAGS -L$EBROOTROCMMINLLVM/lib -L$EBROOTHIP/lib" && ' + moduleclass = 'lib' From 7f81e90390c8c9881e44c4cdb3e4e96681b2c472 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 10:59:04 +0200 Subject: [PATCH 05/39] Add patch to use EB ROCm-LLVM paths --- ...1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 6 +++++- ...UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index a49bd92fb3b8..77fad7e9943f 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -18,11 +18,15 @@ toolchainopts = {'pic': True} source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s'] sources = [{'filename': 'ucx-%(version)s.tar.gz', 'alt_location': 'UCX'}] -patches = ['UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch'] +patches = [ + 'UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch', + 'UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch' +] checksums = [ {'ucx-1.18.0.tar.gz': 'fa75070f5fa7442731b4ef5fc9549391e147ed3d859afeb1dad2d4513b39dc33'}, {'UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch': '5aa85e428f62a168f2d4e75197c41c6835ed5a9893696cedaf1021858678f08c'}, + {'UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch': 'a36e344d313772e38bb3a5a03959bb63d142964b34695dbf07a40405e6dc1cbd'}, ] builddependencies = [ diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch new file mode 100644 index 000000000000..2311669aca2a --- /dev/null +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch @@ -0,0 +1,20 @@ +Fixes the ROCm discovery logic in config/m4/rocm.m4 by explicitly pointing to +decoupled EESSI header and library paths for the HSA and HIP runtimes. + +Author: Aayush Joglekar (aayush.joglekar@surf.nl) + +diff --git a/config/m4/rocm.m4 b/config/m4/rocm.m4 +index 0190679e8..ff56417a9 100644 +--- a/config/m4/rocm.m4 ++++ b/config/m4/rocm.m4 +@@ -28,8 +28,8 @@ done]) + # Parse value of ARG into appropriate LIBS, LDFLAGS, and + # CPPFLAGS variables. + AC_DEFUN([ROCM_BUILD_FLAGS], +- $4="-I$1/include/hsa -I$1/include" +- $3="-L$1/lib -L$1/lib64 -L$1/hsa/lib" ++ $4="-I$EBROOTROCMMINLLVM/include/hsa -I$1/include" ++ $3="-L$EBROOTROCMMINLLVM/lib -L$1/lib -L$1/lib64" + $2="-lhsa-runtime64 -lhsakmt" + $5="$1" + ) From e842057d5b16eccbdb684e445141aeb259f60226 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 11:10:18 +0200 Subject: [PATCH 06/39] Remove preconfigopts --- .../UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 3 --- 1 file changed, 3 deletions(-) diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 77fad7e9943f..f99520c3871e 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -40,7 +40,4 @@ dependencies = [ ('HIP', '6.4.1',), ] -preconfigopts = 'export CPPFLAGS="$CPPFLAGS -I$EBROOTROCMMINLLVM/include -I$EBROOTHIP/include" && ' -preconfigopts += 'export LDFLAGS="$LDFLAGS -L$EBROOTROCMMINLLVM/lib -L$EBROOTHIP/lib" && ' - moduleclass = 'lib' From 3fa899b0aaa126b687035cf4ee3c445451db7bf3 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 11:33:33 +0200 Subject: [PATCH 07/39] Add UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb --- ...-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 54 +++++++++++++++++++ .../UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch | 52 ++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb create mode 100644 easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb new file mode 100644 index 000000000000..1efbd882d2a8 --- /dev/null +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -0,0 +1,54 @@ +# Author: Aayush Joglekar + +easyblock = 'ConfigureMake' + +name = 'UCC-ROCm' +version = '1.3.0' + +homepage = 'https://www.openucx.org/' +description = """UCC (Unified Collective Communication) is a collective +communication operations API and library. This module adds the UCC ROCm +support (ROCm memory components and RCCL transport).""" + +toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/openucx/ucc/archive/refs/tags'] +sources = ['v%(version)s.tar.gz'] + +patches = [ + 'UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch', +] + +builddependencies = [ + ('Autotools', '20240712'), + ('pkgconf', '2.3.0'), +] + +dependencies = [ + ('UCC', version), + ('hwloc', '2.11.2'), + ('UCX-ROCm', '1.18.0'), + ('HIP', '6.4.1'), + ('RCCL', '2.22.3'), +] + +preconfigopts = './autogen.sh && ' + +configopts = '--with-rccl=$EBROOTRCCL --with-rocm=$EBROOTHIP ' + +sanity_check_paths = { + 'files': [ + 'lib/ucc/libucc_mc_rocm.%s' % SHLIB_EXT, + 'lib/ucc/libucc_tl_rccl.%s' % SHLIB_EXT + ], + 'dirs': ['lib/ucc'] +} + +# Verify that ucc_info can see the new components +sanity_check_commands = ["ucc_info -c | grep -p 'rocm'"] + +# Ensure UCC knows where to find these external plugins at runtime +modextrapaths = {'EB_UCC_EXTRA_COMPONENT_PATH': 'lib/ucc'} + +moduleclass = 'lib' \ No newline at end of file diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch new file mode 100644 index 000000000000..30ae188b0d7f --- /dev/null +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch @@ -0,0 +1,52 @@ +diff --git a/config/m4/rocm.m4 b/config/m4/rocm.m4 +index c7c4ca14..cc89dc47 100644 +--- a/config/m4/rocm.m4 ++++ b/config/m4/rocm.m4 +@@ -28,8 +28,8 @@ done]) + # Parse value of ARG into appropriate LIBS, LDFLAGS, and + # CPPFLAGS variables. + AC_DEFUN([ROCM_BUILD_FLAGS], +- $4="-I$1/include/hsa -I$1/include" +- $3="-L$1/lib -L$1/lib64 -L$1/hsa/lib" ++ $4="-I$EBROOTROCMMINLLVM/include/hsa -I$1/include" ++ $3="-L$EBROOTROCMMINLLVM/lib -L$1/lib -L$1/lib64" + $2="-lhsa-runtime64 -lhsakmt" + $5="$1" + ) +@@ -39,8 +39,8 @@ AC_DEFUN([ROCM_BUILD_FLAGS], + # Parse value of ARG into appropriate LIBS, LDFLAGS, and + # CPPFLAGS variables. + AC_DEFUN([HIP_BUILD_FLAGS], +- $4="-D__HIP_PLATFORM_AMD__ -I$1/include/hip -I$1/include -I$1/llvm/include" +- $3="-L$1/lib -L$1/llvm/lib" ++ $4="-D__HIP_PLATFORM_AMD__ -I$1/include/hip -I$1/include -I$EBROOTROCMMINLLVM/include" ++ $3="-L$1/lib -L$EBROOTROCMMINLLVM/lib" + $2="-lamdhip64" + ) + +diff --git a/src/components/mc/rocm/Makefile.am b/src/components/mc/rocm/Makefile.am +index b97ef90f..2aff0e4a 100644 +--- a/src/components/mc/rocm/Makefile.am ++++ b/src/components/mc/rocm/Makefile.am +@@ -15,7 +15,7 @@ libucc_mc_rocm_la_CPPFLAGS = $(AM_CPPFLAGS) $(HIP_CPPFLAGS) $(ROCM_CPPFLAGS) $(B + libucc_mc_rocm_la_CFLAGS = $(BASE_CFLAGS) + libucc_mc_rocm_la_LDFLAGS = -version-info $(SOVERSION) --as-needed $(HIP_LDFLAGS) $(ROCM_LDFLAGS) + libucc_mc_rocm_la_LIBADD = $(HIP_LIBS) $(ROCM_LIBS) \ +- $(UCC_TOP_BUILDDIR)/src/libucc.la ++ -lucc + + include $(top_srcdir)/config/module.am + endif +diff --git a/src/components/tl/rccl/Makefile.am b/src/components/tl/rccl/Makefile.am +index f3da3fb6..8a3888e9 100644 +--- a/src/components/tl/rccl/Makefile.am ++++ b/src/components/tl/rccl/Makefile.am +@@ -23,7 +23,7 @@ libucc_tl_rccl_la_SOURCES = $(sources) + libucc_tl_rccl_la_CPPFLAGS = $(AM_CPPFLAGS) $(BASE_CPPFLAGS) $(ROCM_CPPFLAGS) $(HIP_CPPFLAGS) $(RCCL_CPPFLAGS) + libucc_tl_rccl_la_CFLAGS = $(BASE_CFLAGS) + libucc_tl_rccl_la_LDFLAGS = -version-info $(SOVERSION) --as-needed $(ROCM_LDFLAGS) $(HIP_LDFLAGS) $(RCCL_LDFLAGS) +-libucc_tl_rccl_la_LIBADD = $(ROCM_LIBS) $(HIP_LIBS) $(RCCL_LIBADD) $(UCC_TOP_BUILDDIR)/src/libucc.la ++libucc_tl_rccl_la_LIBADD = $(ROCM_LIBS) $(HIP_LIBS) $(RCCL_LIBADD) -lucc + + include $(top_srcdir)/config/module.am + From 08d3b6e35de69e8baaab51b702159f11fc5cd0b6 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 11:42:40 +0200 Subject: [PATCH 08/39] Fix sanity check commands and inject checksums --- ...-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 1efbd882d2a8..7355f114b775 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -7,7 +7,7 @@ version = '1.3.0' homepage = 'https://www.openucx.org/' description = """UCC (Unified Collective Communication) is a collective -communication operations API and library. This module adds the UCC ROCm +communication operations API and library. This module adds the UCC ROCm support (ROCm memory components and RCCL transport).""" toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} @@ -15,10 +15,13 @@ toolchainopts = {'pic': True} source_urls = ['https://github.com/openucx/ucc/archive/refs/tags'] sources = ['v%(version)s.tar.gz'] - patches = [ 'UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch', ] +checksums = [ + {'v1.3.0.tar.gz': 'b56379abe5f1c125bfa83be305d78d81a64aa271b7b5fff0ac17b86725ff3acf'}, + {'UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch': '66c2904fd49124228149d8d2bcc4c0a3e5eaf8fb11b82ffba7df8b84d4ff7c18'}, +] builddependencies = [ ('Autotools', '20240712'), @@ -39,16 +42,15 @@ configopts = '--with-rccl=$EBROOTRCCL --with-rocm=$EBROOTHIP ' sanity_check_paths = { 'files': [ - 'lib/ucc/libucc_mc_rocm.%s' % SHLIB_EXT, + 'lib/ucc/libucc_mc_rocm.%s' % SHLIB_EXT, 'lib/ucc/libucc_tl_rccl.%s' % SHLIB_EXT ], 'dirs': ['lib/ucc'] } -# Verify that ucc_info can see the new components -sanity_check_commands = ["ucc_info -c | grep -p 'rocm'"] +sanity_check_commands = ["ucc_info -c | grep -iE 'rocm|rccl'"] # Ensure UCC knows where to find these external plugins at runtime modextrapaths = {'EB_UCC_EXTRA_COMPONENT_PATH': 'lib/ucc'} -moduleclass = 'lib' \ No newline at end of file +moduleclass = 'lib' From d5d1615fd2e4ef68c171ecf39e1fd7a862e73c36 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 12:16:53 +0200 Subject: [PATCH 09/39] Move hwloc to hwloc-ROCm --- .../hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb} | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename easybuild/easyconfigs/h/{hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb => hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb} (97%) diff --git a/easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb similarity index 97% rename from easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb rename to easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb index d03d4d88a5e4..49fde9e373d9 100644 --- a/easybuild/easyconfigs/h/hwloc/hwloc-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -2,7 +2,7 @@ easyblock = 'ConfigureMake' -name = 'hwloc' +name = 'hwloc-ROCm' version = '2.11.2' _rocm_version = '6.4.1' @@ -32,6 +32,7 @@ builddependencies = [ ] dependencies = [ + ('hwloc', version), ('HIP', '6.4.1'), ('rocm-smi', '7.6.0', f'-ROCm-{_rocm_version}'), ('numactl', '2.0.19'), From 1015441bbbae81196967be6d6456296877b49e28 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 12:23:37 +0200 Subject: [PATCH 10/39] Update hwloc-ROCm dependency in UCC-ROCm --- .../UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 7355f114b775..cacbf401ed11 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -30,7 +30,7 @@ builddependencies = [ dependencies = [ ('UCC', version), - ('hwloc', '2.11.2'), + ('hwloc-ROCm', '2.11.2'), ('UCX-ROCm', '1.18.0'), ('HIP', '6.4.1'), ('RCCL', '2.22.3'), From c62a7d7f2508a8593b75e9d5a45804cf87189347 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 12:28:15 +0200 Subject: [PATCH 11/39] Only build plugins for UCC-ROCm --- .../UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index cacbf401ed11..2116d916bcd8 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -40,6 +40,9 @@ preconfigopts = './autogen.sh && ' configopts = '--with-rccl=$EBROOTRCCL --with-rocm=$EBROOTHIP ' +buildopts = '-C src/components/mc/rocm V=1 && make -C src/components/tl/rccl V=1' +installopts = '-C src/components/mc/rocm install && make -C src/components/tl/rccl install' + sanity_check_paths = { 'files': [ 'lib/ucc/libucc_mc_rocm.%s' % SHLIB_EXT, From fd18fd4a8715fc8e9a55f310ca1e6d9d9842a6af Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 11:58:13 +0200 Subject: [PATCH 12/39] Add PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb --- ...-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 4 +- ...-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 50 +++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 9df1ee3c8b18..0a367452d002 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -34,11 +34,11 @@ dependencies = [ ('zlib', '1.3.1'), ('hwloc', '2.11.2'), ('libevent', '2.1.12'), - ('UCX', '1.18.0'), + ('UCX-ROCm', '1.18.0'), ('libfabric', '2.0.0'), ('PMIx', '5.0.6'), ('PRRTE', '3.0.8'), - ('UCC', '1.3.0'), + ('UCC-ROCm', '1.3.0'), ('HIP', '6.4.1'), ] diff --git a/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb new file mode 100644 index 000000000000..9b85fe95d1f7 --- /dev/null +++ b/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -0,0 +1,50 @@ +# Author: Aayush Joglekar + +easyblock = 'ConfigureMake' + +name = 'PMIx' +version = '5.0.6' + +homepage = 'https://pmix.org/' +description = """Process Management for Exascale Environments +PMI Exascale (PMIx) represents an attempt to +provide an extended version of the PMI standard specifically designed +to support clusters up to and including exascale sizes. The overall +objective of the project is not to branch the existing pseudo-standard +definitions - in fact, PMIx fully supports both of the existing PMI-1 +and PMI-2 APIs - but rather to (a) augment and extend those APIs to +eliminate some current restrictions that impact scalability, and (b) +provide a reference implementation of the PMI-server that demonstrates +the desired level of scalability. +""" + +toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/openpmix/openpmix/releases/download/v%(version)s'] +sources = ['%(namelower)s-%(version)s.tar.bz2'] +checksums = ['ea51baa0fdee688d54bc9f2c11937671381f00de966233eec6fd88807fb46f83'] + +builddependencies = [ + ('Perl', '5.40.0'), + ('pkgconf', '2.3.0'), +] + +dependencies = [ + ('libevent', '2.1.12'), + ('zlib', '1.3.1'), + ('hwloc-ROCm', '2.11.2'), +] + +configopts = ' --with-libevent=$EBROOTLIBEVENT --with-zlib=$EBROOTZLIB' +configopts += ' --with-hwloc=$EBROOTHWLOC' +configopts += ' --enable-pmix-binaries' + +buildopts = 'V=1' + +sanity_check_paths = { + 'files': ['bin/pevent', 'bin/plookup', 'bin/pmix_info', 'bin/pps'], + 'dirs': ['etc', 'include', 'lib', 'share'] +} + +moduleclass = 'lib' From 79f933aba6ee1a7595b01d33fc9ad3edd8754735 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 12:51:29 +0200 Subject: [PATCH 13/39] Add PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb --- ...-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb diff --git a/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb new file mode 100644 index 000000000000..80b73f5e65db --- /dev/null +++ b/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -0,0 +1,40 @@ +# Author: Aayush Joglekar + +easyblock = 'ConfigureMake' + +name = 'PRRTE' +version = '3.0.8' + +homepage = 'https://docs.prrte.org/' +description = """PRRTE is the PMIx Reference RunTime Environment""" + +toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/openpmix/prrte/releases/download/v%(version)s'] +sources = ['%(namelower)s-%(version)s.tar.bz2'] +checksums = ['e798192fa0ab38172818a109a6c89bcc37e4b1123ca150d8c115dee5231750de'] + +builddependencies = [('binutils', '2.42')] + +dependencies = [ + ('libevent', '2.1.12'), + ('hwloc-ROCm', '2.11.2'), + ('PMIx', '5.0.6'), # also picks up rocm-compilers version +] + +configopts = ' --with-libevent=$EBROOTLIBEVENT' +configopts += ' --with-hwloc=$EBROOTHWLOC --with-pmix=$EBROOTPMIX' + +buildopts = 'V=1' + +local_binaries = ['prte', 'prte_info', 'prterun', 'prun', 'pterm'] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in local_binaries] + ['lib/libprrte.%s' % SHLIB_EXT], + 'dirs': ['etc', 'include', 'share'] +} + +sanity_check_commands = ['%s --version' % x for x in local_binaries] + +moduleclass = 'lib' From ff8d61efbdda1d61e9dff48e3726701a02b7ca9a Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 13:04:40 +0200 Subject: [PATCH 14/39] Modify OpenMPI-5.0.7 to use ROCm libs --- .../OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 0a367452d002..a87980dccfae 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -32,7 +32,7 @@ builddependencies = [ dependencies = [ ('zlib', '1.3.1'), - ('hwloc', '2.11.2'), + ('hwloc-ROCm', '2.11.2'), ('libevent', '2.1.12'), ('UCX-ROCm', '1.18.0'), ('libfabric', '2.0.0'), @@ -52,8 +52,13 @@ preconfigopts += './autogen.pl --force && ' # Base config options configopts = '--without-xpmem --with-show-load-errors=no ' - -# Point the ROCm flag to the HIP installation +configopts += '--with-pmix=$EBROOTPMIX ' +configopts += '--with-prrte=$EBROOTPRRTE ' +configopts += '--with-libevent=$EBROOTLIBEVENT ' +configopts += '--with-hwloc=$EBROOTHWLOC ' +configopts += '--with-ucx=$EBROOTUCX ' +configopts += '--with-ucc=$EBROOTUCC ' configopts += '--with-rocm=$EBROOTHIP ' +configopts += '--enable-mpi1-compatibility ' moduleclass = 'mpi' From b1803c0b7b628d0212189dfcf8c429004acea90c Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 13:32:14 +0200 Subject: [PATCH 15/39] Fix style check --- .../p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 80b73f5e65db..7ebfa03fd029 100644 --- a/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -20,7 +20,8 @@ builddependencies = [('binutils', '2.42')] dependencies = [ ('libevent', '2.1.12'), ('hwloc-ROCm', '2.11.2'), - ('PMIx', '5.0.6'), # also picks up rocm-compilers version + # also picks up rocm-compilers version + ('PMIx', '5.0.6'), ] configopts = ' --with-libevent=$EBROOTLIBEVENT' From 262971e2464c0c8c8782ec9f7fc13a0eba576d6a Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 3 May 2026 13:47:41 +0200 Subject: [PATCH 16/39] Add explicit dependencies --- .../OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb index a87980dccfae..e2fcc38a2822 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -32,12 +32,15 @@ builddependencies = [ dependencies = [ ('zlib', '1.3.1'), + ('hwloc', '2.11.2'), ('hwloc-ROCm', '2.11.2'), ('libevent', '2.1.12'), + ('UCX', '1.18.0'), ('UCX-ROCm', '1.18.0'), ('libfabric', '2.0.0'), ('PMIx', '5.0.6'), ('PRRTE', '3.0.8'), + ('UCC', '1.3.0'), ('UCC-ROCm', '1.3.0'), ('HIP', '6.4.1'), ] From ab5a8029c54b846d12a2cbde49b3139b81bbf230 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Mon, 4 May 2026 14:53:32 +0200 Subject: [PATCH 17/39] Fix dependency format for HIP in UCX-ROCm config --- .../UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index f99520c3871e..f0899efb55f0 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -37,7 +37,7 @@ builddependencies = [ dependencies = [ ('UCX', version), ('zlib', '1.3.1'), - ('HIP', '6.4.1',), + ('HIP', '6.4.1'), ] moduleclass = 'lib' From 9a5a7c0fefe098d3e6dd2ef7550a2aab54a0507b Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Sun, 10 May 2026 12:58:21 +0300 Subject: [PATCH 18/39] IT ALL WORKS --- .../OSU-Micro-Benchmarks-7.5-rompi-2025a.eb | 23 ++++- ...-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 14 ++- .../UCX-ROCm/UCX-1.13.1-dynamic_modules.patch | 29 +++++++ ....18.0_fix-glibc-2.43-compile-failure.patch | 85 +++++++++++++++++++ .../UCX-1.18.0_fix_bistro_hooks.patch | 51 +++++++++++ ...1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 45 ++++++++-- ...UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch | 20 ----- .../x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb | 47 ++++++++++ 8 files changed, 284 insertions(+), 30 deletions(-) create mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-1.13.1-dynamic_modules.patch create mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix-glibc-2.43-compile-failure.patch create mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix_bistro_hooks.patch delete mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch create mode 100644 easybuild/easyconfigs/x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb diff --git a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb index 36a727acb3e5..8a571584afca 100644 --- a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb +++ b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb @@ -1,7 +1,10 @@ +# Author: Aayush Joglekar + easyblock = 'ConfigureMake' name = 'OSU-Micro-Benchmarks' version = '7.5' +_rocm_version = '6.4.1' homepage = 'https://mvapich.cse.ohio-state.edu/benchmarks/' description = """OSU Micro-Benchmarks""" @@ -13,9 +16,27 @@ source_urls = ['https://mvapich.cse.ohio-state.edu/download/mvapich/'] sources = [SOURCELOWER_TAR_GZ] checksums = ['1cf84ac5419456202757a757c5f9a4f5c6ecd05c65783c7976421cfd6020b3b3'] +dependencies = [ + ('HIP', _rocm_version), + ('RCCL', '2.22.3'), + ('UCX-ROCm', '1.18.0'), +] + +preconfigopts = ( + 'export CPPFLAGS="-I$EBROOTHIP/include -I$EBROOTROCMMINLLVM/include $CPPFLAGS" && ' + 'export LDFLAGS="-L$EBROOTHIP/lib -L$EBROOTROCMMINLLVM/lib ' + '-Wl,-rpath,$EBROOTHIP/lib -Wl,-rpath,$EBROOTROCMMINLLVM/lib $LDFLAGS" && ' +) + +configopts = '--enable-rocm --with-rocm=$EBROOTHIP ' +configopts += '--enable-rcclomb --with-rccl=$EBROOTRCCL ' + local_benchmark_dirs = [ 'libexec/osu-micro-benchmarks/mpi/%s' % x for x in ['collective', 'one-sided', 'pt2pt', 'startup'] +] + [ + 'libexec/osu-micro-benchmarks/xccl/%s' % x for x in ['collective', 'pt2pt'] ] + modextrapaths = {'PATH': local_benchmark_dirs} sanity_check_paths = { @@ -23,4 +44,4 @@ sanity_check_paths = { 'dirs': local_benchmark_dirs, } -moduleclass = 'perf' +moduleclass = 'perf' \ No newline at end of file diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb index e2fcc38a2822..e5e2e6b4ce7c 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -35,7 +35,6 @@ dependencies = [ ('hwloc', '2.11.2'), ('hwloc-ROCm', '2.11.2'), ('libevent', '2.1.12'), - ('UCX', '1.18.0'), ('UCX-ROCm', '1.18.0'), ('libfabric', '2.0.0'), ('PMIx', '5.0.6'), @@ -43,6 +42,7 @@ dependencies = [ ('UCC', '1.3.0'), ('UCC-ROCm', '1.3.0'), ('HIP', '6.4.1'), + ('xpmem', '2.7.4'), ] # Disable building Level Zero components of romio if system dependencies are picked up. Sources are not based on @@ -54,14 +54,20 @@ preconfigopts = 'sed -i "s/have_ze=yes/have_ze=no/" %(start_dir)s/3rd-party/romi preconfigopts += './autogen.pl --force && ' # Base config options -configopts = '--without-xpmem --with-show-load-errors=no ' +configopts = '--with-show-load-errors=no ' +configopts += '--with-xpmem=$EBROOTXPMEM ' +configopts += '--with-cray-xpmem=no ' configopts += '--with-pmix=$EBROOTPMIX ' configopts += '--with-prrte=$EBROOTPRRTE ' configopts += '--with-libevent=$EBROOTLIBEVENT ' configopts += '--with-hwloc=$EBROOTHWLOC ' -configopts += '--with-ucx=$EBROOTUCX ' +configopts += '--with-ofi=$EBROOTLIBFABRIC ' +configopts += '--with-ucx=$EBROOTUCXMINROCM ' configopts += '--with-ucc=$EBROOTUCC ' configopts += '--with-rocm=$EBROOTHIP ' -configopts += '--enable-mpi1-compatibility ' + +modextravars = { + 'OMPI_MCA_opal_common_ucx_devices': 'any', +} moduleclass = 'mpi' diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.13.1-dynamic_modules.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.13.1-dynamic_modules.patch new file mode 100644 index 000000000000..bf0e55648531 --- /dev/null +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.13.1-dynamic_modules.patch @@ -0,0 +1,29 @@ +# UCX is hardcoded to only load the modules it is compiled with. +# This patch adds an optional EB_UCX_xxx_MODULES that can override this list, allowing new modules to be loaded later. +# Author: micketeer@gmail.com - updated for UCX 1.13.1 by Kenneth Hoste (HPC-UGent) +--- ucx-1.13.1.orig/src/ucs/sys/module.c 2022-09-07 09:16:18.000000000 +0200 ++++ ucx-1.13.1/src/ucs/sys/module.c 2022-10-18 16:29:29.318490689 +0200 +@@ -271,6 +271,8 @@ + char *modules_str; + char *saveptr; + char *module_name; ++ char *env_modules; ++ char buf[64]; + + ucs_module_loader_init_paths(); + +@@ -278,7 +280,13 @@ + ucs_assert(ucs_sys_is_dynamic_lib()); + + ucs_module_debug("loading modules for %s", framework); +- modules_str = ucs_strdup(modules, "modules_list"); ++ ucs_snprintf_safe(buf, sizeof(buf), "EB_UCX_%s_MODULES", framework); ++ env_modules = getenv(buf); ++ if (env_modules != NULL) { ++ modules_str = ucs_strdup(env_modules, "modules_list"); ++ } else { ++ modules_str = ucs_strdup(modules, "modules_list"); ++ } + if (modules_str != NULL) { + saveptr = NULL; + module_name = strtok_r(modules_str, ":", &saveptr); diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix-glibc-2.43-compile-failure.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix-glibc-2.43-compile-failure.patch new file mode 100644 index 000000000000..20e40017b0e6 --- /dev/null +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix-glibc-2.43-compile-failure.patch @@ -0,0 +1,85 @@ +From ad56fc5fa0884c1d8196a0673f8ef5497d9d55e8 Mon Sep 17 00:00:00 2001 +From: Yossi Itigin +Date: Sun, 15 Feb 2026 16:27:20 +0200 +Subject: [PATCH] UCT/IB/CONFIG: Fix const correctness when using strchr() + +--- + src/tools/perf/mad/perftest_mad.c | 2 +- + src/tools/perf/perftest_params.c | 2 +- + src/ucs/config/parser.c | 2 +- + src/uct/ib/base/ib_device.c | 13 +++++++------ + 4 files changed, 10 insertions(+), 9 deletions(-) + +diff --git a/src/tools/perf/mad/perftest_mad.c b/src/tools/perf/mad/perftest_mad.c +index ef7cad66770..645c082465c 100644 +--- a/src/tools/perf/mad/perftest_mad.c ++++ b/src/tools/perf/mad/perftest_mad.c +@@ -601,7 +601,7 @@ static ucs_status_t perftest_mad_parse_ca_and_port(const char *mad_port, + int *ca_port) + { + static const int default_port = 1; +- char *sep = strchr(mad_port, ':'); ++ const char *sep = strchr(mad_port, ':'); + size_t len; + + if (sep == NULL) { +diff --git a/src/tools/perf/perftest_params.c b/src/tools/perf/perftest_params.c +index 0786136c323..3c0dfd15c00 100644 +--- a/src/tools/perf/perftest_params.c ++++ b/src/tools/perf/perftest_params.c +@@ -584,7 +584,7 @@ static ucs_status_t init_daemon_params(ucx_perf_params_t *params) + ucs_status_t parse_test_params(perftest_params_t *params, char opt, + const char *opt_arg) + { +- char *optarg2 = NULL; ++ const char *optarg2 = NULL; + test_type_t *test; + unsigned i; + +diff --git a/src/ucs/config/parser.c b/src/ucs/config/parser.c +index f60bbfa390b..755db2cfb58 100644 +--- a/src/ucs/config/parser.c ++++ b/src/ucs/config/parser.c +@@ -644,7 +644,7 @@ int ucs_config_sprintf_bw(char *buf, size_t max, const void *src, + int ucs_config_sscanf_bw_spec(const char *buf, void *dest, const void *arg) + { + ucs_config_bw_spec_t *dst = (ucs_config_bw_spec_t*)dest; +- char *delim; ++ const char *delim; + + delim = strchr(buf, ':'); + if (!delim) { +diff --git a/src/uct/ib/base/ib_device.c b/src/uct/ib/base/ib_device.c +index 995e7e5538a..80a3c772dd4 100644 +--- a/src/uct/ib/base/ib_device.c ++++ b/src/uct/ib/base/ib_device.c +@@ -1396,13 +1396,14 @@ ucs_status_t uct_ib_device_find_port(uct_ib_device_t *dev, + const char *ibdev_name; + unsigned port_num; + size_t devname_len; +- char *p; ++ const char *devname_str; ++ char *port_num_str; + +- p = strrchr(resource_dev_name, ':'); +- if (p == NULL) { ++ devname_str = strrchr(resource_dev_name, ':'); ++ if (devname_str == NULL) { + goto err; /* Wrong device name format */ + } +- devname_len = p - resource_dev_name; ++ devname_len = devname_str - resource_dev_name; + + ibdev_name = uct_ib_device_name(dev); + if ((strlen(ibdev_name) != devname_len) || +@@ -1411,8 +1412,8 @@ ucs_status_t uct_ib_device_find_port(uct_ib_device_t *dev, + goto err; /* Device name is wrong */ + } + +- port_num = strtod(p + 1, &p); +- if (*p != '\0') { ++ port_num = strtod(devname_str + 1, &port_num_str); ++ if (*port_num_str != '\0') { + goto err; /* Failed to parse port number */ + } + if ((port_num < dev->first_port) || (port_num >= dev->first_port + dev->num_ports)) { diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix_bistro_hooks.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix_bistro_hooks.patch new file mode 100644 index 000000000000..28c378f584f1 --- /dev/null +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix_bistro_hooks.patch @@ -0,0 +1,51 @@ +# What: Fix inability of UCX to create an rcache with CUDA 12.9 (R575 driver) +# See https://github.com/openucx/ucx/issues/10868 +# Based on https://github.com/openucx/ucx/pull/10627 +# Author: maxim-masterov + +From f4ff1e5dd5b17bc0192d987db1917a10fb5aa63a Mon Sep 17 00:00:00 2001 +From: Ilia Yastrebov +Date: Fri, 11 Apr 2025 15:28:36 +0000 +Subject: [PATCH] UCM/CUDA: Fixed cuda12.9 amd64 bistro hook missing + instruction + +--- + src/ucm/bistro/bistro_x86_64.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/src/ucm/bistro/bistro_x86_64.c b/src/ucm/bistro/bistro_x86_64.c +index dd01bb462d2..9ea9d61be3a 100644 +--- a/src/ucm/bistro/bistro_x86_64.c ++++ b/src/ucm/bistro/bistro_x86_64.c +@@ -82,6 +82,9 @@ typedef struct { + /* Immediate Grp 1(1A), Ev, Iz */ + #define UCM_BISTRO_X86_IMM_GRP1_EV_IZ 0x81 + ++/* Immediate Grp 1(1A), Ev, Ib - 8-bit immediate */ ++#define UCM_BISTRO_X86_IMM_GRP1_EV_IB 0x83 ++ + /* MOV Ev,Gv */ + #define UCM_BISTRO_X86_MOV_EV_GV 0x89 + +@@ -156,11 +159,18 @@ ucs_status_t ucm_bistro_relocate_one(ucm_bistro_relocate_context_t *ctx) + /* push reg */ + goto out_copy_src; + } else if ((rex == UCM_BISTRO_X86_REX_W) && +- (opcode == UCM_BISTRO_X86_IMM_GRP1_EV_IZ)) { ++ ((opcode == UCM_BISTRO_X86_IMM_GRP1_EV_IZ) || /* sub $imm32, r/m64 */ ++ (opcode == UCM_BISTRO_X86_IMM_GRP1_EV_IB))) { /* sub $imm8, r/m64 */ + modrm = *ucs_serialize_next(&ctx->src_p, const uint8_t); + if (modrm == UCM_BISTRO_X86_MODRM_SUB_SP) { +- /* sub $imm32, %rsp */ +- ucs_serialize_next(&ctx->src_p, const uint32_t); ++ if (opcode == UCM_BISTRO_X86_IMM_GRP1_EV_IB) { ++ /* sub $imm8, %rsp */ ++ ucs_serialize_next(&ctx->src_p, const uint8_t); ++ } else { ++ /* sub $imm32, %rsp */ ++ ucs_serialize_next(&ctx->src_p, const uint32_t); ++ } ++ + goto out_copy_src; + } + } else if ((rex == UCM_BISTRO_X86_REX_W) && diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index f0899efb55f0..4e45413a0399 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -1,6 +1,6 @@ # Author: Aayush Joglekar -easyblock = 'EB_UCX_Plugins' +easyblock = 'ConfigureMake' name = 'UCX-ROCm' version = '1.18.0' @@ -20,13 +20,18 @@ source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s'] sources = [{'filename': 'ucx-%(version)s.tar.gz', 'alt_location': 'UCX'}] patches = [ 'UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch', - 'UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch' + 'UCX-1.13.1-dynamic_modules.patch', + 'UCX-1.18.0_fix_bistro_hooks.patch', + 'UCX-1.18.0_fix-glibc-2.43-compile-failure.patch', ] checksums = [ {'ucx-1.18.0.tar.gz': 'fa75070f5fa7442731b4ef5fc9549391e147ed3d859afeb1dad2d4513b39dc33'}, {'UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch': '5aa85e428f62a168f2d4e75197c41c6835ed5a9893696cedaf1021858678f08c'}, - {'UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch': 'a36e344d313772e38bb3a5a03959bb63d142964b34695dbf07a40405e6dc1cbd'}, + {'UCX-1.13.1-dynamic_modules.patch': '00874687bd90b795fff61aaa183f6c6bea2210aa1003b28f23d9ebf7066f8782'}, + {'UCX-1.18.0_fix_bistro_hooks.patch': '6357f1ebb1569e30d0855e48404fdf38a5a7060a87789f54d7bb751f957be20c'}, + {'UCX-1.18.0_fix-glibc-2.43-compile-failure.patch': + 'c67b2070a65e8217b7c6f9d9a6a13ff11141bacfed395d551376432428348a9c'}, ] builddependencies = [ @@ -35,9 +40,39 @@ builddependencies = [ ] dependencies = [ - ('UCX', version), ('zlib', '1.3.1'), - ('HIP', '6.4.1'), + ('numactl', '2.0.19'), + ('xpmem', '2.7.4'), +] + +osdependencies = [OS_PKG_IBVERBS_DEV] + +# Base options matching the GCCcore UCX build +configopts = '--enable-optimizations --enable-cma --enable-mt --with-verbs ' +configopts += '--without-java --without-go --disable-doxygen-doc ' +configopts += '--disable-logging --disable-debug --disable-assertions --disable-params-check ' + +# xpmem — same library works regardless of which compiler built UCX +configopts += '--with-xpmem=$EBROOTXPMEM ' + +# ROCm — this is what UCX-ROCm adds over the base UCX build +configopts += '--with-rocm=$EBROOTROCMMINLLVM ' + +buildopts = 'V=1' + +sanity_check_paths = { + 'files': [ + 'bin/ucx_perftest', + 'bin/ucx_read_profile', + 'bin/ucx_info', + 'lib/ucx/libuct_rocm.so'], # the ROCm transport plugin + 'dirs': ['include', 'lib', 'share'], +} + +sanity_check_commands = [ + "ucx_info -d", + "ucx_info -d 2>&1 | grep -q 'rocm'", # fails if ROCm transport not compiled in + "ucx_info -d 2>&1 | grep -q 'xpmem'", # fails if xpmem not compiled in ] moduleclass = 'lib' diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch deleted file mode 100644 index 2311669aca2a..000000000000 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_eessi_paths.patch +++ /dev/null @@ -1,20 +0,0 @@ -Fixes the ROCm discovery logic in config/m4/rocm.m4 by explicitly pointing to -decoupled EESSI header and library paths for the HSA and HIP runtimes. - -Author: Aayush Joglekar (aayush.joglekar@surf.nl) - -diff --git a/config/m4/rocm.m4 b/config/m4/rocm.m4 -index 0190679e8..ff56417a9 100644 ---- a/config/m4/rocm.m4 -+++ b/config/m4/rocm.m4 -@@ -28,8 +28,8 @@ done]) - # Parse value of ARG into appropriate LIBS, LDFLAGS, and - # CPPFLAGS variables. - AC_DEFUN([ROCM_BUILD_FLAGS], -- $4="-I$1/include/hsa -I$1/include" -- $3="-L$1/lib -L$1/lib64 -L$1/hsa/lib" -+ $4="-I$EBROOTROCMMINLLVM/include/hsa -I$1/include" -+ $3="-L$EBROOTROCMMINLLVM/lib -L$1/lib -L$1/lib64" - $2="-lhsa-runtime64 -lhsakmt" - $5="$1" - ) diff --git a/easybuild/easyconfigs/x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb new file mode 100644 index 000000000000..3c246dbfafd5 --- /dev/null +++ b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb @@ -0,0 +1,47 @@ +# Author: Aayush Joglekar + +easyblock = 'ConfigureMake' + +name = 'xpmem' +version = '2.7.4' + +homepage = 'https://github.com/openucx/xpmem' +description = """XPMEM is a Linux kernel module that enables a process to map the +memory of another process into its virtual address space. Source-to-source copy +operations between cooperating processes can then be performed at memory speed. +This is the userspace library; it requires the xpmem kernel module to be loaded +on the host (provided as 'cray-xpmem' on LUMI; verifiable via 'lsmod | grep xpmem' +and the existence of /dev/xpmem). +""" + +toolchain = {'name': 'GCCcore', 'version': '14.2.0'} +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/openucx/xpmem/archive/'] +sources = ['v%(version)s.tar.gz'] +checksums = ['738c70041ce09dcc66b64d80aebc1479e779efe12a9c02217fba610e2ae61f18'] + +builddependencies = [ + ('Autotools', '20240712'), +] + +# xpmem ships only autogen.sh; we must run it before configure. +preconfigopts = './autogen.sh && ' + +# Build only the userspace library + headers; explicitly skip kernel module +# (it's already provided by the host). +configopts = '--disable-kernel-module ' +configopts += '--enable-shared --enable-static ' + +sanity_check_paths = { + 'files': ['include/xpmem.h', 'lib/libxpmem.%s' % SHLIB_EXT, 'lib/libxpmem.a'], + 'dirs': ['include', 'lib'], +} + +# Sanity check: make sure header has the symbols we expect. +# We don't try to invoke /dev/xpmem here because the build host may not have it. +sanity_check_commands = [ + "grep -q 'xpmem_make' %(installdir)s/include/xpmem.h", +] + +moduleclass = 'system' From d1c4dd13cac00d2803f49b933ff9402d1eff2792 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Mon, 11 May 2026 10:51:21 +0300 Subject: [PATCH 19/39] Fix and refactor easyconfigs --- ...2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 19 +-- .../OSU-Micro-Benchmarks-7.5-rompi-2025a.eb | 17 +-- ...-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 18 +-- ...-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 7 +- ...-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 8 +- ...-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 28 ++--- .../UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch | 27 ----- .../UCX-ROCm/UCX-1.13.1-dynamic_modules.patch | 29 ----- ...1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 34 ++---- ....18.0_link_against_existing_UCX_libs.patch | 109 ------------------ .../x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb | 4 +- 11 files changed, 51 insertions(+), 249 deletions(-) delete mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-1.13.1-dynamic_modules.patch delete mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch diff --git a/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 49fde9e373d9..096e4cb7d1fc 100644 --- a/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -8,18 +8,7 @@ _rocm_version = '6.4.1' homepage = 'https://www.open-mpi.org/projects/hwloc/' -description = """ - The Portable Hardware Locality (hwloc) software package provides a portable - abstraction (across OS, versions, architectures, ...) of the hierarchical - topology of modern architectures, including NUMA memory nodes, sockets, shared - caches, cores and simultaneous multithreading. It also gathers various system - attributes such as cache and memory information as well as the locality of I/O - devices such as network interfaces, InfiniBand HCAs or GPUs. It primarily - aims at helping applications with gathering information about modern computing - hardware so as to exploit it accordingly and efficiently. - - This provides the ROCm and RSMI plugins for hwloc to discover AMD GPUs. -""" +description = 'This provides the ROCm and RSMI plugins for hwloc to discover AMD GPUs.' toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} @@ -33,9 +22,9 @@ builddependencies = [ dependencies = [ ('hwloc', version), - ('HIP', '6.4.1'), - ('rocm-smi', '7.6.0', f'-ROCm-{_rocm_version}'), ('numactl', '2.0.19'), + ('rocm-smi', '7.6.0', f'-ROCm-{_rocm_version}'), # GCCcore + ('HIP', '6.4.1'), ] configopts = ' '.join([ @@ -68,6 +57,8 @@ sanity_check_paths = { # Verify that hwloc can successfully load the new AMD plugins sanity_check_commands = [ + # hwloc: Registered discovery component `rsmi' phases 0x10 with priority 10 + # (from plugin ../hwloc-ROCm/2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1/hwloc_rsmi) 'HWLOC_COMPONENTS_VERBOSE=1 lstopo 2>&1 | grep %(installdir)s' ] diff --git a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb index 8a571584afca..41d6bc8184db 100644 --- a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb +++ b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb @@ -19,15 +19,8 @@ checksums = ['1cf84ac5419456202757a757c5f9a4f5c6ecd05c65783c7976421cfd6020b3b3'] dependencies = [ ('HIP', _rocm_version), ('RCCL', '2.22.3'), - ('UCX-ROCm', '1.18.0'), ] -preconfigopts = ( - 'export CPPFLAGS="-I$EBROOTHIP/include -I$EBROOTROCMMINLLVM/include $CPPFLAGS" && ' - 'export LDFLAGS="-L$EBROOTHIP/lib -L$EBROOTROCMMINLLVM/lib ' - '-Wl,-rpath,$EBROOTHIP/lib -Wl,-rpath,$EBROOTROCMMINLLVM/lib $LDFLAGS" && ' -) - configopts = '--enable-rocm --with-rocm=$EBROOTHIP ' configopts += '--enable-rcclomb --with-rccl=$EBROOTRCCL ' @@ -40,8 +33,16 @@ local_benchmark_dirs = [ modextrapaths = {'PATH': local_benchmark_dirs} sanity_check_paths = { - 'files': [], + 'files': [ + 'libexec/osu-micro-benchmarks/mpi/pt2pt/osu_bw', + 'libexec/osu-micro-benchmarks/mpi/collective/osu_allreduce', + 'libexec/osu-micro-benchmarks/xccl/collective/osu_xccl_allreduce', + ], 'dirs': local_benchmark_dirs, } +sanity_check_commands = [ + "osu_bw --help | grep -i rocm", +] + moduleclass = 'perf' \ No newline at end of file diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb index e5e2e6b4ce7c..96ac2be089f1 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -32,17 +32,15 @@ builddependencies = [ dependencies = [ ('zlib', '1.3.1'), - ('hwloc', '2.11.2'), - ('hwloc-ROCm', '2.11.2'), ('libevent', '2.1.12'), - ('UCX-ROCm', '1.18.0'), ('libfabric', '2.0.0'), + ('xpmem', '2.7.4'), ('PMIx', '5.0.6'), ('PRRTE', '3.0.8'), - ('UCC', '1.3.0'), + ('hwloc-ROCm', '2.11.2'), + ('UCX-ROCm', '1.18.0'), ('UCC-ROCm', '1.3.0'), ('HIP', '6.4.1'), - ('xpmem', '2.7.4'), ] # Disable building Level Zero components of romio if system dependencies are picked up. Sources are not based on @@ -53,18 +51,8 @@ preconfigopts = 'sed -i "s/have_ze=yes/have_ze=no/" %(start_dir)s/3rd-party/romi # Regenerate the Autotools build files because of our patches preconfigopts += './autogen.pl --force && ' -# Base config options configopts = '--with-show-load-errors=no ' -configopts += '--with-xpmem=$EBROOTXPMEM ' configopts += '--with-cray-xpmem=no ' -configopts += '--with-pmix=$EBROOTPMIX ' -configopts += '--with-prrte=$EBROOTPRRTE ' -configopts += '--with-libevent=$EBROOTLIBEVENT ' -configopts += '--with-hwloc=$EBROOTHWLOC ' -configopts += '--with-ofi=$EBROOTLIBFABRIC ' -configopts += '--with-ucx=$EBROOTUCXMINROCM ' -configopts += '--with-ucc=$EBROOTUCC ' -configopts += '--with-rocm=$EBROOTHIP ' modextravars = { 'OMPI_MCA_opal_common_ucx_devices': 'any', diff --git a/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 9b85fe95d1f7..2ce2df20a7dd 100644 --- a/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -36,9 +36,10 @@ dependencies = [ ('hwloc-ROCm', '2.11.2'), ] -configopts = ' --with-libevent=$EBROOTLIBEVENT --with-zlib=$EBROOTZLIB' -configopts += ' --with-hwloc=$EBROOTHWLOC' -configopts += ' --enable-pmix-binaries' +configopts = '--with-libevent=$EBROOTLIBEVENT ' +configopts += '--with-zlib=$EBROOTZLIB ' +configopts += '--with-hwloc=$EBROOTHWLOC ' +configopts += '--enable-pmix-binaries ' buildopts = 'V=1' diff --git a/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 7ebfa03fd029..f10c33658985 100644 --- a/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -15,17 +15,15 @@ source_urls = ['https://github.com/openpmix/prrte/releases/download/v%(version)s sources = ['%(namelower)s-%(version)s.tar.bz2'] checksums = ['e798192fa0ab38172818a109a6c89bcc37e4b1123ca150d8c115dee5231750de'] -builddependencies = [('binutils', '2.42')] - dependencies = [ ('libevent', '2.1.12'), ('hwloc-ROCm', '2.11.2'), - # also picks up rocm-compilers version ('PMIx', '5.0.6'), ] -configopts = ' --with-libevent=$EBROOTLIBEVENT' -configopts += ' --with-hwloc=$EBROOTHWLOC --with-pmix=$EBROOTPMIX' +configopts = '--with-libevent=$EBROOTLIBEVENT ' +configopts += '--with-hwloc=$EBROOTHWLOC ' +configopts += '--with-pmix=$EBROOTPMIX ' buildopts = 'V=1' diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 2116d916bcd8..715439f3ae03 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -7,8 +7,9 @@ version = '1.3.0' homepage = 'https://www.openucx.org/' description = """UCC (Unified Collective Communication) is a collective -communication operations API and library. This module adds the UCC ROCm -support (ROCm memory components and RCCL transport).""" +communication operations API and library. This module provides the complete +UCC library explicitly configured with AMD ROCm support to enable ROCm +memory components and RCCL transport capabilities.""" toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} toolchainopts = {'pic': True} @@ -20,7 +21,7 @@ patches = [ ] checksums = [ {'v1.3.0.tar.gz': 'b56379abe5f1c125bfa83be305d78d81a64aa271b7b5fff0ac17b86725ff3acf'}, - {'UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch': '66c2904fd49124228149d8d2bcc4c0a3e5eaf8fb11b82ffba7df8b84d4ff7c18'}, + {'UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch': 'd8919a7074cd32042345382d63c2e9ca4eb132927c84b156c26f57aadaa3b74f'}, ] builddependencies = [ @@ -29,31 +30,30 @@ builddependencies = [ ] dependencies = [ - ('UCC', version), - ('hwloc-ROCm', '2.11.2'), - ('UCX-ROCm', '1.18.0'), ('HIP', '6.4.1'), + ('UCX-ROCm', '1.18.0'), ('RCCL', '2.22.3'), ] preconfigopts = './autogen.sh && ' -configopts = '--with-rccl=$EBROOTRCCL --with-rocm=$EBROOTHIP ' -buildopts = '-C src/components/mc/rocm V=1 && make -C src/components/tl/rccl V=1' -installopts = '-C src/components/mc/rocm install && make -C src/components/tl/rccl install' +configopts = '--with-rocm=$EBROOTHIP ' +configopts += '--with-ucx=$EBROOTUCXMINROCM ' +configopts += '--with-rccl=$EBROOTRCCL ' sanity_check_paths = { 'files': [ + 'bin/ucc_info', 'lib/ucc/libucc_mc_rocm.%s' % SHLIB_EXT, 'lib/ucc/libucc_tl_rccl.%s' % SHLIB_EXT ], - 'dirs': ['lib/ucc'] + 'dirs': ['include', 'lib'] } -sanity_check_commands = ["ucc_info -c | grep -iE 'rocm|rccl'"] - -# Ensure UCC knows where to find these external plugins at runtime -modextrapaths = {'EB_UCC_EXTRA_COMPONENT_PATH': 'lib/ucc'} +sanity_check_commands = [ + "ucc_info -c | grep -i rocm", + "ucc_info -c | grep -i rccl", +] moduleclass = 'lib' diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch index 30ae188b0d7f..388c28ca905a 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch @@ -23,30 +23,3 @@ index c7c4ca14..cc89dc47 100644 + $3="-L$1/lib -L$EBROOTROCMMINLLVM/lib" $2="-lamdhip64" ) - -diff --git a/src/components/mc/rocm/Makefile.am b/src/components/mc/rocm/Makefile.am -index b97ef90f..2aff0e4a 100644 ---- a/src/components/mc/rocm/Makefile.am -+++ b/src/components/mc/rocm/Makefile.am -@@ -15,7 +15,7 @@ libucc_mc_rocm_la_CPPFLAGS = $(AM_CPPFLAGS) $(HIP_CPPFLAGS) $(ROCM_CPPFLAGS) $(B - libucc_mc_rocm_la_CFLAGS = $(BASE_CFLAGS) - libucc_mc_rocm_la_LDFLAGS = -version-info $(SOVERSION) --as-needed $(HIP_LDFLAGS) $(ROCM_LDFLAGS) - libucc_mc_rocm_la_LIBADD = $(HIP_LIBS) $(ROCM_LIBS) \ -- $(UCC_TOP_BUILDDIR)/src/libucc.la -+ -lucc - - include $(top_srcdir)/config/module.am - endif -diff --git a/src/components/tl/rccl/Makefile.am b/src/components/tl/rccl/Makefile.am -index f3da3fb6..8a3888e9 100644 ---- a/src/components/tl/rccl/Makefile.am -+++ b/src/components/tl/rccl/Makefile.am -@@ -23,7 +23,7 @@ libucc_tl_rccl_la_SOURCES = $(sources) - libucc_tl_rccl_la_CPPFLAGS = $(AM_CPPFLAGS) $(BASE_CPPFLAGS) $(ROCM_CPPFLAGS) $(HIP_CPPFLAGS) $(RCCL_CPPFLAGS) - libucc_tl_rccl_la_CFLAGS = $(BASE_CFLAGS) - libucc_tl_rccl_la_LDFLAGS = -version-info $(SOVERSION) --as-needed $(ROCM_LDFLAGS) $(HIP_LDFLAGS) $(RCCL_LDFLAGS) --libucc_tl_rccl_la_LIBADD = $(ROCM_LIBS) $(HIP_LIBS) $(RCCL_LIBADD) $(UCC_TOP_BUILDDIR)/src/libucc.la -+libucc_tl_rccl_la_LIBADD = $(ROCM_LIBS) $(HIP_LIBS) $(RCCL_LIBADD) -lucc - - include $(top_srcdir)/config/module.am - diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.13.1-dynamic_modules.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.13.1-dynamic_modules.patch deleted file mode 100644 index bf0e55648531..000000000000 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.13.1-dynamic_modules.patch +++ /dev/null @@ -1,29 +0,0 @@ -# UCX is hardcoded to only load the modules it is compiled with. -# This patch adds an optional EB_UCX_xxx_MODULES that can override this list, allowing new modules to be loaded later. -# Author: micketeer@gmail.com - updated for UCX 1.13.1 by Kenneth Hoste (HPC-UGent) ---- ucx-1.13.1.orig/src/ucs/sys/module.c 2022-09-07 09:16:18.000000000 +0200 -+++ ucx-1.13.1/src/ucs/sys/module.c 2022-10-18 16:29:29.318490689 +0200 -@@ -271,6 +271,8 @@ - char *modules_str; - char *saveptr; - char *module_name; -+ char *env_modules; -+ char buf[64]; - - ucs_module_loader_init_paths(); - -@@ -278,7 +280,13 @@ - ucs_assert(ucs_sys_is_dynamic_lib()); - - ucs_module_debug("loading modules for %s", framework); -- modules_str = ucs_strdup(modules, "modules_list"); -+ ucs_snprintf_safe(buf, sizeof(buf), "EB_UCX_%s_MODULES", framework); -+ env_modules = getenv(buf); -+ if (env_modules != NULL) { -+ modules_str = ucs_strdup(env_modules, "modules_list"); -+ } else { -+ modules_str = ucs_strdup(modules, "modules_list"); -+ } - if (modules_str != NULL) { - saveptr = NULL; - module_name = strtok_r(modules_str, ":", &saveptr); diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 4e45413a0399..553f53d21dfb 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -6,11 +6,10 @@ name = 'UCX-ROCm' version = '1.18.0' homepage = 'http://www.openucx.org/' -description = """Unified Communication X -An open-source production grade communication framework for data centric -and high-performance applications - -This module adds the UCX ROCm support. +description = """Unified Communication X (UCX) is an open-source, production-grade +communication framework for data-centric and high-performance applications. +This module provides the complete UCX library explicitly configured with AMD ROCm +support to enable ROCm memory domains and transports. """ toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} @@ -19,16 +18,11 @@ toolchainopts = {'pic': True} source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s'] sources = [{'filename': 'ucx-%(version)s.tar.gz', 'alt_location': 'UCX'}] patches = [ - 'UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch', - 'UCX-1.13.1-dynamic_modules.patch', 'UCX-1.18.0_fix_bistro_hooks.patch', 'UCX-1.18.0_fix-glibc-2.43-compile-failure.patch', ] checksums = [ {'ucx-1.18.0.tar.gz': 'fa75070f5fa7442731b4ef5fc9549391e147ed3d859afeb1dad2d4513b39dc33'}, - {'UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch': - '5aa85e428f62a168f2d4e75197c41c6835ed5a9893696cedaf1021858678f08c'}, - {'UCX-1.13.1-dynamic_modules.patch': '00874687bd90b795fff61aaa183f6c6bea2210aa1003b28f23d9ebf7066f8782'}, {'UCX-1.18.0_fix_bistro_hooks.patch': '6357f1ebb1569e30d0855e48404fdf38a5a7060a87789f54d7bb751f957be20c'}, {'UCX-1.18.0_fix-glibc-2.43-compile-failure.patch': 'c67b2070a65e8217b7c6f9d9a6a13ff11141bacfed395d551376432428348a9c'}, @@ -48,31 +42,27 @@ dependencies = [ osdependencies = [OS_PKG_IBVERBS_DEV] # Base options matching the GCCcore UCX build -configopts = '--enable-optimizations --enable-cma --enable-mt --with-verbs ' +configopts = '--enable-optimizations --enable-cma --enable-mt --with-verbs ' configopts += '--without-java --without-go --disable-doxygen-doc ' configopts += '--disable-logging --disable-debug --disable-assertions --disable-params-check ' -# xpmem — same library works regardless of which compiler built UCX -configopts += '--with-xpmem=$EBROOTXPMEM ' - -# ROCm — this is what UCX-ROCm adds over the base UCX build configopts += '--with-rocm=$EBROOTROCMMINLLVM ' +configopts += '--with-xpmem=$EBROOTXPMEM ' buildopts = 'V=1' sanity_check_paths = { 'files': [ - 'bin/ucx_perftest', - 'bin/ucx_read_profile', - 'bin/ucx_info', - 'lib/ucx/libuct_rocm.so'], # the ROCm transport plugin + 'bin/ucx_perftest', + 'bin/ucx_read_profile', + 'bin/ucx_info', + 'lib/ucx/libuct_rocm.so'], 'dirs': ['include', 'lib', 'share'], } sanity_check_commands = [ - "ucx_info -d", - "ucx_info -d 2>&1 | grep -q 'rocm'", # fails if ROCm transport not compiled in - "ucx_info -d 2>&1 | grep -q 'xpmem'", # fails if xpmem not compiled in + "ucx_info -d 2>&1 | grep -i rocm", + "ucx_info -d 2>&1 | grep -i xpmem", ] moduleclass = 'lib' diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch deleted file mode 100644 index e8356494e2b5..000000000000 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch +++ /dev/null @@ -1,109 +0,0 @@ -Make CUDA/ROCm/Ze plugins link against the existing ucs/ucm/uct libraries. - ---- a/configure.ac -+++ b/configure.ac -@@ -31,13 +31,13 @@ valgrind_libpath="" - AC_USE_SYSTEM_EXTENSIONS - AC_CONFIG_HEADERS([config.h]) - --AC_CHECK_PROG(GITBIN, git, yes) --AS_IF([test x"${GITBIN}" = x"yes"], -- [# remove preceding "refs/heads/" (11 characters) for symbolic ref -- AC_SUBST(SCM_BRANCH, esyscmd([sh -c 'git symbolic-ref --quiet HEAD | sed "s/^.\{11\}//"'])) -- AC_SUBST(SCM_VERSION, esyscmd([sh -c 'git rev-parse --short=7 HEAD']))], -- [AC_SUBST(SCM_BRANCH, "") -- AC_SUBST(SCM_VERSION, "0000000")]) -+#AC_CHECK_PROG(GITBIN, git, yes) -+#AS_IF([test x"${GITBIN}" = x"yes"], -+# [# remove preceding "refs/heads/" (11 characters) for symbolic ref -+# AC_SUBST(SCM_BRANCH, esyscmd([sh -c 'git symbolic-ref --quiet HEAD | sed "s/^.\{11\}//"'])) -+# AC_SUBST(SCM_VERSION, esyscmd([sh -c 'git rev-parse --short=7 HEAD']))], -+# [AC_SUBST(SCM_BRANCH, "") -+# AC_SUBST(SCM_VERSION, "0000000")]) - - AH_TOP([ - #ifndef UCX_CONFIG_H -diff --git a/src/ucm/cuda/Makefile.am b/src/ucm/cuda/Makefile.am -index e8eda0f..31a6d54 100644 ---- a/src/ucm/cuda/Makefile.am -+++ b/src/ucm/cuda/Makefile.am -@@ -9,7 +9,7 @@ if HAVE_CUDA - module_LTLIBRARIES = libucm_cuda.la - libucm_cuda_la_CPPFLAGS = $(BASE_CPPFLAGS) $(CUDA_CPPFLAGS) - libucm_cuda_la_CFLAGS = $(BASE_CFLAGS) $(CUDA_CFLAGS) $(LT_CFLAGS) --libucm_cuda_la_LIBADD = ../libucm.la $(CUDA_LIBS) $(CUDART_LIBS) -+libucm_cuda_la_LIBADD = -lucm $(CUDA_LIBS) $(CUDART_LIBS) - libucm_cuda_la_LDFLAGS = $(UCM_MODULE_LDFLAGS) \ - $(patsubst %, -Xlinker %, $(CUDA_LDFLAGS)) \ - -version-info $(SOVERSION) -diff --git a/src/ucm/rocm/Makefile.am b/src/ucm/rocm/Makefile.am -index 57545b3..9c86ee3 100644 ---- a/src/ucm/rocm/Makefile.am -+++ b/src/ucm/rocm/Makefile.am -@@ -10,7 +10,7 @@ if HAVE_ROCM - module_LTLIBRARIES = libucm_rocm.la - libucm_rocm_la_CPPFLAGS = $(BASE_CPPFLAGS) $(ROCM_CPPFLAGS) - libucm_rocm_la_CFLAGS = $(BASE_CFLAGS) $(ROCM_CFLAGS) $(LT_CFLAGS) --libucm_rocm_la_LIBADD = ../libucm.la -+libucm_rocm_la_LIBADD = -lucm - libucm_rocm_la_LDFLAGS = $(UCM_MODULE_LDFLAGS) \ - $(ROCM_LDFLAGS) $(ROCM_LIBS) -version-info $(SOVERSION) \ - $(patsubst %, -Xlinker %, -L$(ROCM_ROOT)/lib -rpath $(ROCM_ROOT)/hip/lib -rpath $(ROCM_ROOT)/lib) \ -diff --git a/src/uct/cuda/Makefile.am b/src/uct/cuda/Makefile.am -index 8c76de0..e804cc5 100644 ---- a/src/uct/cuda/Makefile.am -+++ b/src/uct/cuda/Makefile.am -@@ -11,8 +11,8 @@ module_LTLIBRARIES = libuct_cuda.la - libuct_cuda_la_CPPFLAGS = $(BASE_CPPFLAGS) $(CUDA_CPPFLAGS) - libuct_cuda_la_CFLAGS = $(BASE_CFLAGS) $(CUDA_CFLAGS) $(LT_CFLAGS) - libuct_cuda_la_LDFLAGS = $(CUDA_LDFLAGS) -version-info $(SOVERSION) --libuct_cuda_la_LIBADD = $(top_builddir)/src/ucs/libucs.la \ -- $(top_builddir)/src/uct/libuct.la \ -+libuct_cuda_la_LIBADD = -lucs \ -+ -luct \ - $(CUDA_LIBS) $(NVML_LIBS) - - noinst_HEADERS = \ -diff --git a/src/uct/cuda/gdr_copy/Makefile.am b/src/uct/cuda/gdr_copy/Makefile.am -index 06ad3df..a1a9757 100644 ---- a/src/uct/cuda/gdr_copy/Makefile.am -+++ b/src/uct/cuda/gdr_copy/Makefile.am -@@ -9,7 +9,7 @@ module_LTLIBRARIES = libuct_cuda_gdrcopy.la - libuct_cuda_gdrcopy_la_CPPFLAGS = $(BASE_CPPFLAGS) $(GDR_COPY_CPPFLAGS) - libuct_cuda_gdrcopy_la_CFLAGS = $(BASE_CFLAGS) $(LT_CFLAGS) - libuct_cuda_gdrcopy_la_LDFLAGS = $(GDR_COPY_LDFLAGS) -version-info $(SOVERSION) --libuct_cuda_gdrcopy_la_LIBADD = $(top_builddir)/src/ucs/libucs.la \ -+libuct_cuda_gdrcopy_la_LIBADD = -lucs \ - $(top_builddir)/src/uct/cuda/libuct_cuda.la \ - $(GDR_COPY_LIBS) - -diff --git a/src/uct/rocm/Makefile.am b/src/uct/rocm/Makefile.am -index 310ca2e..5caf702 100644 ---- a/src/uct/rocm/Makefile.am -+++ b/src/uct/rocm/Makefile.am -@@ -8,8 +8,8 @@ if HAVE_ROCM - module_LTLIBRARIES = libuct_rocm.la - libuct_rocm_la_CPPFLAGS = $(BASE_CPPFLAGS) $(ROCM_CPPFLAGS) - libuct_rocm_la_CFLAGS = $(BASE_CFLAGS) $(LT_CFLAGS) --libuct_rocm_la_LIBADD = $(top_builddir)/src/ucs/libucs.la \ -- $(top_builddir)/src/uct/libuct.la -+libuct_rocm_la_LIBADD = -lucs \ -+ -luct - libuct_rocm_la_LDFLAGS = $(ROCM_LDFLAGS) $(ROCM_LIBS) -version-info $(SOVERSION) \ - $(patsubst %, -Xlinker %, -L$(ROCM_ROOT)/lib -rpath $(ROCM_ROOT)/hip/lib -rpath $(ROCM_ROOT)/lib) \ - $(patsubst %, -Xlinker %, --enable-new-dtags) \ -diff --git a/src/uct/ze/Makefile.am b/src/uct/ze/Makefile.am -index c2ef39c..0993647 100644 ---- a/src/uct/ze/Makefile.am -+++ b/src/uct/ze/Makefile.am -@@ -10,8 +10,8 @@ SUBDIRS = . - module_LTLIBRARIES = libuct_ze.la - libuct_ze_la_CPPFLAGS = $(BASE_CPPFLAGS) $(ZE_CPPFLAGS) - libuct_ze_la_CFLAGS = $(BASE_CFLAGS) $(LT_CFLAGS) --libuct_ze_la_LIBADD = $(top_builddir)/src/ucs/libucs.la \ -- $(top_builddir)/src/uct/libuct.la -+libuct_ze_la_LIBADD = -lucs \ -+ -luct - libuct_ze_la_LDFLAGS = $(ZE_LDFLAGS) $(ZE_LIBS) -version-info $(SOVERSION) \ - $(patsubst %, -Xlinker %, -L$(ZE_ROOT)/lib -rpath $(ZE_ROOT)/hip/lib -rpath $(ZE_ROOT)/lib) \ - $(patsubst %, -Xlinker %, --enable-new-dtags) \ diff --git a/easybuild/easyconfigs/x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb index 3c246dbfafd5..2bab6735510f 100644 --- a/easybuild/easyconfigs/x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb +++ b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb @@ -38,10 +38,8 @@ sanity_check_paths = { 'dirs': ['include', 'lib'], } -# Sanity check: make sure header has the symbols we expect. -# We don't try to invoke /dev/xpmem here because the build host may not have it. sanity_check_commands = [ - "grep -q 'xpmem_make' %(installdir)s/include/xpmem.h", + "grep -i 'xpmem_make' %(installdir)s/include/xpmem.h", ] moduleclass = 'system' From 797004b748c6297ee6efb34d41da462a20140d7f Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Mon, 11 May 2026 10:53:27 +0300 Subject: [PATCH 20/39] Fix style checks --- .../UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 2 +- .../UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 715439f3ae03..087835029a0d 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -8,7 +8,7 @@ version = '1.3.0' homepage = 'https://www.openucx.org/' description = """UCC (Unified Collective Communication) is a collective communication operations API and library. This module provides the complete -UCC library explicitly configured with AMD ROCm support to enable ROCm +UCC library explicitly configured with AMD ROCm support to enable ROCm memory components and RCCL transport capabilities.""" toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 553f53d21dfb..6a4a986ae8ae 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -7,7 +7,7 @@ version = '1.18.0' homepage = 'http://www.openucx.org/' description = """Unified Communication X (UCX) is an open-source, production-grade -communication framework for data-centric and high-performance applications. +communication framework for data-centric and high-performance applications. This module provides the complete UCX library explicitly configured with AMD ROCm support to enable ROCm memory domains and transports. """ From 055943495c9f97b1de3c27d1e4d85644b6ed5d1e Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Mon, 11 May 2026 11:11:27 +0300 Subject: [PATCH 21/39] Fix failing unit tests --- .../OSU-Micro-Benchmarks-7.5-rompi-2025a.eb | 2 +- ...m-2.7.11-GCCcore-14.2.0.eb => xpmem-2.7.4-GCCcore-14.2.0.eb} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename easybuild/easyconfigs/x/xpmem/{xpmem-2.7.11-GCCcore-14.2.0.eb => xpmem-2.7.4-GCCcore-14.2.0.eb} (100%) diff --git a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb index 41d6bc8184db..b56c9834157e 100644 --- a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb +++ b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb @@ -45,4 +45,4 @@ sanity_check_commands = [ "osu_bw --help | grep -i rocm", ] -moduleclass = 'perf' \ No newline at end of file +moduleclass = 'perf' diff --git a/easybuild/easyconfigs/x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb similarity index 100% rename from easybuild/easyconfigs/x/xpmem/xpmem-2.7.11-GCCcore-14.2.0.eb rename to easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb From 029b50a227be839dc6723e794afb8a51da9f71fc Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Mon, 11 May 2026 11:25:19 +0300 Subject: [PATCH 22/39] Add binutils to xpmem dependencies --- easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb | 1 + 1 file changed, 1 insertion(+) diff --git a/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb index 2bab6735510f..82b4c58cd603 100644 --- a/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb +++ b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb @@ -22,6 +22,7 @@ sources = ['v%(version)s.tar.gz'] checksums = ['738c70041ce09dcc66b64d80aebc1479e779efe12a9c02217fba610e2ae61f18'] builddependencies = [ + ('binutils', '2.42'), ('Autotools', '20240712'), ] From 373e0a5deb7be6b4798ad58382bf3a2194f972be Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Mon, 11 May 2026 12:29:15 +0300 Subject: [PATCH 23/39] Make sanity checks a bit more lenient --- .../hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 7 ++++--- .../UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 5 ----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 096e4cb7d1fc..483dc8798bb0 100644 --- a/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -57,9 +57,10 @@ sanity_check_paths = { # Verify that hwloc can successfully load the new AMD plugins sanity_check_commands = [ - # hwloc: Registered discovery component `rsmi' phases 0x10 with priority 10 - # (from plugin ../hwloc-ROCm/2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1/hwloc_rsmi) - 'HWLOC_COMPONENTS_VERBOSE=1 lstopo 2>&1 | grep %(installdir)s' + # rsmi backend registers at runtime + "HWLOC_COMPONENTS_VERBOSE=1 lstopo 2>&1 | grep -q 'rsmi'", + # lstopo binary runs cleanly + "lstopo --version", ] moduleclass = 'system' diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 6a4a986ae8ae..79e7e7049826 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -60,9 +60,4 @@ sanity_check_paths = { 'dirs': ['include', 'lib', 'share'], } -sanity_check_commands = [ - "ucx_info -d 2>&1 | grep -i rocm", - "ucx_info -d 2>&1 | grep -i xpmem", -] - moduleclass = 'lib' From 9474d1ff9995e44b0eccd38f52568fd463b27824 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Mon, 11 May 2026 13:16:47 +0300 Subject: [PATCH 24/39] Force retrigger build for rompi-2025a --- easybuild/easyconfigs/r/rompi/rompi-2025a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/rompi/rompi-2025a.eb b/easybuild/easyconfigs/r/rompi/rompi-2025a.eb index 2bb35d603c78..f131d3542baf 100644 --- a/easybuild/easyconfigs/r/rompi/rompi-2025a.eb +++ b/easybuild/easyconfigs/r/rompi/rompi-2025a.eb @@ -6,7 +6,7 @@ name = 'rompi' version = '2025a' homepage = '(none)' -description = """ROCm-LLVM based compiler toolchain, including OpenMPI for MPI support.""" +description = 'ROCm-LLVM based compiler toolchain, including OpenMPI for MPI support.' toolchain = SYSTEM From 264faf3e2d55142fa87fdda7029d376bcf719d26 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Mon, 11 May 2026 13:42:53 +0300 Subject: [PATCH 25/39] Pass amdgcn-capabilities to UCC-ROCm --- .../UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 087835029a0d..a5416b964ac4 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -39,6 +39,9 @@ preconfigopts = './autogen.sh && ' configopts = '--with-rocm=$EBROOTHIP ' +# It builds for ROCM_ARCH_NATIVE if no --with-rocm-arch is passed, and fails on machines without AMD GPUs +# See: https://github.com/openucx/ucc/blob/6d5451174c29b5d9528cd3b142d3634a7d124ff2/config/m4/rocm.m4#L140-L148 +configopts += '--with-rocm-arch="--offload-arch=%(amdgcn_cc_semicolon_sep)s" ' configopts += '--with-ucx=$EBROOTUCXMINROCM ' configopts += '--with-rccl=$EBROOTRCCL ' From 0e0ad17f832ad9e74e9c1acdb0102c86ca24835b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 23 Jun 2026 17:19:49 +0200 Subject: [PATCH 26/39] Add initial config based on ucx_plugin easyblock and add patch so that hip is found (WIP, not working yet) --- ...-4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 55 ++++++++++++ ...CH-4.3.2_libtool-amdflang-fortran-wl.patch | 57 ++++++++++++ .../OSU-Micro-Benchmarks-7.5-rmpich-2025a.eb | 88 +++++++++++++++++++ .../easyconfigs/r/rmpich/rmpich-2025a.eb | 21 +++++ ...1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 38 +++----- ...ROCm-1.18.0_use_rocm_easybuild_paths.patch | 25 ++++++ 6 files changed, 260 insertions(+), 24 deletions(-) create mode 100644 easybuild/easyconfigs/m/MPICH/MPICH-4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb create mode 100644 easybuild/easyconfigs/m/MPICH/MPICH-4.3.2_libtool-amdflang-fortran-wl.patch create mode 100644 easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rmpich-2025a.eb create mode 100644 easybuild/easyconfigs/r/rmpich/rmpich-2025a.eb create mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch diff --git a/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb new file mode 100644 index 000000000000..451609b8e6cd --- /dev/null +++ b/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -0,0 +1,55 @@ +# Author: Aayush Joglekar + +name = 'MPICH' +version = '4.3.2' +_rocm_version = '6.4.1' +# No versionsuffix -- the ROCm version is already carried by the toolchain +# string (rocm-compilers/19.0.0-ROCm-6.4.1), and a -ROCm-6.4.1 suffix on top +# would duplicate it in the resolved module name. The .eb filename matches +# the resolved module name MPICH/4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1. + +homepage = 'https://www.mpich.org/' +description = """MPICH is a high-performance and widely portable implementation +of the Message Passing Interface (MPI) standard (MPI-1, MPI-2 and MPI-3). +This build links against ROCm-aware UCX and HIP for GPU-aware MPI on AMD GPUs.""" + +toolchain = {'name': 'rocm-compilers', 'version': f'19.0.0-ROCm-{_rocm_version}'} + +source_urls = ['https://www.mpich.org/static/downloads/%(version)s'] +sources = [SOURCELOWER_TAR_GZ] +patches = ['MPICH-%(version)s_libtool-amdflang-fortran-wl.patch'] +checksums = [ + {'mpich-4.3.2.tar.gz': + '47d774587a7156a53752218c811c852e70ac44db9c502dc3f399b4cb817e3818'}, + {'MPICH-4.3.2_libtool-amdflang-fortran-wl.patch': + '0ba3ad6df0641fdc6d58ab5799e252b4c34725924db9b072d8d984839b229c54'}, +] + +dependencies = [ + ('hwloc', '2.11.2'), # plain hwloc; topology discovery (--with-hwloc) + ('hwloc-ROCm', '2.11.2'), # runtime RSMI plugin overlay (HWLOC_PLUGINS_PATH) + ('UCX-ROCm', '1.18.0'), # picked up via patched EB_MPICH UCX detection + ('HIP', _rocm_version), # provides $EBROOTHIP for --with-hip +] + +configopts = '--disable-option-checking ' +configopts += '--with-hip-sm=%(amdgcn_capabilities)s ' + +# Disable the F2018 `use mpi_f08` bindings: src/binding/fortran/use_mpi_f08/mpi_f08.f90 +# uses `TYPE(*), DIMENSION(..)` assumed-rank polymorphic dummies pervasively, which +# ROCm 6.4.1's amdflang (Classic Flang 18.0.0, PGI lineage) does not support. +# The older `mpif.h` and `use mpi` interfaces stay enabled (no assumed-rank usage +# there, verified against MPICH 4.3.2 source). Re-enable once ROCm ships flang-new +# as amdflang. +configopts += '--disable-f08 ' + +# Also build a separate MPI ABI variant +mpi_abi = True + +sanity_check_commands = [ + "mpicc -show | grep -q amdclang", + "mpifort -show | grep -q amdflang", + "test -e $EBROOTMPICH/lib/libmpi_abi.so", +] + +moduleclass = 'mpi' diff --git a/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2_libtool-amdflang-fortran-wl.patch b/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2_libtool-amdflang-fortran-wl.patch new file mode 100644 index 000000000000..b8d7ccc9cef9 --- /dev/null +++ b/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2_libtool-amdflang-fortran-wl.patch @@ -0,0 +1,57 @@ +Add 'amdflang*' to libtool's known-Fortran-compilers case statement so its FC +tag config block sets `wl="-Wl,"` instead of empty. + +Without this, building the shared libmpifort.so fails because libtool, having +no entry for amdflang, falls through to the catch-all case where the wl +variable stays empty. Then libtool's --mode=link invocation passes raw +--whole-archive / --no-whole-archive / -soname directly to the Fortran driver +(amdflang) instead of wrapping them in -Wl,. amdflang -- which in ROCm 6.4.1 +is Classic Flang 18.0.0, PGI-lineage -- rejects them as unknown arguments and +the link fails. + +Classic Flang DOES accept -Wl,... pass-through to the linker, so the correct +value for the FC-tag wl variable is '-Wl,', exactly as for plain flang/f18. + +Mirrors the upstream-MPICH flang.patch under maint/patches/optional/confdb/ +(which adds the case for `flang*|f18*` in the same location); we just extend +the alternation to also match ROCm's amdflang driver name. + +The case statement appears in three places in the shipped configure script, +one per libtool tag (default/C, FC, F77). We patch all three. We do NOT also +patch confdb/libtool.m4 (the m4 source of the case) -- modifying that file +makes its timestamp newer than aclocal.m4, which causes make to try to +regenerate aclocal.m4 mid-build via the autotools chain, which then fails +because aclocal is not in PATH. The right place to also fix the source m4 +is upstream MPICH's maint/patches/optional/confdb/flang.patch, not here. + +Author: Aayush Joglekar + +--- a/configure ++++ b/configure +@@ -12430,7 +12430,7 @@ + lt_prog_compiler_static='-static' + ;; + # flang / f18 +- flang* | f18*) ++ flang* | f18* | amdflang*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' +@@ -20711,7 +20711,7 @@ + lt_prog_compiler_static_FC='-static' + ;; + # flang / f18 +- flang* | f18*) ++ flang* | f18* | amdflang*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fPIC' + lt_prog_compiler_static_FC='-static' +@@ -23932,7 +23932,7 @@ + lt_prog_compiler_static_F77='-static' + ;; + # flang / f18 +- flang* | f18*) ++ flang* | f18* | amdflang*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-fPIC' + lt_prog_compiler_static_F77='-static' diff --git a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rmpich-2025a.eb b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rmpich-2025a.eb new file mode 100644 index 000000000000..b9a12b5f9df9 --- /dev/null +++ b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rmpich-2025a.eb @@ -0,0 +1,88 @@ +# Author: Aayush Joglekar + +easyblock = 'ConfigureMake' + +name = 'OSU-Micro-Benchmarks' +version = '7.5' +_rocm_version = '6.4.1' + +homepage = 'https://mvapich.cse.ohio-state.edu/benchmarks/' +description = """OSU Micro-Benchmarks built on the rmpich/2025a toolchain +(rocm-compilers + MPICH 4.3.2 mpi_abi=True). The build is designed to run +on three stacks via the same binary (cf. thesis-benchmarks/8_osu_rmpich): +its own rmpich MPICH (`rmpich` stack), Cray's NIC-offloaded MPI ABI runtime +via LD_LIBRARY_PATH swap (`rmpich_abi` stack), or contrasted against Cray- +built OSU (`native`). The two non-obvious bits below -- patchelf-strip and +modluafooter -- exist solely to make the `rmpich_abi` swap possible while +keeping the plain `rmpich` stack functional.""" + +toolchain = {'name': 'rmpich', 'version': '2025a'} +toolchainopts = {'usempi': True} + +source_urls = ['https://mvapich.cse.ohio-state.edu/download/mvapich/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['1cf84ac5419456202757a757c5f9a4f5c6ecd05c65783c7976421cfd6020b3b3'] + +dependencies = [ + ('HIP', _rocm_version), +] + +# RCCL + XCCL are intentionally omitted; use the rompi sibling for XCCL. +configopts = '--enable-rocm --with-rocm=$EBROOTHIP ' + +local_benchmark_dirs = [ + 'libexec/osu-micro-benchmarks/mpi/%s' % x + for x in ['collective', 'one-sided', 'pt2pt', 'startup'] +] + +modextrapaths = {'PATH': local_benchmark_dirs} + +# === rmpich_abi enablement ================================================= +# Walk every installed OSU binary's DT_RPATH and drop the entry that points +# at our self-built MPICH lib. This lets `module load cray-mpich-abi/` +# (LUMI's official ABI-swap, which prepends Cray's lib-abi-mpich/ onto +# LD_LIBRARY_PATH) actually win the libmpi.so.12 SONAME race at exec time. +# Without this strip, DT_RPATH beats LD_LIBRARY_PATH and the swap is blocked. +# `--rpath-filter` on the EB CLI does NOT catch dep-derived paths in EB 5.3, +# so patchelf is the only tool that works. patchelf 0.18.0 is at +# /cvmfs/software.eessi.io/.../compat/linux/x86_64/usr/bin/patchelf. +postinstallcmds = [ + 'for f in ' + ' %(installdir)s/libexec/osu-micro-benchmarks/mpi/pt2pt/* ' + ' %(installdir)s/libexec/osu-micro-benchmarks/mpi/collective/* ' + ' %(installdir)s/libexec/osu-micro-benchmarks/mpi/one-sided/* ' + ' %(installdir)s/libexec/osu-micro-benchmarks/mpi/startup/* ; do ' + ' [ -f "$f" ] || continue; ' + ' rp=$(patchelf --print-rpath "$f" 2>/dev/null) || continue; ' + ' [ -z "$rp" ] && continue; ' + ' new=""; IFS=":"; ' + ' for p in $rp; do ' + ' case "$p" in *MPICH/4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1/lib*) continue ;; esac; ' + ' if [ -z "$new" ]; then new="$p"; else new="$new:$p"; fi; ' + ' done; unset IFS; ' + ' [ "$rp" != "$new" ] && patchelf --set-rpath "$new" "$f"; ' + 'done', +] + +# The strip above means the binary no longer finds rmpich's libmpi via +# DT_RPATH. For the plain `rmpich` stack we make up for this by adding +# $EBROOTMPICH/lib to LD_LIBRARY_PATH via the module footer. The +# `rmpich_abi` stack later prepends Cray's lib-abi-mpich AHEAD of this, +# so the swap stack gets Cray's libs first; both stacks work from the +# same binary. +modluafooter = 'prepend_path("LD_LIBRARY_PATH", pathJoin(os.getenv("EBROOTMPICH") or "", "lib"))' +# =========================================================================== + +sanity_check_paths = { + 'files': [ + 'libexec/osu-micro-benchmarks/mpi/pt2pt/osu_bw', + 'libexec/osu-micro-benchmarks/mpi/collective/osu_allreduce', + ], + 'dirs': local_benchmark_dirs, +} + +sanity_check_commands = [ + "osu_bw --help | grep -i rocm", +] + +moduleclass = 'perf' diff --git a/easybuild/easyconfigs/r/rmpich/rmpich-2025a.eb b/easybuild/easyconfigs/r/rmpich/rmpich-2025a.eb new file mode 100644 index 000000000000..9b7967fcdb04 --- /dev/null +++ b/easybuild/easyconfigs/r/rmpich/rmpich-2025a.eb @@ -0,0 +1,21 @@ +# Author: Aayush Joglekar + +easyblock = 'Toolchain' + +name = 'rmpich' +version = '2025a' + +homepage = '(none)' +description = 'ROCm-LLVM based compiler toolchain, including MPICH for MPI support.' + +toolchain = SYSTEM + +local_rocmver = '19.0.0-ROCm-6.4.1' + +# compiler toolchain dependencies +dependencies = [ + ('rocm-compilers', local_rocmver), # includes both ROCm-LLVM and binutils + ('MPICH', '4.3.2', '', ('rocm-compilers', local_rocmver)), +] + +moduleclass = 'toolchain' diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 79e7e7049826..7703607c60bb 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -1,6 +1,6 @@ # Author: Aayush Joglekar -easyblock = 'ConfigureMake' +easyblock = 'EB_UCX_Plugins' name = 'UCX-ROCm' version = '1.18.0' @@ -18,14 +18,20 @@ toolchainopts = {'pic': True} source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s'] sources = [{'filename': 'ucx-%(version)s.tar.gz', 'alt_location': 'UCX'}] patches = [ - 'UCX-1.18.0_fix_bistro_hooks.patch', - 'UCX-1.18.0_fix-glibc-2.43-compile-failure.patch', +# 'UCX-1.18.0_fix_bistro_hooks.patch', +# 'UCX-1.18.0_fix-glibc-2.43-compile-failure.patch', + 'UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch', + 'UCX-CUDA-1.18.0_link_against_existing_UCX_libs.patch', ] checksums = [ {'ucx-1.18.0.tar.gz': 'fa75070f5fa7442731b4ef5fc9549391e147ed3d859afeb1dad2d4513b39dc33'}, - {'UCX-1.18.0_fix_bistro_hooks.patch': '6357f1ebb1569e30d0855e48404fdf38a5a7060a87789f54d7bb751f957be20c'}, - {'UCX-1.18.0_fix-glibc-2.43-compile-failure.patch': - 'c67b2070a65e8217b7c6f9d9a6a13ff11141bacfed395d551376432428348a9c'}, +# {'UCX-1.18.0_fix_bistro_hooks.patch': '6357f1ebb1569e30d0855e48404fdf38a5a7060a87789f54d7bb751f957be20c'}, +# {'UCX-1.18.0_fix-glibc-2.43-compile-failure.patch': +# 'c67b2070a65e8217b7c6f9d9a6a13ff11141bacfed395d551376432428348a9c'}, + {'UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch': + 'dbf3a57a39752a1bef3f32f045cb3655f48ebec7544120c2874412710368d90a'}, + {'UCX-CUDA-1.18.0_link_against_existing_UCX_libs.patch': + '5aa85e428f62a168f2d4e75197c41c6835ed5a9893696cedaf1021858678f08c'}, ] builddependencies = [ @@ -37,27 +43,11 @@ dependencies = [ ('zlib', '1.3.1'), ('numactl', '2.0.19'), ('xpmem', '2.7.4'), + ('UCX', '1.18.0'), + ('HIP', '6.4.1'), ] osdependencies = [OS_PKG_IBVERBS_DEV] -# Base options matching the GCCcore UCX build -configopts = '--enable-optimizations --enable-cma --enable-mt --with-verbs ' -configopts += '--without-java --without-go --disable-doxygen-doc ' -configopts += '--disable-logging --disable-debug --disable-assertions --disable-params-check ' - -configopts += '--with-rocm=$EBROOTROCMMINLLVM ' -configopts += '--with-xpmem=$EBROOTXPMEM ' - -buildopts = 'V=1' - -sanity_check_paths = { - 'files': [ - 'bin/ucx_perftest', - 'bin/ucx_read_profile', - 'bin/ucx_info', - 'lib/ucx/libuct_rocm.so'], - 'dirs': ['include', 'lib', 'share'], -} moduleclass = 'lib' diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch new file mode 100644 index 000000000000..c5bb7dd8293b --- /dev/null +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch @@ -0,0 +1,25 @@ +diff --git a/config/m4/rocm.m4 b/config/m4/rocm.m4 +index c7c4ca14..cc89dc47 100644 +--- a/config/m4/rocm.m4 ++++ b/config/m4/rocm.m4 +@@ -28,8 +28,8 @@ done]) + # Parse value of ARG into appropriate LIBS, LDFLAGS, and + # CPPFLAGS variables. + AC_DEFUN([ROCM_BUILD_FLAGS], +- $4="-I$1/include/hsa -I$1/include" +- $3="-L$1/lib -L$1/lib64 -L$1/hsa/lib" ++ $4="-I$EBROOTROCMMINLLVM/include/hsa -I$1/include" ++ $3="-L$EBROOTROCMMINLLVM/lib -L$1/lib -L$1/lib64 -L$1/hsa/lib" + $2="-lhsa-runtime64 -lhsakmt" + $5="$1" + ) +@@ -39,8 +39,8 @@ AC_DEFUN([ROCM_BUILD_FLAGS], + # Parse value of ARG into appropriate LIBS, LDFLAGS, and + # CPPFLAGS variables. + AC_DEFUN([HIP_BUILD_FLAGS], +- $4="-D__HIP_PLATFORM_HCC__ -D__HIP_PLATFORM_AMD__ -I$1/include/hip -I$1/include" +- $3="-L$1/hip/lib -L$1/lib" ++ $4="-D__HIP_PLATFORM_HCC__ -D__HIP_PLATFORM_AMD__ -I$1/include/hip -I$1/include -I$EBROOTHIP/include" ++ $3="-L$1/hip/lib -L$1/lib -L$EBROOTHIP/lib" + $2="-lamdhip64" + ) From 2007da047a527f84e09d85cdea561825d42b81b4 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Thu, 25 Jun 2026 11:56:03 +0300 Subject: [PATCH 27/39] Convert UCX-ROCm and UCC-ROCm to plugins --- ...-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 4 +- ...-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 46 +++++++--- ...1.3.0_link_against_existing_UCC_libs.patch | 38 +++++++++ .../UCC-ROCm-1.3.0_rocm_arch_from_env.patch | 31 +++++++ ...ROCm-1.3.0_use_rocm_easybuild_paths.patch} | 6 ++ ....18.0_fix-glibc-2.43-compile-failure.patch | 85 ------------------- .../UCX-1.18.0_fix_bistro_hooks.patch | 51 ----------- ...1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 13 +-- ....18.0_link_against_existing_UCX_libs.patch | 61 +++++++++++++ ...ROCm-1.18.0_use_rocm_easybuild_paths.patch | 8 +- 10 files changed, 184 insertions(+), 159 deletions(-) create mode 100644 easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_link_against_existing_UCC_libs.patch create mode 100644 easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_rocm_arch_from_env.patch rename easybuild/easyconfigs/u/UCC-ROCm/{UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch => UCC-ROCm-1.3.0_use_rocm_easybuild_paths.patch} (77%) delete mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix-glibc-2.43-compile-failure.patch delete mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix_bistro_hooks.patch create mode 100644 easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 96ac2be089f1..c2cd81eb56c4 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -38,8 +38,10 @@ dependencies = [ ('PMIx', '5.0.6'), ('PRRTE', '3.0.8'), ('hwloc-ROCm', '2.11.2'), - ('UCX-ROCm', '1.18.0'), + ('UCC', '1.3.0'), ('UCC-ROCm', '1.3.0'), + ('UCX', '1.18.0'), + ('UCX-ROCm', '1.18.0'), ('HIP', '6.4.1'), ] diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index a5416b964ac4..58a37a7dea1c 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -7,9 +7,9 @@ version = '1.3.0' homepage = 'https://www.openucx.org/' description = """UCC (Unified Collective Communication) is a collective -communication operations API and library. This module provides the complete -UCC library explicitly configured with AMD ROCm support to enable ROCm -memory components and RCCL transport capabilities.""" +communication operations API and library. This module adds the UCC ROCm +support (the ROCm memory and execution components and the RCCL transport +layer) as plugins on top of an existing UCC installation.""" toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} toolchainopts = {'pic': True} @@ -17,11 +17,18 @@ toolchainopts = {'pic': True} source_urls = ['https://github.com/openucx/ucc/archive/refs/tags'] sources = ['v%(version)s.tar.gz'] patches = [ - 'UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch', + 'UCC-ROCm-1.3.0_use_rocm_easybuild_paths.patch', + 'UCC-ROCm-1.3.0_link_against_existing_UCC_libs.patch', + 'UCC-ROCm-1.3.0_rocm_arch_from_env.patch', ] checksums = [ {'v1.3.0.tar.gz': 'b56379abe5f1c125bfa83be305d78d81a64aa271b7b5fff0ac17b86725ff3acf'}, - {'UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch': 'd8919a7074cd32042345382d63c2e9ca4eb132927c84b156c26f57aadaa3b74f'}, + {'UCC-ROCm-1.3.0_use_rocm_easybuild_paths.patch': + '5dffe88d76d8e839eec95b46c8ad9021fa2ccc649fae1213f79054f239bd959d'}, + {'UCC-ROCm-1.3.0_link_against_existing_UCC_libs.patch': + '20191679acf361a45b89b8c454acefa56a5ad5f531ddc5cc45f4659c6ccc5ea6'}, + {'UCC-ROCm-1.3.0_rocm_arch_from_env.patch': + 'b5f9ba374c3f511b1fb7cc7097079a6afab315b64ea7bfc9d2497e9653362735'}, ] builddependencies = [ @@ -30,6 +37,7 @@ builddependencies = [ ] dependencies = [ + ('UCC', '1.3.0'), ('HIP', '6.4.1'), ('UCX-ROCm', '1.18.0'), ('RCCL', '2.22.3'), @@ -37,21 +45,33 @@ dependencies = [ preconfigopts = './autogen.sh && ' - +# configure runs over the full tree (to generate the component Makefiles), so it +# still needs the ROCm/RCCL/UCX paths even though we only build a few components configopts = '--with-rocm=$EBROOTHIP ' -# It builds for ROCM_ARCH_NATIVE if no --with-rocm-arch is passed, and fails on machines without AMD GPUs -# See: https://github.com/openucx/ucc/blob/6d5451174c29b5d9528cd3b142d3634a7d124ff2/config/m4/rocm.m4#L140-L148 -configopts += '--with-rocm-arch="--offload-arch=%(amdgcn_cc_semicolon_sep)s" ' configopts += '--with-ucx=$EBROOTUCXMINROCM ' configopts += '--with-rccl=$EBROOTRCCL ' +# The rocm_arch_from_env patch makes cuda_lt.sh read $ROCM_ARCH instead of its +# hardcoded --offload-arch list (which included 'native' and thus required an AMD +# GPU at build time). Compile the ec/rocm kernels only for the target arch. +prebuildopts = 'export ROCM_ARCH="--offload-arch=%(amdgcn_cc_semicolon_sep)s" && ' + +# Only build/install the ROCm memory + execution components and the RCCL transport +# layer, linking against the existing libucc (see link_against_existing_UCC_libs patch) +buildopts = ('-C src/components/mc/rocm V=1 && ' + 'make -C src/components/ec/rocm V=1 && ' + 'make -C src/components/tl/rccl V=1') +installopts = ('-C src/components/mc/rocm && ' + 'make -C src/components/ec/rocm install && ' + 'make -C src/components/tl/rccl install') + sanity_check_paths = { 'files': [ - 'bin/ucc_info', 'lib/ucc/libucc_mc_rocm.%s' % SHLIB_EXT, - 'lib/ucc/libucc_tl_rccl.%s' % SHLIB_EXT + 'lib/ucc/libucc_ec_rocm.%s' % SHLIB_EXT, + 'lib/ucc/libucc_tl_rccl.%s' % SHLIB_EXT, ], - 'dirs': ['include', 'lib'] + 'dirs': ['lib'], } sanity_check_commands = [ @@ -59,4 +79,6 @@ sanity_check_commands = [ "ucc_info -c | grep -i rccl", ] +modextrapaths = {'EB_UCC_EXTRA_COMPONENT_PATH': 'lib/ucc'} + moduleclass = 'lib' diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_link_against_existing_UCC_libs.patch b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_link_against_existing_UCC_libs.patch new file mode 100644 index 000000000000..5d069d706803 --- /dev/null +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_link_against_existing_UCC_libs.patch @@ -0,0 +1,38 @@ +Make the ROCm UCC components (mc/rocm, ec/rocm, tl/rccl) link against the existing +installed libucc (-lucc) instead of the in-tree build product, so they can be built +as plugins on top of an existing UCC installation. + +Author: Aayush Joglekar + +--- a/src/components/mc/rocm/Makefile.am ++++ b/src/components/mc/rocm/Makefile.am +@@ -15,7 +15,7 @@ + libucc_mc_rocm_la_CFLAGS = $(BASE_CFLAGS) + libucc_mc_rocm_la_LDFLAGS = -version-info $(SOVERSION) --as-needed $(HIP_LDFLAGS) $(ROCM_LDFLAGS) + libucc_mc_rocm_la_LIBADD = $(HIP_LIBS) $(ROCM_LIBS) \ +- $(UCC_TOP_BUILDDIR)/src/libucc.la ++ -lucc + + include $(top_srcdir)/config/module.am + endif +--- a/src/components/ec/rocm/Makefile.am ++++ b/src/components/ec/rocm/Makefile.am +@@ -21,7 +21,7 @@ + libucc_ec_rocm_la_LDFLAGS = -version-info $(SOVERSION) --as-needed $(HIP_LDFLAGS) $(ROCM_LDFLAGS) + libucc_ec_rocm_la_LIBADD = $(HIP_LIBS) $(ROCM_LIBS) \ + kernel/libucc_ec_rocm_kernels.la \ +- $(UCC_TOP_BUILDDIR)/src/libucc.la ++ -lucc + + include $(top_srcdir)/config/module.am + endif +--- a/src/components/tl/rccl/Makefile.am ++++ b/src/components/tl/rccl/Makefile.am +@@ -23,7 +23,7 @@ + libucc_tl_rccl_la_CPPFLAGS = $(AM_CPPFLAGS) $(BASE_CPPFLAGS) $(ROCM_CPPFLAGS) $(HIP_CPPFLAGS) $(RCCL_CPPFLAGS) + libucc_tl_rccl_la_CFLAGS = $(BASE_CFLAGS) + libucc_tl_rccl_la_LDFLAGS = -version-info $(SOVERSION) --as-needed $(ROCM_LDFLAGS) $(HIP_LDFLAGS) $(RCCL_LDFLAGS) +-libucc_tl_rccl_la_LIBADD = $(ROCM_LIBS) $(HIP_LIBS) $(RCCL_LIBADD) $(UCC_TOP_BUILDDIR)/src/libucc.la ++libucc_tl_rccl_la_LIBADD = $(ROCM_LIBS) $(HIP_LIBS) $(RCCL_LIBADD) -lucc + + include $(top_srcdir)/config/module.am diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_rocm_arch_from_env.patch b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_rocm_arch_from_env.patch new file mode 100644 index 000000000000..b31a99c25367 --- /dev/null +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_rocm_arch_from_env.patch @@ -0,0 +1,31 @@ +Compile the ROCm execution-component kernels only for the arch(es) supplied via the +$ROCM_ARCH environment variable, instead of cuda_lt.sh's hardcoded --offload-arch list +(which included --offload-arch=native and therefore required an AMD GPU at build time). +The easyconfig exports ROCM_ARCH (e.g. --offload-arch=gfx90a) via prebuildopts. + +NOTE: despite its name, cuda_lt.sh is not CUDA-specific. It is UCC's shared libtool +helper for compiling .cu GPU-kernel sources, used by BOTH the CUDA (nvcc) and the ROCm +(amdclang/hipcc) execution components. + +Author: Aayush Joglekar + +--- a/cuda_lt.sh ++++ b/cuda_lt.sh +@@ -28,7 +28,7 @@ + + tmpcmd="${@:3}" + if [[ "$tmpcmd" == *"amdclang"* ]]; then +- cmd="${@:3:2} -x hip -target x86_64-unknown-linux-gnu --offload-arch=gfx908 --offload-arch=gfx90a --offload-arch=gfx940 --offload-arch=gfx941 --offload-arch=gfx942 --offload-arch=gfx1030 --offload-arch=gfx1100 --offload-arch=gfx1101 --offload-arch=gfx1102 --offload-arch=native ${@:5} -fPIC -O3 -o ${pic_filepath}" ++ cmd="${@:3:2} -x hip -target x86_64-unknown-linux-gnu ${ROCM_ARCH} ${@:5} -fPIC -O3 -o ${pic_filepath}" + elif [[ "$tmpcmd" == *"hipcc"* ]]; then + cmd="${@:3} -fPIC -o ${pic_filepath}" + else +@@ -38,7 +38,7 @@ + $cmd + + if [[ "$tmpcmd" == *"amdclang"* ]]; then +- cmd="${@:3:2} -x hip -target x86_64-unknown-linux-gnu --offload-arch=gfx908 --offload-arch=gfx90a --offload-arch=gfx940 --offload-arch=gfx941 --offload-arch=gfx942 --offload-arch=gfx1030 --offload-arch=gfx1100 --offload-arch=gfx1101 --offload-arch=gfx1102 --offload-arch=native ${@:5} -O3 -o ${npic_filepath}" ++ cmd="${@:3:2} -x hip -target x86_64-unknown-linux-gnu ${ROCM_ARCH} ${@:5} -O3 -o ${npic_filepath}" + else + cmd="${@:3} -o ${npic_filepath}" + fi diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_easybuild_paths.patch similarity index 77% rename from easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch rename to easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_easybuild_paths.patch index 388c28ca905a..5bc107fe6638 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_eessi_paths.patch +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0_use_rocm_easybuild_paths.patch @@ -1,3 +1,9 @@ +This patch redirects the HSA and LLVM include/lib paths to $EBROOTROCMMINLLVM so +the autoconf checks resolve against the right modules as HIP and ROCm-LLVM do not +live under the same root as expected by the UCC configuration. + +Author: Aayush Joglekar + diff --git a/config/m4/rocm.m4 b/config/m4/rocm.m4 index c7c4ca14..cc89dc47 100644 --- a/config/m4/rocm.m4 diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix-glibc-2.43-compile-failure.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix-glibc-2.43-compile-failure.patch deleted file mode 100644 index 20e40017b0e6..000000000000 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix-glibc-2.43-compile-failure.patch +++ /dev/null @@ -1,85 +0,0 @@ -From ad56fc5fa0884c1d8196a0673f8ef5497d9d55e8 Mon Sep 17 00:00:00 2001 -From: Yossi Itigin -Date: Sun, 15 Feb 2026 16:27:20 +0200 -Subject: [PATCH] UCT/IB/CONFIG: Fix const correctness when using strchr() - ---- - src/tools/perf/mad/perftest_mad.c | 2 +- - src/tools/perf/perftest_params.c | 2 +- - src/ucs/config/parser.c | 2 +- - src/uct/ib/base/ib_device.c | 13 +++++++------ - 4 files changed, 10 insertions(+), 9 deletions(-) - -diff --git a/src/tools/perf/mad/perftest_mad.c b/src/tools/perf/mad/perftest_mad.c -index ef7cad66770..645c082465c 100644 ---- a/src/tools/perf/mad/perftest_mad.c -+++ b/src/tools/perf/mad/perftest_mad.c -@@ -601,7 +601,7 @@ static ucs_status_t perftest_mad_parse_ca_and_port(const char *mad_port, - int *ca_port) - { - static const int default_port = 1; -- char *sep = strchr(mad_port, ':'); -+ const char *sep = strchr(mad_port, ':'); - size_t len; - - if (sep == NULL) { -diff --git a/src/tools/perf/perftest_params.c b/src/tools/perf/perftest_params.c -index 0786136c323..3c0dfd15c00 100644 ---- a/src/tools/perf/perftest_params.c -+++ b/src/tools/perf/perftest_params.c -@@ -584,7 +584,7 @@ static ucs_status_t init_daemon_params(ucx_perf_params_t *params) - ucs_status_t parse_test_params(perftest_params_t *params, char opt, - const char *opt_arg) - { -- char *optarg2 = NULL; -+ const char *optarg2 = NULL; - test_type_t *test; - unsigned i; - -diff --git a/src/ucs/config/parser.c b/src/ucs/config/parser.c -index f60bbfa390b..755db2cfb58 100644 ---- a/src/ucs/config/parser.c -+++ b/src/ucs/config/parser.c -@@ -644,7 +644,7 @@ int ucs_config_sprintf_bw(char *buf, size_t max, const void *src, - int ucs_config_sscanf_bw_spec(const char *buf, void *dest, const void *arg) - { - ucs_config_bw_spec_t *dst = (ucs_config_bw_spec_t*)dest; -- char *delim; -+ const char *delim; - - delim = strchr(buf, ':'); - if (!delim) { -diff --git a/src/uct/ib/base/ib_device.c b/src/uct/ib/base/ib_device.c -index 995e7e5538a..80a3c772dd4 100644 ---- a/src/uct/ib/base/ib_device.c -+++ b/src/uct/ib/base/ib_device.c -@@ -1396,13 +1396,14 @@ ucs_status_t uct_ib_device_find_port(uct_ib_device_t *dev, - const char *ibdev_name; - unsigned port_num; - size_t devname_len; -- char *p; -+ const char *devname_str; -+ char *port_num_str; - -- p = strrchr(resource_dev_name, ':'); -- if (p == NULL) { -+ devname_str = strrchr(resource_dev_name, ':'); -+ if (devname_str == NULL) { - goto err; /* Wrong device name format */ - } -- devname_len = p - resource_dev_name; -+ devname_len = devname_str - resource_dev_name; - - ibdev_name = uct_ib_device_name(dev); - if ((strlen(ibdev_name) != devname_len) || -@@ -1411,8 +1412,8 @@ ucs_status_t uct_ib_device_find_port(uct_ib_device_t *dev, - goto err; /* Device name is wrong */ - } - -- port_num = strtod(p + 1, &p); -- if (*p != '\0') { -+ port_num = strtod(devname_str + 1, &port_num_str); -+ if (*port_num_str != '\0') { - goto err; /* Failed to parse port number */ - } - if ((port_num < dev->first_port) || (port_num >= dev->first_port + dev->num_ports)) { diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix_bistro_hooks.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix_bistro_hooks.patch deleted file mode 100644 index 28c378f584f1..000000000000 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-1.18.0_fix_bistro_hooks.patch +++ /dev/null @@ -1,51 +0,0 @@ -# What: Fix inability of UCX to create an rcache with CUDA 12.9 (R575 driver) -# See https://github.com/openucx/ucx/issues/10868 -# Based on https://github.com/openucx/ucx/pull/10627 -# Author: maxim-masterov - -From f4ff1e5dd5b17bc0192d987db1917a10fb5aa63a Mon Sep 17 00:00:00 2001 -From: Ilia Yastrebov -Date: Fri, 11 Apr 2025 15:28:36 +0000 -Subject: [PATCH] UCM/CUDA: Fixed cuda12.9 amd64 bistro hook missing - instruction - ---- - src/ucm/bistro/bistro_x86_64.c | 16 +++++++++++++--- - 1 file changed, 13 insertions(+), 3 deletions(-) - -diff --git a/src/ucm/bistro/bistro_x86_64.c b/src/ucm/bistro/bistro_x86_64.c -index dd01bb462d2..9ea9d61be3a 100644 ---- a/src/ucm/bistro/bistro_x86_64.c -+++ b/src/ucm/bistro/bistro_x86_64.c -@@ -82,6 +82,9 @@ typedef struct { - /* Immediate Grp 1(1A), Ev, Iz */ - #define UCM_BISTRO_X86_IMM_GRP1_EV_IZ 0x81 - -+/* Immediate Grp 1(1A), Ev, Ib - 8-bit immediate */ -+#define UCM_BISTRO_X86_IMM_GRP1_EV_IB 0x83 -+ - /* MOV Ev,Gv */ - #define UCM_BISTRO_X86_MOV_EV_GV 0x89 - -@@ -156,11 +159,18 @@ ucs_status_t ucm_bistro_relocate_one(ucm_bistro_relocate_context_t *ctx) - /* push reg */ - goto out_copy_src; - } else if ((rex == UCM_BISTRO_X86_REX_W) && -- (opcode == UCM_BISTRO_X86_IMM_GRP1_EV_IZ)) { -+ ((opcode == UCM_BISTRO_X86_IMM_GRP1_EV_IZ) || /* sub $imm32, r/m64 */ -+ (opcode == UCM_BISTRO_X86_IMM_GRP1_EV_IB))) { /* sub $imm8, r/m64 */ - modrm = *ucs_serialize_next(&ctx->src_p, const uint8_t); - if (modrm == UCM_BISTRO_X86_MODRM_SUB_SP) { -- /* sub $imm32, %rsp */ -- ucs_serialize_next(&ctx->src_p, const uint32_t); -+ if (opcode == UCM_BISTRO_X86_IMM_GRP1_EV_IB) { -+ /* sub $imm8, %rsp */ -+ ucs_serialize_next(&ctx->src_p, const uint8_t); -+ } else { -+ /* sub $imm32, %rsp */ -+ ucs_serialize_next(&ctx->src_p, const uint32_t); -+ } -+ - goto out_copy_src; - } - } else if ((rex == UCM_BISTRO_X86_REX_W) && diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 7703607c60bb..a0d3bcd8989a 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -18,20 +18,15 @@ toolchainopts = {'pic': True} source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s'] sources = [{'filename': 'ucx-%(version)s.tar.gz', 'alt_location': 'UCX'}] patches = [ -# 'UCX-1.18.0_fix_bistro_hooks.patch', -# 'UCX-1.18.0_fix-glibc-2.43-compile-failure.patch', 'UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch', - 'UCX-CUDA-1.18.0_link_against_existing_UCX_libs.patch', + 'UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch', ] checksums = [ {'ucx-1.18.0.tar.gz': 'fa75070f5fa7442731b4ef5fc9549391e147ed3d859afeb1dad2d4513b39dc33'}, -# {'UCX-1.18.0_fix_bistro_hooks.patch': '6357f1ebb1569e30d0855e48404fdf38a5a7060a87789f54d7bb751f957be20c'}, -# {'UCX-1.18.0_fix-glibc-2.43-compile-failure.patch': -# 'c67b2070a65e8217b7c6f9d9a6a13ff11141bacfed395d551376432428348a9c'}, {'UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch': - 'dbf3a57a39752a1bef3f32f045cb3655f48ebec7544120c2874412710368d90a'}, - {'UCX-CUDA-1.18.0_link_against_existing_UCX_libs.patch': - '5aa85e428f62a168f2d4e75197c41c6835ed5a9893696cedaf1021858678f08c'}, + '58039ebed8b9ccd1a8303dbd9eb91f6b993022bcc0e8faac145f1e1b32069f7b'}, + {'UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch': + '14a538c97062eea2cb4f382b28bb7774cd6a3b1e26f6cfa63ca34e60c96e4780'}, ] builddependencies = [ diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch new file mode 100644 index 000000000000..600b131f27fc --- /dev/null +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch @@ -0,0 +1,61 @@ +Make the ROCm UCX plugins (ucm/rocm, uct/rocm) link against the existing installed +ucs/ucm/uct libraries (-lucs/-lucm/-luct) instead of the in-tree build products, so the +plugins can be built on top of an existing UCX installation without rebuilding UCX. + +Also disables the git-based SCM version detection in configure.ac: it is meaningless when +building from a release tarball via autoreconf, and would otherwise either error out or +pick up an unrelated parent git repository. + +Author: Aayush Joglekar + +--- a/configure.ac ++++ b/configure.ac +@@ -31,13 +31,13 @@ valgrind_libpath="" + AC_USE_SYSTEM_EXTENSIONS + AC_CONFIG_HEADERS([config.h]) + +-AC_CHECK_PROG(GITBIN, git, yes) +-AS_IF([test x"${GITBIN}" = x"yes"], +- [# remove preceding "refs/heads/" (11 characters) for symbolic ref +- AC_SUBST(SCM_BRANCH, esyscmd([sh -c 'git symbolic-ref --quiet HEAD | sed "s/^.\{11\}//"'])) +- AC_SUBST(SCM_VERSION, esyscmd([sh -c 'git rev-parse --short=7 HEAD']))], +- [AC_SUBST(SCM_BRANCH, "") +- AC_SUBST(SCM_VERSION, "0000000")]) ++#AC_CHECK_PROG(GITBIN, git, yes) ++#AS_IF([test x"${GITBIN}" = x"yes"], ++# [# remove preceding "refs/heads/" (11 characters) for symbolic ref ++# AC_SUBST(SCM_BRANCH, esyscmd([sh -c 'git symbolic-ref --quiet HEAD | sed "s/^.\{11\}//"'])) ++# AC_SUBST(SCM_VERSION, esyscmd([sh -c 'git rev-parse --short=7 HEAD']))], ++# [AC_SUBST(SCM_BRANCH, "") ++# AC_SUBST(SCM_VERSION, "0000000")]) + + AH_TOP([ + #ifndef UCX_CONFIG_H +diff --git a/src/ucm/rocm/Makefile.am b/src/ucm/rocm/Makefile.am +index 57545b3..9c86ee3 100644 +--- a/src/ucm/rocm/Makefile.am ++++ b/src/ucm/rocm/Makefile.am +@@ -10,7 +10,7 @@ if HAVE_ROCM + module_LTLIBRARIES = libucm_rocm.la + libucm_rocm_la_CPPFLAGS = $(BASE_CPPFLAGS) $(ROCM_CPPFLAGS) + libucm_rocm_la_CFLAGS = $(BASE_CFLAGS) $(ROCM_CFLAGS) $(LT_CFLAGS) +-libucm_rocm_la_LIBADD = ../libucm.la ++libucm_rocm_la_LIBADD = -lucm + libucm_rocm_la_LDFLAGS = $(UCM_MODULE_LDFLAGS) \ + $(ROCM_LDFLAGS) $(ROCM_LIBS) -version-info $(SOVERSION) \ + $(patsubst %, -Xlinker %, -L$(ROCM_ROOT)/lib -rpath $(ROCM_ROOT)/hip/lib -rpath $(ROCM_ROOT)/lib) \ +diff --git a/src/uct/rocm/Makefile.am b/src/uct/rocm/Makefile.am +index 310ca2e..5caf702 100644 +--- a/src/uct/rocm/Makefile.am ++++ b/src/uct/rocm/Makefile.am +@@ -8,8 +8,8 @@ if HAVE_ROCM + module_LTLIBRARIES = libuct_rocm.la + libuct_rocm_la_CPPFLAGS = $(BASE_CPPFLAGS) $(ROCM_CPPFLAGS) + libuct_rocm_la_CFLAGS = $(BASE_CFLAGS) $(LT_CFLAGS) +-libuct_rocm_la_LIBADD = $(top_builddir)/src/ucs/libucs.la \ +- $(top_builddir)/src/uct/libuct.la ++libuct_rocm_la_LIBADD = -lucs \ ++ -luct + libuct_rocm_la_LDFLAGS = $(ROCM_LDFLAGS) $(ROCM_LIBS) -version-info $(SOVERSION) \ + $(patsubst %, -Xlinker %, -L$(ROCM_ROOT)/lib -rpath $(ROCM_ROOT)/hip/lib -rpath $(ROCM_ROOT)/lib) \ + $(patsubst %, -Xlinker %, --enable-new-dtags) \ diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch index c5bb7dd8293b..616d0e6d910d 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch @@ -1,3 +1,9 @@ +This patch redirects the HIP include/lib paths so the autoconf +checks resolve against the right modules as HIP and ROCm-LLVM do not +live under the same root as expected by the UCX configuration. + +Author: Aayush Joglekar + diff --git a/config/m4/rocm.m4 b/config/m4/rocm.m4 index c7c4ca14..cc89dc47 100644 --- a/config/m4/rocm.m4 @@ -19,7 +25,7 @@ index c7c4ca14..cc89dc47 100644 AC_DEFUN([HIP_BUILD_FLAGS], - $4="-D__HIP_PLATFORM_HCC__ -D__HIP_PLATFORM_AMD__ -I$1/include/hip -I$1/include" - $3="-L$1/hip/lib -L$1/lib" -+ $4="-D__HIP_PLATFORM_HCC__ -D__HIP_PLATFORM_AMD__ -I$1/include/hip -I$1/include -I$EBROOTHIP/include" ++ $4="-D__HIP_PLATFORM_HCC__ -D__HIP_PLATFORM_AMD__ -I$1/include/hip -I$1/include -I$EBROOTHIP/include -I$EBROOTHIP/include/hip" + $3="-L$1/hip/lib -L$1/lib -L$EBROOTHIP/lib" $2="-lamdhip64" ) From 60582e0a76c0c796cdbfe70247ec57193aed42ab Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Tue, 14 Jul 2026 16:45:34 +0200 Subject: [PATCH 28/39] Remove rmpich files added accidentally --- ...-4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 55 ------------ ...CH-4.3.2_libtool-amdflang-fortran-wl.patch | 57 ------------ .../OSU-Micro-Benchmarks-7.5-rmpich-2025a.eb | 88 ------------------- .../easyconfigs/r/rmpich/rmpich-2025a.eb | 21 ----- 4 files changed, 221 deletions(-) delete mode 100644 easybuild/easyconfigs/m/MPICH/MPICH-4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb delete mode 100644 easybuild/easyconfigs/m/MPICH/MPICH-4.3.2_libtool-amdflang-fortran-wl.patch delete mode 100644 easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rmpich-2025a.eb delete mode 100644 easybuild/easyconfigs/r/rmpich/rmpich-2025a.eb diff --git a/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb deleted file mode 100644 index 451609b8e6cd..000000000000 --- a/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ /dev/null @@ -1,55 +0,0 @@ -# Author: Aayush Joglekar - -name = 'MPICH' -version = '4.3.2' -_rocm_version = '6.4.1' -# No versionsuffix -- the ROCm version is already carried by the toolchain -# string (rocm-compilers/19.0.0-ROCm-6.4.1), and a -ROCm-6.4.1 suffix on top -# would duplicate it in the resolved module name. The .eb filename matches -# the resolved module name MPICH/4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1. - -homepage = 'https://www.mpich.org/' -description = """MPICH is a high-performance and widely portable implementation -of the Message Passing Interface (MPI) standard (MPI-1, MPI-2 and MPI-3). -This build links against ROCm-aware UCX and HIP for GPU-aware MPI on AMD GPUs.""" - -toolchain = {'name': 'rocm-compilers', 'version': f'19.0.0-ROCm-{_rocm_version}'} - -source_urls = ['https://www.mpich.org/static/downloads/%(version)s'] -sources = [SOURCELOWER_TAR_GZ] -patches = ['MPICH-%(version)s_libtool-amdflang-fortran-wl.patch'] -checksums = [ - {'mpich-4.3.2.tar.gz': - '47d774587a7156a53752218c811c852e70ac44db9c502dc3f399b4cb817e3818'}, - {'MPICH-4.3.2_libtool-amdflang-fortran-wl.patch': - '0ba3ad6df0641fdc6d58ab5799e252b4c34725924db9b072d8d984839b229c54'}, -] - -dependencies = [ - ('hwloc', '2.11.2'), # plain hwloc; topology discovery (--with-hwloc) - ('hwloc-ROCm', '2.11.2'), # runtime RSMI plugin overlay (HWLOC_PLUGINS_PATH) - ('UCX-ROCm', '1.18.0'), # picked up via patched EB_MPICH UCX detection - ('HIP', _rocm_version), # provides $EBROOTHIP for --with-hip -] - -configopts = '--disable-option-checking ' -configopts += '--with-hip-sm=%(amdgcn_capabilities)s ' - -# Disable the F2018 `use mpi_f08` bindings: src/binding/fortran/use_mpi_f08/mpi_f08.f90 -# uses `TYPE(*), DIMENSION(..)` assumed-rank polymorphic dummies pervasively, which -# ROCm 6.4.1's amdflang (Classic Flang 18.0.0, PGI lineage) does not support. -# The older `mpif.h` and `use mpi` interfaces stay enabled (no assumed-rank usage -# there, verified against MPICH 4.3.2 source). Re-enable once ROCm ships flang-new -# as amdflang. -configopts += '--disable-f08 ' - -# Also build a separate MPI ABI variant -mpi_abi = True - -sanity_check_commands = [ - "mpicc -show | grep -q amdclang", - "mpifort -show | grep -q amdflang", - "test -e $EBROOTMPICH/lib/libmpi_abi.so", -] - -moduleclass = 'mpi' diff --git a/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2_libtool-amdflang-fortran-wl.patch b/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2_libtool-amdflang-fortran-wl.patch deleted file mode 100644 index b8d7ccc9cef9..000000000000 --- a/easybuild/easyconfigs/m/MPICH/MPICH-4.3.2_libtool-amdflang-fortran-wl.patch +++ /dev/null @@ -1,57 +0,0 @@ -Add 'amdflang*' to libtool's known-Fortran-compilers case statement so its FC -tag config block sets `wl="-Wl,"` instead of empty. - -Without this, building the shared libmpifort.so fails because libtool, having -no entry for amdflang, falls through to the catch-all case where the wl -variable stays empty. Then libtool's --mode=link invocation passes raw ---whole-archive / --no-whole-archive / -soname directly to the Fortran driver -(amdflang) instead of wrapping them in -Wl,. amdflang -- which in ROCm 6.4.1 -is Classic Flang 18.0.0, PGI-lineage -- rejects them as unknown arguments and -the link fails. - -Classic Flang DOES accept -Wl,... pass-through to the linker, so the correct -value for the FC-tag wl variable is '-Wl,', exactly as for plain flang/f18. - -Mirrors the upstream-MPICH flang.patch under maint/patches/optional/confdb/ -(which adds the case for `flang*|f18*` in the same location); we just extend -the alternation to also match ROCm's amdflang driver name. - -The case statement appears in three places in the shipped configure script, -one per libtool tag (default/C, FC, F77). We patch all three. We do NOT also -patch confdb/libtool.m4 (the m4 source of the case) -- modifying that file -makes its timestamp newer than aclocal.m4, which causes make to try to -regenerate aclocal.m4 mid-build via the autotools chain, which then fails -because aclocal is not in PATH. The right place to also fix the source m4 -is upstream MPICH's maint/patches/optional/confdb/flang.patch, not here. - -Author: Aayush Joglekar - ---- a/configure -+++ b/configure -@@ -12430,7 +12430,7 @@ - lt_prog_compiler_static='-static' - ;; - # flang / f18 -- flang* | f18*) -+ flang* | f18* | amdflang*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' -@@ -20711,7 +20711,7 @@ - lt_prog_compiler_static_FC='-static' - ;; - # flang / f18 -- flang* | f18*) -+ flang* | f18* | amdflang*) - lt_prog_compiler_wl_FC='-Wl,' - lt_prog_compiler_pic_FC='-fPIC' - lt_prog_compiler_static_FC='-static' -@@ -23932,7 +23932,7 @@ - lt_prog_compiler_static_F77='-static' - ;; - # flang / f18 -- flang* | f18*) -+ flang* | f18* | amdflang*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-fPIC' - lt_prog_compiler_static_F77='-static' diff --git a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rmpich-2025a.eb b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rmpich-2025a.eb deleted file mode 100644 index b9a12b5f9df9..000000000000 --- a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rmpich-2025a.eb +++ /dev/null @@ -1,88 +0,0 @@ -# Author: Aayush Joglekar - -easyblock = 'ConfigureMake' - -name = 'OSU-Micro-Benchmarks' -version = '7.5' -_rocm_version = '6.4.1' - -homepage = 'https://mvapich.cse.ohio-state.edu/benchmarks/' -description = """OSU Micro-Benchmarks built on the rmpich/2025a toolchain -(rocm-compilers + MPICH 4.3.2 mpi_abi=True). The build is designed to run -on three stacks via the same binary (cf. thesis-benchmarks/8_osu_rmpich): -its own rmpich MPICH (`rmpich` stack), Cray's NIC-offloaded MPI ABI runtime -via LD_LIBRARY_PATH swap (`rmpich_abi` stack), or contrasted against Cray- -built OSU (`native`). The two non-obvious bits below -- patchelf-strip and -modluafooter -- exist solely to make the `rmpich_abi` swap possible while -keeping the plain `rmpich` stack functional.""" - -toolchain = {'name': 'rmpich', 'version': '2025a'} -toolchainopts = {'usempi': True} - -source_urls = ['https://mvapich.cse.ohio-state.edu/download/mvapich/'] -sources = [SOURCELOWER_TAR_GZ] -checksums = ['1cf84ac5419456202757a757c5f9a4f5c6ecd05c65783c7976421cfd6020b3b3'] - -dependencies = [ - ('HIP', _rocm_version), -] - -# RCCL + XCCL are intentionally omitted; use the rompi sibling for XCCL. -configopts = '--enable-rocm --with-rocm=$EBROOTHIP ' - -local_benchmark_dirs = [ - 'libexec/osu-micro-benchmarks/mpi/%s' % x - for x in ['collective', 'one-sided', 'pt2pt', 'startup'] -] - -modextrapaths = {'PATH': local_benchmark_dirs} - -# === rmpich_abi enablement ================================================= -# Walk every installed OSU binary's DT_RPATH and drop the entry that points -# at our self-built MPICH lib. This lets `module load cray-mpich-abi/` -# (LUMI's official ABI-swap, which prepends Cray's lib-abi-mpich/ onto -# LD_LIBRARY_PATH) actually win the libmpi.so.12 SONAME race at exec time. -# Without this strip, DT_RPATH beats LD_LIBRARY_PATH and the swap is blocked. -# `--rpath-filter` on the EB CLI does NOT catch dep-derived paths in EB 5.3, -# so patchelf is the only tool that works. patchelf 0.18.0 is at -# /cvmfs/software.eessi.io/.../compat/linux/x86_64/usr/bin/patchelf. -postinstallcmds = [ - 'for f in ' - ' %(installdir)s/libexec/osu-micro-benchmarks/mpi/pt2pt/* ' - ' %(installdir)s/libexec/osu-micro-benchmarks/mpi/collective/* ' - ' %(installdir)s/libexec/osu-micro-benchmarks/mpi/one-sided/* ' - ' %(installdir)s/libexec/osu-micro-benchmarks/mpi/startup/* ; do ' - ' [ -f "$f" ] || continue; ' - ' rp=$(patchelf --print-rpath "$f" 2>/dev/null) || continue; ' - ' [ -z "$rp" ] && continue; ' - ' new=""; IFS=":"; ' - ' for p in $rp; do ' - ' case "$p" in *MPICH/4.3.2-rocm-compilers-19.0.0-ROCm-6.4.1/lib*) continue ;; esac; ' - ' if [ -z "$new" ]; then new="$p"; else new="$new:$p"; fi; ' - ' done; unset IFS; ' - ' [ "$rp" != "$new" ] && patchelf --set-rpath "$new" "$f"; ' - 'done', -] - -# The strip above means the binary no longer finds rmpich's libmpi via -# DT_RPATH. For the plain `rmpich` stack we make up for this by adding -# $EBROOTMPICH/lib to LD_LIBRARY_PATH via the module footer. The -# `rmpich_abi` stack later prepends Cray's lib-abi-mpich AHEAD of this, -# so the swap stack gets Cray's libs first; both stacks work from the -# same binary. -modluafooter = 'prepend_path("LD_LIBRARY_PATH", pathJoin(os.getenv("EBROOTMPICH") or "", "lib"))' -# =========================================================================== - -sanity_check_paths = { - 'files': [ - 'libexec/osu-micro-benchmarks/mpi/pt2pt/osu_bw', - 'libexec/osu-micro-benchmarks/mpi/collective/osu_allreduce', - ], - 'dirs': local_benchmark_dirs, -} - -sanity_check_commands = [ - "osu_bw --help | grep -i rocm", -] - -moduleclass = 'perf' diff --git a/easybuild/easyconfigs/r/rmpich/rmpich-2025a.eb b/easybuild/easyconfigs/r/rmpich/rmpich-2025a.eb deleted file mode 100644 index 9b7967fcdb04..000000000000 --- a/easybuild/easyconfigs/r/rmpich/rmpich-2025a.eb +++ /dev/null @@ -1,21 +0,0 @@ -# Author: Aayush Joglekar - -easyblock = 'Toolchain' - -name = 'rmpich' -version = '2025a' - -homepage = '(none)' -description = 'ROCm-LLVM based compiler toolchain, including MPICH for MPI support.' - -toolchain = SYSTEM - -local_rocmver = '19.0.0-ROCm-6.4.1' - -# compiler toolchain dependencies -dependencies = [ - ('rocm-compilers', local_rocmver), # includes both ROCm-LLVM and binutils - ('MPICH', '4.3.2', '', ('rocm-compilers', local_rocmver)), -] - -moduleclass = 'toolchain' From 32ee28c65733cd190db34344906bd06c4922b04e Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Tue, 14 Jul 2026 17:16:56 +0200 Subject: [PATCH 29/39] Revert rompi-2025a.eb --- easybuild/easyconfigs/r/rompi/rompi-2025a.eb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyconfigs/r/rompi/rompi-2025a.eb b/easybuild/easyconfigs/r/rompi/rompi-2025a.eb index f131d3542baf..2bb35d603c78 100644 --- a/easybuild/easyconfigs/r/rompi/rompi-2025a.eb +++ b/easybuild/easyconfigs/r/rompi/rompi-2025a.eb @@ -6,7 +6,7 @@ name = 'rompi' version = '2025a' homepage = '(none)' -description = 'ROCm-LLVM based compiler toolchain, including OpenMPI for MPI support.' +description = """ROCm-LLVM based compiler toolchain, including OpenMPI for MPI support.""" toolchain = SYSTEM From 2f54b1109cca5e19fbd27034327a59d15cf69390 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Tue, 14 Jul 2026 17:46:12 +0200 Subject: [PATCH 30/39] Fix comments and checksum --- ...MIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 16 +++++----------- ...OCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 2 +- .../x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb | 6 +++--- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 2ce2df20a7dd..9b60498959cc 100644 --- a/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -6,17 +6,11 @@ name = 'PMIx' version = '5.0.6' homepage = 'https://pmix.org/' -description = """Process Management for Exascale Environments -PMI Exascale (PMIx) represents an attempt to -provide an extended version of the PMI standard specifically designed -to support clusters up to and including exascale sizes. The overall -objective of the project is not to branch the existing pseudo-standard -definitions - in fact, PMIx fully supports both of the existing PMI-1 -and PMI-2 APIs - but rather to (a) augment and extend those APIs to -eliminate some current restrictions that impact scalability, and (b) -provide a reference implementation of the PMI-server that demonstrates -the desired level of scalability. -""" +description = """Process Management for Exascale Environments. +PMI Exascale (PMIx) extends the PMI standard to support clusters up to and +including exascale sizes, while remaining fully compatible with the existing +PMI-1 and PMI-2 APIs. It also provides a reference implementation of the +PMI-server.""" toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} toolchainopts = {'pic': True} diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 58a37a7dea1c..ef3ac96a54ae 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -24,7 +24,7 @@ patches = [ checksums = [ {'v1.3.0.tar.gz': 'b56379abe5f1c125bfa83be305d78d81a64aa271b7b5fff0ac17b86725ff3acf'}, {'UCC-ROCm-1.3.0_use_rocm_easybuild_paths.patch': - '5dffe88d76d8e839eec95b46c8ad9021fa2ccc649fae1213f79054f239bd959d'}, + '0e47c4d5bde9d31efcd5958134850b62b7281caa9d26785b57a34ad3a63c20d6'}, {'UCC-ROCm-1.3.0_link_against_existing_UCC_libs.patch': '20191679acf361a45b89b8c454acefa56a5ad5f531ddc5cc45f4659c6ccc5ea6'}, {'UCC-ROCm-1.3.0_rocm_arch_from_env.patch': diff --git a/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb index 82b4c58cd603..dd18cd537bf6 100644 --- a/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb +++ b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb @@ -9,9 +9,9 @@ homepage = 'https://github.com/openucx/xpmem' description = """XPMEM is a Linux kernel module that enables a process to map the memory of another process into its virtual address space. Source-to-source copy operations between cooperating processes can then be performed at memory speed. -This is the userspace library; it requires the xpmem kernel module to be loaded -on the host (provided as 'cray-xpmem' on LUMI; verifiable via 'lsmod | grep xpmem' -and the existence of /dev/xpmem). +This provides the userspace library only; making use of it requires the xpmem +kernel module to be loaded on the host, which can be checked with +'lsmod | grep xpmem' or by the presence of /dev/xpmem. """ toolchain = {'name': 'GCCcore', 'version': '14.2.0'} From 450c0bf99d1e1579d4d339122fa05dcc4e04b7a1 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Fri, 17 Jul 2026 14:29:38 +0200 Subject: [PATCH 31/39] Add cassini-headers-1.1.1.eb --- .../cassini-headers/cassini-headers-1.1.1.eb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 easybuild/easyconfigs/c/cassini-headers/cassini-headers-1.1.1.eb diff --git a/easybuild/easyconfigs/c/cassini-headers/cassini-headers-1.1.1.eb b/easybuild/easyconfigs/c/cassini-headers/cassini-headers-1.1.1.eb new file mode 100644 index 000000000000..4ec85572230e --- /dev/null +++ b/easybuild/easyconfigs/c/cassini-headers/cassini-headers-1.1.1.eb @@ -0,0 +1,32 @@ +# Author: Aayush Joglekar + +easyblock = 'Tarball' + +name = 'cassini-headers' +version = '1.1.1' + +homepage = 'https://github.com/HewlettPackard/shs-cassini-headers' +description = """Cassini ASIC register and user-API headers for the HPE +Slingshot-11 interconnect. Consumed by libcxi and the libfabric cxi provider.""" + +toolchain = {'name': 'system', 'version': 'system'} + +# git tag release/shs-12.0.1 corresponds to cray-cassini-headers-user 1.1.1 +sources = [ + { + 'filename': SOURCE_TAR_GZ, + 'git_config': { + 'url': 'https://github.com/HewlettPackard', + 'repo_name': 'shs-%(name)s', + 'tag': 'release/shs-12.0.1', + 'keep_git_dir': False, + }, + }, +] + +sanity_check_paths = { + 'files': ['include/cassini_user_defs.h', 'include/cxi_prov_hw.h'], + 'dirs': ['include', 'share/%(name)s'], +} + +moduleclass = 'lib' From 45b4c1633ac978e5f7c99ca251cd8ca5de40cf9d Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Fri, 17 Jul 2026 14:32:52 +0200 Subject: [PATCH 32/39] Add cxi-driver-headers-1.0.0.eb --- .../cxi-driver-headers-1.0.0.eb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 easybuild/easyconfigs/c/cxi-driver-headers/cxi-driver-headers-1.0.0.eb diff --git a/easybuild/easyconfigs/c/cxi-driver-headers/cxi-driver-headers-1.0.0.eb b/easybuild/easyconfigs/c/cxi-driver-headers/cxi-driver-headers-1.0.0.eb new file mode 100644 index 000000000000..fa8a6272d70b --- /dev/null +++ b/easybuild/easyconfigs/c/cxi-driver-headers/cxi-driver-headers-1.0.0.eb @@ -0,0 +1,34 @@ +# Author: Aayush Joglekar + +easyblock = 'Tarball' + +name = 'cxi-driver-headers' +version = '1.0.0' + +homepage = 'https://github.com/HewlettPackard/shs-cxi-driver' +description = """Userspace (UAPI) headers for the HPE Slingshot-11 CXI driver +(uapi/misc/cxi.h and linux/cxi.h), defining the ioctl interface that libcxi and +libfabric's cxi provider use to talk to the NIC. This module installs the headers +only; the CXI kernel driver itself is supplied by the host operating system.""" + +toolchain = {'name': 'system', 'version': 'system'} + +# git tag release/shs-12.0.2 corresponds to cray-cxi-driver 1.0.0 +sources = [ + { + 'filename': SOURCE_TAR_GZ, + 'git_config': { + 'url': 'https://github.com/HewlettPackard', + 'repo_name': 'shs-cxi-driver', + 'tag': 'release/shs-12.0.2', + 'keep_git_dir': False, + }, + }, +] + +sanity_check_paths = { + 'files': ['include/uapi/misc/cxi.h'], + 'dirs': ['include'], +} + +moduleclass = 'lib' From 379e8012f28d983554a318e613518a186e358c12 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Fri, 17 Jul 2026 14:33:10 +0200 Subject: [PATCH 33/39] Add libconfig-1.8.1-GCCcore-14.2.0.eb --- .../libconfig-1.8.1-GCCcore-14.2.0.eb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 easybuild/easyconfigs/l/libconfig/libconfig-1.8.1-GCCcore-14.2.0.eb diff --git a/easybuild/easyconfigs/l/libconfig/libconfig-1.8.1-GCCcore-14.2.0.eb b/easybuild/easyconfigs/l/libconfig/libconfig-1.8.1-GCCcore-14.2.0.eb new file mode 100644 index 000000000000..4a25141e4ad3 --- /dev/null +++ b/easybuild/easyconfigs/l/libconfig/libconfig-1.8.1-GCCcore-14.2.0.eb @@ -0,0 +1,29 @@ +# Author: Aayush Joglekar + +easyblock = 'ConfigureMake' + +name = 'libconfig' +version = '1.8.1' + +homepage = 'https://hyperrealm.github.io/libconfig' +description = "Libconfig is a simple library for processing structured configuration files" + +toolchain = {'name': 'GCCcore', 'version': '14.2.0'} + +source_urls = ['https://hyperrealm.github.io/%(name)s/dist/'] +sources = [SOURCE_TAR_GZ] +checksums = [{'libconfig-1.8.1.tar.gz': 'c73ee3d914ec68c99b61e864832931e9a7112eeabfb449dad217fd83e385cbdf'}] + +builddependencies = [ + ('binutils', '2.42'), + ('Bison', '3.8.2'), + ('flex', '2.6.4'), +] + +sanity_check_paths = { + 'files': ['include/%(name)s.h', 'include/%(name)s.h++', 'lib/%(name)s.a', 'lib/%(name)s++.a', + 'lib/%(name)s.so', 'lib/%(name)s++.so'], + 'dirs': ['lib/pkgconfig'], +} + +moduleclass = 'lib' From b015496769b3eac3858c72a347dab915143f2f78 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Fri, 17 Jul 2026 14:35:24 +0200 Subject: [PATCH 34/39] Add libcxi-1.0.2-GCCcore-14.2.0.eb --- .../l/libcxi/libcxi-1.0.2-GCCcore-14.2.0.eb | 59 ++++ .../libcxi-1.0.2_build-library-only.patch | 290 ++++++++++++++++++ 2 files changed, 349 insertions(+) create mode 100644 easybuild/easyconfigs/l/libcxi/libcxi-1.0.2-GCCcore-14.2.0.eb create mode 100644 easybuild/easyconfigs/l/libcxi/libcxi-1.0.2_build-library-only.patch diff --git a/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2-GCCcore-14.2.0.eb b/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2-GCCcore-14.2.0.eb new file mode 100644 index 000000000000..19c4550f7bbe --- /dev/null +++ b/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2-GCCcore-14.2.0.eb @@ -0,0 +1,59 @@ +# Author: Aayush Joglekar + +easyblock = 'ConfigureMake' + +name = 'libcxi' +version = '1.0.2' + +homepage = 'https://github.com/HewlettPackard/shs-libcxi' +description = """libcxi is the userspace library for the HPE Slingshot-11 +Cassini (CXI) NIC. It is the link-time dependency of libfabric's cxi provider.""" + +toolchain = {'name': 'GCCcore', 'version': '14.2.0'} +toolchainopts = {'pic': True} + +# git tag release/shs-12.0.2 corresponds to cray-libcxi 1.0.2 +sources = [ + { + 'filename': SOURCE_TAR_GZ, + 'git_config': { + 'url': 'https://github.com/HewlettPackard', + 'repo_name': 'shs-%(name)s', + 'tag': 'release/shs-12.%(version_minor_patch)s', + 'keep_git_dir': False, + }, + }, +] +patches = ['%(name)s-%(version_major_minor)s.2_build-library-only.patch'] +checksums = [ + None, # .tgz not reproducible + {'libcxi-1.0.2_build-library-only.patch': '59bd5ab3933e7d763435f26193bdd77b33417975aaa8ce5c293e1d90d02592a9'}, +] + +builddependencies = [ + ('binutils', '2.42'), + ('pkgconf', '2.3.0'), + ('Autotools', '20240712'), +] +dependencies = [ + ('cassini-headers', '1.1.1', '', SYSTEM), + ('cxi-driver-headers', '1.0.0', '', SYSTEM), + ('libconfig', '1.8.1'), + ('libuv', '1.51.0'), + ('libnl', '3.11.0'), + ('numactl', '2.0.19'), +] + +preconfigopts = "./autogen.sh && " + +# --without-rocm does NOT disable GPU-direct over CXI. In libcxi all GPU code +# lives in the (now-stripped) utils/ and tests/; The actual ROCm HMEM (GPU-direct) +# backend is implemented in libfabric's cxi provider and enabled there via --with-rocr. +configopts = "--disable-static --without-systemd --without-rocm --without-cuda --without-ze " + +sanity_check_paths = { + 'files': ['lib/%(name)s.so'], + 'dirs': ['include', 'lib/pkgconfig'], +} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2_build-library-only.patch b/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2_build-library-only.patch new file mode 100644 index 000000000000..14e5f3d2f200 --- /dev/null +++ b/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2_build-library-only.patch @@ -0,0 +1,290 @@ +Build only the libcxi shared library (libcxi.so) plus its public header and +pkg-config file -- the pieces libfabric's `cxi` provider link-depends on. + +Upstream Makefile.am also builds the utils/ diagnostic tools, a criterion test +suite and the retry_handler systemd service. Those pull in fuse / libyaml / +lm-sensors and compile GPU sources against the host's /opt/rocm. +This trims Makefile.am down to src/libcxi.la and removes the now-unused LIBFUSE +/ LIBYAML / sensors.h probes from configure.ac. The `git describe` version stamp +is dropped too: its only consumer was the retry_handler, which this patch removes. + +Author: Aayush Joglekar + +diff --git a/Makefile.am b/Makefile.am +index 4c47094..4ba0d05 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,8 +1,12 @@ + # SPDX-License-Identifier: GPL-2.0-only or BSD-2-Clause + # Copyright 2018, 2020-2021 Hewlett Packard Enterprise Development LP + +-# Current version of the tree +-GIT_VERSION := $(shell git describe --abbrev=8 --dirty --always --tags) ++# Reduced to build ONLY the libcxi shared library plus its public header and ++# pkg-config file -- the only pieces libfabric's `cxi` provider link-depends ++# on. The utils/ diagnostic tools, the criterion test suite and the ++# retry_handler systemd service have been dropped: they pulled fuse / libyaml ++# / lm-sensors and compiled GPU sources against system /opt/rocm paths, none ++# of which a hermetic EESSI build may use. See the libcxi easyconfig. + + AM_CPPFLAGS = \ + -I$(srcdir)/include \ +@@ -12,7 +16,7 @@ AM_CPPFLAGS = \ + AM_CFLAGS = \ + ${pkg_CFLAGS} + +-lib_LTLIBRARIES = utils/libcxiutils.la src/libcxi.la ++lib_LTLIBRARIES = src/libcxi.la + src_libcxi_la_SOURCES = \ + src/libcxi.c \ + src/devinfo.c \ +@@ -24,224 +28,11 @@ src_libcxi_la_LDFLAGS = ${LIBNL_LIBS} \ + -Wl,--version-script=$(top_srcdir)/src/libcxi.sym + src_libcxi_la_DEPENDENCIES = ${top_srcdir}/src/libcxi.sym + +-utils_libcxiutils_la_SOURCES = \ +- utils/ctrl_connection.c \ +- utils/cxi_context.c \ +- utils/utils_common.c \ +- utils/utils_common.h \ +- utils/utils_gpu_cuda.c \ +- utils/utils_gpu_hip.c \ +- utils/utils_gpu_ze.c \ +- utils/get_clock.c +-utils_libcxiutils_la_LDFLAGS = -lm +-utils_libcxiutils_la_CPPFLAGS=$(AM_CPPFLAGS) -fvisibility=default +- + pkginclude_HEADERS = include/libcxi.h +-EXTRA_DIST = src/libcxi.sym README.md retry_handler/cxi_rh.conf +- +-AM_DISTCHECK_CONFIGURE_FLAGS = \ +- --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir) \ +- --with-udevrulesdir=$$dc_install_base/$(udevrulesdir) + + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = libcxi.pc +-EXTRA_DIST += libcxi.pc.in +- +-CLEANFILES = \ +- libcxi.pc \ +- utils/cxi_dump_csrs.h +- +-bin_PROGRAMS = \ +- tests/cxi_device_list tests/test_write_csr tests/test_map_csr retry_handler/cxi_rh \ +- utils/cxi_send_lat utils/cxi_heatsink_check utils/cxi_write_bw \ +- utils/cxi_stat utils/cxi_write_lat utils/cxi_read_bw utils/cxi_read_lat \ +- utils/cxi_atomic_bw utils/cxi_atomic_lat utils/cxi_send_bw \ +- utils/cxi_gpu_loopback_bw utils/cxi_udp_gen utils/cxi_service \ +- utils/cxi_dump_csrs +- +-utils_cxi_send_lat_SOURCES = utils/send_lat.c +-utils_cxi_send_lat_LDADD = $(lib_LTLIBRARIES) -lm +- +-utils_cxi_send_bw_SOURCES = utils/send_bw.c +-utils_cxi_send_bw_LDADD = $(lib_LTLIBRARIES) -lm +- +-utils_cxi_heatsink_check_SOURCES = utils/heatsink_check.c +-utils_cxi_heatsink_check_LDFLAGS = -lpthread -lrt -lsensors -lnuma +-utils_cxi_heatsink_check_LDADD = $(lib_LTLIBRARIES) +- +-utils_cxi_write_bw_SOURCES = utils/write_bw.c +-utils_cxi_write_bw_LDADD = $(lib_LTLIBRARIES) -lm +- +-utils_cxi_stat_SOURCES = utils/cxi_stat.c +-utils_cxi_stat_LDADD = src/libcxi.la +- +-cxi_yamldir = $(datadir)/cxi +-dist_cxi_yaml_DATA = utils/cxi_service_template.yaml +-utils_cxi_service_SOURCES = utils/cxi_service.c +-utils_cxi_service_LDADD = ${LIBYAML_LIBS} src/libcxi.la +- +-utils_cxi_write_lat_SOURCES = utils/write_lat.c +-utils_cxi_write_lat_LDADD = $(lib_LTLIBRARIES) -lm +- +-utils_cxi_read_bw_SOURCES = utils/read_bw.c +-utils_cxi_read_bw_LDADD = $(lib_LTLIBRARIES) -lm +- +-utils_cxi_read_lat_SOURCES = utils/read_lat.c +-utils_cxi_read_lat_LDADD = $(lib_LTLIBRARIES) -lm +- +-utils_cxi_atomic_bw_SOURCES = utils/atomic_bw.c +-utils_cxi_atomic_bw_LDADD = $(lib_LTLIBRARIES) -lm +- +-utils_cxi_atomic_lat_SOURCES = utils/atomic_lat.c +-utils_cxi_atomic_lat_LDADD = $(lib_LTLIBRARIES) -lm +- +-utils_cxi_gpu_loopback_bw_SOURCES = utils/loopback_bw.c +-utils_cxi_gpu_loopback_bw_LDADD = $(lib_LTLIBRARIES) -lm +- +-utils_cxi_udp_gen_CFLAGS = -Wno-address-of-packed-member +-utils_cxi_udp_gen_LDFLAGS = -lpthread +-utils_cxi_udp_gen_LDADD = src/libcxi.la +- +-utils_cxi_dump_csrs_SOURCES = utils/cxi_dump_csrs.c +-utils_cxi_dump_csrs_LDADD = src/libcxi.la +-utils/cxi_dump_csrs.c: utils/cxi_dump_csrs.h +-utils/cxi_dump_csrs.h: utils/cxi_dump_csrs.py +- utils/cxi_dump_csrs.py > utils/cxi_dump_csrs.h +- +-utils_MANS = \ +- man/man1/cxi_atomic_bw.1 \ +- man/man1/cxi_atomic_lat.1 \ +- man/man1/cxi_dump_csrs.1 \ +- man/man1/cxi_gpu_loopback_bw.1 \ +- man/man1/cxi_heatsink_check.1 \ +- man/man1/cxi_read_bw.1 \ +- man/man1/cxi_read_lat.1 \ +- man/man1/cxi_send_bw.1 \ +- man/man1/cxi_send_lat.1 \ +- man/man1/cxi_service.1 \ +- man/man1/cxi_stat.1 \ +- man/man1/cxi_udp_gen.1 \ +- man/man1/cxi_write_bw.1 \ +- man/man1/cxi_write_lat.1 \ +- man/man7/cxi_diags.7 \ +- man/man7/cxi_service.7 +- +-MANPAGE_SRCS = $(patsubst man/man%/%.%, man/\2.\3.md, $(utils_MANS)) +- +-manpages: $(utils_MANS) +- +-if HAVE_PANDOC +-%.1: ../%.1.md +- pandoc --standalone --to man $< -o $@ +- +-%.7: ../%.7.md +- pandoc --standalone --to man $< -o $@ +-endif +- +-tests_cxi_device_list_CPPFLAGS = $(AM_CPPFLAGS) +-tests_cxi_device_list_LDADD = src/libcxi.la +- +-tests_test_map_csr_CPPFLAGS = $(AM_CPPFLAGS) +-tests_test_map_csr_LDADD = src/libcxi.la +- +-tests_test_write_csr_CPPFLAGS = $(AM_CPPFLAGS) +-tests_test_write_csr_LDADD = src/libcxi.la +- +-retry_handler_cxi_rh_CPPFLAGS = $(AM_CPPFLAGS) ${LIBCONFIG_CFLAGS} \ +- ${LIBUV_CFLAGS} ${LIBFUSE_CFLAGS} ${LIBSYSTEMD_CFLAGS} \ +- -DGIT_VERSION=\"$(GIT_VERSION)\" \ +- -DSYSCONFDIR=\"$(sysconfdir)\" +-retry_handler_cxi_rh_LDADD = ${LIBCONFIG_LIBS} \ +- ${LIBUV_LIBS} ${LIBFUSE_LIBS} ${LIBSYSTEMD_LIBS} src/libcxi.la +-retry_handler_cxi_rh_SOURCES = \ +- retry_handler/config.c \ +- retry_handler/list.h \ +- retry_handler/logging.c \ +- retry_handler/main.c \ +- retry_handler/ordered.c \ +- retry_handler/recovery.c \ +- retry_handler/rh.h \ +- retry_handler/sct_timeout.c \ +- retry_handler/stats.c \ +- retry_handler/tct_timeout.c \ +- retry_handler/timers.c \ +- retry_handler/unordered.c +- +-sysconf_DATA = retry_handler/cxi_rh.conf +- +-if HAVE_SYSTEMD +-systemdsystemunit_DATA = retry_handler/cxi_rh@.service +-dist_systemdsystemunit_DATA = retry_handler/cxi_rh.target +-else +-EXTRA_DIST += retry_handler/cxi_rh.target +-endif +- +-if HAVE_UDEV +-dist_udevrules_DATA = retry_handler/60-cxi.rules +-else +-# ensure rules file is included in distribution even if udev is not present +-# when configure is run +-EXTRA_DIST += retry_handler/60-cxi.rules +-endif +- +-if HAVE_CRITERION +-bin_PROGRAMS += \ +- tests/libcxi_test +-check_PROGRAMS = \ +- tests/libcxi_test +-TESTS = \ +- tests/run_tests_vm.sh +- +-tests_libcxi_test_SOURCES = \ +- tests/libcxi_test_common.c \ +- tests/ucxi_test.c \ +- tests/libcxi_test.c \ +- tests/libcxi_test_pte.c \ +- tests/libcxi_test_svc.c \ +- tests/libcxi_gpu_hip.c \ +- tests/libcxi_gpu_cuda.c \ +- tests/libcxi_gpu_ze.c \ +- tests/map.c \ +- tests/rgid.c \ +- tests/rma.c \ +- tests/atomic.c \ +- tests/msg.c \ +- tests/rendezvous.c \ +- tests/ct.c \ +- tests/fork.c +-tests_libcxi_test_CPPFLAGS = $(AM_CPPFLAGS) $(libcxi_test_CPPFLAGS) +-tests_libcxi_test_LDFLAGS = $(libcxi_test_LDFLAGS) -static +-tests_libcxi_test_LDADD = $(libcxi_test_LIBS) $(lib_LTLIBRARIES) +- +-LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \ +- $(top_srcdir)/tap-driver.sh +- +-endif HAVE_CRITERION +- +-# UML documentation for the retry handler +-UML_FILES = \ +- retry_handler/docs/request-timeout-nack.uml \ +- retry_handler/docs/retry-sct-close.uml \ +- retry_handler/docs/spt-status.uml \ +- retry_handler/docs/tct-timeout.uml +- +-rhdocs: $(patsubst %.uml, %.svg, $(UML_FILES)) +- +-.uml.svg: +-if HAVE_PLANTUML +- $(PLANTUML) -tsvg $< +- dos2unix $@ +-else +- @echo "Note: plantuml needed for $(@)" +-endif +- +-dist_man_MANS = $(utils_MANS) +- +-EXTRA_DIST += $(UML_FILES) $(patsubst %.uml, %.svg, $(UML_FILES)) \ +- retry_handler/README retry_handler/dracut.conf.d/50-cxi-driver.conf \ +- autogen.sh cray-libcxi.spec $(MANPAGE_SRCS) + +-$(PACKAGE)-$(VERSION).tar.gz: dist-gzip ++EXTRA_DIST = src/libcxi.sym README.md libcxi.pc.in + +-rpm: $(PACKAGE)-$(VERSION).tar.gz +- BUILD_METADATA='0' rpmbuild -ta $< ++CLEANFILES = libcxi.pc +diff --git a/configure.ac b/configure.ac +index 5b65683..7c5a04b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -40,8 +40,6 @@ LT_INIT + + PKG_CHECK_MODULES([LIBCONFIG], [libconfig >= 1.5]) + PKG_CHECK_MODULES([LIBUV], [libuv >= 1.18]) +-PKG_CHECK_MODULES([LIBFUSE], [fuse >= 2.9.7]) +-PKG_CHECK_MODULES([LIBYAML], [yaml-0.1 >= 0.1.7]) + PKG_CHECK_MODULES([LIBNL], [libnl-3.0]) + PKG_CHECK_MODULES([LIBNUMA], [numa >= 2.0]) + +@@ -185,9 +183,6 @@ AC_ARG_ENABLE([asan], + AS_IF([test x"$enable_asan" != x"no"], + [CFLAGS="-fsanitize=address $CFLAGS"]) + +-AC_CHECK_HEADER(sensors/sensors.h, [], +-[AC_MSG_ERROR([sensors/sensors.h not found])]) +- + AC_CHECK_PROG([PANDOC],[pandoc],[yes]) + AS_IF([test "x${PANDOC}" = x"yes"], + [AC_MSG_RESULT([Found pandoc: $PANDOC])], From 87c10729b2269c08ceb47ffde6f4c93ea45a46d8 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Fri, 17 Jul 2026 14:36:32 +0200 Subject: [PATCH 35/39] Add libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb --- ...1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb diff --git a/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb new file mode 100644 index 000000000000..a715570854b5 --- /dev/null +++ b/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -0,0 +1,76 @@ +# Author: Aayush Joglekar + +easyblock = 'ConfigureMake' + +name = 'libfabric' +version = '1.22.0' + +homepage = 'https://ofiwg.github.io/libfabric/' +description = """ +Libfabric is a core component of OFI. It is the library that defines and exports +the user-space API of OFI, and is typically the only software that applications +deal with directly. It works in conjunction with provider libraries, which are +often integrated directly into libfabric. + +This build is HPE's shs-libfabric (SHS 12.0.2) and compiles the HPE Slingshot-11 +`cxi` provider, and enables the ROCr/HSA HMEM backend so GPU-resident +(ROCm device) buffers can be sent directly over the fabric. +""" + +toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} +toolchainopts = {'pic': True} + +sources = [ + { + 'filename': '%(name)s-%(version)s-shs-12.0.2.tar.gz', + 'git_config': { + 'url': 'https://github.com/HewlettPackard', + 'repo_name': 'shs-%(name)s', + 'tag': 'release/shs-12.0.2', + 'keep_git_dir': False, + }, + }, +] +checksums = [ + None, # .tgz not reproducible +] + +builddependencies = [ + ('binutils', '2.42'), + ('pkgconf', '2.3.0', '', ('GCCcore', '14.2.0')), + ('Autotools', '20240712', '', ('GCCcore', '14.2.0')), +] +dependencies = [ + ('numactl', '2.0.19', '', ('GCCcore', '14.2.0')), + ('libcxi', '1.0.2', '', ('GCCcore', '14.2.0')), + ('cassini-headers', '1.1.1', '', SYSTEM), + ('cxi-driver-headers', '1.0.0', '', SYSTEM), +] + +preconfigopts = "./autogen.sh && " + +# configure auto-detects providers from the host and +# would otherwise build verbs/efa/psm2 against /usr/lib64 and bake them into +# libfabric.so's NEEDED list (a host pickup, and fatal at runtime on systems where +# host libefa/libpsm2 are ABI-incompatible or absent). Disable every provider +# that links an external library; keep only cxi plus the pure-software core. +configopts = "--disable-verbs --disable-efa --disable-psm2 --disable-psm3 --disable-opx " +configopts += "--disable-usnic --disable-sockets --disable-ucx --disable-xpmem " +configopts += "--enable-cxi=yes " +configopts += "--with-cassini-headers=$EBROOTCASSINIMINHEADERS " +configopts += "--with-cxi-uapi-headers=$EBROOTCXIMINDRIVERMINHEADERS " +configopts += "--with-rocr=$EBROOTROCMMINLLVM " + +buildopts = 'V=1' + +sanity_check_paths = { + 'files': ['bin/fi_info', 'bin/fi_pingpong', 'bin/fi_strerror', 'lib/%(name)s.a', 'lib/%(name)s.so'], + 'dirs': ['include/rdma', 'lib/pkgconfig', 'share'], +} + +sanity_check_commands = [ + 'fi_info', + "fi_info -l | grep -i cxi", +] + +moduleclass = 'lib' From 07374c724633089d02766dd1e6bc323191d5a61d Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Fri, 17 Jul 2026 14:38:20 +0200 Subject: [PATCH 36/39] Add libnl-3.11.0-GCCcore-14.2.0.eb --- .../l/libnl/libnl-3.11.0-GCCcore-14.2.0.eb | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 easybuild/easyconfigs/l/libnl/libnl-3.11.0-GCCcore-14.2.0.eb diff --git a/easybuild/easyconfigs/l/libnl/libnl-3.11.0-GCCcore-14.2.0.eb b/easybuild/easyconfigs/l/libnl/libnl-3.11.0-GCCcore-14.2.0.eb new file mode 100644 index 000000000000..e9d3d73e3d41 --- /dev/null +++ b/easybuild/easyconfigs/l/libnl/libnl-3.11.0-GCCcore-14.2.0.eb @@ -0,0 +1,48 @@ +# Author: Aayush Joglekar + +easyblock = 'ConfigureMake' + +name = 'libnl' +version = '3.11.0' + +homepage = 'https://github.com/thom311/libnl' +description = """libnl is a collection of libraries providing APIs to the +Netlink protocol based Linux kernel interfaces.""" + +toolchain = {'name': 'GCCcore', 'version': '14.2.0'} +toolchainopts = {'pic': True} + +sources = [ + { + 'filename': SOURCE_TAR_GZ, + 'git_config': { + 'url': 'https://github.com/thom311', + 'repo_name': '%(name)s', + 'tag': 'libnl3_11_0', + 'keep_git_dir': False, + }, + }, +] +checksums = [ + None, # .tgz not reproducible +] + +builddependencies = [ + ('binutils', '2.42'), + ('pkgconf', '2.3.0'), + ('Autotools', '20240712'), + ('Bison', '3.8.2'), + ('flex', '2.6.4'), +] + +preconfigopts = "./autogen.sh && " + +# libcxi links libnl as a shared lib; static archives are not needed. +configopts = "--disable-static " + +sanity_check_paths = { + 'files': ['lib/%(name)s-3.so', 'lib/%(name)s-route-3.so'], + 'dirs': ['include/libnl3', 'lib/pkgconfig'], +} + +moduleclass = 'lib' From caa6b18841eaa6837df34197c8821bebab206192 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Fri, 17 Jul 2026 14:45:56 +0200 Subject: [PATCH 37/39] Add versionsuffix -cxi to libfabric --- ... => libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1-cxi.eb} | 1 + 1 file changed, 1 insertion(+) rename easybuild/easyconfigs/l/libfabric/{libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb => libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1-cxi.eb} (99%) diff --git a/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1-cxi.eb similarity index 99% rename from easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb rename to easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1-cxi.eb index a715570854b5..b839b68a36a8 100644 --- a/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1-cxi.eb @@ -4,6 +4,7 @@ easyblock = 'ConfigureMake' name = 'libfabric' version = '1.22.0' +versionsuffix='-cxi' homepage = 'https://ofiwg.github.io/libfabric/' description = """ From bde313566bffa50f6dceb1dd0898aaf9cbd8f680 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Mon, 27 Jul 2026 11:44:12 +0300 Subject: [PATCH 38/39] Reorganise files --- .../OSU-Micro-Benchmarks-7.5-rompi-2025a.eb | 2 +- ...-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 33 +++++++++++-------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb index b56c9834157e..7f95852cad48 100644 --- a/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb +++ b/easybuild/easyconfigs/o/OSU-Micro-Benchmarks/OSU-Micro-Benchmarks-7.5-rompi-2025a.eb @@ -42,7 +42,7 @@ sanity_check_paths = { } sanity_check_commands = [ - "osu_bw --help | grep -i rocm", + "osu_bw --help | grep -qi rocm", ] moduleclass = 'perf' diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb index c2cd81eb56c4..68f1875e4bc9 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -30,34 +30,41 @@ builddependencies = [ ('Autotools', '20240712'), ] +# Disable building Level Zero components of romio if system dependencies are picked up. Sources are not based on +# recent Level Zero interface anyway, so there's a high chance that builds fail. +# See https://github.com/open-mpi/ompi/issues/10235 +preconfigopts = 'sed -i "s/have_ze=yes/have_ze=no/" %(start_dir)s/3rd-party/romio341/mpl/configure && ' + +# Regenerate the Autotools build files because of our patches +preconfigopts += './autogen.pl --force && ' + dependencies = [ ('zlib', '1.3.1'), ('libevent', '2.1.12'), + # Stock libfabric for the UCX build; for a Slingshot/CXI build comment this and uncomment -cxi below ('libfabric', '2.0.0'), + # ('libfabric', '1.22.0', '-cxi'), ('xpmem', '2.7.4'), ('PMIx', '5.0.6'), ('PRRTE', '3.0.8'), ('hwloc-ROCm', '2.11.2'), + ('HIP', '6.4.1'), + # UCX/UCC transports (InfiniBand + intra-node shmem); comment out for a Slingshot/CXI build: ('UCC', '1.3.0'), ('UCC-ROCm', '1.3.0'), ('UCX', '1.18.0'), ('UCX-ROCm', '1.18.0'), - ('HIP', '6.4.1'), ] -# Disable building Level Zero components of romio if system dependencies are picked up. Sources are not based on -# recent Level Zero interface anyway, so there's a high chance that builds fail. -# See https://github.com/open-mpi/ompi/issues/10235 -preconfigopts = 'sed -i "s/have_ze=yes/have_ze=no/" %(start_dir)s/3rd-party/romio341/mpl/configure && ' - -# Regenerate the Autotools build files because of our patches -preconfigopts += './autogen.pl --force && ' +# Use the EasyBuild xpmem dep, not the host Cray XPMEM (avoids a host pickup) +configopts = '--with-cray-xpmem=no ' +# For a Slingshot/CXI build, uncomment to drop UCX and block host UCX/RDMA pickup: +# configopts += '--without-ucx --without-psm2 --without-usnic ' -configopts = '--with-show-load-errors=no ' -configopts += '--with-cray-xpmem=no ' +# modextravars = {'OMPI_MCA_opal_common_ucx_devices': 'any'} -modextravars = { - 'OMPI_MCA_opal_common_ucx_devices': 'any', -} +# `make check` runs by default (UCX build). For a fabric-less / Slingshot-CXI +# build, pass `--disable-mpi-tests` on the eb command line -- the OpenMPI easyblock +# then skips `make check` too (it would otherwise abort with -FI_ENOSYS, no VNI). moduleclass = 'mpi' From 0e73d901f6660de60a41b6215fc0cb6f3c750652 Mon Sep 17 00:00:00 2001 From: Aayush Joglekar Date: Mon, 27 Jul 2026 12:28:45 +0300 Subject: [PATCH 39/39] Replace files and versions with hardcoded names --- .../c/cassini-headers/cassini-headers-1.1.1.eb | 4 ++-- ...oc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 11 +++++++---- .../l/libconfig/libconfig-1.8.1-GCCcore-14.2.0.eb | 6 +++--- .../l/libcxi/libcxi-1.0.2-GCCcore-14.2.0.eb | 10 +++++----- .../l/libcxi/libcxi-1.0.2_build-library-only.patch | 2 +- ...ric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1-cxi.eb | 9 ++++----- .../l/libnl/libnl-3.11.0-GCCcore-14.2.0.eb | 4 ++-- .../OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 4 ---- .../PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 4 ++-- .../PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 4 ++-- ...UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 2 +- ...CX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb | 4 ++-- .../easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb | 2 +- 13 files changed, 32 insertions(+), 34 deletions(-) diff --git a/easybuild/easyconfigs/c/cassini-headers/cassini-headers-1.1.1.eb b/easybuild/easyconfigs/c/cassini-headers/cassini-headers-1.1.1.eb index 4ec85572230e..bff78502697c 100644 --- a/easybuild/easyconfigs/c/cassini-headers/cassini-headers-1.1.1.eb +++ b/easybuild/easyconfigs/c/cassini-headers/cassini-headers-1.1.1.eb @@ -17,7 +17,7 @@ sources = [ 'filename': SOURCE_TAR_GZ, 'git_config': { 'url': 'https://github.com/HewlettPackard', - 'repo_name': 'shs-%(name)s', + 'repo_name': 'shs-cassini-headers', 'tag': 'release/shs-12.0.1', 'keep_git_dir': False, }, @@ -26,7 +26,7 @@ sources = [ sanity_check_paths = { 'files': ['include/cassini_user_defs.h', 'include/cxi_prov_hw.h'], - 'dirs': ['include', 'share/%(name)s'], + 'dirs': ['include', 'share/cassini-headers'], } moduleclass = 'lib' diff --git a/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 483dc8798bb0..dcbede9e28c8 100644 --- a/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/h/hwloc-ROCm/hwloc-ROCm-2.11.2-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -8,12 +8,15 @@ _rocm_version = '6.4.1' homepage = 'https://www.open-mpi.org/projects/hwloc/' -description = 'This provides the ROCm and RSMI plugins for hwloc to discover AMD GPUs.' +description = """This provides the RSMI plugin for hwloc, which discovers AMD GPUs +through the ROCm SMI library. It is built as a plugin on top of an existing hwloc +installation and is loaded at runtime via HWLOC_PLUGINS_PATH; hwloc 2.11 has no +separate ROCm plugin, RSMI is the only AMD GPU backend.""" toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} -source_urls = ['https://www.open-mpi.org/software/hwloc/v%(version_major_minor)s/downloads/'] -sources = ['hwloc-%(version)s.tar.gz'] +source_urls = ['https://www.open-mpi.org/software/hwloc/v2.11/downloads/'] +sources = ['hwloc-2.11.2.tar.gz'] checksums = ['866ac8ef07b350a6a2ba0c6826c37d78e8994dcbcd443bdd2b436350de19d540'] builddependencies = [ @@ -55,7 +58,7 @@ sanity_check_paths = { 'dirs': [], } -# Verify that hwloc can successfully load the new AMD plugins +# Verify that hwloc can successfully load the new AMD plugin sanity_check_commands = [ # rsmi backend registers at runtime "HWLOC_COMPONENTS_VERBOSE=1 lstopo 2>&1 | grep -q 'rsmi'", diff --git a/easybuild/easyconfigs/l/libconfig/libconfig-1.8.1-GCCcore-14.2.0.eb b/easybuild/easyconfigs/l/libconfig/libconfig-1.8.1-GCCcore-14.2.0.eb index 4a25141e4ad3..a202ace71376 100644 --- a/easybuild/easyconfigs/l/libconfig/libconfig-1.8.1-GCCcore-14.2.0.eb +++ b/easybuild/easyconfigs/l/libconfig/libconfig-1.8.1-GCCcore-14.2.0.eb @@ -10,7 +10,7 @@ description = "Libconfig is a simple library for processing structured configura toolchain = {'name': 'GCCcore', 'version': '14.2.0'} -source_urls = ['https://hyperrealm.github.io/%(name)s/dist/'] +source_urls = ['https://hyperrealm.github.io/libconfig/dist/'] sources = [SOURCE_TAR_GZ] checksums = [{'libconfig-1.8.1.tar.gz': 'c73ee3d914ec68c99b61e864832931e9a7112eeabfb449dad217fd83e385cbdf'}] @@ -21,8 +21,8 @@ builddependencies = [ ] sanity_check_paths = { - 'files': ['include/%(name)s.h', 'include/%(name)s.h++', 'lib/%(name)s.a', 'lib/%(name)s++.a', - 'lib/%(name)s.so', 'lib/%(name)s++.so'], + 'files': ['include/libconfig.h', 'include/libconfig.h++', 'lib/libconfig.a', 'lib/libconfig++.a', + 'lib/libconfig.so', 'lib/libconfig++.so'], 'dirs': ['lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2-GCCcore-14.2.0.eb b/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2-GCCcore-14.2.0.eb index 19c4550f7bbe..9b506c68bb12 100644 --- a/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2-GCCcore-14.2.0.eb +++ b/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2-GCCcore-14.2.0.eb @@ -18,16 +18,16 @@ sources = [ 'filename': SOURCE_TAR_GZ, 'git_config': { 'url': 'https://github.com/HewlettPackard', - 'repo_name': 'shs-%(name)s', - 'tag': 'release/shs-12.%(version_minor_patch)s', + 'repo_name': 'shs-libcxi', + 'tag': 'release/shs-12.0.2', 'keep_git_dir': False, }, }, ] -patches = ['%(name)s-%(version_major_minor)s.2_build-library-only.patch'] +patches = ['libcxi-1.0.2_build-library-only.patch'] checksums = [ None, # .tgz not reproducible - {'libcxi-1.0.2_build-library-only.patch': '59bd5ab3933e7d763435f26193bdd77b33417975aaa8ce5c293e1d90d02592a9'}, + {'libcxi-1.0.2_build-library-only.patch': '2c83195383bc95751a63362674e201716b1bb21801b5c80a131f22380e491d4b'}, ] builddependencies = [ @@ -52,7 +52,7 @@ preconfigopts = "./autogen.sh && " configopts = "--disable-static --without-systemd --without-rocm --without-cuda --without-ze " sanity_check_paths = { - 'files': ['lib/%(name)s.so'], + 'files': ['lib/libcxi.so'], 'dirs': ['include', 'lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2_build-library-only.patch b/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2_build-library-only.patch index 14e5f3d2f200..263014eb3e56 100644 --- a/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2_build-library-only.patch +++ b/easybuild/easyconfigs/l/libcxi/libcxi-1.0.2_build-library-only.patch @@ -25,7 +25,7 @@ index 4c47094..4ba0d05 100644 +# on. The utils/ diagnostic tools, the criterion test suite and the +# retry_handler systemd service have been dropped: they pulled fuse / libyaml +# / lm-sensors and compiled GPU sources against system /opt/rocm paths, none -+# of which a hermetic EESSI build may use. See the libcxi easyconfig. ++# of which a self-contained EasyBuild build may use. See the libcxi easyconfig. AM_CPPFLAGS = \ -I$(srcdir)/include \ diff --git a/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1-cxi.eb b/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1-cxi.eb index b839b68a36a8..e8cedba68358 100644 --- a/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1-cxi.eb +++ b/easybuild/easyconfigs/l/libfabric/libfabric-1.22.0-rocm-compilers-19.0.0-ROCm-6.4.1-cxi.eb @@ -4,7 +4,7 @@ easyblock = 'ConfigureMake' name = 'libfabric' version = '1.22.0' -versionsuffix='-cxi' +versionsuffix = '-cxi' homepage = 'https://ofiwg.github.io/libfabric/' description = """ @@ -23,10 +23,10 @@ toolchainopts = {'pic': True} sources = [ { - 'filename': '%(name)s-%(version)s-shs-12.0.2.tar.gz', + 'filename': 'libfabric-1.22.0-shs-12.0.2.tar.gz', 'git_config': { 'url': 'https://github.com/HewlettPackard', - 'repo_name': 'shs-%(name)s', + 'repo_name': 'shs-libfabric', 'tag': 'release/shs-12.0.2', 'keep_git_dir': False, }, @@ -37,7 +37,6 @@ checksums = [ ] builddependencies = [ - ('binutils', '2.42'), ('pkgconf', '2.3.0', '', ('GCCcore', '14.2.0')), ('Autotools', '20240712', '', ('GCCcore', '14.2.0')), ] @@ -65,7 +64,7 @@ configopts += "--with-rocr=$EBROOTROCMMINLLVM " buildopts = 'V=1' sanity_check_paths = { - 'files': ['bin/fi_info', 'bin/fi_pingpong', 'bin/fi_strerror', 'lib/%(name)s.a', 'lib/%(name)s.so'], + 'files': ['bin/fi_info', 'bin/fi_pingpong', 'bin/fi_strerror', 'lib/libfabric.a', 'lib/libfabric.so'], 'dirs': ['include/rdma', 'lib/pkgconfig', 'share'], } diff --git a/easybuild/easyconfigs/l/libnl/libnl-3.11.0-GCCcore-14.2.0.eb b/easybuild/easyconfigs/l/libnl/libnl-3.11.0-GCCcore-14.2.0.eb index e9d3d73e3d41..ade136e406c0 100644 --- a/easybuild/easyconfigs/l/libnl/libnl-3.11.0-GCCcore-14.2.0.eb +++ b/easybuild/easyconfigs/l/libnl/libnl-3.11.0-GCCcore-14.2.0.eb @@ -17,7 +17,7 @@ sources = [ 'filename': SOURCE_TAR_GZ, 'git_config': { 'url': 'https://github.com/thom311', - 'repo_name': '%(name)s', + 'repo_name': 'libnl', 'tag': 'libnl3_11_0', 'keep_git_dir': False, }, @@ -41,7 +41,7 @@ preconfigopts = "./autogen.sh && " configopts = "--disable-static " sanity_check_paths = { - 'files': ['lib/%(name)s-3.so', 'lib/%(name)s-route-3.so'], + 'files': ['lib/libnl-3.so', 'lib/libnl-route-3.so'], 'dirs': ['include/libnl3', 'lib/pkgconfig'], } diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 68f1875e4bc9..94a3d5db1404 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-5.0.7-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -63,8 +63,4 @@ configopts = '--with-cray-xpmem=no ' # modextravars = {'OMPI_MCA_opal_common_ucx_devices': 'any'} -# `make check` runs by default (UCX build). For a fabric-less / Slingshot-CXI -# build, pass `--disable-mpi-tests` on the eb command line -- the OpenMPI easyblock -# then skips `make check` too (it would otherwise abort with -FI_ENOSYS, no VNI). - moduleclass = 'mpi' diff --git a/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb index 9b60498959cc..9dc3ffb719cc 100644 --- a/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/p/PMIx/PMIx-5.0.6-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -15,8 +15,8 @@ PMI-server.""" toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} toolchainopts = {'pic': True} -source_urls = ['https://github.com/openpmix/openpmix/releases/download/v%(version)s'] -sources = ['%(namelower)s-%(version)s.tar.bz2'] +source_urls = ['https://github.com/openpmix/openpmix/releases/download/v5.0.6'] +sources = ['pmix-5.0.6.tar.bz2'] checksums = ['ea51baa0fdee688d54bc9f2c11937671381f00de966233eec6fd88807fb46f83'] builddependencies = [ diff --git a/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb index f10c33658985..faae7153b693 100644 --- a/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/p/PRRTE/PRRTE-3.0.8-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -11,8 +11,8 @@ description = """PRRTE is the PMIx Reference RunTime Environment""" toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} toolchainopts = {'pic': True} -source_urls = ['https://github.com/openpmix/prrte/releases/download/v%(version)s'] -sources = ['%(namelower)s-%(version)s.tar.bz2'] +source_urls = ['https://github.com/openpmix/prrte/releases/download/v3.0.8'] +sources = ['prrte-3.0.8.tar.bz2'] checksums = ['e798192fa0ab38172818a109a6c89bcc37e4b1123ca150d8c115dee5231750de'] dependencies = [ diff --git a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index ef3ac96a54ae..ea9a04ae6940 100644 --- a/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCC-ROCm/UCC-ROCm-1.3.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -15,7 +15,7 @@ toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} toolchainopts = {'pic': True} source_urls = ['https://github.com/openucx/ucc/archive/refs/tags'] -sources = ['v%(version)s.tar.gz'] +sources = ['v1.3.0.tar.gz'] patches = [ 'UCC-ROCm-1.3.0_use_rocm_easybuild_paths.patch', 'UCC-ROCm-1.3.0_link_against_existing_UCC_libs.patch', diff --git a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb index a0d3bcd8989a..2fe6608b8a10 100644 --- a/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb +++ b/easybuild/easyconfigs/u/UCX-ROCm/UCX-ROCm-1.18.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb @@ -15,8 +15,8 @@ support to enable ROCm memory domains and transports. toolchain = {'name': 'rocm-compilers', 'version': '19.0.0-ROCm-6.4.1'} toolchainopts = {'pic': True} -source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s'] -sources = [{'filename': 'ucx-%(version)s.tar.gz', 'alt_location': 'UCX'}] +source_urls = ['https://github.com/openucx/ucx/releases/download/v1.18.0'] +sources = [{'filename': 'ucx-1.18.0.tar.gz', 'alt_location': 'UCX'}] patches = [ 'UCX-ROCm-1.18.0_use_rocm_easybuild_paths.patch', 'UCX-ROCm-1.18.0_link_against_existing_UCX_libs.patch', diff --git a/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb index dd18cd537bf6..ba1d9ffdf21d 100644 --- a/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb +++ b/easybuild/easyconfigs/x/xpmem/xpmem-2.7.4-GCCcore-14.2.0.eb @@ -18,7 +18,7 @@ toolchain = {'name': 'GCCcore', 'version': '14.2.0'} toolchainopts = {'pic': True} source_urls = ['https://github.com/openucx/xpmem/archive/'] -sources = ['v%(version)s.tar.gz'] +sources = ['v2.7.4.tar.gz'] checksums = ['738c70041ce09dcc66b64d80aebc1479e779efe12a9c02217fba610e2ae61f18'] builddependencies = [