commit
cd4f429f72
4 changed files with 25 additions and 9 deletions
|
@ -1866,6 +1866,10 @@ to call the Cray compiler wrappers during build time.
|
|||
|
||||
For more on compiler configuration, check out :ref:`compiler-config`.
|
||||
|
||||
Spack sets the default Cray link type to dynamic, to better match other
|
||||
other platforms. Individual packages can enable static linking (which is the
|
||||
default outside of Spack on cray systems) using the -static flag.
|
||||
|
||||
Setting defaults and using Cray modules
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -76,7 +76,6 @@
|
|||
will be responsible for compiler detection.
|
||||
"""
|
||||
import os
|
||||
import imp
|
||||
import inspect
|
||||
|
||||
from llnl.util.lang import memoized, list_modules, key_ordering
|
||||
|
@ -190,6 +189,12 @@ def operating_system(self, name):
|
|||
|
||||
return self.operating_sys.get(name, None)
|
||||
|
||||
@classmethod
|
||||
def setup_platform_environment(self, pkg, env):
|
||||
""" Subclass can override this method if it requires any
|
||||
platform-specific build environment modifications.
|
||||
"""
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def detect(self):
|
||||
|
@ -200,15 +205,12 @@ def detect(self):
|
|||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return self.__str__()
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
def _cmp_key(self):
|
||||
t_keys = ''.join(str(t._cmp_key()) for t in
|
||||
sorted(self.targets.values()))
|
||||
|
@ -279,7 +281,7 @@ def find_compilers(self, *paths):
|
|||
|
||||
# ensure all the version calls we made are cached in the parent
|
||||
# process, as well. This speeds up Spack a lot.
|
||||
clist = reduce(lambda x, y: x+y, compiler_lists)
|
||||
clist = reduce(lambda x, y: x + y, compiler_lists)
|
||||
return clist
|
||||
|
||||
def find_compiler(self, cmp_cls, *path):
|
||||
|
@ -320,7 +322,7 @@ def find_compiler(self, cmp_cls, *path):
|
|||
|
||||
# prefer the one with more compilers.
|
||||
prev_paths = [prev.cc, prev.cxx, prev.f77, prev.fc]
|
||||
newcount = len([p for p in paths if p is not None])
|
||||
newcount = len([p for p in paths if p is not None])
|
||||
prevcount = len([p for p in prev_paths if p is not None])
|
||||
|
||||
# Don't add if it's not an improvement over prev compiler.
|
||||
|
@ -337,6 +339,7 @@ def to_dict(self):
|
|||
d['version'] = self.version
|
||||
return d
|
||||
|
||||
|
||||
@key_ordering
|
||||
class Arch(object):
|
||||
"""Architecture is now a class to help with setting attributes.
|
||||
|
@ -377,11 +380,9 @@ def __str__(self):
|
|||
else:
|
||||
return ''
|
||||
|
||||
|
||||
def __contains__(self, string):
|
||||
return string in str(self)
|
||||
|
||||
|
||||
def _cmp_key(self):
|
||||
if isinstance(self.platform, Platform):
|
||||
platform = self.platform.name
|
||||
|
@ -424,7 +425,7 @@ def _operating_system_from_dict(os_name, plat=None):
|
|||
if isinstance(os_name, dict):
|
||||
name = os_name['name']
|
||||
version = os_name['version']
|
||||
return plat.operating_system(name+version)
|
||||
return plat.operating_system(name + version)
|
||||
else:
|
||||
return plat.operating_system(os_name)
|
||||
|
||||
|
|
|
@ -444,6 +444,7 @@ def setup_package(pkg, dirty=False):
|
|||
|
||||
set_compiler_environment_variables(pkg, spack_env)
|
||||
set_build_environment_variables(pkg, spack_env, dirty)
|
||||
pkg.spec.architecture.platform.setup_platform_environment(pkg, spack_env)
|
||||
load_external_modules(pkg)
|
||||
# traverse in postorder so package can use vars from its dependencies
|
||||
spec = pkg.spec
|
||||
|
|
|
@ -44,6 +44,16 @@ def __init__(self):
|
|||
self.add_operating_system(str(linux_dist), linux_dist)
|
||||
self.add_operating_system('CNL10', Cnl())
|
||||
|
||||
@classmethod
|
||||
def setup_platform_environment(self, pkg, env):
|
||||
""" Change the linker to default dynamic to be more
|
||||
similar to linux/standard linker behavior
|
||||
"""
|
||||
env.set('CRAYPE_LINK_TYPE', 'dynamic')
|
||||
cray_wrapper_names = join_path(spack.build_env_path, 'cray')
|
||||
if os.path.isdir(cray_wrapper_names):
|
||||
env.prepend_path('PATH', cray_wrapper_names)
|
||||
|
||||
@classmethod
|
||||
def detect(self):
|
||||
try:
|
||||
|
|
Loading…
Reference in a new issue