diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2019-11-18 23:40:12 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-18 23:40:12 +0200 |
commit | b5f9895bfb3075296d38d048cf839fbb4afeb4c5 (patch) | |
tree | cb9a86343064e3f4f7f748f5e4f5f2422ebb8941 /mesonbuild/dependencies/coarrays.py | |
parent | 050dcf80af99521ea8fee9dff0f71843a3e636f6 (diff) | |
parent | cd08a9f7d8f3a67455780a592cb67974a8f35f25 (diff) | |
download | meson-b5f9895bfb3075296d38d048cf839fbb4afeb4c5.zip meson-b5f9895bfb3075296d38d048cf839fbb4afeb4c5.tar.gz meson-b5f9895bfb3075296d38d048cf839fbb4afeb4c5.tar.bz2 |
Merge pull request #6194 from scivision/coarrays
dep: Fortran Coarrays-enhance finding by use Pkg-config & CMake
Diffstat (limited to 'mesonbuild/dependencies/coarrays.py')
-rw-r--r-- | mesonbuild/dependencies/coarrays.py | 70 |
1 files changed, 70 insertions, 0 deletions
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 |