diff options
author | Kramer Peace <kpeace1@gmail.com> | 2019-09-02 14:23:11 +0300 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2019-09-05 08:38:56 -0700 |
commit | fb9a5ce8672a01b4b82d10fe2518a047dc532da9 (patch) | |
tree | 55115636518d01cd3b26f3e16fd18733f530dabb /mesonbuild | |
parent | bd37147b4b46081c58e0b15f6a0f0123099b27b1 (diff) | |
download | meson-fb9a5ce8672a01b4b82d10fe2518a047dc532da9.zip meson-fb9a5ce8672a01b4b82d10fe2518a047dc532da9.tar.gz meson-fb9a5ce8672a01b4b82d10fe2518a047dc532da9.tar.bz2 |
Add a CUDA linker object
Fixes issue #5870
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/compilers/cuda.py | 6 | ||||
-rw-r--r-- | mesonbuild/environment.py | 4 | ||||
-rw-r--r-- | mesonbuild/linkers.py | 29 |
3 files changed, 38 insertions, 1 deletions
diff --git a/mesonbuild/compilers/cuda.py b/mesonbuild/compilers/cuda.py index 3bcabf5..0a26bed 100644 --- a/mesonbuild/compilers/cuda.py +++ b/mesonbuild/compilers/cuda.py @@ -34,7 +34,7 @@ class CudaCompiler(Compiler): super().__init__(exelist, version, for_machine, **kwargs) self.is_cross = is_cross self.exe_wrapper = exe_wrapper - self.id = 'nvcc' + self.id = CudaCompiler.cuda_id() default_warn_args = [] self.warn_args = {'0': [], '1': default_warn_args, @@ -42,6 +42,10 @@ class CudaCompiler(Compiler): '3': default_warn_args + ['-Xcompiler=-Wextra', '-Xcompiler=-Wpedantic']} + @staticmethod + def cuda_id(): + return 'nvcc' + def needs_static_linker(self): return False diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index 7386965..b53c6f5 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -55,6 +55,7 @@ from .linkers import ( XildAppleDynamicLinker, XildLinuxDynamicLinker, XilinkDynamicLinker, + CudaLinker, ) from functools import lru_cache from .compilers import ( @@ -696,6 +697,9 @@ class Environment: `-Xlinker=--version`) you must pass as a list. :extra_args: Any addtional arguments rquired (such as a source file) """ + if CudaCompiler.cuda_id() in compiler: + return CudaLinker(compiler, for_machine, 'nvlink', prefix, version=CudaLinker.parse_version()) + extra_args = typing.cast(typing.List[str], extra_args or []) if isinstance(prefix, str): check_args = [prefix + '--version'] + extra_args diff --git a/mesonbuild/linkers.py b/mesonbuild/linkers.py index 272f927..7db7d09 100644 --- a/mesonbuild/linkers.py +++ b/mesonbuild/linkers.py @@ -909,3 +909,32 @@ class OptlinkDynamicLinker(VisualStudioLikeLinkerMixin, DynamicLinker): def get_allow_undefined_args(self) -> typing.List[str]: return [] + +class CudaLinker(DynamicLinker): + """Cuda linker (nvlink)""" + @staticmethod + def parse_version(): + version_cmd = ['nvlink', '--version'] + try: + _, out, _ = mesonlib.Popen_safe(version_cmd) + except OSError: + return 'unknown version' + # Output example: + # nvlink: NVIDIA (R) Cuda linker + # Copyright (c) 2005-2018 NVIDIA Corporation + # Built on Sun_Sep_30_21:09:22_CDT_2018 + # Cuda compilation tools, release 10.0, V10.0.166 + # we need the most verbose version output. Luckily starting with V + return out.strip().split('V')[-1] + + def get_output_args(self, outname: str) -> typing.List[str]: + return ['-o', outname] + + def get_search_args(self, dirname: str) -> typing.List[str]: + return ['-L', dirname] + + def fatal_warnings(self) -> typing.List[str]: + return ['--warning-as-error'] + + def get_allow_undefined_args(self) -> typing.List[str]: + return [] |