[meson] expose buildtype debug/optimization info to pg_config

Started by Junwang Zhaoover 2 years ago6 messageshackers
Jump to latest
#1Junwang Zhao
zhjwpku@gmail.com

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

Attachments:

0001-meson-expose-buildtype-debug-optimization-info-to-pg.patchapplication/octet-stream; name=0001-meson-expose-buildtype-debug-optimization-info-to-pg.patchDownload+15-2
#2Peter Eisentraut
peter_e@gmx.net
In reply to: Junwang Zhao (#1)
Re: [meson] expose buildtype debug/optimization info to pg_config

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.

#3Junwang Zhao
zhjwpku@gmail.com
In reply to: Peter Eisentraut (#2)
Re: [meson] expose buildtype debug/optimization info to pg_config

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

#4Andres Freund
andres@anarazel.de
In reply to: Junwang Zhao (#3)
Re: [meson] expose buildtype debug/optimization info to pg_config

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

#5Junwang Zhao
zhjwpku@gmail.com
In reply to: Andres Freund (#4)
Re: [meson] expose buildtype debug/optimization info to pg_config

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

Attachments:

0001-PGXS-determine-C-compiler-for-Makefile.global.patchapplication/octet-stream; name=0001-PGXS-determine-C-compiler-for-Makefile.global.patchDownload+14-2
#6Peter Eisentraut
peter_e@gmx.net
In reply to: Junwang Zhao (#3)
Re: [meson] expose buildtype debug/optimization info to pg_config

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().