diff --git a/docs/markdown/snippets/nvc_now_support_setting_std.md b/docs/markdown/snippets/nvc_now_support_setting_std.md new file mode 100644 index 000000000..5e537ae9f --- /dev/null +++ b/docs/markdown/snippets/nvc_now_support_setting_std.md @@ -0,0 +1,6 @@ +## nvc and nvc++ now support setting std + +The following standards are available for nvc: c89, c90, c99, c11, +c17, c18, gnu90, gnu89, gnu99, gnu11, gnu17, gnu18. For nvc++: +c++98, c++03, c++11, c++14, c++17, c++20, c++23, gnu++98, gnu++03, +gnu++11, gnu++14, gnu++17, gnu++20 diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index aa85f1191..f67281f04 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -361,6 +361,14 @@ class NvidiaHPC_CCompiler(PGICompiler, CCompiler): info, linker=linker, full_version=full_version) PGICompiler.__init__(self) + def get_options(self) -> 'MutableKeyedOptionDictType': + opts = CCompiler.get_options(self) + cppstd_choices = ['c89', 'c90', 'c99', 'c11', 'c17', 'c18'] + std_opt = opts[self.form_compileropt_key('std')] + assert isinstance(std_opt, options.UserStdOption), 'for mypy' + std_opt.set_versions(cppstd_choices, gnu=True) + return opts + class ElbrusCCompiler(ElbrusCompiler, CCompiler): def __init__(self, ccache: T.List[str], exelist: T.List[str], version: str, for_machine: MachineChoice, is_cross: bool, diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py index 86bb113be..930e7b7e5 100644 --- a/mesonbuild/compilers/cpp.py +++ b/mesonbuild/compilers/cpp.py @@ -566,6 +566,17 @@ class NvidiaHPC_CPPCompiler(PGICompiler, CPPCompiler): info, linker=linker, full_version=full_version) PGICompiler.__init__(self) + def get_options(self) -> 'MutableKeyedOptionDictType': + opts = CPPCompiler.get_options(self) + cppstd_choices = [ + 'c++98', 'c++03', 'c++11', 'c++14', 'c++17', 'c++20', 'c++23', + 'gnu++98', 'gnu++03', 'gnu++11', 'gnu++14', 'gnu++17', 'gnu++20' + ] + std_opt = opts[self.form_compileropt_key('std')] + assert isinstance(std_opt, options.UserStdOption), 'for mypy' + std_opt.set_versions(cppstd_choices) + return opts + class ElbrusCPPCompiler(ElbrusCompiler, CPPCompiler): def __init__(self, ccache: T.List[str], exelist: T.List[str], version: str, for_machine: MachineChoice, is_cross: bool,