aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlexa Bilaniuk <obilaniu@gmail.com>2021-03-12 18:09:22 -0500
committerNirbheek Chauhan <nirbheek@centricular.com>2021-04-04 00:09:08 +0530
commitec7eb37d24d48eb851a9988e9ac9ac04afde877c (patch)
tree6c1b4c127c3bb75f84f28b3f8ff07bea7b523841
parentcc32d5ded93b74aff4557ecfcd3329719f2c061d (diff)
downloadmeson-ec7eb37d24d48eb851a9988e9ac9ac04afde877c.zip
meson-ec7eb37d24d48eb851a9988e9ac9ac04afde877c.tar.gz
meson-ec7eb37d24d48eb851a9988e9ac9ac04afde877c.tar.bz2
Strip host-compiler -std flag from NVCC line.
Closes #8523.
-rw-r--r--mesonbuild/compilers/cuda.py13
-rw-r--r--test cases/cuda/16 multistd/main.cu20
-rw-r--r--test cases/cuda/16 multistd/meson.build4
3 files changed, 36 insertions, 1 deletions
diff --git a/mesonbuild/compilers/cuda.py b/mesonbuild/compilers/cuda.py
index 77984ca..627ccc9 100644
--- a/mesonbuild/compilers/cuda.py
+++ b/mesonbuild/compilers/cuda.py
@@ -616,8 +616,19 @@ class CudaCompiler(Compiler):
return opts
def _to_host_compiler_options(self, options: 'KeyedOptionDictType') -> 'KeyedOptionDictType':
+ """
+ Convert an NVCC Option set to a host compiler's option set.
+ """
+
+ # We must strip the -std option from the host compiler option set, as NVCC has
+ # its own -std flag that may not agree with the host compiler's.
overrides = {name: opt.value for name, opt in options.items()}
- return OptionOverrideProxy(overrides, self.host_compiler.get_options())
+ overrides.pop(OptionKey('std', machine=self.for_machine,
+ lang=self.host_compiler.language), None)
+ host_options = self.host_compiler.get_options().copy()
+ if 'std' in host_options:
+ del host_options['std'] # type: ignore
+ return OptionOverrideProxy(overrides, host_options)
def get_option_compile_args(self, options: 'KeyedOptionDictType') -> T.List[str]:
args = self.get_ccbin_args(options)
diff --git a/test cases/cuda/16 multistd/main.cu b/test cases/cuda/16 multistd/main.cu
new file mode 100644
index 0000000..a2ffba4
--- /dev/null
+++ b/test cases/cuda/16 multistd/main.cu
@@ -0,0 +1,20 @@
+#include <cuda_runtime.h>
+#include <iostream>
+
+auto cuda_devices(void) {
+ int result = 0;
+ cudaGetDeviceCount(&result);
+ return result;
+}
+
+
+int main(void) {
+ int n = cuda_devices();
+ if (n == 0) {
+ std::cout << "No Cuda hardware found. Exiting.\n";
+ return 0;
+ }
+
+ std::cout << "Found " << n << "Cuda devices.\n";
+ return 0;
+}
diff --git a/test cases/cuda/16 multistd/meson.build b/test cases/cuda/16 multistd/meson.build
new file mode 100644
index 0000000..4769a87
--- /dev/null
+++ b/test cases/cuda/16 multistd/meson.build
@@ -0,0 +1,4 @@
+project('C++-CUDA multi-std', 'cpp', 'cuda', version : '1.0.0', default_options : ['cpp_std=c++17', 'cuda_std=c++14'])
+
+exe = executable('prog', 'main.cu')
+test('cudatest', exe)