aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Noonan <steven@uplinklabs.net>2023-06-20 14:34:47 -0700
committerPatrick Williams <patrick@stwcx.xyz>2023-07-14 13:29:16 -0500
commite3c007aefe72d9f896028c6c45906707181d3a07 (patch)
tree1ec7ba3c8149799d2f495c1d35d70fe44effd97c
parent658b0d10003508d9551378c8b132c2f572b03a19 (diff)
downloadmeson-e3c007aefe72d9f896028c6c45906707181d3a07.zip
meson-e3c007aefe72d9f896028c6c45906707181d3a07.tar.gz
meson-e3c007aefe72d9f896028c6c45906707181d3a07.tar.bz2
c++: add support for c++23/c++26 standard and aliases
GCC 12.3 and Clang 16 support -std flags for c++23/c++2b. The unreleased GCC 14 and Clang 17 will support -std flags for c++26/c++2c. Signed-off-by: Steven Noonan <steven@uplinklabs.net> Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
-rw-r--r--mesonbuild/compilers/cpp.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py
index 14e2638..6eccf25 100644
--- a/mesonbuild/compilers/cpp.py
+++ b/mesonbuild/compilers/cpp.py
@@ -226,6 +226,10 @@ class _StdCPPLibMixin(CompilerMixinBase):
class ClangCPPCompiler(_StdCPPLibMixin, ClangCompiler, CPPCompiler):
+
+ _CPP23_VERSION = '>=12.0.0'
+ _CPP26_VERSION = '>=17.0.0'
+
def __init__(self, ccache: T.List[str], exelist: T.List[str], version: str, for_machine: MachineChoice, is_cross: bool,
info: 'MachineInfo', exe_wrapper: T.Optional['ExternalProgram'] = None,
linker: T.Optional['DynamicLinker'] = None,
@@ -252,11 +256,18 @@ class ClangCPPCompiler(_StdCPPLibMixin, ClangCompiler, CPPCompiler):
),
key.evolve('rtti'): coredata.UserBooleanOption('Enable RTTI', True),
})
- opts[key.evolve('std')].choices = [
+ cppstd_choices = [
'none', 'c++98', 'c++03', 'c++11', 'c++14', 'c++17', 'c++1z',
'c++2a', 'c++20', 'gnu++11', 'gnu++14', 'gnu++17', 'gnu++1z',
'gnu++2a', 'gnu++20',
]
+ if version_compare(self.version, self._CPP23_VERSION):
+ cppstd_choices.append('c++23')
+ cppstd_choices.append('gnu++23')
+ if version_compare(self.version, self._CPP26_VERSION):
+ cppstd_choices.append('c++26')
+ cppstd_choices.append('gnu++26')
+ opts[key.evolve('std')].choices = cppstd_choices
if self.info.is_windows() or self.info.is_cygwin():
opts.update({
key.evolve('winlibs'): coredata.UserArrayOption(
@@ -298,7 +309,11 @@ class ArmLtdClangCPPCompiler(ClangCPPCompiler):
class AppleClangCPPCompiler(ClangCPPCompiler):
- pass
+
+ _CPP23_VERSION = '>=13.0.0'
+ # TODO: We don't know which XCode version will include LLVM 17 yet, so
+ # use something absurd.
+ _CPP26_VERSION = '>=99.0.0'
class EmscriptenCPPCompiler(EmscriptenMixin, ClangCPPCompiler):
@@ -418,6 +433,9 @@ class GnuCPPCompiler(_StdCPPLibMixin, GnuCompiler, CPPCompiler):
if version_compare(self.version, '>=12.2.0'):
cppstd_choices.append('c++23')
cppstd_choices.append('gnu++23')
+ if version_compare(self.version, '>=14.0.0'):
+ cppstd_choices.append('c++26')
+ cppstd_choices.append('gnu++26')
opts[key].choices = cppstd_choices
if self.info.is_windows() or self.info.is_cygwin():
opts.update({