From 738030ee84d6536865a24e7da66989a6a936e4cb Mon Sep 17 00:00:00 2001 From: David Seifert Date: Wed, 6 Jul 2022 21:18:08 +0200 Subject: [PATCH] cuda: don't inject `-lstdc++` when linking Fixes: #10570 --- mesonbuild/build.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mesonbuild/build.py b/mesonbuild/build.py index c9878403cf14..11bd21ee24fb 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1585,6 +1585,15 @@ def get_clink_dynamic_linker_and_stdlibs(self) -> T.Tuple['Compiler', T.List[str # Languages used by dependencies dep_langs = self.get_langs_used_by_deps() + + # This set contains all the languages a linker can link natively + # without extra flags. For instance, nvcc (cuda) can link C++ + # without injecting -lc++/-lstdc++, see + # https://github.com/mesonbuild/meson/issues/10570 + MASK_LANGS = frozenset([ + # (language, linker) + ('cpp', 'cuda'), + ]) # Pick a compiler based on the language priority-order for l in clink_langs: if l in self.compilers or l in dep_langs: @@ -1597,7 +1606,7 @@ def get_clink_dynamic_linker_and_stdlibs(self) -> T.Tuple['Compiler', T.List[str 'a project language.') stdlib_args: T.List[str] = [] for dl in itertools.chain(self.compilers, dep_langs): - if dl != linker.language: + if dl != linker.language and (dl, linker.language) not in MASK_LANGS: stdlib_args += all_compilers[dl].language_stdlib_only_link_flags(self.environment) # Type of var 'linker' is Compiler. # Pretty hard to fix because the return value is passed everywhere