Thread: Decouple C++ support in Meson's PGXS from LLVM enablement

Decouple C++ support in Meson's PGXS from LLVM enablement

From
"Tristan Partin"
Date:
Howdy folks,

While playing around with pg_duckdb[0], a Postgres extension written in
C++ which uses PGXS, I came across a strange build error:

std=c++17  -Wno-sign-compare...
/bin/sh: line 1: -Wno-sign-compare: command not found

I was very confused by the error, but reading the command line, it made
sense. After talking to Jelte off-list, he told me to try a Postgres
installation that had been built with autotools. Today, I finally had
a chance to try that tip, and building pg_duckdb succeeded.

I spent some time exploring the Meson build a bit, and I realized that
C++ support in PGXS is tied to LLVM enablement. Checking the autotools
build in the configure.ac script indicates that that is not the case for
it.

On master, C++ support looks like:

llvmopt = get_option('llvm')
llvm = not_found_dep
if add_languages('cpp', required: llvmopt, native: false)
  llvm = dependency('llvm', version: '>=14', method: 'config-tool', required: llvmopt)
    if llvm.found()

      cdata.set('USE_LLVM', 1)

      cpp = meson.get_compiler('cpp')

By default, the `llvm` option is disabled, which Meson takes to mean,
"do not check for C++ support". Thusly, add_languages() returns false.
In addition, every check for adding to cxxflags, et. al. is gated on
llvm.found(), which is always false for the `not_found_dep`. All this
considered, the Makefile.global of a Postgres build roughly looked like:

CXX =
CXXFLAGS =
...

This then accounts for the original pg_duckdb command line looking the
way that it did.

Attached is a patch which decouples C++ support in PGXS from LLVM for
a Meson-compiled Postgres.

[0]: https://github.com/duckdb/pg_duckdb

--
Tristan Partin
Neon (https://neon.tech)

Attachment

Re: Decouple C++ support in Meson's PGXS from LLVM enablement

From
Jelte Fennema-Nio
Date:
On Thu, 17 Apr 2025 at 03:57, Tristan Partin <tristan@partin.io> wrote:
> I spent some time exploring the Meson build a bit, and I realized that
> C++ support in PGXS is tied to LLVM enablement. Checking the autotools
> build in the configure.ac script indicates that that is not the case for
> it.

Thank you for looking into this. I didn't try the patch, but just
reading it it all looks sensible (although my meson knowledge is quite
limited). I assume you tried to build pg_duckdb with a Meson based PG
build containing this patch and pg_duckdb built correctly?



Re: Decouple C++ support in Meson's PGXS from LLVM enablement

From
"Tristan Partin"
Date:
On Thu Apr 17, 2025 at 2:15 AM CDT, Jelte Fennema-Nio wrote:
> On Thu, 17 Apr 2025 at 03:57, Tristan Partin <tristan@partin.io> wrote:
>> I spent some time exploring the Meson build a bit, and I realized that
>> C++ support in PGXS is tied to LLVM enablement. Checking the autotools
>> build in the configure.ac script indicates that that is not the case for
>> it.
>
> Thank you for looking into this. I didn't try the patch, but just
> reading it it all looks sensible (although my meson knowledge is quite
> limited). I assume you tried to build pg_duckdb with a Meson based PG
> build containing this patch and pg_duckdb built correctly?

I took some time to backpatch to 17 on my machine so that I could build
pg_duckdb, and indeed with the backpatch applied, pg_duckdb compiles
successfully.

I do however hit linker errors later, but that is unrelated to the
current patch discussion. I'll discuss them with you in a different
forum.

--
Tristan Partin
https://tristan.partin.io