From cd08a9f7d8f3a67455780a592cb67974a8f35f25 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 17 Nov 2019 01:59:52 -0500 Subject: deps: add pkg-config to coarray with CMake fallback make coarray in its own file for clarity --- mesonbuild/dependencies/__init__.py | 3 +- mesonbuild/dependencies/coarrays.py | 70 +++++++++++++++++++++++++++++++++++++ mesonbuild/dependencies/misc.py | 45 +----------------------- 3 files changed, 73 insertions(+), 45 deletions(-) create mode 100644 mesonbuild/dependencies/coarrays.py diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py index bbd3f8c..095ec1d 100644 --- a/mesonbuild/dependencies/__init__.py +++ b/mesonbuild/dependencies/__init__.py @@ -19,7 +19,8 @@ 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 (BlocksDependency, CoarrayDependency, HDF5Dependency, MPIDependency, NetCDFDependency, OpenMPDependency, Python3Dependency, ThreadDependency, PcapDependency, CupsDependency, LibWmfDependency, LibGCryptDependency, GpgmeDependency, ShadercDependency) +from .coarrays import CoarrayDependency +from .misc import (BlocksDependency, HDF5Dependency, MPIDependency, NetCDFDependency, OpenMPDependency, Python3Dependency, ThreadDependency, PcapDependency, CupsDependency, LibWmfDependency, LibGCryptDependency, GpgmeDependency, ShadercDependency) from .platform import AppleFrameworks from .ui import GLDependency, GnuStepDependency, Qt4Dependency, Qt5Dependency, SDL2Dependency, WxDependency, VulkanDependency diff --git a/mesonbuild/dependencies/coarrays.py b/mesonbuild/dependencies/coarrays.py new file mode 100644 index 0000000..8a0bc56 --- /dev/null +++ b/mesonbuild/dependencies/coarrays.py @@ -0,0 +1,70 @@ +# Copyright 2013-2019 The Meson development team + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .base import CMakeDependency, ExternalDependency, PkgConfigDependency + + +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: dict): + 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 """ + # first try pkg-config + for pkg in ['caf-openmpi', 'caf']: + pkgdep = PkgConfigDependency(pkg, environment, kwargs, language=self.language) + if pkgdep.found(): + self.compile_args = pkgdep.get_compile_args() + self.link_args = pkgdep.get_link_args() + self.version = pkgdep.get_version() + self.is_found = True + self.pcdep = pkgdep + return + # second try CMake + kwargs['modules'] = 'OpenCoarrays::caf_mpi' + cmakedep = CMakeDependency('OpenCoarrays', environment, kwargs) + if cmakedep.found(): + self.compile_args = cmakedep.get_compile_args() + self.link_args = cmakedep.get_link_args() + self.version = cmakedep.get_version() + self.is_found = True + return + # give up, just run as single image fallback + self.compile_args = ['-fcoarray=single'] + self.version = 'single image' + self.is_found = True + 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 == 'intel-cl': + """ Coarrays are built into Intel compilers, no external library needed """ + self.is_found = True + self.compile_args = ['/Qcoarray:shared'] + elif cid == 'nagfor': + """ NAG doesn't require any special arguments for Coarray """ + self.is_found = True diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py index c62f49f..56a852e 100644 --- a/mesonbuild/dependencies/misc.py +++ b/mesonbuild/dependencies/misc.py @@ -1,4 +1,4 @@ -# Copyright 2013-2017 The Meson development team +# Copyright 2013-2019 The Meson development team # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -32,49 +32,6 @@ 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 == 'intel-cl': - """ Coarrays are built into Intel compilers, no external library needed """ - self.is_found = True - self.compile_args = ['/Qcoarray:shared'] - elif cid == 'nagfor': - """ NAG doesn't require any special arguments for Coarray """ - self.is_found = True - - class HDF5Dependency(ExternalDependency): def __init__(self, environment, kwargs): -- cgit v1.1