diff options
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/dependencies/__init__.py | 3 | ||||
-rw-r--r-- | mesonbuild/dependencies/base.py | 4 | ||||
-rw-r--r-- | mesonbuild/dependencies/misc.py | 39 |
3 files changed, 43 insertions, 3 deletions
diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py index f5034db..71a0bb3 100644 --- a/mesonbuild/dependencies/__init__.py +++ b/mesonbuild/dependencies/__init__.py @@ -18,7 +18,7 @@ from .base import ( # noqa: F401 ExternalDependency, NotFoundDependency, ExternalLibrary, ExtraFrameworkDependency, InternalDependency, PkgConfigDependency, CMakeDependency, find_external_dependency, get_dep_identifier, packages, _packages_accept_language) from .dev import GMockDependency, GTestDependency, LLVMDependency, ValgrindDependency -from .misc import (HDF5Dependency, MPIDependency, OpenMPDependency, Python3Dependency, ThreadDependency, PcapDependency, CupsDependency, LibWmfDependency, LibGCryptDependency) +from .misc import (CoarrayDependency, HDF5Dependency, MPIDependency, OpenMPDependency, Python3Dependency, ThreadDependency, PcapDependency, CupsDependency, LibWmfDependency, LibGCryptDependency) from .platform import AppleFrameworks from .ui import GLDependency, GnuStepDependency, Qt4Dependency, Qt5Dependency, SDL2Dependency, WxDependency, VulkanDependency @@ -32,6 +32,7 @@ packages.update({ # From misc: 'boost': BoostDependency, + 'coarray': CoarrayDependency, 'mpi': MPIDependency, 'hdf5': HDF5Dependency, 'openmp': OpenMPDependency, diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py index 8196124..f4e47cf 100644 --- a/mesonbuild/dependencies/base.py +++ b/mesonbuild/dependencies/base.py @@ -14,7 +14,7 @@ # This file contains the detection logic for external dependencies. # Custom logic for several other packages are in separate files. - +from typing import Dict, Any import copy import functools import os @@ -2200,7 +2200,7 @@ def find_external_dependency(name, env, kwargs): return NotFoundDependency(env) -def _build_external_dependency_list(name, env, kwargs): +def _build_external_dependency_list(name, env: Environment, kwargs: Dict[str, Any]) -> list: # First check if the method is valid if 'method' in kwargs and kwargs['method'] not in [e.value for e in DependencyMethods]: raise DependencyException('method {!r} is invalid'.format(kwargs['method'])) diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py index e49bdc9..db83422 100644 --- a/mesonbuild/dependencies/misc.py +++ b/mesonbuild/dependencies/misc.py @@ -32,6 +32,45 @@ from .base import ( ) +class CoarrayDependency(ExternalDependency): + """ + Coarrays are a Fortran 2008 feature. + + Coarrays are sometimes implemented via external library (GCC+OpenCoarrays), + while other compilers just build in support (Cray, IBM, Intel, NAG). + Coarrays may be thought of as a high-level language abstraction of + low-level MPI calls. + """ + def __init__(self, environment, kwargs): + super().__init__('coarray', environment, 'fortran', kwargs) + kwargs['required'] = False + kwargs['silent'] = True + self.is_found = False + + cid = self.get_compiler().get_id() + if cid == 'gcc': + """ OpenCoarrays is the most commonly used method for Fortran Coarray with GCC """ + self.is_found = True + kwargs['modules'] = 'OpenCoarrays::caf_mpi' + cmakedep = CMakeDependency('OpenCoarrays', environment, kwargs) + if not cmakedep.found(): + self.compile_args = ['-fcoarray=single'] + self.version = 'single image' + return + + self.compile_args = cmakedep.get_compile_args() + self.link_args = cmakedep.get_link_args() + self.version = cmakedep.get_version() + elif cid == 'intel': + """ Coarrays are built into Intel compilers, no external library needed """ + self.is_found = True + self.link_args = ['-coarray=shared'] + self.compile_args = self.link_args + elif cid == 'nagfor': + """ NAG doesn't require any special arguments for Coarray """ + self.is_found = True + + class HDF5Dependency(ExternalDependency): def __init__(self, environment, kwargs): |