From b869d4463ef38934da35ffaf287870541e0dee47 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Sat, 22 Aug 2020 17:19:31 +0300 Subject: meson: Switch to C++17 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Kieran Bingham Reviewed-by: Niklas Söderlund --- Documentation/coding-style.rst | 5 ++--- meson.build | 33 ++++++++++++++++++++++----------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/Documentation/coding-style.rst b/Documentation/coding-style.rst index 7acba37b..7c56a1b7 100644 --- a/Documentation/coding-style.rst +++ b/Documentation/coding-style.rst @@ -88,13 +88,12 @@ headers, and with double quotes for other libcamera headers. 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 drifting towards an untyped language. * 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. * Classes are encouraged to define move constructors and assignment operators where applicable, and generally make use of the features offered by rvalue diff --git a/meson.build b/meson.build index ec54e68f..f27b7646 100644 --- a/meson.build +++ b/meson.build @@ -6,7 +6,7 @@ project('libcamera', 'c', 'cpp', default_options : [ 'werror=true', 'warning_level=2', - 'cpp_std=c++14', + 'cpp_std=c++17', ], license : 'LGPL 2.1+') @@ -45,6 +45,10 @@ c_arguments = [] cpp_arguments = [] 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 # or higher). This is needed on clang only as gcc enables it by default. if get_option('optimization') != '0' @@ -62,6 +66,23 @@ if cc.get_id() == 'clang' 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 # feature. Both gcc and clang support this extension, but recent # versions of clang generate a warning that needs to be disabled. @@ -71,16 +92,6 @@ if cc.has_argument('-Wno-c99-designator') ] 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 cpp_arguments += common_arguments -- cgit v1.2.1