From 78d6a8838463f41ec59fc5ec2db77c440bcde4eb Mon Sep 17 00:00:00 2001 From: laraPPr Date: Tue, 24 Mar 2026 12:37:57 +0100 Subject: [PATCH 01/13] Add LAMMPS hook to ignore failing ctest on ARM generic --- eb_hooks.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 5cb26a4f..000286c2 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1575,6 +1575,20 @@ def pre_test_hook_ignore_failing_tests_OpenBabel_a64fx(self, *args, **kwargs): self.cfg['testopts'] = "|| echo ignoring failing tests" +def pre_test_hook_ignore_failing_tests_LAMMPS_ARM_generic(self, *args, **kwargs): + """ + Pre-test hook for LAMMPS: skip failing ctest for selected LAMMPS version on ARM generic. + + See: https://github.com/lammps/lammps/issues/4926 + """ + if ec.name == 'LAMMPS' and ec.version in ('22Jul2025',): + if os.getenv('EESSI_CPU_FAMILY') == 'aarch64': + mcpu_generic = '-DKokkos_ARCH_ARMV80=yes' + cflags = os.getenv('CFLAGS') + if mcpu_generic in cflags: + self.cfg['testopts'] = "|| echo ignoring failing tests" + + def pre_single_extension_hook(ext, *args, **kwargs): """Main pre-extension: trigger custom functions based on software name.""" if ext.name in PRE_SINGLE_EXTENSION_HOOKS: @@ -1986,6 +2000,7 @@ def post_easyblock_hook(self, *args, **kwargs): 'netCDF': pre_test_hook_ignore_failing_tests_netCDF, 'OpenBabel': pre_test_hook_ignore_failing_tests_OpenBabel_a64fx, 'PyTorch': pre_test_hook_increase_max_failed_tests_arm_PyTorch, + 'LAMMPS': pre_test_hook_ignore_failing_tests_LAMMPS_ARM_generic, } PRE_SINGLE_EXTENSION_HOOKS = { From 6041094ec57b27c25fa5cc94f71187c724bfa266 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Tue, 24 Mar 2026 12:44:52 +0100 Subject: [PATCH 02/13] add easystack for testing --- .../2025.06/eessi-2025.06-eb-5.2.1-2024a.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml diff --git a/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml b/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml new file mode 100644 index 00000000..4d898043 --- /dev/null +++ b/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml @@ -0,0 +1,10 @@ +easyconfigs: + - kim-api-2.4.1-GCC-13.3.0.eb: + options: + # See https://github.com/easybuilders/easybuild-easyconfigs/pull/25133 + from-commit: c484c12aaad5da0e27cd9269d59b4ecaa89927ab + - LAMMPS-22Jul2025-foss-2024a-kokkos.eb: + options: + # See https://github.com/easybuilders/easybuild-easyconfigs/pull/25133 + # and https://github.com/easybuilders/easybuild-easyconfigs/pull/25593 + from-commit: e2dedae93022d7e3f10bf2983ca8a03b03b0dca0 From 1f7dce29f24883ad9032dbbb93594aa438fda4cd Mon Sep 17 00:00:00 2001 From: laraPPr Date: Tue, 24 Mar 2026 13:03:17 +0100 Subject: [PATCH 03/13] fix indentation --- eb_hooks.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 000286c2..be37b887 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1584,9 +1584,9 @@ def pre_test_hook_ignore_failing_tests_LAMMPS_ARM_generic(self, *args, **kwargs) if ec.name == 'LAMMPS' and ec.version in ('22Jul2025',): if os.getenv('EESSI_CPU_FAMILY') == 'aarch64': mcpu_generic = '-DKokkos_ARCH_ARMV80=yes' - cflags = os.getenv('CFLAGS') - if mcpu_generic in cflags: - self.cfg['testopts'] = "|| echo ignoring failing tests" + cflags = os.getenv('CFLAGS') + if mcpu_generic in cflags: + self.cfg['testopts'] = "|| echo ignoring failing tests" def pre_single_extension_hook(ext, *args, **kwargs): From db5b8548ddbda236ddf2516e8fbed2d62fcfc6f7 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Tue, 24 Mar 2026 14:05:27 +0100 Subject: [PATCH 04/13] fix hook --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index be37b887..074543bb 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1581,7 +1581,7 @@ def pre_test_hook_ignore_failing_tests_LAMMPS_ARM_generic(self, *args, **kwargs) See: https://github.com/lammps/lammps/issues/4926 """ - if ec.name == 'LAMMPS' and ec.version in ('22Jul2025',): + if self.name == 'LAMMPS' and self.version in ('22Jul2025',): if os.getenv('EESSI_CPU_FAMILY') == 'aarch64': mcpu_generic = '-DKokkos_ARCH_ARMV80=yes' cflags = os.getenv('CFLAGS') From c595f7ca867e0442e1deb8c1d0e792eca8f234ee Mon Sep 17 00:00:00 2001 From: laraPPr Date: Thu, 26 Mar 2026 12:53:31 +0100 Subject: [PATCH 05/13] fix hook --- eb_hooks.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 074543bb..fa3c8d59 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1586,7 +1586,16 @@ def pre_test_hook_ignore_failing_tests_LAMMPS_ARM_generic(self, *args, **kwargs) mcpu_generic = '-DKokkos_ARCH_ARMV80=yes' cflags = os.getenv('CFLAGS') if mcpu_generic in cflags: - self.cfg['testopts'] = "|| echo ignoring failing tests" + self.orig_ignore_test_failure = build_option('ignore_test_failure') + update_build_option('ignore_test_failure', True) + + +def post_test_hook(self, *args, **kwargs): + """ + If self.orig_ignore_test_failure exists reset ignore_test_failure to its original value. + """ + if hasattr(self, "orig_ignore_test_failure") and self.orig_ignore_test_failure != build_option('ignore_test_failure'): + update_build_option('ignore_test_failure', self.orig_ignore_test_failure) def pre_single_extension_hook(ext, *args, **kwargs): From e80b8973e9907e4db6039317510bd71b573f0047 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Thu, 26 Mar 2026 13:02:19 +0100 Subject: [PATCH 06/13] apply @boegel suggestion --- eb_hooks.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index fa3c8d59..5857cd05 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1582,12 +1582,10 @@ def pre_test_hook_ignore_failing_tests_LAMMPS_ARM_generic(self, *args, **kwargs) See: https://github.com/lammps/lammps/issues/4926 """ if self.name == 'LAMMPS' and self.version in ('22Jul2025',): - if os.getenv('EESSI_CPU_FAMILY') == 'aarch64': - mcpu_generic = '-DKokkos_ARCH_ARMV80=yes' - cflags = os.getenv('CFLAGS') - if mcpu_generic in cflags: - self.orig_ignore_test_failure = build_option('ignore_test_failure') - update_build_option('ignore_test_failure', True) + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if cpu_target == CPU_TARGET_AARCH64_GENERIC: + self.orig_ignore_test_failure = build_option('ignore_test_failure') + update_build_option('ignore_test_failure', True) def post_test_hook(self, *args, **kwargs): From a45ad67169a85e0da5444d37c9650d64d8a71ddf Mon Sep 17 00:00:00 2001 From: laraPPr Date: Thu, 26 Mar 2026 14:48:14 +0100 Subject: [PATCH 07/13] adding some debug messages to see if hook is properly picked up --- eb_hooks.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 5857cd05..a14c5350 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1581,11 +1581,15 @@ def pre_test_hook_ignore_failing_tests_LAMMPS_ARM_generic(self, *args, **kwargs) See: https://github.com/lammps/lammps/issues/4926 """ - if self.name == 'LAMMPS' and self.version in ('22Jul2025',): + print('build option before pre_test_hooki: ', build_option('ignore_test_failure')) + if self.name == 'LAMMPS' and self.version in ('22Jul2025'): cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + print('Debug: ', cpu_target) if cpu_target == CPU_TARGET_AARCH64_GENERIC: + print('I will reset ignore_test_failure') self.orig_ignore_test_failure = build_option('ignore_test_failure') update_build_option('ignore_test_failure', True) + print(build_option('ignore_test_failure')) def post_test_hook(self, *args, **kwargs): From 87596c86e72f6bbe0b63c5d97b6f7691ef84cb68 Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Thu, 26 Mar 2026 16:30:05 +0100 Subject: [PATCH 08/13] try if passing it in the easystack does work --- .../software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml b/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml index 4d898043..68f38484 100644 --- a/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml +++ b/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml @@ -8,3 +8,4 @@ easyconfigs: # See https://github.com/easybuilders/easybuild-easyconfigs/pull/25133 # and https://github.com/easybuilders/easybuild-easyconfigs/pull/25593 from-commit: e2dedae93022d7e3f10bf2983ca8a03b03b0dca0 + ignore-test-failure: True From 8bd8c417aa3b7d7c7c6ed9dd0c15b4acbfb91c6a Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Fri, 27 Mar 2026 09:35:31 +0100 Subject: [PATCH 09/13] Apply suggestions from code review Co-authored-by: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> --- .../software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml b/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml index 68f38484..4d898043 100644 --- a/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml +++ b/easystacks/software.eessi.io/2025.06/eessi-2025.06-eb-5.2.1-2024a.yml @@ -8,4 +8,3 @@ easyconfigs: # See https://github.com/easybuilders/easybuild-easyconfigs/pull/25133 # and https://github.com/easybuilders/easybuild-easyconfigs/pull/25593 from-commit: e2dedae93022d7e3f10bf2983ca8a03b03b0dca0 - ignore-test-failure: True From a76c78d6c2df754ba0f91fc6f04bf048c9199c68 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 27 Mar 2026 09:49:09 +0100 Subject: [PATCH 10/13] move the reset of the ignore_test_failure to post_easyblock_hook --- eb_hooks.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 5857cd05..90d61a7b 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1588,14 +1588,6 @@ def pre_test_hook_ignore_failing_tests_LAMMPS_ARM_generic(self, *args, **kwargs) update_build_option('ignore_test_failure', True) -def post_test_hook(self, *args, **kwargs): - """ - If self.orig_ignore_test_failure exists reset ignore_test_failure to its original value. - """ - if hasattr(self, "orig_ignore_test_failure") and self.orig_ignore_test_failure != build_option('ignore_test_failure'): - update_build_option('ignore_test_failure', self.orig_ignore_test_failure) - - def pre_single_extension_hook(ext, *args, **kwargs): """Main pre-extension: trigger custom functions based on software name.""" if ext.name in PRE_SINGLE_EXTENSION_HOOKS: @@ -1943,6 +1935,10 @@ def post_easyblock_hook(self, *args, **kwargs): post_easyblock_hook_copy_easybuild_subdir(self, *args, **kwargs) else: self.log.debug("No CVMFS/site installation requested, not running post_easyblock_hook_copy_easybuild_subdir.") + + # If self.orig_ignore_test_failure is set return it to its original value. + if hasattr(self, "orig_ignore_test_failure") and self.orig_ignore_test_failure != build_option('ignore_test_failure'): + update_build_option('ignore_test_failure', self.orig_ignore_test_failure) else: print_warning(f"Not enabling the post_easybuild_hook, as it requires EasyBuild 5.1.1 or newer (you are using {EASYBUILD_VERSION}).") From ac865edbb509f20bd466744bfc8d68c25e2bd46a Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 27 Mar 2026 15:24:05 +0100 Subject: [PATCH 11/13] use pre_run_shell_cmd_hook instead of ignore_test_failure --- eb_hooks.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 5cb26a4f..187f00fe 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1926,6 +1926,15 @@ def post_easyblock_hook(self, *args, **kwargs): print_warning(f"Not enabling the post_easybuild_hook, as it requires EasyBuild 5.1.1 or newer (you are using {EASYBUILD_VERSION}).") +def pre_run_shell_cmd_hook(cmd, work_dir=None, **kwargs): + """Main pre_shell_cmd_hook: trigger custom funtions based on software name.""" + # Ignore failing ctest for LAMMPS/22Jul2025 on aarch64/generic + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if cpu_target == CPU_TARGET_AARCH64_GENERIC: + if bool(re.search('LAMMPS', work_dir)) and bool(re.search('22Jul2025', work_dir)): + if isinstance(cmd, str) and cmd.startswith('ctest') and '-LE unstable' in cmd: + cmd = cmd + ' || true' + PARSE_HOOKS = { 'casacore': parse_hook_casacore_disable_vectorize, 'CGAL': parse_hook_cgal_toolchainopts_precise, From 7b211de6e02a131f8a4598bb4ac6dc4a872418e5 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 27 Mar 2026 15:42:05 +0100 Subject: [PATCH 12/13] use pre_run_shell_cmd_hook instead of ignore_test_failure --- eb_hooks.py | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 90d61a7b..237559fc 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1575,19 +1575,6 @@ def pre_test_hook_ignore_failing_tests_OpenBabel_a64fx(self, *args, **kwargs): self.cfg['testopts'] = "|| echo ignoring failing tests" -def pre_test_hook_ignore_failing_tests_LAMMPS_ARM_generic(self, *args, **kwargs): - """ - Pre-test hook for LAMMPS: skip failing ctest for selected LAMMPS version on ARM generic. - - See: https://github.com/lammps/lammps/issues/4926 - """ - if self.name == 'LAMMPS' and self.version in ('22Jul2025',): - cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if cpu_target == CPU_TARGET_AARCH64_GENERIC: - self.orig_ignore_test_failure = build_option('ignore_test_failure') - update_build_option('ignore_test_failure', True) - - def pre_single_extension_hook(ext, *args, **kwargs): """Main pre-extension: trigger custom functions based on software name.""" if ext.name in PRE_SINGLE_EXTENSION_HOOKS: @@ -1935,14 +1922,21 @@ def post_easyblock_hook(self, *args, **kwargs): post_easyblock_hook_copy_easybuild_subdir(self, *args, **kwargs) else: self.log.debug("No CVMFS/site installation requested, not running post_easyblock_hook_copy_easybuild_subdir.") - - # If self.orig_ignore_test_failure is set return it to its original value. - if hasattr(self, "orig_ignore_test_failure") and self.orig_ignore_test_failure != build_option('ignore_test_failure'): - update_build_option('ignore_test_failure', self.orig_ignore_test_failure) else: print_warning(f"Not enabling the post_easybuild_hook, as it requires EasyBuild 5.1.1 or newer (you are using {EASYBUILD_VERSION}).") +def pre_run_shell_cmd_hook(cmd, work_dir=None, **kwargs): + """Main pre_shell_cmd_hook: trigger custom funtions based on software name.""" + + # Ignore failing ctest for LAMMPS/22Jul2025 on aarch64/generic + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if cpu_target == CPU_TARGET_AARCH64_GENERIC: + if bool(re.search('LAMMPS', work_dir)) and bool(re.search('22Jul2025', work_dir)): + if isinstance(cmd, str) and cmd.startswith('ctest') and '-LE unstable' in cmd: + cmd = cmd + ' || true' + + PARSE_HOOKS = { 'casacore': parse_hook_casacore_disable_vectorize, 'CGAL': parse_hook_cgal_toolchainopts_precise, @@ -2003,7 +1997,6 @@ def post_easyblock_hook(self, *args, **kwargs): 'netCDF': pre_test_hook_ignore_failing_tests_netCDF, 'OpenBabel': pre_test_hook_ignore_failing_tests_OpenBabel_a64fx, 'PyTorch': pre_test_hook_increase_max_failed_tests_arm_PyTorch, - 'LAMMPS': pre_test_hook_ignore_failing_tests_LAMMPS_ARM_generic, } PRE_SINGLE_EXTENSION_HOOKS = { From 2ff19297675461e6e94d342a0fa5ce1cde2284cf Mon Sep 17 00:00:00 2001 From: laraPPr Date: Mon, 30 Mar 2026 10:30:14 +0200 Subject: [PATCH 13/13] add missing return --- eb_hooks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/eb_hooks.py b/eb_hooks.py index 237559fc..d2b8228c 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1935,6 +1935,7 @@ def pre_run_shell_cmd_hook(cmd, work_dir=None, **kwargs): if bool(re.search('LAMMPS', work_dir)) and bool(re.search('22Jul2025', work_dir)): if isinstance(cmd, str) and cmd.startswith('ctest') and '-LE unstable' in cmd: cmd = cmd + ' || true' + return cmd PARSE_HOOKS = {