diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 865550761..98e3c9304 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1586,6 +1586,15 @@ You probably should put it in link_with instead.''') # 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: @@ -1598,7 +1607,7 @@ You probably should put it in link_with instead.''') '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