Skip to content
Snippets Groups Projects
Commit 3d77ecd9 authored by Massimiliano Culpo's avatar Massimiliano Culpo Committed by Todd Gamblin
Browse files

Bootstrap environment modules optimizing for generic architectures (#13105)

fixes #13073

Since #3206 was merged bootstrapping environment-modules was using the architecture of the current host or the best match supported by the default compiler. The former case is an issue since shell integration was looking for a spec targeted at the host microarchitecture.

1. Bootstrap an env modules targeted at generic architectures
2. Look for generic targets in shell integration scripts
3. Add a new entry in Travis to test shell integration
parent 498f448e
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,11 @@ jobs:
os: linux
language: python
env: TEST_SUITE=flake8
# Shell integration with module files
- python: '3.7'
os: linux
language: python
env: [ TEST_SUITE=bootstrap ]
- stage: 'unit tests + documentation'
python: '2.6'
dist: trusty
......
......@@ -3,6 +3,7 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import llnl.util.cpu
import llnl.util.tty as tty
import spack.repo
......@@ -56,7 +57,12 @@ def bootstrap(parser, args, **kwargs):
# Define requirement dictionary defining general specs which need
# to be satisfied, and the specs to install when the general spec
# isn't satisfied.
requirement_dict = {'environment-modules': 'environment-modules~X'}
requirement_dict = {
# Install environment-modules with generic optimizations
'environment-modules': 'environment-modules~X target={0}'.format(
llnl.util.cpu.host().family
)
}
for requirement in requirement_dict:
installed_specs = spack.store.db.query(requirement)
......
......@@ -20,6 +20,7 @@
import warnings
from six import StringIO
import llnl.util.cpu
import llnl.util.tty as tty
import llnl.util.tty.color as color
from llnl.util.tty.log import log_output
......@@ -621,8 +622,9 @@ def shell_set(var, value):
# print environment module system if available. This can be expensive
# on clusters, so skip it if not needed.
if 'modules' in info:
specs = spack.store.db.query(
'environment-modules arch=%s' % spack.architecture.sys_type())
generic_arch = llnl.util.cpu.host().family
module_spec = 'environment-modules target={0}'.format(generic_arch)
specs = spack.store.db.query(module_spec)
if specs:
shell_set('_sp_module_prefix', specs[-1].prefix)
else:
......
#!/bin/bash -e
#
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
#
# Description:
# Checks that Spack shell integration with modules works correctly.
#
# Usage:
# run-bootstrap-tests
#
. "$(dirname $0)/setup.sh"
check_dependencies ${coverage} git hg svn
# Fetch the sources in a mirror, and add it to Spack
mkdir -p ~/.mirror
bin/spack mirror add travis ~/.mirror
bin/spack mirror create -D -d ~/.mirror environment-modules~X
# Move to root directory of Spack
# Allows script to be run from anywhere
cd "$SPACK_ROOT"
# Print compiler information
spack config get compilers
# Run some build smoke tests, potentially with code coverage
${coverage_run} bin/spack bootstrap
# Check module integration
. "share/spack/setup-env.sh"
module av || exit 1
spack load tcl || exit 1
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment