aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/coarrays.py
diff options
context:
space:
mode:
authorMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2019-11-17 01:59:52 -0500
committerMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2019-11-17 10:56:53 -0500
commitcd08a9f7d8f3a67455780a592cb67974a8f35f25 (patch)
treef5c7352b80dcbbc52ef20d4b4e000ba0bbd49c94 /mesonbuild/dependencies/coarrays.py
parenta911a237ada423e272ca2a03cdc9f6aaf39821e5 (diff)
downloadmeson-cd08a9f7d8f3a67455780a592cb67974a8f35f25.zip
meson-cd08a9f7d8f3a67455780a592cb67974a8f35f25.tar.gz
meson-cd08a9f7d8f3a67455780a592cb67974a8f35f25.tar.bz2
deps: add pkg-config to coarray with CMake fallback
make coarray in its own file for clarity
Diffstat (limited to 'mesonbuild/dependencies/coarrays.py')
-rw-r--r--mesonbuild/dependencies/coarrays.py70
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