Thread: [meson] expose buildtype debug/optimization info to pg_config

[meson] expose buildtype debug/optimization info to pg_config

From
Junwang Zhao
Date:
build system using configure set VAL_CFLAGS with debug and
optimization flags, so pg_config will show these infos. Some
extensions depend on the mechanism.

This patch exposes these flags with a typo fixed together.

-- 
Regards
Junwang Zhao

Attachment

Re: [meson] expose buildtype debug/optimization info to pg_config

From
Peter Eisentraut
Date:
On 12.12.23 11:40, Junwang Zhao wrote:
> build system using configure set VAL_CFLAGS with debug and
> optimization flags, so pg_config will show these infos. Some
> extensions depend on the mechanism.
> 
> This patch exposes these flags with a typo fixed together.

I have committed the typo fix.

But I would like to learn more about the requirements of extensions in 
this area.  This seems a bit suspicious to me.




Re: [meson] expose buildtype debug/optimization info to pg_config

From
Junwang Zhao
Date:
Hi Peter,

Thanks for looking into this.

On Thu, Dec 14, 2023 at 4:50 PM Peter Eisentraut <peter@eisentraut.org> wrote:
>
> On 12.12.23 11:40, Junwang Zhao wrote:
> > build system using configure set VAL_CFLAGS with debug and
> > optimization flags, so pg_config will show these infos. Some
> > extensions depend on the mechanism.
> >
> > This patch exposes these flags with a typo fixed together.
>
> I have committed the typo fix.
>
> But I would like to learn more about the requirements of extensions in
> this area.  This seems a bit suspicious to me.

This is what I found when building citus against an installation
of meson debug build pg instance, since the CFLAGS doesn't
contain -g flag, the binary doesn't include the debug information,
which is different behavior from configure building system.

Another issue I found is that some C++
extensions(ajust/parquet_fdw for example) don't build against
the meson generated pgxs.mk, since it doesn't set the CXX
command. CXX is only set when llvm option is enabled, which
is different from old building system.

I don't insist we make Meson the same behaviour with old building
system, I just think the issues I raised might stop developers try
the fancy new building system. And the fix I post might not be
ideal, you and Andres might have better solutions.

>


--
Regards
Junwang Zhao



Re: [meson] expose buildtype debug/optimization info to pg_config

From
Andres Freund
Date:
Hi,

On 2023-12-14 17:24:58 +0800, Junwang Zhao wrote:
> On Thu, Dec 14, 2023 at 4:50 PM Peter Eisentraut <peter@eisentraut.org> wrote:
> >
> > On 12.12.23 11:40, Junwang Zhao wrote:
> > > build system using configure set VAL_CFLAGS with debug and
> > > optimization flags, so pg_config will show these infos. Some
> > > extensions depend on the mechanism.
> > >
> > > This patch exposes these flags with a typo fixed together.
> >
> > I have committed the typo fix.
> >
> > But I would like to learn more about the requirements of extensions in
> > this area.  This seems a bit suspicious to me.
> 
> This is what I found when building citus against an installation
> of meson debug build pg instance, since the CFLAGS doesn't
> contain -g flag, the binary doesn't include the debug information,
> which is different behavior from configure building system.

Hm. I'm not sure it's the right call to make extensions build the same way as
the main postgres install with regard to optimization and debug info. So I
feel a bit hesitant around generating -g and particularly -Ox. But it's
historically what we've done...

If we want to do so, I think this should not check buildtype, but debug.


> Another issue I found is that some C++
> extensions(ajust/parquet_fdw for example) don't build against
> the meson generated pgxs.mk, since it doesn't set the CXX
> command. CXX is only set when llvm option is enabled, which
> is different from old building system.

I wanted to skip the C++ tests when we don't need C++, because it makes
configure take longer. But I could be convinced that we should always at least
determine the C++ compiler for Makefile.global.

Greetings,

Andres Freund



Re: [meson] expose buildtype debug/optimization info to pg_config

From
Junwang Zhao
Date:
Hi,

On Fri, Dec 15, 2023 at 10:20 PM Andres Freund <andres@anarazel.de> wrote:
>
> Hi,
>
> On 2023-12-14 17:24:58 +0800, Junwang Zhao wrote:
> > On Thu, Dec 14, 2023 at 4:50 PM Peter Eisentraut <peter@eisentraut.org> wrote:
> > >
> > > On 12.12.23 11:40, Junwang Zhao wrote:
> > > > build system using configure set VAL_CFLAGS with debug and
> > > > optimization flags, so pg_config will show these infos. Some
> > > > extensions depend on the mechanism.
> > > >
> > > > This patch exposes these flags with a typo fixed together.
> > >
> > > I have committed the typo fix.
> > >
> > > But I would like to learn more about the requirements of extensions in
> > > this area.  This seems a bit suspicious to me.
> >
> > This is what I found when building citus against an installation
> > of meson debug build pg instance, since the CFLAGS doesn't
> > contain -g flag, the binary doesn't include the debug information,
> > which is different behavior from configure building system.
>
> Hm. I'm not sure it's the right call to make extensions build the same way as
> the main postgres install with regard to optimization and debug info. So I
> feel a bit hesitant around generating -g and particularly -Ox. But it's
> historically what we've done...
>
> If we want to do so, I think this should not check buildtype, but debug.

I'm confused which *debug* do you mean, can you be more specific?
>
>
> > Another issue I found is that some C++
> > extensions(ajust/parquet_fdw for example) don't build against
> > the meson generated pgxs.mk, since it doesn't set the CXX
> > command. CXX is only set when llvm option is enabled, which
> > is different from old building system.
>
> I wanted to skip the C++ tests when we don't need C++, because it makes
> configure take longer. But I could be convinced that we should always at least
> determine the C++ compiler for Makefile.global.

The first idea that came to my mind is using the *project* command
to set [`c`, `cpp`], but this might be a little bit confusing for somebody.

Then I tried another way by adding a 'pgxscpp' option to let the user
choose whether he will set the C++ compiler for Makefile.global.
It works but may not be an ideal way, see the attached.


>
> Greetings,
>
> Andres Freund



--
Regards
Junwang Zhao

Attachment

Re: [meson] expose buildtype debug/optimization info to pg_config

From
Peter Eisentraut
Date:
On 14.12.23 10:24, Junwang Zhao wrote:
> On Thu, Dec 14, 2023 at 4:50 PM Peter Eisentraut <peter@eisentraut.org> wrote:
>>
>> On 12.12.23 11:40, Junwang Zhao wrote:
>>> build system using configure set VAL_CFLAGS with debug and
>>> optimization flags, so pg_config will show these infos. Some
>>> extensions depend on the mechanism.
>>>
>>> This patch exposes these flags with a typo fixed together.
>>
>> I have committed the typo fix.
>>
>> But I would like to learn more about the requirements of extensions in
>> this area.  This seems a bit suspicious to me.
> 
> This is what I found when building citus against an installation
> of meson debug build pg instance, since the CFLAGS doesn't
> contain -g flag, the binary doesn't include the debug information,
> which is different behavior from configure building system.

Ok, that makes sense.

I think a better place to add those options would the variable 
var_cflags, which are the combined C flags that we export to 
Makefile.global and pg_config.  The cflags variable that you used is 
more for internal use, for passing to the actual compilation commands, 
so adding more options there would be duplicative.

And then set var_cxxflags as well.

Maybe you should also check whether the compiler takes unix-style 
arguments, perhaps using cc.get_argument_syntax().