aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--mesonbuild/dependencies/__init__.py3
-rw-r--r--mesonbuild/dependencies/coarrays.py70
-rw-r--r--mesonbuild/dependencies/misc.py45
3 files changed, 73 insertions, 45 deletions
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):