meson: Switch to C++17

Due to popular request, move from C++14 to C++17. This will allow
dropping some custom constructs (such as a custom utils::clamp),
benefiting from new language features, and dropping gcc 5 and 6 from the
compilation tests.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
Laurent Pinchart 2020-08-22 17:19:31 +03:00
parent f976eb5cb6
commit b869d4463e
2 changed files with 24 additions and 14 deletions

View file

@ -88,13 +88,12 @@ headers, and with double quotes for other libcamera headers.
C++ Specific Rules C++ Specific Rules
------------------ ------------------
The code shall be implemented in C++14, with the following caveats: The code shall be implemented in C++17, with the following caveats:
* Type inference (auto and decltype) shall be used with caution, to avoid * Type inference (auto and decltype) shall be used with caution, to avoid
drifting towards an untyped language. drifting towards an untyped language.
* The explicit, override and final specifiers are to be used where applicable. * The explicit, override and final specifiers are to be used where applicable.
* General-purpose smart pointers (std::unique_ptr) deprecate std::auto_ptr. * Smart pointers, as well as shared pointers and weak pointers, shall not be
Smart pointers, as well as shared pointers and weak pointers, shall not be
overused. overused.
* Classes are encouraged to define move constructors and assignment operators * Classes are encouraged to define move constructors and assignment operators
where applicable, and generally make use of the features offered by rvalue where applicable, and generally make use of the features offered by rvalue

View file

@ -6,7 +6,7 @@ project('libcamera', 'c', 'cpp',
default_options : [ default_options : [
'werror=true', 'werror=true',
'warning_level=2', 'warning_level=2',
'cpp_std=c++14', 'cpp_std=c++17',
], ],
license : 'LGPL 2.1+') license : 'LGPL 2.1+')
@ -45,6 +45,10 @@ c_arguments = []
cpp_arguments = [] cpp_arguments = []
if cc.get_id() == 'clang' if cc.get_id() == 'clang'
if cc.version().version_compare('<5')
error('clang version is too old, libcamera requires 5.0 or newer')
endif
# Turn _FORTIFY_SOURCE by default on optimised builds (as it requires -O1 # Turn _FORTIFY_SOURCE by default on optimised builds (as it requires -O1
# or higher). This is needed on clang only as gcc enables it by default. # or higher). This is needed on clang only as gcc enables it by default.
if get_option('optimization') != '0' if get_option('optimization') != '0'
@ -62,6 +66,23 @@ if cc.get_id() == 'clang'
endif endif
endif endif
if cc.get_id() == 'gcc'
if cc.version().version_compare('<7')
error('gcc version is too old, libcamera requires 7.0 or newer')
endif
# gcc 7.1 introduced processor-specific ABI breakages related to parameter
# passing on ARM platforms. This generates a large number of messages
# during compilation with gcc >=7.1 until gcc 9. Silence them.
if (host_machine.cpu_family() == 'arm' and
cc.version().version_compare('>=7.1') and
cc.version().version_compare('<9'))
cpp_arguments += [
'-Wno-psabi',
]
endif
endif
# We use C99 designated initializers for arrays as C++ has no equivalent # We use C99 designated initializers for arrays as C++ has no equivalent
# feature. Both gcc and clang support this extension, but recent # feature. Both gcc and clang support this extension, but recent
# versions of clang generate a warning that needs to be disabled. # versions of clang generate a warning that needs to be disabled.
@ -71,16 +92,6 @@ if cc.has_argument('-Wno-c99-designator')
] ]
endif endif
# gcc 7.1 introduced processor-specific ABI breakages related to parameter
# passing on ARM platforms. This generates a large number of messages during
# compilation with gcc >=7.1 until gcc 9. Silence them.
if (host_machine.cpu_family() == 'arm' and cc.get_id() == 'gcc' and
cc.version().version_compare('>=7.1') and cc.version().version_compare('<9'))
cpp_arguments += [
'-Wno-psabi',
]
endif
c_arguments += common_arguments c_arguments += common_arguments
cpp_arguments += common_arguments cpp_arguments += common_arguments