[libcamera-devel] [PATCH v2] meson: Don't set _FORTIFY_SOURCE for ChromeOS

Jacopo Mondi jacopo.mondi at ideasonboard.com
Tue Sep 12 15:21:57 CEST 2023


Hi George

On Mon, Sep 11, 2023 at 05:09:07PM -0600, George Burgess IV via libcamera-devel wrote:
> ChromeOS is moving to a platform default of `_FORTIFY_SOURCE=3`, and
> this definition conflicts with that:
>
> <command line>:4:9: error: '_FORTIFY_SOURCE' macro redefined
> [-Werror,-Wmacro-redefined]
>
> Rather than adding logic to keep up with their local configuration, it
> seems best to leave setting _FORTIFY_SOURCE on ChromeOS up to ChromeOS.
>
> Signed-off-by: George Burgess IV <gbiv at google.com>
> ---
>  meson.build | 24 +++++++++++++++++++-----
>  1 file changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 7959b538..2e834263 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -99,12 +99,26 @@ if cc.get_id() == 'clang'
>          error('clang version is too old, libcamera requires 9.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.
> +    # Turn _FORTIFY_SOURCE by default on. This is needed on clang only as gcc
> +    # enables it by default. FORTIFY will not work properly with `-O0`, and may
> +    # result in macro redefinition errors if the user already has a setting for
> +    # `-D_FORTIFY_SOURCE`. Do not enable FORTIFY in either of those cases.
>      if get_option('optimization') != '0'
> -        common_arguments += [
> -            '-D_FORTIFY_SOURCE=2',
> -        ]
> +        has_fortify_define = false
> +        # Assume that if the user requests a FORTIFY level in cpp_args, they
> +        # do the same for c_args.
> +        foreach flag : get_option('cpp_args')
> +            if flag == '-U_FORTIFY_SOURCE'
> +                has_fortify_define = false

Do you expect to have -D_FORTIFY_SOURCE and -U_FORTIFY_SOURCE in the
same command line, so that you have to reset has_fortify_define to
false if it was previously been set to true here below ?

Otherwise I might be missing why you have to set 'has_fortify_define =
false' when the variable is already initialized to 'false'...

> +            elif flag.startswith('-D_FORTIFY_SOURCE=')
> +                has_fortify_define = true
> +            endif
> +        endforeach
> +        if not has_fortify_define
> +            common_arguments += [
> +                '-D_FORTIFY_SOURCE=2',
> +            ]
> +        endif
>      endif
>
>      # Use libc++ by default if available instead of libstdc++ when compiling
> --
> 2.42.0.283.g2d96d420d3-goog
>


More information about the libcamera-devel mailing list