Skip to content
Merged
Show file tree
Hide file tree
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
2 changes: 2 additions & 0 deletions configs/sites/tier1/hercules/packages_oneapi-2025.3.1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ packages:
environment:
prepend_path:
LD_LIBRARY_PATH: '/usr/lib:/usr/lib64'
# EPIC-installed oneAPI compiler module
MODULEPATH: '/apps/contrib/spack-stack/modulefiles'
intel-oneapi-mkl:
buildable: false
externals:
Expand Down
2 changes: 2 additions & 0 deletions configs/sites/tier1/orion/packages_oneapi-2025.3.1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ packages:
environment:
prepend_path:
LD_LIBRARY_PATH: '/usr/lib:/usr/lib64'
# EPIC-installed oneAPI compiler module
MODULEPATH: '/apps/contrib/spack-stack/modulefiles'
intel-oneapi-mkl:
buildable: false
externals:
Expand Down
10 changes: 8 additions & 2 deletions spack-ext/lib/spack-stack/stack/meta_modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -424,20 +424,25 @@ def setup_meta_modules():
compiler_subs["COMPFLAGS"] = compiler_subs["COMPFLAGS"].rstrip("\n")
logging.debug(" ... ... COMPFLAGS: {}".format(compiler_subs["COMPFLAGS"]))

# Environment variables
# MODULEPATH must be set before the module loads, https://github.com/JCSDA/spack-stack/issues/2144
compiler_modulepaths = ""
if "environment" in compiler.extra_attributes.keys():
for action in compiler.extra_attributes["environment"].keys():
for env_name in compiler.extra_attributes["environment"][action]:
if action == "unset":
env_values = None
else:
env_values = compiler.extra_attributes["environment"][action][env_name]
compiler_subs["ENVVARS"] += envmod_command(
command = envmod_command(
module_choice,
action,
env_name,
env_values
)
if env_name == "MODULEPATH":
compiler_modulepaths += command
else:
compiler_subs["ENVVARS"] += command
# https://github.com/JCSDA/spack-stack/issues/1903
# Attempt to locate directory "compiler" in the same directory where
# "icx" resides. If found, add it to PATH in the compiler module
Expand All @@ -455,6 +460,7 @@ def setup_meta_modules():
# Spack compiler module hierarchy - append all saved modulepaths
for modulepath in MODULEPATHS_SAVE:
compiler_subs["MODULEPATHS"] += modulepath_prepend_command(module_choice, modulepath)
compiler_subs["MODULEPATHS"] += compiler_modulepaths
compiler_subs["MODULEPATHS"] = compiler_subs["MODULEPATHS"].rstrip("\n")
logging.debug(" ... ... MODULEPATHS : {}".format(compiler_subs["MODULEPATHS"]))

Expand Down
11 changes: 11 additions & 0 deletions spack-ext/lib/spack-stack/tests/test_setup_meta_modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ def test_setup_meta_modules():
environment:
unset:
- DUMMYVAR
prepend_path:
MODULEPATH: /opt/test-compiler-modulefiles
mpi:
buildable: false
openmpi:
Expand Down Expand Up @@ -89,6 +91,15 @@ def test_setup_meta_modules():
f"Expected module {expected_comp_meta_module} not found"
)

# The compiler's MODULEPATH must be set before the module loads that need it
with open(expected_comp_meta_module) as f:
comp_meta_module = f.read()
modulepath_line = "prepend-path {MODULEPATH} {/opt/test-compiler-modulefiles}"
load_line = "module load gcc/11.5.0"
assert modulepath_line in comp_meta_module
assert load_line in comp_meta_module
assert comp_meta_module.index(modulepath_line) < comp_meta_module.index(load_line)

expected_mpi_meta_module = os.path.join(module_dir, "gcc", "11.5.0", "stack-openmpi", "5.0.8")
assert(
os.path.exists(expected_mpi_meta_module),
Expand Down
Loading