[libcamera-devel] [PATCH v2 2/2] meson: Define _FORTIFY_SOURCE for optimised builds
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Aug 21 15:50:55 CEST 2019
Hi Kieran,
On Wed, Aug 21, 2019 at 12:12:14PM +0100, Kieran Bingham wrote:
> On 19/08/2019 18:02, Laurent Pinchart wrote:
> > _FORTIFY_SOURCE adds useful checks during compilation. The option is
> > enabled by default by gcc on all non-optimised builds (as it requires
> > -O1 or higher). Enable it explicitly for clang.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > Changes since v1:
> >
> > - Condition _FORTIFY_SOURCE on the optimisation level, not the build
> > type
> > - Enable _FORTIFY_SOURCE on clang only as gcc does it by default
> >
> > This patch has been tested with gcc5, gcc6, gcc7, gcc8, gcc9, clang7 and
> > clang8, with all the meson built types (plain, debug, debugoptimized,
> > release and minsize).
> >
> > ---
> > meson.build | 22 ++++++++++++++++------
> > 1 file changed, 16 insertions(+), 6 deletions(-)
> >
> > diff --git a/meson.build b/meson.build
> > index 13d0605f903c..c30287e262a5 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -38,12 +38,22 @@ common_arguments = [
> > c_arguments = common_arguments
> > cpp_arguments = common_arguments
> >
> > -# Use libc++ by default if available instead of libstdc++ when compiling with
> > -# clang.
> > -if cc.get_id() == 'clang' and cc.find_library('libc++', required: false).found()
> > - cpp_arguments += [
> > - '-stdlib=libc++',
> > - ]
> > +if cc.get_id() == 'clang'
> > + # 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'
> > + common_arguments += [
> > + '-D_FORTIFY_SOURCE=1',
>
> GCC enables _FORTIFY_SOURCE level 2 by default.
> Should we match that here with clang ?
I think so, that's a good point. I'll change it to 2 (after veriyfing
that it builds for all configurations :-)).
> $ g++ -dM -E -x c++ -O2 - < /dev/null | grep -i FORT
> #define _FORTIFY_SOURCE 2
>
> Also note, that gcc only does this for C++ builds (which shouldn't
> matter in our case, until we start adding C-bindings) ...
>
> $ gcc -dM -E - < /dev/null | grep -i FORT
You're missing -O2 :-)
$ gcc -dM -E -O0 - < /dev/null | grep -i FORT
$ gcc -dM -E -O2 - < /dev/null | grep -i FORT
#define _FORTIFY_SOURCE 2
> $
>
> Otherwise though,
>
> Acked-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> Now we just need more build options covered by the automated builds at
> linuxtv.org ...
>
> > + ]
> > + endif
> > +
> > + # Use libc++ by default if available instead of libstdc++ when compiling
> > + # with clang.
> > + if cc.find_library('libc++', required: false).found()
> > + cpp_arguments += [
> > + '-stdlib=libc++',
> > + ]
> > + endif
> > endif
> >
> > add_project_arguments(c_arguments, language : 'c')
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list