Skip to content

Added hook to restore filtered deps for LLVM builds #1093

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 6, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions eb_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from easybuild.tools.systemtools import AARCH64, POWER, X86_64, get_cpu_architecture, get_cpu_features
from easybuild.tools.toolchain.compiler import OPTARCH_GENERIC
from easybuild.tools.version import VERSION as EASYBUILD_VERSION
from easybuild.tools.modules import get_software_root_env_var_name

# prefer importing LooseVersion from easybuild.tools, but fall back to distuils in case EasyBuild <= 4.7.0 is used
try:
Expand Down Expand Up @@ -654,6 +655,27 @@ def pre_configure_hook_gromacs(self, *args, **kwargs):
raise EasyBuildError("GROMACS-specific hook triggered for non-GROMACS easyconfig?!")


def pre_configure_hook_llvm(self, *args, **kwargs):
"""Adjust internal configure options for the LLVM EasyBlock to reinstate filtered out dependencies.
In the LLVM EasyBlock, most checks concerning loaded modules are performed at the configure_step.
The EB uses a global `general_opts` dict to keep track of options that needs to be reused across stages.
The way the EB is structured does allow to inject a CMAKE option through `self._cfgopts` which is a splitted list
of the `configure_opts` passed through the EC, but does not allow to override as the `general_opts` dict will
take precedence over the `self._cfgopts` list.

We can instead set the environment variable that EasyBuild uses for `get_software_root` to trick the EB into
into pointing to the compat layer.
"""
if self.name in ['LLVM', 'ROCm-LLVM']:
eprefix = get_eessi_envvar('EPREFIX')

for software in ('zlib', 'ncurses'):
var_name = get_software_root_env_var_name(software)
env.setvar(var_name, os.path.join(eprefix, 'usr'))
else:
raise EasyBuildError("LLVM-specific hook triggered for non-LLVM easyconfig?!")


def pre_configure_hook_openblas_optarch_generic(self, *args, **kwargs):
"""
Pre-configure hook for OpenBLAS: add DYNAMIC_ARCH=1 to build/test/install options when using --optarch=GENERIC
Expand Down Expand Up @@ -1227,6 +1249,8 @@ def post_module_hook(self, *args, **kwargs):
'Extrae': pre_configure_hook_extrae,
'GROMACS': pre_configure_hook_gromacs,
'libfabric': pre_configure_hook_libfabric_disable_psm3_x86_64_generic,
'LLVM': pre_configure_hook_llvm,
'ROCm-LLVM': pre_configure_hook_llvm,
'MetaBAT': pre_configure_hook_metabat_filtered_zlib_dep,
'OpenBLAS': pre_configure_hook_openblas_optarch_generic,
'WRF': pre_configure_hook_wrf_aarch64,
Expand Down