## # Copyright 2009-2021 Ghent University # # This file is part of EasyBuild, # originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), # with support of Ghent University (http://ugent.be/hpc), # the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), # Flemish Research Foundation (FWO) (http://www.fwo.be/en) # and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). # # https://github.com/easybuilders/easybuild # # EasyBuild is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation v2. # # EasyBuild is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with EasyBuild. If not, see <http://www.gnu.org/licenses/>. ## """ EasyBuild support for AMD Core Math Library (AOCL), implemented as an easyblock @author: Lukas Krupcik (IT4Innovations) """ import os from distutils.version import LooseVersion from easybuild.framework.easyblock import EasyBlock from easybuild.framework.easyconfig import CUSTOM from easybuild.tools.run import run_cmd_qa from easybuild.tools.systemtools import get_shared_lib_ext class EB_AOCL(EasyBlock): def __init__(self, *args, **kwargs): """Constructor, adds extra class variables.""" super(EB_AOCL, self).__init__(*args, **kwargs) self.basedir = '%s' % (self.version) def configure_step(self): """No custom configure step for AOCL.""" pass def build_step(self): """No custom build step for AOCL.""" pass def install_step(self): """Install by running install script.""" cmd = "./install.sh -t %s" % (self.installdir) qa = {'The directory will be created if it does not already exist. >': self.installdir} run_cmd_qa(cmd, qa, log_all=True, simple=True) def make_module_extra(self): """Add extra entries in module file (various paths).""" txt = super(EB_AOCL, self).make_module_extra() basepaths = ["%s" % (self.basedir)] txt += self.module_generator.set_environment('AOCL_ROOT', "%s/%s" % (self.installdir, self.basedir)) for path in basepaths: txt += self.module_generator.prepend_paths('PATH', os.path.join(path, 'amd-fftw/bin')) for path in basepaths: txt += self.module_generator.prepend_paths('CPATH', os.path.join(path, 'include')) for key in ['LD_LIBRARY_PATH', 'LIBRARY_PATH']: for path in basepaths: txt += self.module_generator.prepend_paths(key, os.path.join(path, 'lib')) return txt def sanity_check_step(self): """Custom sanity check for AOCL.""" custom_paths = { 'files': [], 'dirs': ['%s/aocc/include' % (self.version), '%s/aocc/lib' % (self.version), '%s/aocc/amd-fftw' % (self.version)] } super(EB_AOCL, self).sanity_check_step(custom_paths=custom_paths)