diff --git a/Custom_EasyBlocks/imkl.py b/Custom_EasyBlocks/imkl.py index bf800df8a5e29bda6384eb407a2d9cef1f55d746..ba2edf52343817523aa8770f7c409c07f030150d 100644 --- a/Custom_EasyBlocks/imkl.py +++ b/Custom_EasyBlocks/imkl.py @@ -33,7 +33,7 @@ EasyBuild support for installing the Intel Math Kernel Library (MKL), implemente @author: Ward Poelmans (Ghent University) @author: Lumir Jasiok (IT4Innovations) """ - +import glob import itertools import os import shutil @@ -67,13 +67,22 @@ class EB_imkl(IntelBase): return IntelBase.extra_options(extra_vars) def __init__(self, *args, **kwargs): + """Constructor for imkl easyblock.""" super(EB_imkl, self).__init__(*args, **kwargs) + # make sure $MKLROOT isn't set, it's known to cause problems with the installation self.cfg.update('unwanted_env_vars', ['MKLROOT']) self.cdftlibs = [] self.mpi_spec = None + if LooseVersion(self.version) >= LooseVersion('2021'): + self.mkl_basedir = os.path.join('mkl', self.version) + else: + self.mkl_basedir = 'mkl' + def prepare_step(self, *args, **kwargs): + """Prepare build environment.""" + if LooseVersion(self.version) >= LooseVersion('2017.2.174'): kwargs['requires_runtime_license'] = False super(EB_imkl, self).prepare_step(*args, **kwargs) @@ -153,29 +162,37 @@ class EB_imkl(IntelBase): if LooseVersion(self.version) >= LooseVersion('2021'): compiler_subdir = os.path.join( 'compiler', self.version, 'linux', 'compiler', 'lib', 'intel64_lin') - mkl_subdir = os.path.join('mkl', self.version) pkg_config_path = [os.path.join( - mkl_subdir, 'tools', 'pkgconfig')] + self.mkl_basedir, 'tools', 'pkgconfig')] else: compiler_subdir = os.path.join('lib', 'intel64') - mkl_subdir = 'mkl' pkg_config_path = [os.path.join( - mkl_subdir, 'bin', 'pkgconfig')] - guesses['MANPATH'] = ['man', 'man/en_US'] + self.mkl_basedir, 'bin', 'pkgconfig')] + guesses['MANPATH'] = ['man', os.path.join('man', 'en_US')] if LooseVersion(self.version) >= LooseVersion('11.0'): if LooseVersion(self.version) >= LooseVersion('11.3'): guesses['MIC_LD_LIBRARY_PATH'] = [ - 'lib/intel64_lin_mic', 'mkl/lib/mic'] + os.path.join('lib', 'intel64_lin_mic'), + os.path.join(self.mkl_basedir, 'lib', 'mic'), + ] elif LooseVersion(self.version) >= LooseVersion('11.1'): guesses['MIC_LD_LIBRARY_PATH'] = [ - 'lib/mic', 'mkl/lib/mic'] + os.path.join('lib', 'mic'), + os.path.join(self.mkl_basedir, 'lib', 'mic'), + ] else: guesses['MIC_LD_LIBRARY_PATH'] = [ - 'compiler/lib/mic', 'mkl/lib/mic'] - library_path = [compiler_subdir, os.path.join( - mkl_subdir, 'lib', 'intel64')] - cpath = [os.path.join(mkl_subdir, 'include'), os.path.join( - mkl_subdir, 'include', 'fftw')] + os.path.join('compiler', 'lib', 'mic'), + os.path.join(self.mkl_basedir, 'lib', 'mic'), + ] + library_path = [ + compiler_subdir, + os.path.join(self.mkl_basedir, 'lib', 'intel64'), + ] + cpath = [ + os.path.join(self.mkl_basedir, 'include'), + os.path.join(self.mkl_basedir, 'include', 'fftw'), + ] guesses.update({ 'PATH': [], 'LD_LIBRARY_PATH': library_path, @@ -203,6 +220,12 @@ class EB_imkl(IntelBase): def make_module_extra(self): """Overwritten from Application to add extra txt""" + + if 'MKL_EXAMPLES' not in self.cfg['modextravars']: + self.cfg.update('modextravars', { + 'MKL_EXAMPLES': os.path.join(self.installdir, self.mkl_basedir, 'examples'), + }) + txt = super(EB_imkl, self).make_module_extra() if LooseVersion(self.version) >= LooseVersion('2021'): @@ -219,11 +242,20 @@ class EB_imkl(IntelBase): """ super(EB_imkl, self).post_install_step() - shlib_ext = get_shared_lib_ext() + # extract examples + examples_subdir = os.path.join( + self.installdir, self.mkl_basedir, 'examples') + if os.path.exists(examples_subdir): + cwd = change_dir(examples_subdir) + for examples_tarball in glob.glob('examples_*.tgz'): + run_cmd("tar xvzf %s -C ." % examples_tarball) + change_dir(cwd) # reload the dependencies self.load_dependency_modules() + shlib_ext = get_shared_lib_ext() + if self.cfg['m32']: extra = { 'libmkl.%s' % shlib_ext: 'GROUP (-lmkl_intel -lmkl_intel_thread -lmkl_core)', @@ -245,10 +277,8 @@ class EB_imkl(IntelBase): loosever = LooseVersion(self.version) - if loosever >= LooseVersion('2021'): - libsubdir = os.path.join('mkl', self.version, 'lib', 'intel64') - elif loosever >= LooseVersion('10.3'): - libsubdir = os.path.join('mkl', 'lib', 'intel64') + if loosever >= LooseVersion('10.3'): + libsubdir = os.path.join(self.mkl_basedir, 'lib', 'intel64') else: if self.cfg['m32']: libsubdir = os.path.join('lib', '32') @@ -263,11 +293,8 @@ class EB_imkl(IntelBase): # build the mkl interfaces, if desired if self.cfg['interfaces']: - if loosever >= LooseVersion('2021'): - intsubdir = os.path.join('mkl', self.version, 'interfaces') - inttarget = 'libintel64' - elif loosever >= LooseVersion('10.3'): - intsubdir = os.path.join('mkl', 'interfaces') + if loosever >= LooseVersion('10.3'): + intsubdir = os.path.join(self.mkl_basedir, 'interfaces') inttarget = 'libintel64' else: intsubdir = 'interfaces' @@ -445,52 +472,55 @@ class EB_imkl(IntelBase): raise EasyBuildError( "Sanity check for 32-bit not implemented yet for IMKL v%s (>= 10.3)", self.version) - if ver >= LooseVersion('2021'): - basedir = os.path.join('mkl', self.version) - + if ver >= LooseVersion('10.3'): mkldirs = [ - os.path.join(basedir, 'bin'), - os.path.join(basedir, 'lib', 'intel64'), - os.path.join(basedir, 'include'), + os.path.join(self.mkl_basedir, 'bin'), + os.path.join(self.mkl_basedir, 'lib', 'intel64'), + os.path.join(self.mkl_basedir, 'include'), ] libs += [lib % {'suff': suff} for lib in extralibs for suff in ['lp64', 'ilp64']] - mklfiles = [ - os.path.join(basedir, 'lib', 'intel64', - 'libmkl_core.%s' % shlib_ext), - os.path.join(basedir, 'include', 'mkl.h'), - ] + mklfiles = [os.path.join(self.mkl_basedir, 'include', 'mkl.h')] mklfiles.extend( - [os.path.join(basedir, 'lib', 'intel64', lib) for lib in libs]) + [os.path.join(self.mkl_basedir, 'lib', 'intel64', lib) for lib in libs]) + + if ver >= LooseVersion('2021'): + + mklfiles.append(os.path.join(self.mkl_basedir, 'lib', + 'intel64', 'libmkl_core.%s' % shlib_ext)) elif ver >= LooseVersion('10.3'): - mkldirs = ['bin', 'mkl/bin', 'mkl/lib/intel64', 'mkl/include'] if ver < LooseVersion('11.3'): - mkldirs.append('mkl/bin/intel64') - libs += [lib % {'suff': suff} - for lib in extralibs for suff in ['lp64', 'ilp64']] - mklfiles = ['mkl/lib/intel64/libmkl.%s' % shlib_ext, 'mkl/include/mkl.h'] + \ - ['mkl/lib/intel64/%s' % lib for lib in libs] + mkldirs.append(os.path.join( + self.mkl_basedir, 'bin', 'intel64')) + + mklfiles.append(os.path.join(self.mkl_basedir, 'lib', + 'intel64', 'libmkl.%s' % shlib_ext)) + if ver >= LooseVersion('10.3.4') and ver < LooseVersion('11.1'): - mkldirs += ['compiler/lib/intel64'] + mkldirs += [os.path.join('compiler', 'lib', 'intel64')] + elif ver >= LooseVersion('2017.0.0'): + mkldirs += [os.path.join('lib', 'intel64_lin')] else: - if ver >= LooseVersion('2017.0.0'): - mkldirs += ['lib/intel64_lin'] - else: - mkldirs += ['lib/intel64'] + mkldirs += [os.path.join('lib', 'intel64')] else: if self.cfg['m32']: - mklfiles = ['lib/32/libmkl.%s' % shlib_ext, 'include/mkl.h'] + \ - ['lib/32/%s' % lib for lib in libs] - mkldirs = ['lib/32', 'include/32', 'interfaces'] + lib_subdir = '32' else: + lib_subdir = 'em64t' libs += [lib % {'suff': suff} for lib in extralibs for suff in ['lp64', 'ilp64']] - mklfiles = ['lib/em64t/libmkl.%s' % shlib_ext, 'include/mkl.h'] + \ - ['lib/em64t/%s' % lib for lib in libs] - mkldirs = ['lib/em64t', 'include/em64t', 'interfaces'] + + mklfiles = [ + os.path.join('lib', lib_subdir, 'libmkl.%s' % shlib_ext), + os.path.join('include', 'mkl.h'), + ] + mklfiles.extend([os.path.join('lib', lib_subdir, lib) + for lib in libs]) + mkldirs = [os.path.join('lib', lib_subdir), os.path.join( + 'include', lib_subdir), 'interfaces'] custom_paths = { 'files': mklfiles, diff --git a/Golden_Repo/i/imkl/imkl-2021.2.0-gompi-2021.eb b/Golden_Repo/i/imkl/imkl-2021.2.0-gompi-2021.eb index 60812b3538fa2610374939cf4681b9f32d65d45d..873755856e1eeda9df70ed54602cf51822e54124 100644 --- a/Golden_Repo/i/imkl/imkl-2021.2.0-gompi-2021.eb +++ b/Golden_Repo/i/imkl/imkl-2021.2.0-gompi-2021.eb @@ -21,28 +21,4 @@ checksums = ['816e9df26ff331d6c0751b86ed5f7d243f9f172e76f14e83b32bf4d1d619dbae'] dontcreateinstalldir = 'True' -local_examples = '%(installdir)s/mkl/%(version)s/examples' - -postinstallcmds = [ - # extract the examples - 'tar xvzf %s/examples_cluster_c.tgz -C %s/' % ( - local_examples, local_examples), - 'tar xvzf %s/examples_cluster_f.tgz -C %s/' % ( - local_examples, local_examples), - 'tar xvzf %s/examples_core_c.tgz -C %s/' % ( - local_examples, local_examples), - 'tar xvzf %s/examples_core_f.tgz -C %s/' % ( - local_examples, local_examples), - 'tar xvzf %s/examples_dpcpp.tgz -C %s/' % (local_examples, local_examples), - 'tar xvzf %s/examples_f95.tgz -C %s/' % (local_examples, local_examples), - 'tar xvzf %s/examples_offload_c.tgz -C %s/' % ( - local_examples, local_examples), - 'tar xvzf %s/examples_offload_f.tgz -C %s/' % ( - local_examples, local_examples), -] - -modextravars = { - 'MKL_EXAMPLES': '%(installdir)s/mkl/%(version)s/examples/', -} - moduleclass = 'numlib' diff --git a/Golden_Repo/i/imkl/imkl-2021.2.0.eb b/Golden_Repo/i/imkl/imkl-2021.2.0.eb index 45370d182e3f339896e15eff044c3091cbb2f810..9fc08343d891d8ef526774af043ae70293e0f88a 100644 --- a/Golden_Repo/i/imkl/imkl-2021.2.0.eb +++ b/Golden_Repo/i/imkl/imkl-2021.2.0.eb @@ -25,28 +25,4 @@ interfaces = False hidden = True -local_examples = '%(installdir)s/mkl/%(version)s/examples' - -postinstallcmds = [ - # extract the examples - 'tar xvzf %s/examples_cluster_c.tgz -C %s/' % ( - local_examples, local_examples), - 'tar xvzf %s/examples_cluster_f.tgz -C %s/' % ( - local_examples, local_examples), - 'tar xvzf %s/examples_core_c.tgz -C %s/' % ( - local_examples, local_examples), - 'tar xvzf %s/examples_core_f.tgz -C %s/' % ( - local_examples, local_examples), - 'tar xvzf %s/examples_dpcpp.tgz -C %s/' % (local_examples, local_examples), - 'tar xvzf %s/examples_f95.tgz -C %s/' % (local_examples, local_examples), - 'tar xvzf %s/examples_offload_c.tgz -C %s/' % ( - local_examples, local_examples), - 'tar xvzf %s/examples_offload_f.tgz -C %s/' % ( - local_examples, local_examples), -] - -modextravars = { - 'MKL_EXAMPLES': '%(installdir)s/mkl/%(version)s/examples/', -} - moduleclass = 'numlib'