From 78d6a8838463f41ec59fc5ec2db77c440bcde4eb Mon Sep 17 00:00:00 2001 From: laraPPr Date: Tue, 24 Mar 2026 12:37:57 +0100 Subject: [PATCH 01/10] 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 1f7dce29f24883ad9032dbbb93594aa438fda4cd Mon Sep 17 00:00:00 2001 From: laraPPr Date: Tue, 24 Mar 2026 13:03:17 +0100 Subject: [PATCH 02/10] 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 03/10] 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 04/10] 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 05/10] 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 a76c78d6c2df754ba0f91fc6f04bf048c9199c68 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 27 Mar 2026 09:49:09 +0100 Subject: [PATCH 06/10] 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 7b211de6e02a131f8a4598bb4ac6dc4a872418e5 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 27 Mar 2026 15:42:05 +0100 Subject: [PATCH 07/10] 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 08/10] 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 = { From 1688ef668328ffe799f927203b38fd2ca6a68836 Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Mon, 30 Mar 2026 15:30:23 +0200 Subject: [PATCH 09/10] apply suggestion Co-authored-by: Kenneth Hoste --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index d2b8228c..feee53e7 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1934,7 +1934,7 @@ def pre_run_shell_cmd_hook(cmd, work_dir=None, **kwargs): 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' + cmd = cmd + f' || echo "Ignoring failing tests when installing for {cpu_target}' return cmd From 25941bbcde75976eb5cadce2ab7bd1f52c6124d9 Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Mon, 30 Mar 2026 15:35:03 +0200 Subject: [PATCH 10/10] fix missing hook Co-authored-by: Kenneth Hoste --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index feee53e7..50d37a91 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -1934,7 +1934,7 @@ def pre_run_shell_cmd_hook(cmd, work_dir=None, **kwargs): 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 + f' || echo "Ignoring failing tests when installing for {cpu_target}' + cmd = cmd + f' || echo "Ignoring failing tests when installing for {cpu_target}"' return cmd