diff --git a/easyblocks/a/aocl.py b/easyblocks/a/aocl.py new file mode 100644 index 0000000000000000000000000000000000000000..13c94fee7e0857a0275eccd586f1421170d17452 --- /dev/null +++ b/easyblocks/a/aocl.py @@ -0,0 +1,93 @@ +## +# 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/include' % (self.version), '%s/lib' % (self.version), '%s/amd-fftw' % (self.version)] + } + super(EB_AOCL, self).sanity_check_step(custom_paths=custom_paths)