Dear Samuel,

The easybuild framework is complaining that the toolchain module you are using doesn't match with the toolchain definition.

Maybe we are currently being a bit too strict there... It's intended as a sanity check, but throwing a hard error is maybe a bit over the top.

You can probably convince the EasyBuild framework that you're doing the right thing though... Try using this as toolchain definition:

class Imv2(IccIfort, Mvapich2, IntelMKL, IntelFFTW):
    """
    Compiler toolchain with Intel compilers (icc/ifort), MVAPICH2 MPI,
    Intel Math Kernel Library (MKL) and Intel FFTW wrappers.
    """
    NAME = 'imv2'
    SUBTOOLCHAIN = IccIfort.NAME

    def definition(self):
        """
        Return empty list for toolchain definition,
        to dance around toolchain definition check.
        """
        self.log.info("Returning empty toolchain definition!")
        return []


This is a bit of hack, but you can probably get away with it...

Do make sure you provide metadata for the external modules you are using, so EasyBuild knows what these modules provide exactly. Otherwise you'll run into trouble pretty quickly, see http://easybuild.readthedocs.io/en/latest/Using_external_modules.html#metadata-for-external-modules .

That said, it's not unlikely you'll run into other issues, I don't think many people are using EasyBuild with toolchains that entirely consist of external modules... EasyBuild makes some assumptions left and right as to what the toolchain provides exactly, and if there's a mismatch it may refuse to use the toolchain.


regards,

Kenneth


On 17/05/2018 22:25, [email protected] wrote:
Hello,

I am new to EasyBuild and am trying to create a custom toolchain which uses
external dependencies where the compiler and MPI are have manually created
modules outside of Easybuild.

I created an easyconfig file imv2.eb:
easyblock = "Toolchain"
name = 'imv2'
version = '1.1.2'
homepage = 'http://software.intel.com/en-us/intel-cluster-toolkit-compiler/'
description = """Intel Cluster Toolkit Compiler Edition provides Intel C/C++
and Fortran compilers, Intel MPI & Intel MKL."""
toolchain = {'name': 'dummy', 'version': 'dummy'}
dependencies = [                                         # version/released
     ('intel/18.0.0', EXTERNAL_MODULE),
     ('mvapich2/2.3rc2', EXTERNAL_MODULE),
]
moduleclass = 'toolchain'
module_depends_on = {('intel/18.0.0'), ('mvapich2/2.3rc2')}

and easyblock:
from easybuild.toolchains.mpi.mvapich2 import Mvapich2
from easybuild.toolchains.fft.intelfftw import IntelFFTW
from easybuild.toolchains.linalg.intelmkl import IntelMKL
from easybuild.toolchains.iccifort import IccIfort

class Imv2(IccIfort, Mvapich2, IntelMKL, IntelFFTW):
     """
     Compiler toolchain with Intel compilers (icc/ifort), MVAPICH2 MPI,
     Intel Math Kernel Library (MKL) and Intel FFTW wrappers.
     """
     NAME = 'imv2'
     SUBTOOLCHAIN = IccIfort.NAME

However when I try installing a package that depends on this toolchain I get
the following message:

FAILED: Installation ended unsuccessfully (build directory: /users/PZS0530/
skhuvis/.local/easybuild/build/ScaLAPACK/2.0.2/imv2-1.1.2): build failed
(first 300 chars): List of toolchain dependency modules and toolchain
definition do not match (found ['intel/18.0.0', 'mvapich2/2.3rc2'] vs expected
set(['MVAPICH2', 'icc', 'imkl', 'ifort']))

What would be the correct way to create this module to use external modules?

Thank you,
Samuel Khuvis
Scientific Applications Engineer
Ohio Supercomputer Center (OSC)
A member of the Ohio Technology Consortium
1224 Kinnear Road, Columbus, Ohio 43212

Reply via email to