Fix module loads (#5599)
Fixes #5455 All methods within setup_package use an EnvironmentModifications object to control the environment. Those modifications are applied at the end of setup_package. Module loads for the build environment need to be done after the rest of the environment modifications are applied, as otherwise Spack may unset variables set by those modules (for example LD_LIBRARY_PATH).
This commit is contained in:
parent
3556eaae7e
commit
328ab328be
1 changed files with 16 additions and 10 deletions
|
@ -167,12 +167,6 @@ def set_compiler_environment_variables(pkg, env):
|
||||||
|
|
||||||
env.set('SPACK_COMPILER_SPEC', str(pkg.spec.compiler))
|
env.set('SPACK_COMPILER_SPEC', str(pkg.spec.compiler))
|
||||||
|
|
||||||
for mod in compiler.modules:
|
|
||||||
# Fixes issue https://github.com/LLNL/spack/issues/3153
|
|
||||||
if os.environ.get("CRAY_CPU_TARGET") == "mic-knl":
|
|
||||||
load_module("cce")
|
|
||||||
load_module(mod)
|
|
||||||
|
|
||||||
compiler.setup_custom_environment(pkg, env)
|
compiler.setup_custom_environment(pkg, env)
|
||||||
|
|
||||||
return env
|
return env
|
||||||
|
@ -312,9 +306,6 @@ def set_build_environment_variables(pkg, env, dirty):
|
||||||
if os.path.isdir(pcdir):
|
if os.path.isdir(pcdir):
|
||||||
env.prepend_path('PKG_CONFIG_PATH', pcdir)
|
env.prepend_path('PKG_CONFIG_PATH', pcdir)
|
||||||
|
|
||||||
if pkg.architecture.target.module_name:
|
|
||||||
load_module(pkg.architecture.target.module_name)
|
|
||||||
|
|
||||||
return env
|
return env
|
||||||
|
|
||||||
|
|
||||||
|
@ -484,7 +475,7 @@ def setup_package(pkg, dirty):
|
||||||
set_compiler_environment_variables(pkg, spack_env)
|
set_compiler_environment_variables(pkg, spack_env)
|
||||||
set_build_environment_variables(pkg, spack_env, dirty)
|
set_build_environment_variables(pkg, spack_env, dirty)
|
||||||
pkg.architecture.platform.setup_platform_environment(pkg, spack_env)
|
pkg.architecture.platform.setup_platform_environment(pkg, spack_env)
|
||||||
load_external_modules(pkg)
|
|
||||||
# traverse in postorder so package can use vars from its dependencies
|
# traverse in postorder so package can use vars from its dependencies
|
||||||
spec = pkg.spec
|
spec = pkg.spec
|
||||||
for dspec in pkg.spec.traverse(order='post', root=False, deptype='build'):
|
for dspec in pkg.spec.traverse(order='post', root=False, deptype='build'):
|
||||||
|
@ -511,6 +502,21 @@ def setup_package(pkg, dirty):
|
||||||
validate(spack_env, tty.warn)
|
validate(spack_env, tty.warn)
|
||||||
spack_env.apply_modifications()
|
spack_env.apply_modifications()
|
||||||
|
|
||||||
|
# All module loads that otherwise would belong in previous functions
|
||||||
|
# have to occur after the spack_env object has its modifications applied.
|
||||||
|
# Otherwise the environment modifications could undo module changes, such
|
||||||
|
# as unsetting LD_LIBRARY_PATH after a module changes it.
|
||||||
|
for mod in pkg.compiler.modules:
|
||||||
|
# Fixes issue https://github.com/LLNL/spack/issues/3153
|
||||||
|
if os.environ.get("CRAY_CPU_TARGET") == "mic-knl":
|
||||||
|
load_module("cce")
|
||||||
|
load_module(mod)
|
||||||
|
|
||||||
|
if pkg.architecture.target.module_name:
|
||||||
|
load_module(pkg.architecture.target.module_name)
|
||||||
|
|
||||||
|
load_external_modules(pkg)
|
||||||
|
|
||||||
|
|
||||||
def fork(pkg, function, dirty):
|
def fork(pkg, function, dirty):
|
||||||
"""Fork a child process to do part of a spack build.
|
"""Fork a child process to do part of a spack build.
|
||||||
|
|
Loading…
Reference in a new issue