diff mbox series

meson: change buildtype when debug_info=no

Message ID 20210428195558.16960-1-j@getutm.app
State New
Headers show
Series meson: change buildtype when debug_info=no | expand

Commit Message

Joelle van Dyne April 28, 2021, 7:55 p.m. UTC
Meson defaults builds to 'debugoptimized' which adds '-g -O2'
to CFLAGS. If the user specifies '--disable-debug-info' we
should instead build with 'release' which does not emit any
debug info.

Signed-off-by: Joelle van Dyne <j@getutm.app>
---
 configure | 1 +
 1 file changed, 1 insertion(+)

Comments

Philippe Mathieu-Daudé April 29, 2021, 5:07 a.m. UTC | #1
On 4/28/21 9:55 PM, Joelle van Dyne wrote:
> Meson defaults builds to 'debugoptimized' which adds '-g -O2'
> to CFLAGS. If the user specifies '--disable-debug-info' we
> should instead build with 'release' which does not emit any
> debug info.
> 
> Signed-off-by: Joelle van Dyne <j@getutm.app>
> ---
>  configure | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/configure b/configure
> index 4f374b4889..5c3568cbc3 100755
> --- a/configure
> +++ b/configure
> @@ -6398,6 +6398,7 @@ NINJA=$ninja $meson setup \
>          --sysconfdir "$sysconfdir" \
>          --localedir "$localedir" \
>          --localstatedir "$local_statedir" \
> +        --buildtype $(if test "$debug_info" = yes; then echo "debugoptimized"; else echo "release"; fi) \

NAck. You are changing the default (which is 'debug') to 'release'.

This should be at least mentioned in the commit description, but
I don't think this is what we want here. 'release' enables -O3,
which is certainly not supported. The 'debug' profile is what we
have been and are testing.

I'd be OK if you had used "debugoptimized else debug".

The mainstream project would rather use 'debug'/'debugoptimized', or
'minsize', which are already tested. We might consider allowing forks
to use 'plain' profile eventually. But the 'release' type is an
unsupported landmine IMHO.

If you want to use something else, it should be an explicit argument
to ./configure, then you are on your own IMO.

Regards,

Phil.
Joelle van Dyne April 29, 2021, 7:33 a.m. UTC | #2
On Wed, Apr 28, 2021 at 10:07 PM Philippe Mathieu-Daudé
<philmd@redhat.com> wrote:
>
> On 4/28/21 9:55 PM, Joelle van Dyne wrote:
> > Meson defaults builds to 'debugoptimized' which adds '-g -O2'
> > to CFLAGS. If the user specifies '--disable-debug-info' we
> > should instead build with 'release' which does not emit any
> > debug info.
> >
> > Signed-off-by: Joelle van Dyne <j@getutm.app>
> > ---
> >  configure | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/configure b/configure
> > index 4f374b4889..5c3568cbc3 100755
> > --- a/configure
> > +++ b/configure
> > @@ -6398,6 +6398,7 @@ NINJA=$ninja $meson setup \
> >          --sysconfdir "$sysconfdir" \
> >          --localedir "$localedir" \
> >          --localstatedir "$local_statedir" \
> > +        --buildtype $(if test "$debug_info" = yes; then echo "debugoptimized"; else echo "release"; fi) \
>
> NAck. You are changing the default (which is 'debug') to 'release'.

I thought 'debugoptimized' was the default? From my build logs,
there's always '-g -O2' which is why I needed to make this change. The
default for 'debug_info' is yes so this keeps it on 'debugoptimized'
and uses 'release' when explicitly disabling debug_info.

>
> This should be at least mentioned in the commit description, but
> I don't think this is what we want here. 'release' enables -O3,
> which is certainly not supported. The 'debug' profile is what we
> have been and are testing.
>
> I'd be OK if you had used "debugoptimized else debug".
>
> The mainstream project would rather use 'debug'/'debugoptimized', or
> 'minsize', which are already tested. We might consider allowing forks
> to use 'plain' profile eventually. But the 'release' type is an
> unsupported landmine IMHO.
>
> If you want to use something else, it should be an explicit argument
> to ./configure, then you are on your own IMO.

What do I need to avoid '-g'?

-j

>
> Regards,
>
> Phil.
>
Philippe Mathieu-Daudé April 29, 2021, 9:55 a.m. UTC | #3
On 4/29/21 9:33 AM, Joelle van Dyne wrote:
> On Wed, Apr 28, 2021 at 10:07 PM Philippe Mathieu-Daudé
> <philmd@redhat.com> wrote:
>>
>> On 4/28/21 9:55 PM, Joelle van Dyne wrote:
>>> Meson defaults builds to 'debugoptimized' which adds '-g -O2'
>>> to CFLAGS. If the user specifies '--disable-debug-info' we
>>> should instead build with 'release' which does not emit any
>>> debug info.
>>>
>>> Signed-off-by: Joelle van Dyne <j@getutm.app>
>>> ---
>>>  configure | 1 +
>>>  1 file changed, 1 insertion(+)
>>>
>>> diff --git a/configure b/configure
>>> index 4f374b4889..5c3568cbc3 100755
>>> --- a/configure
>>> +++ b/configure
>>> @@ -6398,6 +6398,7 @@ NINJA=$ninja $meson setup \
>>>          --sysconfdir "$sysconfdir" \
>>>          --localedir "$localedir" \
>>>          --localstatedir "$local_statedir" \
>>> +        --buildtype $(if test "$debug_info" = yes; then echo "debugoptimized"; else echo "release"; fi) \
>>
>> NAck. You are changing the default (which is 'debug') to 'release'.
> 
> I thought 'debugoptimized' was the default? From my build logs,
> there's always '-g -O2' which is why I needed to make this change. The
> default for 'debug_info' is yes so this keeps it on 'debugoptimized'
> and uses 'release' when explicitly disabling debug_info.

Again, I'm not concerned between 'debugoptimized' VS 'debug',
I'm worried to use 'release', because of the b_ndebug=if-release
option which disable assertions (unsupported QEMU build mode).

Also, 'release' sets optimization=3 which isn't supported neither.

Per https://mesonbuild.com/Builtin-options.html#build-type-options

  All other combinations of debug and optimization set buildtype
  to 'custom'.

So maybe this is what you want, with debug=false and optimization=2?

> 
>>
>> This should be at least mentioned in the commit description, but
>> I don't think this is what we want here. 'release' enables -O3,
>> which is certainly not supported. The 'debug' profile is what we
>> have been and are testing.
>>
>> I'd be OK if you had used "debugoptimized else debug".
>>
>> The mainstream project would rather use 'debug'/'debugoptimized', or
>> 'minsize', which are already tested. We might consider allowing forks
>> to use 'plain' profile eventually. But the 'release' type is an
>> unsupported landmine IMHO.
>>
>> If you want to use something else, it should be an explicit argument
>> to ./configure, then you are on your own IMO.
> 
> What do I need to avoid '-g'?

Why don't you simply use ./configure --extra-cflags='-g0 -O2'?

Regards,

Phil.
Paolo Bonzini April 29, 2021, 11:02 a.m. UTC | #4
On 28/04/21 21:55, Joelle van Dyne wrote:
> Meson defaults builds to 'debugoptimized' which adds '-g -O2'
> to CFLAGS. If the user specifies '--disable-debug-info' we
> should instead build with 'release' which does not emit any
> debug info.
> 
> Signed-off-by: Joelle van Dyne <j@getutm.app>

This is not needed.  buildtype is a shortcut for the optimization and
debug options, we need not bother with it because configure sets the
individual options already:

         -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
         -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \

Paolo

> ---
>   configure | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/configure b/configure
> index 4f374b4889..5c3568cbc3 100755
> --- a/configure
> +++ b/configure
> @@ -6398,6 +6398,7 @@ NINJA=$ninja $meson setup \
>           --sysconfdir "$sysconfdir" \
>           --localedir "$localedir" \
>           --localstatedir "$local_statedir" \
> +        --buildtype $(if test "$debug_info" = yes; then echo "debugoptimized"; else echo "release"; fi) \
>           -Ddocdir="$docdir" \
>           -Dqemu_firmwarepath="$firmwarepath" \
>           -Dqemu_suffix="$qemu_suffix" \
>
diff mbox series

Patch

diff --git a/configure b/configure
index 4f374b4889..5c3568cbc3 100755
--- a/configure
+++ b/configure
@@ -6398,6 +6398,7 @@  NINJA=$ninja $meson setup \
         --sysconfdir "$sysconfdir" \
         --localedir "$localedir" \
         --localstatedir "$local_statedir" \
+        --buildtype $(if test "$debug_info" = yes; then echo "debugoptimized"; else echo "release"; fi) \
         -Ddocdir="$docdir" \
         -Dqemu_firmwarepath="$firmwarepath" \
         -Dqemu_suffix="$qemu_suffix" \