def test_cray_frontend_compiler_detection( compiler, version, tmpdir, monkeypatch, working_env ): """Test that the Cray frontend properly finds compilers form modules""" # setup the fake compiler directory compiler_dir = tmpdir.join(compiler) compiler_exe = compiler_dir.join('cc').ensure() fs.set_executable(str(compiler_exe)) # mock modules def _module(cmd, *args): module_name = '%s/%s' % (compiler, version) module_contents = 'prepend-path PATH %s' % compiler_dir if cmd == 'avail': return module_name if compiler in args[0] else '' if cmd == 'show': return module_contents if module_name in args else '' monkeypatch.setattr(spack.operating_systems.cray_frontend, 'module', _module) # remove PATH variable os.environ.pop('PATH', None) # get a CrayFrontend object cray_fe_os = CrayFrontend() paths = cray_fe_os.compiler_search_paths assert paths == [str(compiler_dir)]
def __init__(self): ''' Create a Cray system platform. Target names should use craype target names but not include the 'craype-' prefix. Uses first viable target from: self envars [SPACK_FRONT_END, SPACK_BACK_END] configuration file "targets.yaml" with keys 'front_end', 'back_end' scanning /etc/bash/bashrc.local for back_end only ''' super(Cray, self).__init__('cray') # Make all craype targets available. for target in self._avail_targets(): name = target.replace('-', '_') self.add_target(name, Target(name, 'craype-%s' % target)) self.add_target("x86_64", Target("x86_64")) self.add_target("front_end", Target("x86_64")) self.front_end = "x86_64" # Get aliased targets from config or best guess from environment: for name in ('front_end', 'back_end'): _target = getattr(self, name, None) if _target is None: _target = os.environ.get('SPACK_' + name.upper()) if _target is None and name == 'back_end': _target = self._default_target_from_env() if _target is not None: safe_name = _target.replace('-', '_') setattr(self, name, safe_name) self.add_target(name, self.targets[safe_name]) if self.back_end is not None: self.default = self.back_end self.add_target('default', self.targets[self.back_end]) else: raise NoPlatformError() front_distro = CrayFrontend() back_distro = Cnl() self.default_os = str(back_distro) self.back_os = self.default_os self.front_os = str(front_distro) self.add_operating_system(self.back_os, back_distro) self.add_operating_system(self.front_os, front_distro)
def __init__(self): ''' Create a Cray system platform. Target names should use craype target names but not include the 'craype-' prefix. Uses first viable target from: self envars [SPACK_FRONT_END, SPACK_BACK_END] configuration file "targets.yaml" with keys 'front_end', 'back_end' scanning /etc/bash/bashrc.local for back_end only ''' super(Cray, self).__init__('cray') # Make all craype targets available. for target in self._avail_targets(): name = _target_name_from_craype_target_name(target) self.add_target(name, spack.target.Target(name, 'craype-%s' % target)) _back_end = os.environ.get('SPACK_BACK_END', _default_backend_target) if _back_end is None: _back_end = self._default_target_from_env() self.back_end = _back_end self.default = self.back_end if self.back_end not in self.targets: # We didn't find a target module for the backend raise NoPlatformError() # Setup frontend targets for name in archspec.cpu.TARGETS: if name not in self.targets: self.add_target(name, spack.target.Target(name)) self.front_end = os.environ.get('SPACK_FRONT_END', archspec.cpu.host().name) if self.front_end not in self.targets: self.add_target(self.front_end, spack.target.Target(self.front_end)) front_distro = CrayFrontend() back_distro = CrayBackend() self.default_os = str(back_distro) self.back_os = self.default_os self.front_os = str(front_distro) self.add_operating_system(self.back_os, back_distro) if self.front_os != self.back_os: self.add_operating_system(self.front_os, front_distro)